diff --git a/src/GiveCRM.DummyDataGenerator/Data/EmailData.cs b/src/GiveCRM.DummyDataGenerator/Data/EmailData.cs new file mode 100644 index 00000000..ffb54d0d --- /dev/null +++ b/src/GiveCRM.DummyDataGenerator/Data/EmailData.cs @@ -0,0 +1,32 @@ +using System.Collections.Generic; + +namespace GiveCRM.DummyDataGenerator.Data +{ + internal static class EmailData + { + internal static List Separators = new List { "", ".", "_" }; + + /// + /// It's better if these aren't popular emial providers + /// Avoid potential accidents where a real email address is accidentally targeted. + /// + internal static List Domains = new List + { + "fakemail.com", + "fakemail.net", + "not.com", + "not.net", + "notmail.com", + "notmail.net", + "coldmail.net", + "voidmail.net", + "voidmail.org", + "pmail.com", + "pmail.net", + "gahoo.com", + "gahoo.org", + "offthe.net", + "notonthe.net", + }; + } +} diff --git a/src/GiveCRM.DummyDataGenerator/Data/FamilyNames.cs b/src/GiveCRM.DummyDataGenerator/Data/FamilyNames.cs new file mode 100644 index 00000000..74635df5 --- /dev/null +++ b/src/GiveCRM.DummyDataGenerator/Data/FamilyNames.cs @@ -0,0 +1,356 @@ +namespace GiveCRM.DummyDataGenerator.Data +{ + using System.Collections.Generic; + + internal static class FamilyNames + { + internal static List Data = new List + { + "Abbott", + "Adams", + "Adamson", + "Addison", + "Ainsworth", + "Aitken", + "Alexander", + "Ali", + "Allen", + "Anderson", + "Archer", + "Astor", + "Atkins", + "Austin", + "Bacon", + "Bailey", + "Baird", + "Baker", + "Baldwin", + "Barber", + "Barker", + "Barnes", + "Barnwell", + "Barrett", + "Bartlet", + "Beattie", + "Bell", + "Bennett", + "Berry", + "Black", + "Booth", + "Brooke", + "Brown", + "Bruce", + "Bryne", + "Butler", + "Buxton", + "Calaghan", + "Cameron", + "Campbell", + "Carlile", + "Carter", + "Castle", + "Cave", + "Cavendish", + "Chaplin", + "Chapman", + "Clark", + "Clarke", + "Clegg", + "Cole", + "Collins", + "Cook", + "Cooper", + "Cowen", + "Cox", + "Crosland", + "Cummings", + "Curtis", + "Curzon", + "Davidson", + "Davies", + "Davis", + "Dawson", + "Dean", + "Diver", + "Dixon", + "Dodds", + "Doherty", + "Dorrans", + "Douglas", + "Dowd", + "Drew", + "Dunlop", + "Dunn", + "Durden", + "Durant", + "Edwards", + "Eliot", + "Ellis", + "Enright", + "Evans", + "Ewing", + "Faber", + "Fallon", + "Fawkes", + "Field", + "Fisher", + "Fitzpatrick", + "Fitzsimons", + "Flemming", + "Flint", + "Flynn", + "Foot", + "Forsyth", + "Foster", + "Fowler", + "Fox", + "Francis", + "Fraser", + "Fremantle", + "Fyfe", + "Gallagher", + "Gardiner", + "Gates", + "George", + "Gibson", + "Gilmour", + "Gold", + "Gordon", + "Gorman", + "Gove", + "Graham", + "Granger", + "Grant", + "Gray", + "Green", + "Griffith", + "Griffiths", + "Hall", + "Hamilton", + "Hammond", + "Hancock", + "Harper", + "Harris", + "Harrison", + "Hart", + "Harvey", + "Healey", + "Henderson", + "Hendrick", + "Hepburn", + "Herbert", + "Hewlett", + "Heyes", + "Hill", + "Hodge", + "Holmes", + "Hopkins", + "Hudson", + "Hughes", + "Hunt", + "Hunter", + "Hurd", + "Hurst", + "Ingram", + "Irvine", + "Irving", + "Isaacs", + "Jackson", + "James", + "Jamieson", + "Jenkins", + "Johnson", + "Jones", + "Kaur", + "Kelly", + "Kennedy", + "Khan", + "King", + "Knight", + "Laing", + "Lamb", + "Lancaster", + "Lane", + "Law", + "Lawson", + "Lee", + "Legg", + "Lewis", + "Livingstone", + "Lloyd", + "Lodge", + "Lucas", + "Lyttelton", + "MacDonald", + "MacGregor", + "MacKay", + "Maclean", + "Macleod", + "MacNeil", + "Maguire", + "Major", + "Mann", + "Marsden", + "Marshall", + "Martin", + "Mason", + "Matthews", + "Mayhew", + "McAvoy", + "McCabe", + "McCafferty", + "McCartney", + "McDonnell", + "McLaughlin", + "McManus", + "Miller", + "Mills", + "Milton", + "Mitchell", + "Moffatt", + "Moore", + "Morgan", + "Morris", + "Morrison", + "Munro", + "Murphy", + "Murray", + "Needham", + "Newmark", + "Newton", + "Nicholls", + "Nicholson", + "Norman", + "Norris", + "Nugent", + "Nutt", + "Oaten", + "O'Brien", + "O'Connor", + "O'Donnell", + "O'Hara", + "Oldfield", + "O'Neill", + "Ormsby", + "Osborne", + "Owen", + "Page", + "Paisley", + "Palmer", + "Palmer", + "Parker", + "Parkinson", + "Patel", + "Paterson", + "Patten", + "Paulson", + "Paxton", + "Pearce", + "Pearson", + "Peel", + "Penrose", + "Phillips", + "Pickles", + "Pike", + "Pitt", + "Pond", + "Pope", + "Powell", + "Prentice", + "Prescott", + "Price", + "Pritchard", + "Purnell", + "Quinn", + "Radcliff", + "Ramsay", + "Randall", + "Rathbone", + "Redwood", + "Reed", + "Rees", + "Reeves", + "Reid", + "Rendle", + "Renton", + "Reynolds", + "Richards", + "Richardson", + "Rippon", + "Roberts", + "Robertson", + "Robinson", + "Rogers", + "Rose", + "Ross", + "Russell", + "Ryan", + "Ryder", + "Sadler", + "Saunders", + "Scott", + "Shackleton", + "Shaw", + "Shawcross", + "Shepherd", + "Shipley", + "Short", + "Silverman", + "Simmonds", + "Simpson", + "Singh", + "Skeet", + "Skinner", + "Smith", + "Smyth", + "Snelgrove", + "Snell", + "Soames", + "Spink", + "Spring", + "Squire", + "Stack", + "Steel", + "Steele", + "Stevens", + "Stewart", + "Stokes", + "Stuart", + "Sutcliffe", + "Taylor", + "Thomas", + "Thompson", + "Thomson", + "Thorne", + "Thrale", + "Todd", + "Townshend", + "Trotter", + "Turner", + "Twigg", + "Tyler", + "Underwood", + "Urquhart", + "Varley", + "Vernon", + "Villiers", + "Walker", + "Walsh", + "Ward", + "Watson", + "Webb", + "Wheatley", + "White", + "Wilkinson", + "Williams", + "Wilson", + "Wood", + "Wright", + "Wyatt", + "Yates", + "York", + "Young", + "Younger" + }; + } +} diff --git a/src/GiveCRM.DummyDataGenerator/Data/FemaleNames.cs b/src/GiveCRM.DummyDataGenerator/Data/FemaleNames.cs new file mode 100644 index 00000000..436361a2 --- /dev/null +++ b/src/GiveCRM.DummyDataGenerator/Data/FemaleNames.cs @@ -0,0 +1,155 @@ +using System.Collections.Generic; + +namespace GiveCRM.DummyDataGenerator.Data +{ + internal static class FemaleNames + { + internal static List Data = new List + { + "Alice", + "Alison", + "Amanda", + "Amelia", + "Amy", + "Andrea", + "Angela", + "Ann", + "Annmarie", + "Anna", + "Anne", + "Annie", + "Ashley", + "Audrey", + "Ava", + "Barbara", + "Betty", + "Beverly", + "Bonnie", + "Brenda", + "Cara", + "Carol", + "Carolyn", + "Catherine", + "Charlotte", + "Cheryl", + "Chloe", + "Christina", + "Christine", + "Clare", + "Cynthia", + "Daniella", + "Deborah", + "Debra", + "Denise", + "Diana", + "Diane", + "Donna", + "Doris", + "Dorothy", + "Elizabeth", + "Ella", + "Ellie", + "Emily", + "Emma", + "Esmerelda", + "Eve", + "Eva", + "Evelyn", + "Evie", + "Frances", + "Gloria", + "Grace", + "Hannah", + "Heather", + "Helen", + "Hermione", + "Irene", + "Iris", + "Jacqueline", + "Jade", + "Jane", + "Janet", + "Janice", + "Jean", + "Jennifer", + "Jessica", + "Jo", + "Joan", + "Joyce", + "Judith", + "Judy", + "Julia", + "Julie", + "Karen", + "Kate", + "Katherine", + "Kathleen", + "Kathryn", + "Kathy", + "Katie", + "Kelly", + "Kimberly", + "Laura", + "Lillian", + "Lily", + "Linda", + "Lisa", + "Liz", + "Lois", + "Lola", + "Lorraine", + "Louise", + "Lucy", + "Marsha", + "Margaret", + "Maria", + "Marie", + "Marilyn", + "Martha", + "Mary", + "Megan", + "Melissa", + "Mia", + "Michelle", + "Mildred", + "Nadine", + "Nancy", + "Nicole", + "Norma", + "Olivia", + "Pamela", + "Patricia", + "Paula", + "Peggy", + "Phyllis", + "Rachel", + "Rebecca", + "Robin", + "Rose", + "Ruby", + "Ruth", + "Sally", + "Sandra", + "Sara", + "Sarah", + "Sharon", + "Shirley", + "Siobhain", + "Sophie", + "Stephanie", + "Susan", + "Tammy", + "Teresa", + "Theresa", + "Tina", + "Ursula", + "Valerie", + "Virginia", + "Veronica", + "Wanda", + "Zara", + "Zaza", + "Zelda" + }; + } +} diff --git a/src/GiveCRM.DummyDataGenerator/Data/MaleNames.cs b/src/GiveCRM.DummyDataGenerator/Data/MaleNames.cs new file mode 100644 index 00000000..078df6cd --- /dev/null +++ b/src/GiveCRM.DummyDataGenerator/Data/MaleNames.cs @@ -0,0 +1,159 @@ +using System.Collections.Generic; + +namespace GiveCRM.DummyDataGenerator.Data +{ + internal static class MaleNames + { + internal static List Data = new List + { + "Aaron", + "Abraham", + "Adam", + "Alan", + "Albert", + "Alexander", + "Alistair", + "Anders", + "Andrew", + "Anthony", + "Arthur", + "Barry", + "Ben", + "Benjamin", + "Bert", + "Bill", + "Bob", + "Boris", + "Brandon", + "Brian", + "Bruce", + "Bryan", + "Calum", + "Carl", + "Carlos", + "Cecil", + "Charles", + "Chris", + "Christopher", + "Clifford", + "Craig", + "Cyril", + "Dan", + "Daniel", + "Dave", + "David", + "Dennis", + "Donald", + "Doug", + "Douglas", + "Dylan", + "Edward", + "Eric", + "Ernest", + "Ethan", + "Eugene", + "Ewan", + "Frank", + "Fred", + "Gareth", + "Gary", + "George", + "Gerald", + "Gerard", + "Gerry", + "Gilbert", + "Giles", + "Greg", + "Gregory", + "Harold", + "Harry", + "Henry", + "Howard", + "Hugh", + "Isaac", + "Ivor", + "Jack", + "Jacob", + "James", + "Jason", + "Jeffrey", + "Jeremy", + "Jerry", + "Joe", + "John", + "Johnathan", + "Joseph", + "Joshua", + "Justin", + "Keith", + "Ken", + "Kendall", + "Kennith", + "Kevin", + "Larry", + "Lawrence", + "Leo", + "Leonard", + "Lewis", + "Liam", + "Louis", + "Luke", + "Mark", + "Martin", + "Matthew", + "Max", + "Michael", + "Nathan", + "Neville", + "Nicholas", + "Nick", + "Oliver", + "Owen", + "Patrick", + "Paul", + "Peter", + "Phil", + "Philip", + "Quentin", + "Ralph", + "Ray", + "Raymond", + "Richard", + "Rob", + "Robert", + "Robin", + "Ronald", + "Ross", + "Roy", + "Russell", + "Ryan", + "Samuel", + "Scott", + "Sean", + "Sebastian", + "Sidney", + "Simon", + "Stephen", + "Steve", + "Steven", + "Terrence", + "Terry", + "Thomas", + "Tim", + "Timothy", + "Toby", + "Todd", + "Tom", + "Tony", + "Trevor", + "Tyler", + "Victor", + "Vincent", + "Walter", + "Wayne", + "William", + "Winston", + "Zachary" + }; + } +} diff --git a/src/GiveCRM.DummyDataGenerator/Data/NameData.cs b/src/GiveCRM.DummyDataGenerator/Data/NameData.cs deleted file mode 100644 index ecca38d9..00000000 --- a/src/GiveCRM.DummyDataGenerator/Data/NameData.cs +++ /dev/null @@ -1,281 +0,0 @@ -namespace GiveCRM.DummyDataGenerator.Data -{ - using System.Collections.Generic; - - internal static class NameData - { - internal static List MaleFirstNames = new List - { - "John", - "Peter", - "Paul", - "Mathew", - "Mark", - "Liam", - "Giles", - "David", - "Simon", - "Ben", - "Jack", - "Oliver", - "Harry", - "Charles", - "Thomas", - "Joshua", - "Daniel", - "James", - "William", - "Lewis", - "George", - "Ryan", - "Ethan", - "Dylan", - "Samuel", - "Joseph", - "Jacob", - "Max", - "Robin", - "Anthony", - "Andrew", - "Kendall", - "Ken", - "Philip", - "Phil", - "Bill", - "William", - "Anders", - "Steven", - "Stephen", - "Thomas", - "Tom", - "Nathan", - "Abraham", - "Adam", - "Luke", - "Scott", - "Ewan", - "Robert", - "Bob" - }; - - internal static List FemaleFirstNames = new List - { - "Ruth", - "Sarah", - "Ann", - "Anna", - "Elizabeth", - "Liz", - "Sally", - "Olivia", - "Catherine", - "Ruby", - "Cara", - "Robin", - "Grace", - "Emily", - "Jessica", - "Sophie", - "Chloe", - "Lily", - "Mia", - "Lucy", - "Amelia", - "Evie", - "Ella", - "Daniella", - "Katie", - "Kate", - "Charlotte", - "Ellie", - "Megan", - "Ava", - "Hannah", - "Eve", - "Rachel", - "Rebecca", - "Jade" - }; - - internal static List Surnames = new List - { - "Smith", - "Jones", - "Taylor", - "Williams", - "Brown", - "Davies", - "Evans", - "Wilson", - "Thomas", - "Roberts", - "Johnson", - "Lewis", - "Walker", - "Robinson", - "Wood", - "Thompson", - "White", - "Watson", - "Jackson", - "Wright", - "Green", - "Harris", - "Cooper", - "King", - "Lee", - "Martin", - "Clarke", - "James", - "Morgan", - "Hughes", - "Edwards", - "Hill", - "Moore", - "Clarke", - "Harrison", - "Scott", - "Young", - "Morris", - "Hall", - "Ward", - "Turner", - "Carter", - "Phillips", - "Mitchell", - "Patel", - "Adams", - "Campbell", - "Anderson", - "Cook", - "Bailey", - "Parker", - "Miller", - "Davis", - "Murphy", - "Price", - "Bell", - "Baker", - "Griffiths", - "Kelly", - "Simpson", - "Marshall", - "Collins", - "Bennett", - "Cox", - "Richardson", - "Fox", - "Gray", - "Rose", - "Chapman", - "Hunt", - "Robertson", - "Shaw", - "Reynolds", - "Lloyd", - "Ellis", - "Richards", - "Russel", - "Wilkinson", - "Khan", - "Graham", - "Stewart", - "Reid", - "Marray", - "Powell", - "Palmer", - "Holmes", - "Rogers", - "Stevens", - "Walsh", - "Hunter", - "Thompson", - "Matthews", - "Ross", - "Owen", - "Mason", - "Knight", - "Kennedy", - "Butler", - "Saunders", - "Cole", - "Pearce", - "Dean", - "Foster", - "Harvey", - "Hudson", - "Gibson", - "Mills", - "Berry", - "Barnes", - "Pearson", - "Kaur", - "Booth", - "Dixon", - "Grant", - "Gordon", - "Lane", - "Harper", - "Ali", - "Hart" - }; - - internal static List MaleTitles = new List - { - new TitleData("Mr.", "Mr."), - new TitleData("Mr.", "Mr."), - new TitleData("Mr.", "Mr."), - new TitleData("Mr.", "Mr."), - new TitleData("Mr.", "Mr."), - new TitleData("Mr.", "Mr."), - new TitleData("Mr.", "Mr."), - new TitleData("Mr.", "Mr."), - new TitleData("Mr.", "Mr."), - new TitleData("Mr.", "Mr."), - new TitleData("Dr.", "Doctor"), - new TitleData("Rev.", "Reverend"), - }; - - internal static List FemaleTitles = new List - { - new TitleData("Ms.", "Ms."), - new TitleData("Ms.", "Ms."), - new TitleData("Ms.", "Ms."), - new TitleData("Ms.", "Ms."), - new TitleData("Ms.", "Ms."), - new TitleData("Ms.", "Ms."), - new TitleData("Ms.", "Ms."), - new TitleData("Ms.", "Ms."), - new TitleData("Ms.", "Ms."), - new TitleData("Mrs.", "Mrs."), - new TitleData("Mrs.", "Mrs."), - new TitleData("Mrs.", "Mrs."), - new TitleData("Mrs.", "Mrs."), - new TitleData("Dr.", "Doctor"), - new TitleData("Rev.", "Reverend"), - }; - - internal static List EmailSeparators = new List { "", ".", "_" }; - - internal static List EmailDomains = new List - { - "fakemail.com", - "fakemail.net", - "not.com", - "not.net", - "notmail.com", - "notmail.net", - "coldmail.net", - "voidmail.net", - "voidmail.org", - "pmail.com", - "pmail.net", - "gahoo.com", - "gahoo.org", - "offthe.net", - "notonthe.net", - }; - - internal static List PhoneTypes = new List { "Home", "Mobile", "Work" }; - } -} diff --git a/src/GiveCRM.DummyDataGenerator/Data/AddressData.cs b/src/GiveCRM.DummyDataGenerator/Data/StreetData.cs similarity index 64% rename from src/GiveCRM.DummyDataGenerator/Data/AddressData.cs rename to src/GiveCRM.DummyDataGenerator/Data/StreetData.cs index 44a0cc44..4a4ad870 100644 --- a/src/GiveCRM.DummyDataGenerator/Data/AddressData.cs +++ b/src/GiveCRM.DummyDataGenerator/Data/StreetData.cs @@ -2,7 +2,7 @@ { using System.Collections.Generic; - internal static class AddressData + internal static class StreetData { internal static List StreetNamePrefix = new List { @@ -13,6 +13,10 @@ internal static class AddressData "", "", "", + "", + "", + "", + "", "Upper", "Lower", "New", @@ -21,80 +25,111 @@ internal static class AddressData internal static List StreetNames = new List { - "Station", - "Main", - "Park", - "Church", - "London", - "Victoria", - "Green", - "Blue", - "Red", - "Black", - "White", - "White", - "White", - "Manor", - "Queens", - "Grange", - "Kings", - "Windsor", - "Highfield", - "Mill", - "Alexander", - "York", - "St Johns", - "Broadway", - "Springfield", - "George", - "Victoria", - "West", - "North", - "Manchester", - "Richmond", - "South", - "School", - "Stanley", - "Chester", - "Mill", "Abbey", + "Albert", + "Amberley", + "Apple", + "Arbutus", + "Aster", + "Atlee", "Baker", - "Bond", "Bedford", + "Belgrave", + "Belsize", "Berkley", - "Russel", - "Rose", - "Rose", - "Petunia", - "Dafodil", - "Daisy", - "Lily", - "Thistle", + "Black", "Bloom", - "Carnation", - "Goat", + "Blue", + "Bond", + "Boundary", + "Broadway", "Camp", - "Flamingo", + "Carnation", "Cherry", - "Apple", - "Orchard", - "Pear", - "Orange", - "Vine", + "Chester", + "Church", + "Churchill", + "Clifton", + "Cressida", + "Crocus", + "Cromwell", + "Daffodil", + "Dahlia", + "Daisy", + "Dandelion", + "Dartmouth", + "Eucalyptus", + "Flamingo", + "Foxglove", + "George", + "Geranium", "Ginger", + "Goat", + "Grange", + "Green", + "Heath", + "High", + "Highfield", + "Hollyhock", + "Honeysuckle", "Hyacinth", + "Kings", + "Lancaster", + "Larch", "Lavender", "Lilac", + "Lily", + "London", "Lupin", + "Main", + "Manchester", + "Manor", + "Maple", + "Mill", "Mimosa", + "Mountain", + "Newlands", + "North", + "Nut", + "Orange", + "Orchard", + "Orchid", + "Park", + "Pear", + "Peony", + "Petunia", + "Pitt", "Protea", + "Queens", + "Red", + "Rhododendron", + "Richmond", + "Rose", + "Russel", + "School", "Snapdragon", + "Sorrel", + "South", + "Springfield", + "St George", + "St Johns", + "Stanley", + "Station", + "Sunflower", + "Sutherland", "Tansy", + "Thistle", "Tulip", + "Verbena", + "Victoria", + "Vine", + "West", + "White", + "Winchester", + "Windsor", + "Wisteria", "Yarrow", - "Churchill", - "Pitt", - "Atlee" + "York" }; internal static List StreetSuffix = new List @@ -109,51 +144,5 @@ internal static class AddressData "Drive", "Walk" }; - - - internal static List Cities = new List - { - "London", - "Manchester", - "Birmingham", - "Bradford", - "Brighton", - "Cambridge", - "Derby", - "Leeds", - "Leicester", - "Liverpool", - "Newcastle", - "Norwich", - "Nottingham", - "Oxford", - "Plymouth", - "Sheffield", - "Southhampton", - "York", - "Edinburgh", - "Glasgow", - "Cardiff", - "Newport", - "Belfast", - }; - - internal static List PostCodes = new List - { - "N", - "S", - "E", - "W", - "NE", - "NW", - "SE", - "SW", - "YO", - "BR", - "AR", - "CD", - "DE", - "HI" - }; } } diff --git a/src/GiveCRM.DummyDataGenerator/Data/TitleData.cs b/src/GiveCRM.DummyDataGenerator/Data/TitleData.cs index 058740de..3265a47d 100644 --- a/src/GiveCRM.DummyDataGenerator/Data/TitleData.cs +++ b/src/GiveCRM.DummyDataGenerator/Data/TitleData.cs @@ -1,15 +1,43 @@ -namespace GiveCRM.DummyDataGenerator.Data +using System.Collections.Generic; + +namespace GiveCRM.DummyDataGenerator.Data { - internal class TitleData + internal static class TitleData { - public string Title { get; set; } - - public string Salutation { get; set; } + internal static List MaleTitles = new List + { + new TitleDataItem("Mr.", "Mr."), + new TitleDataItem("Mr.", "Mr."), + new TitleDataItem("Mr.", "Mr."), + new TitleDataItem("Mr.", "Mr."), + new TitleDataItem("Mr.", "Mr."), + new TitleDataItem("Mr.", "Mr."), + new TitleDataItem("Mr.", "Mr."), + new TitleDataItem("Mr.", "Mr."), + new TitleDataItem("Mr.", "Mr."), + new TitleDataItem("Mr.", "Mr."), + new TitleDataItem("Mr.", "Mr."), + new TitleDataItem("Mr.", "Mr."), + new TitleDataItem("Mr.", "Mr."), + new TitleDataItem("Dr.", "Doctor") + }; - public TitleData(string title, string salutation) - { - this.Title = title; - this.Salutation = salutation; - } + internal static List FemaleTitles = new List + { + new TitleDataItem("Ms.", "Ms."), + new TitleDataItem("Ms.", "Ms."), + new TitleDataItem("Ms.", "Ms."), + new TitleDataItem("Ms.", "Ms."), + new TitleDataItem("Ms.", "Ms."), + new TitleDataItem("Ms.", "Ms."), + new TitleDataItem("Ms.", "Ms."), + new TitleDataItem("Ms.", "Ms."), + new TitleDataItem("Ms.", "Ms."), + new TitleDataItem("Mrs.", "Mrs."), + new TitleDataItem("Mrs.", "Mrs."), + new TitleDataItem("Mrs.", "Mrs."), + new TitleDataItem("Mrs.", "Mrs."), + new TitleDataItem("Dr.", "Doctor") + }; } } diff --git a/src/GiveCRM.DummyDataGenerator/Data/TitleDataItem.cs b/src/GiveCRM.DummyDataGenerator/Data/TitleDataItem.cs new file mode 100644 index 00000000..3bcfc799 --- /dev/null +++ b/src/GiveCRM.DummyDataGenerator/Data/TitleDataItem.cs @@ -0,0 +1,20 @@ +namespace GiveCRM.DummyDataGenerator.Data +{ + internal class TitleDataItem + { + public string Title { get; set; } + + public string Salutation { get; set; } + + public TitleDataItem(string title, string salutation) + { + this.Title = title; + this.Salutation = salutation; + } + + public override string ToString() + { + return Title + " " + Salutation; + } + } +} diff --git a/src/GiveCRM.DummyDataGenerator/Data/TownData.cs b/src/GiveCRM.DummyDataGenerator/Data/TownData.cs new file mode 100644 index 00000000..0ed5c55e --- /dev/null +++ b/src/GiveCRM.DummyDataGenerator/Data/TownData.cs @@ -0,0 +1,189 @@ +using System.Collections.Generic; + +namespace GiveCRM.DummyDataGenerator.Data +{ + internal static class TownData + { + /// + /// The largest ccities in the UK + /// + internal static List Data = new List + { + new TownDataItem + { + Town = "London", Region = "England", Country = "United Kingdom", + PostalCodePrefixes = new List { "N", "E", "W", "NW", "SE", "SW" } + }, + new TownDataItem + { + Town = "Birmingham", Region = "England", Country = "United Kingdom", + PostalCodePrefixes = new List { "B" } + }, + new TownDataItem + { + Town = "Leeds", Region = "England", Country = "United Kingdom", + PostalCodePrefixes = new List { "LS" } + }, + new TownDataItem + { + Town = "Glasgow", Region = "Scotland", Country = "United Kingdom", + PostalCodePrefixes = new List { "G" } + }, + new TownDataItem + { + Town = "Sheffield", Region = "England", Country = "United Kingdom", + PostalCodePrefixes = new List { "S" } + }, + new TownDataItem + { + Town = "Bradford", Region = "England", Country = "United Kingdom", + PostalCodePrefixes = new List { "BD" } + }, + new TownDataItem + { + Town = "Edinburgh", Region = "Scotland", Country = "United Kingdom", + PostalCodePrefixes = new List { "EH" } + }, + new TownDataItem + { + Town = "Liverpool", Region = "England", Country = "United Kingdom", + PostalCodePrefixes = new List { "L" } + }, + new TownDataItem + { + Town = "Manchester", Region = "England", Country = "United Kingdom", + PostalCodePrefixes = new List { "M" } + }, + new TownDataItem + { + Town = "Bristol", Region = "England", Country = "United Kingdom", + PostalCodePrefixes = new List { "BS" } + }, + new TownDataItem + { + Town = "Wakefield", Region = "England", Country = "United Kingdom", + PostalCodePrefixes = new List { "WF" } + }, + new TownDataItem + { + Town = "Cardiff", Region = "Wales", Country = "United Kingdom", + PostalCodePrefixes = new List { "CF" } + }, + new TownDataItem + { + Town = "Coventry", Region = "Wales", Country = "United Kingdom", + PostalCodePrefixes = new List { "CV" } + }, + new TownDataItem + { + Town = "Nottingham", Region = "England", Country = "United Kingdom", + PostalCodePrefixes = new List { "NG" } + }, + new TownDataItem + { + Town = "Leicester", Region = "England", Country = "United Kingdom", + PostalCodePrefixes = new List { "LE" } + }, + new TownDataItem + { + Town = "Sunderland", Region = "England", Country = "United Kingdom", + PostalCodePrefixes = new List { "SR" } + }, + new TownDataItem + { + Town = "Belfast", Region = "Northern Ireland", Country = "United Kingdom", + PostalCodePrefixes = new List { "BT" } + }, + new TownDataItem + { + Town = "Newcastle upon Tyne", Region = "England", Country = "United Kingdom", + PostalCodePrefixes = new List { "NE" } + }, + new TownDataItem + { + Town = "Brighton", Region = "England", Country = "United Kingdom", + PostalCodePrefixes = new List { "BN" } + }, + new TownDataItem + { + Town = "Hull", Region = "England", Country = "United Kingdom", + PostalCodePrefixes = new List { "HU" } + }, + new TownDataItem + { + Town = "Plymouth", Region = "England", Country = "United Kingdom", + PostalCodePrefixes = new List { "PL" } + }, + new TownDataItem + { + Town = "Stoke-on-Trent", Region = "England", Country = "United Kingdom", + PostalCodePrefixes = new List { "ST" } + }, + new TownDataItem + { + Town = "Wolverhampton", Region = "England", Country = "United Kingdom", + PostalCodePrefixes = new List { "WV" } + }, + new TownDataItem + { + Town = "Derby", Region = "England", Country = "United Kingdom", + PostalCodePrefixes = new List { "DE" } + }, + new TownDataItem + { + Town = "Swansea", Region = "Wales", Country = "United Kingdom", + PostalCodePrefixes = new List { "SA" } + }, + new TownDataItem + { + Town = "Southampton", Region = "England", Country = "United Kingdom", + PostalCodePrefixes = new List { "SO" } + }, + new TownDataItem + { + Town = "Salford", Region = "England", Country = "United Kingdom", + PostalCodePrefixes = new List { "M" } + }, + new TownDataItem + { + Town = "Aberdeen", Region = "Scotland", Country = "United Kingdom", + PostalCodePrefixes = new List { "AB" } + }, + new TownDataItem + { + Town = "Portsmouth", Region = "England", Country = "United Kingdom", + PostalCodePrefixes = new List { "PO" } + }, + new TownDataItem + { + Town = "York", Region = "England", Country = "United Kingdom", + PostalCodePrefixes = new List { "YO" } + }, + new TownDataItem + { + Town = "Peterborough", Region = "England", Country = "United Kingdom", + PostalCodePrefixes = new List { "PE" } + }, + new TownDataItem + { + Town = "Dundee", Region = "Scotland", Country = "United Kingdom", + PostalCodePrefixes = new List { "DD" } + }, + new TownDataItem + { + Town = "Lancaster", Region = "Scotland", Country = "United Kingdom", + PostalCodePrefixes = new List { "LA" } + }, + new TownDataItem + { + Town = "Oxford", Region = "England", Country = "United Kingdom", + PostalCodePrefixes = new List { "OX" } + }, + new TownDataItem + { + Town = "Newport", Region = "Wales", Country = "United Kingdom", + PostalCodePrefixes = new List { "NP" } + }, + }; + } +} diff --git a/src/GiveCRM.DummyDataGenerator/Data/TownDataItem.cs b/src/GiveCRM.DummyDataGenerator/Data/TownDataItem.cs new file mode 100644 index 00000000..161ec6f0 --- /dev/null +++ b/src/GiveCRM.DummyDataGenerator/Data/TownDataItem.cs @@ -0,0 +1,18 @@ +using System.Collections.Generic; + +namespace GiveCRM.DummyDataGenerator.Data +{ + public class TownDataItem + { + public string Town { get; set; } + + public IList PostalCodePrefixes { get; set; } + public string Region { get; set; } + public string Country { get; set; } + + public override string ToString() + { + return Town + " " + Region + " " + Country; + } + } +} diff --git a/src/GiveCRM.DummyDataGenerator/Generation/CampaignGenerator.cs b/src/GiveCRM.DummyDataGenerator/Generation/CampaignGenerator.cs index d8b24d35..84ce488b 100644 --- a/src/GiveCRM.DummyDataGenerator/Generation/CampaignGenerator.cs +++ b/src/GiveCRM.DummyDataGenerator/Generation/CampaignGenerator.cs @@ -12,7 +12,7 @@ internal class CampaignGenerator public Campaign Generate() { - string campaignName = random.PickFromList(NameData.FemaleFirstNames) + " " + + string campaignName = random.PickFromList(FemaleNames.Data) + " " + random.PickFromList(CampaignNames.CampaignSuffix); return new Campaign { diff --git a/src/GiveCRM.DummyDataGenerator/Generation/DonationsGenerator.cs b/src/GiveCRM.DummyDataGenerator/Generation/DonationsGenerator.cs index 2f6d0dba..ba2c9538 100644 --- a/src/GiveCRM.DummyDataGenerator/Generation/DonationsGenerator.cs +++ b/src/GiveCRM.DummyDataGenerator/Generation/DonationsGenerator.cs @@ -11,7 +11,7 @@ internal class DonationsGenerator private readonly ICollection members; private readonly RandomSource random = new RandomSource(); - private int donationRate; + private readonly int donationRate; public DonationsGenerator(Campaign campaign, ICollection members) { @@ -32,32 +32,76 @@ public DonationsGenerator(Campaign campaign, ICollection members) donationRate = 33 + random.Next(33); } - internal IList Generate() + internal IList Generate(int minAmount, int maxAmount, int donationCountMax) { + if (minAmount <= 0) + { + throw new ArgumentException("Minimum donation amount must be positive"); + } + + if (maxAmount < minAmount) + { + throw new ArgumentException("Maximum donation amount is less than minimum amount"); + } + var donations = new List(); foreach (var member in members) { - if (random.Percent(donationRate)) - { - donations.Add(DonationForMember(member)); - } + this.GenerateDonationsForMember(minAmount, maxAmount, donationCountMax, member, donations); } return donations; } - private Donation DonationForMember(Member member) + private void GenerateDonationsForMember(int minAmount, int maxAmount, int donationCountMax, + Member member, List donations) + { + for (int donationsForMember = 0; donationsForMember < donationCountMax; donationsForMember++) + { + if (this.random.Percent(this.donationRate)) + { + donations.Add(this.DonationForMember(member, minAmount, maxAmount)); + } + } + } + + private Donation DonationForMember(Member member, int minAmount, int maxAmount) { DateTime backDate = DateTime.Today.AddDays(-1 * random.Next(100)); - decimal randomAmount = (decimal)5 + random.Next(96); + int amountInt = random.Next(minAmount, maxAmount + 1); + + decimal donationAmount = amountInt; + if (donationAmount < maxAmount) + { + donationAmount += RandomFaction(); + } + return new Donation { CampaignId = campaign.Id, MemberId = member.Id, Date = backDate, - Amount = randomAmount + Amount = donationAmount }; } + + private decimal RandomFaction() + { + // high cance that there is no factional amount + if (random.Percent(75)) + { + return 0m; + } + + // chance that it's a quarter, half or three quarters + if (random.Percent(50)) + { + return (decimal)random.Next(4) / 4; + } + + // random from .01 to 0.99 + return (decimal)random.Next(100) / 100; + } } } \ No newline at end of file diff --git a/src/GiveCRM.DummyDataGenerator/Generation/MemberGenerator.cs b/src/GiveCRM.DummyDataGenerator/Generation/MemberGenerator.cs index ec275c2a..a6fcafea 100644 --- a/src/GiveCRM.DummyDataGenerator/Generation/MemberGenerator.cs +++ b/src/GiveCRM.DummyDataGenerator/Generation/MemberGenerator.cs @@ -31,17 +31,23 @@ public List Generate(int count) private Member GenerateMember() { bool isFemale = random.Bool(); - string firstName = isFemale ? RandomFemaleFirstName() : RandomMaleFirstName(); - TitleData titleSalutation = MakeTitleSalutation(isFemale); + string familyName = random.PickFromList(FamilyNames.Data); + // make first name different from Family name, ie.g. no "Scott Scott" or "Major Major" + string firstName; + do + { + firstName = isFemale ? RandomFemaleFirstName() : RandomMaleFirstName(); + } + while(firstName == familyName); + + TitleDataItem titleSalutation = MakeTitleSalutation(isFemale); var newMember = new Member { FirstName = firstName, - LastName = random.PickFromList(NameData.Surnames), + LastName = familyName, Title = titleSalutation.Title, Salutation = titleSalutation.Salutation, - City = random.PickFromList(AddressData.Cities), - Country = "United Kingdom" }; newMember.Reference = this.NextReference(newMember); @@ -111,14 +117,19 @@ private void MakeStreetAddress(Member member) generatedPostalAddresses.Add(streetAddress, true); member.AddressLine1 = streetAddress; - member.PostalCode = RandomPostalCode(); - member.City = random.PickFromList(AddressData.Cities); + TownDataItem townData = random.PickFromList(TownData.Data); + string postCodePrefix = random.PickFromList(townData.PostalCodePrefixes); + + member.PostalCode = RandomPostalCode(postCodePrefix); + member.City = townData.Town; + member.Region = townData.Region; + member.Country = townData.Country; } private string GenerateStreetAddress() { - string street = random.PickFromList(AddressData.StreetNamePrefix) + " " - + random.PickFromList(AddressData.StreetNames) + " " + random.PickFromList(AddressData.StreetSuffix); + string street = random.PickFromList(StreetData.StreetNamePrefix) + " " + + random.PickFromList(StreetData.StreetNames) + " " + random.PickFromList(StreetData.StreetSuffix); street = street.Trim(); string streetNumber = (random.Next(200) + 1).ToString(); @@ -130,9 +141,9 @@ private string GenerateStreetAddress() return streetNumber + " " + street; } - private string RandomPostalCode() + private string RandomPostalCode(string prefix) { - return random.PickFromList(AddressData.PostCodes) + random.Next(10) + " " + + return prefix + random.Next(10) + " " + random.Next(10) + random.Letter() + random.Letter(); } @@ -151,11 +162,11 @@ private void MakeEmailAddress(Member member) private string GenerateEmailAddress(Member member) { - string sep = random.PickFromList(NameData.EmailSeparators); + string sep = random.PickFromList(EmailData.Separators); if (random.Percent(30)) { - sep += random.Letter() + random.PickFromList(NameData.EmailSeparators); + sep += random.Letter() + random.PickFromList(EmailData.Separators); } string name; @@ -174,24 +185,24 @@ private string GenerateEmailAddress(Member member) name += this.random.Next(100).ToString(); } - string domain = random.PickFromList(NameData.EmailDomains); + string domain = random.PickFromList(EmailData.Domains); return name + "@" + domain; } - private TitleData MakeTitleSalutation(bool isFemale) + private TitleDataItem MakeTitleSalutation(bool isFemale) { - return isFemale ? random.PickFromList(NameData.FemaleTitles) : random.PickFromList(NameData.MaleTitles); + return isFemale ? random.PickFromList(TitleData.FemaleTitles) : random.PickFromList(TitleData.MaleTitles); } private string RandomMaleFirstName() { - return random.PickFromList(NameData.MaleFirstNames); + return random.PickFromList(MaleNames.Data); } private string RandomFemaleFirstName() { - return random.PickFromList(NameData.FemaleFirstNames); + return random.PickFromList(FemaleNames.Data); } } } \ No newline at end of file diff --git a/src/GiveCRM.DummyDataGenerator/Generation/RandomSource.cs b/src/GiveCRM.DummyDataGenerator/Generation/RandomSource.cs index 85fb5482..30c50cc1 100644 --- a/src/GiveCRM.DummyDataGenerator/Generation/RandomSource.cs +++ b/src/GiveCRM.DummyDataGenerator/Generation/RandomSource.cs @@ -13,16 +13,30 @@ public int Next(int max) return random.Next(max); } + public int Next(int min, int max) + { + return random.Next(min, max); + } + public string PhoneDigits() { string prefix = "0" + random.Next(100) + " "; return prefix + random.Next(10000).ToString("0000") + random.Next(10000).ToString("0000"); } - public T PickFromList(List list) + public T PickFromList(IList list) { - var max = list.Count - 1; - var index = random.Next(max); + if (list.Count == 0) + { + return default(T); + } + + if (list.Count == 1) + { + return list[0]; + } + + int index = random.Next(list.Count); return list[index]; } diff --git a/src/GiveCRM.DummyDataGenerator/Generator.cs b/src/GiveCRM.DummyDataGenerator/Generator.cs index 3f99b629..7bc73bb2 100644 --- a/src/GiveCRM.DummyDataGenerator/Generator.cs +++ b/src/GiveCRM.DummyDataGenerator/Generator.cs @@ -9,11 +9,16 @@ namespace GiveCRM.DummyDataGenerator { internal class Generator { + private const int UpdateFromLoopFrequency = 100; + private Campaign campaign; private List members; - internal string GenerateMembers(int countToGenerate) + internal EventHandler> Update; + + internal void GenerateMembers(int countToGenerate) { + OnUpdate("Generating members"); DateTime startTime = DateTime.Now; MemberGenerator generator = new MemberGenerator(); @@ -25,26 +30,36 @@ internal string GenerateMembers(int countToGenerate) members.Capacity = countToGenerate; List newMembers = generator.Generate(countToGenerate); + string generateMessaged = string.Format("{0} members generated", newMembers.Count); + OnUpdate(generateMessaged); SaveMembers(newMembers); DateTime endTime = DateTime.Now; TimeSpan elapsedTime = endTime - startTime; - return string.Format("{0} members saved in {1}", members.Count, elapsedTime); + string finalMessage = string.Format("{0} members saved in {1}", newMembers.Count, ShowDuration(elapsedTime)); + OnUpdate(finalMessage); } - private void SaveMembers(IEnumerable newMembers) + private void SaveMembers(IList newMembers) { Members membersDb = new Members(); - foreach (var member in newMembers) + for (int index = 0; index < newMembers.Count; index++) { - Member saved = membersDb.Insert(member); + Member saved = membersDb.Insert(newMembers[index]); this.members.Add(saved); + + if (index % UpdateFromLoopFrequency == 0) + { + string generateMessaged = string.Format("{0} members saved", index); + OnUpdate(generateMessaged); + } } } - internal string LoadMembers() + internal void LoadMembers() { + OnUpdate("Loading members"); DateTime startTime = DateTime.Now; Members membersDb = new Members(); @@ -53,41 +68,81 @@ internal string LoadMembers() DateTime endTime = DateTime.Now; TimeSpan elapsedTime = endTime - startTime; - return string.Format("{0} members loaded in {1}", members.Count, elapsedTime); + string finalMessage = string.Format("{0} members loaded in {1}", members.Count, ShowDuration(elapsedTime)); + OnUpdate(finalMessage); + } - internal string GenerateCampaign() + internal void GenerateCampaign() { + OnUpdate("Generating campaign"); CampaignGenerator generator = new CampaignGenerator(); campaign = generator.Generate(); Campaigns campaignDb = new Campaigns(); campaign = campaignDb.Insert(campaign); - return "Generated campaign " + campaign; + string finalMessage = "Generated campaign " + campaign; + OnUpdate(finalMessage); } - internal string GenerateDonations() + internal void GenerateDonations(int minAmount, int maxAmount, int donationCountMax) { + if ((members == null) || (members.Count == 0)) + { + OnUpdate("Cannot generate donations before members have been loaded or generated"); + return; + } + + OnUpdate("Generating donations"); DateTime startTime = DateTime.Now; DonationsGenerator generator = new DonationsGenerator(campaign, members); - IList newDonations = generator.Generate(); + IList newDonations = generator.Generate(minAmount, maxAmount, donationCountMax); + string generateMessaged = string.Format("{0} donations generated", newDonations.Count); + OnUpdate(generateMessaged); SaveDonations(newDonations); DateTime endTime = DateTime.Now; TimeSpan elapsedTime = endTime - startTime; - return string.Format("{0} donations inserted on campaign {1} in {2}", - newDonations.Count, campaign.Name, elapsedTime); + string finalMessage = string.Format("{0} donations inserted on campaign {1} in {2}", + newDonations.Count, campaign.Name, ShowDuration(elapsedTime)); + OnUpdate(finalMessage); + } - private static void SaveDonations(IEnumerable newDonations) + private void SaveDonations(IList newDonations) { Donations donationDb = new Donations(); - foreach (var donation in newDonations) + for (int index = 0; index < newDonations.Count; index++) + { + donationDb.Insert(newDonations[index]); + + if (index % UpdateFromLoopFrequency == 0) + { + string generateMessaged = string.Format("{0} donations saved", index); + OnUpdate(generateMessaged); + } + } + } + + private string ShowDuration(TimeSpan timeSpan) + { + TimeSpan oneMinute = new TimeSpan(0, 1, 0); + if (timeSpan >= oneMinute) + { + return timeSpan.ToString(@"m\:ss\.ff") + " minutes"; + } + return timeSpan.ToString(@"s\.ff") + " seconds"; + } + + private void OnUpdate(string message) + { + var handler = Update; + if (handler != null) { - donationDb.Insert(donation); + handler(this, new EventArgs(message)); } } } diff --git a/src/GiveCRM.DummyDataGenerator/GenericEventArgs.cs b/src/GiveCRM.DummyDataGenerator/GenericEventArgs.cs new file mode 100644 index 00000000..606f872a --- /dev/null +++ b/src/GiveCRM.DummyDataGenerator/GenericEventArgs.cs @@ -0,0 +1,19 @@ +using System; + +namespace GiveCRM.DummyDataGenerator +{ + public class EventArgs : EventArgs + { + private readonly T eventData; + + public EventArgs(T data) + { + eventData = data; + } + + public T Data + { + get { return eventData; } + } + } +} diff --git a/src/GiveCRM.DummyDataGenerator/GiveCRM.DummyDataGenerator.csproj b/src/GiveCRM.DummyDataGenerator/GiveCRM.DummyDataGenerator.csproj index 6602004e..e0704c9c 100644 --- a/src/GiveCRM.DummyDataGenerator/GiveCRM.DummyDataGenerator.csproj +++ b/src/GiveCRM.DummyDataGenerator/GiveCRM.DummyDataGenerator.csproj @@ -50,6 +50,7 @@ ..\packages\Simple.Data.SqlServer.0.9.8.2\lib\net40\Simple.Data.SqlServer.dll + @@ -70,14 +71,21 @@ App.xaml Code + + + + + + - + - + - + + MainWindow.xaml diff --git a/src/GiveCRM.DummyDataGenerator/MainWindow.xaml b/src/GiveCRM.DummyDataGenerator/MainWindow.xaml index d78bc4e1..16caee19 100644 --- a/src/GiveCRM.DummyDataGenerator/MainWindow.xaml +++ b/src/GiveCRM.DummyDataGenerator/MainWindow.xaml @@ -1,22 +1,46 @@  + Title="GiveCRM Dummy data generator" Height="300" Width="450"> - - - Generate member count: - 10000 - - - - - - - + Database is GiveCRM: + + + + + + Generate member count: + 10000 + + + + + + + + Donations range from + 5 + to + 100 + + + Maximum number of donations per member + 1 + + + + + + + - Ready + + Ready + diff --git a/src/GiveCRM.DummyDataGenerator/MainWindow.xaml.cs b/src/GiveCRM.DummyDataGenerator/MainWindow.xaml.cs index 2484216f..89aa1cce 100644 --- a/src/GiveCRM.DummyDataGenerator/MainWindow.xaml.cs +++ b/src/GiveCRM.DummyDataGenerator/MainWindow.xaml.cs @@ -1,4 +1,8 @@ -namespace GiveCRM.DummyDataGenerator +using System; +using System.Configuration; +using System.Threading; + +namespace GiveCRM.DummyDataGenerator { using System.Windows; @@ -12,40 +16,97 @@ public partial class Main : Window public Main() { InitializeComponent(); + ShowDataseConnection(); + + generator.Update += this.ShowUpdateOnUiThread; } - private void GenerateMembers(object sender, RoutedEventArgs e) + private void ShowDataseConnection() { - // default data size = 100 000 members - const string DefaultCountToGenerate = "10000"; - if (string.IsNullOrEmpty(memberCount.Text)) + var connection = ConfigurationManager.ConnectionStrings["GiveCrm"]; + if (connection == null) + { + databaseConnectionText.Text = "Database connection for GiveCRM was not found"; + } + else { - memberCount.Text = DefaultCountToGenerate; + databaseConnectionText.Text = "Database is GiveCRM: " + connection.ConnectionString; } + } - int memberCountValue = int.Parse(memberCount.Text); - generationOutput.Text = generator.GenerateMembers(memberCountValue); + private void GenerateMembers(object sender, RoutedEventArgs e) + { + int memberCountValue = ReadMemberCount(); + ThreadPool.QueueUserWorkItem(o => this.generator.GenerateMembers(memberCountValue)); } private void LoadMembers(object sender, RoutedEventArgs e) { - generationOutput.Text = generator.LoadMembers(); + ThreadPool.QueueUserWorkItem(o => this.generator.LoadMembers()); } private void GenerateCampaign(object sender, RoutedEventArgs e) { - generationOutput.Text = generator.GenerateCampaign(); + ThreadPool.QueueUserWorkItem(o => this.generator.GenerateCampaign()); } private void GenerateCampaignAndDonations(object sender, RoutedEventArgs e) { - generationOutput.Text = generator.GenerateCampaign(); - generationOutput.Text = generator.GenerateDonations(); + int donationMinAmount = ReadDonationAmountMin(); + int donationMaxAmount = ReadDonationAmountMax(); + int donationCountMax = ReadDonationCountMax(); + + ThreadPool.QueueUserWorkItem(o => + { + generator.GenerateCampaign(); + generator.GenerateDonations(donationMinAmount, donationMaxAmount, donationCountMax); + }); } private void GenerateDonations(object sender, RoutedEventArgs e) { - generationOutput.Text = generator.GenerateDonations(); + int donationMinAmount = ReadDonationAmountMin(); + int donationMaxAmount = ReadDonationAmountMax(); + int donationCountMax = ReadDonationCountMax(); + + ThreadPool.QueueUserWorkItem(o => generator.GenerateDonations(donationMinAmount, donationMaxAmount, donationCountMax)); + } + + private int ReadMemberCount() + { + // default data size = 10 000 members + return this.StringToIntWithDefault(memberCountText.Text, 10000); + } + + private int ReadDonationAmountMin() + { + return StringToIntWithDefault(donationAmountMinText.Text, 5); + } + + private int ReadDonationAmountMax() + { + return StringToIntWithDefault(donationAmountMaxText.Text, 100); + } + + private int ReadDonationCountMax() + { + return StringToIntWithDefault(donationCountMaxText.Text, 1); + } + + private int StringToIntWithDefault(string stringValue, int defaultValue) + { + if (string.IsNullOrEmpty(stringValue)) + { + return defaultValue; + } + + return int.Parse(stringValue); + } + + private void ShowUpdateOnUiThread(object sender, EventArgs e) + { + Action update = () => outputStatus.Text = e.Data; + Dispatcher.Invoke(update); } } }