public List <Subscription> Generate(SubscriptionConfiguration subscriptionconfiguration, int noOfGenerated) { noOfMessages = noOfGenerated; Percent(); MinNumbers currentMinNumbers = new MinNumbers() { PatientNameMinNumber = 0, EyeColorMinNumber = 0, DateOfBirthMinNumber = 0, HeightMinNumber = 0, HeartRateMinNumber = 0 }; MinEqualNumbers currentMinEqualNumbers = new MinEqualNumbers() { MinDateOfBirthEquals = 0, MinHeartRateEquals = 0, MinHeightEquals = 0 }; subscriptions = new List <Subscription>(); ///////// generate all subscriptions with one field completed, to avoid empty subscriptions string patientName = "", eyeColor = ""; DateTime?dateOfBirth = DateTime.Parse("01.01.1900"); double? height = 0; int? heartRate = 0; Option dateOfBirthOption = new Option(), heightOption = new Option(), heartRateOption = new Option(); var numberOfDaysInDateInterval = (subscriptionconfiguration.MaxDateValue - subscriptionconfiguration.MinDateValue).Days; while (minNumbers.PatientNameMinNumber > currentMinNumbers.PatientNameMinNumber) { // Generate subscription with field "PatientName" patientName = subscriptionconfiguration.PatientNames[rnd.Next(subscriptionconfiguration.PatientNames.Count)]; currentMinNumbers.PatientNameMinNumber++; nonEmptySubscriptions += 1; var subscription = new Subscription { PatientName = patientName, EyeColor = eyeColor, DateOfBirth = dateOfBirthOption, Height = heightOption, HeartRate = heartRateOption }; subscriptions.Add(subscription); } while (nonEmptySubscriptions < noOfMessages && minNumbers.EyeColorMinNumber > currentMinNumbers.EyeColorMinNumber) { // Generate subscription with field "EyeColor" eyeColor = subscriptionconfiguration.EyeColors[rnd.Next(subscriptionconfiguration.EyeColors.Count)]; currentMinNumbers.EyeColorMinNumber++; nonEmptySubscriptions += 1; var subscription = new Subscription { PatientName = "", EyeColor = eyeColor, DateOfBirth = dateOfBirthOption, Height = heightOption, HeartRate = heartRateOption }; subscriptions.Add(subscription); } while (nonEmptySubscriptions < noOfMessages && minNumbers.DateOfBirthMinNumber > currentMinNumbers.DateOfBirthMinNumber) { // Generate subscription with field "DateOfBirth" dateOfBirth = subscriptionconfiguration.MinDateValue.AddDays(rnd.Next(0, numberOfDaysInDateInterval)); // Generate subcription with option "DateOfBirth","=","..." if (dateOfBirth != DateTime.Parse("01.01.1900")) { dateOfBirthOption = new Option { Field = "DateOfBirth", Op = equalOperator, Value = dateOfBirth.ToString() }; currentMinEqualNumbers.MinDateOfBirthEquals++; currentMinNumbers.DateOfBirthMinNumber++; nonEmptySubscriptions += 1; var subscription = new Subscription { PatientName = "", EyeColor = "", DateOfBirth = dateOfBirthOption, Height = heightOption, HeartRate = heartRateOption }; subscriptions.Add(subscription); } } while (nonEmptySubscriptions < noOfMessages && minNumbers.HeightMinNumber > currentMinNumbers.HeightMinNumber) { // Generate subscription with field "Height" height = Random(subscriptionconfiguration.MinHeightValue, subscriptionconfiguration.MaxHeightValue); // Generate subcription with option "Height","=","..." if (height != 0) { heightOption = new Option { Field = "Height", Op = equalOperator, Value = height.ToString() }; currentMinEqualNumbers.MinHeightEquals++; currentMinNumbers.HeightMinNumber++; nonEmptySubscriptions += 1; var subscription = new Subscription { PatientName = "", EyeColor = "", DateOfBirth = new Option(), Height = heightOption, HeartRate = heartRateOption }; subscriptions.Add(subscription); } } while (nonEmptySubscriptions < noOfMessages && minNumbers.HeartRateMinNumber > currentMinNumbers.HeartRateMinNumber) { // Generate subscription with field "HeartRate" heartRate = Random(subscriptionconfiguration.MinHeartRateValue, subscriptionconfiguration.MaxHeartRateValue); // Generate subcription with option "HeartRate","=","..." if (height != 0) { heartRateOption = new Option { Field = "HeartRate", Op = equalOperator, Value = heartRate.ToString() }; currentMinEqualNumbers.MinHeartRateEquals++; currentMinNumbers.HeartRateMinNumber++; nonEmptySubscriptions += 1; var subscription = new Subscription { PatientName = "", EyeColor = "", DateOfBirth = new Option(), Height = new Option(), HeartRate = heartRateOption }; subscriptions.Add(subscription); } } ////complete fields to reach percentage for (var i = 0; i < noOfMessages; i++) { patientName = ""; eyeColor = ""; dateOfBirth = DateTime.Parse("01.01.1900"); height = 0; heartRate = 0; dateOfBirthOption = new Option(); heightOption = new Option(); heartRateOption = new Option(); #region Generate subscription with the required occurence percentage for each field numberOfDaysInDateInterval = (subscriptionconfiguration.MaxDateValue - subscriptionconfiguration.MinDateValue).Days; if (minNumbers.EyeColorMinNumber > currentMinNumbers.EyeColorMinNumber) { // Generate subscription with field "EyeColor" eyeColor = subscriptionconfiguration.EyeColors[rnd.Next(subscriptionconfiguration.EyeColors.Count)]; currentMinNumbers.EyeColorMinNumber++; subscriptions[i].EyeColor = eyeColor; } if (minNumbers.DateOfBirthMinNumber > currentMinNumbers.DateOfBirthMinNumber) { // Generate subscription with field "DateOfBirth" dateOfBirth = subscriptionconfiguration.MinDateValue.AddDays(rnd.Next(0, numberOfDaysInDateInterval)); } if (minNumbers.HeightMinNumber > currentMinNumbers.HeightMinNumber) { // Generate subscription with field "Height" height = Random(subscriptionconfiguration.MinHeightValue, subscriptionconfiguration.MaxHeightValue); } if (minNumbers.HeartRateMinNumber > currentMinNumbers.HeartRateMinNumber) { // Generate subscription with field "HeartRate" heartRate = Random(subscriptionconfiguration.MinHeartRateValue, subscriptionconfiguration.MaxHeartRateValue); } #endregion Generate subscription with the required occurence percentage for each field #region Generate subscription with the required occurence percentage of operator "=" if (minEqualNumbers.MinDateOfBirthEquals > currentMinEqualNumbers.MinDateOfBirthEquals) { // Generate subcription with option "DateOfBirth","=","..." if (dateOfBirth != DateTime.Parse("01.01.1900")) { dateOfBirthOption = new Option { Field = "DateOfBirth", Op = equalOperator, Value = dateOfBirth.ToString() }; currentMinEqualNumbers.MinDateOfBirthEquals++; currentMinNumbers.DateOfBirthMinNumber++; subscriptions[i].DateOfBirth = dateOfBirthOption; } } else if (minNumbers.DateOfBirthMinNumber > currentMinNumbers.DateOfBirthMinNumber) { dateOfBirthOption = new Option { Field = "DateOfBirth", Op = operators[rnd.Next(operators.Count)], Value = dateOfBirth.ToString() }; currentMinNumbers.DateOfBirthMinNumber++; subscriptions[i].DateOfBirth = dateOfBirthOption; } if (minEqualNumbers.MinHeightEquals > currentMinEqualNumbers.MinHeightEquals) { // Generate subcription with option "Height","=","..." if (height != 0) { heightOption = new Option { Field = "Height", Op = equalOperator, Value = height.ToString() }; currentMinEqualNumbers.MinHeightEquals++; currentMinNumbers.HeightMinNumber++; subscriptions[i].Height = heightOption; } } else if (minNumbers.HeightMinNumber > currentMinNumbers.HeightMinNumber) { heightOption = new Option { Field = "Height", Op = operators[rnd.Next(operators.Count)], Value = height.ToString() }; currentMinNumbers.HeightMinNumber++; subscriptions[i].Height = heightOption; } if (minEqualNumbers.MinHeartRateEquals > currentMinEqualNumbers.MinHeartRateEquals) { // Generate subcription with option "HeartRate","=","..." if (height != 0) { heartRateOption = new Option { Field = "HeartRate", Op = equalOperator, Value = heartRate.ToString() }; currentMinEqualNumbers.MinHeartRateEquals++; currentMinNumbers.HeartRateMinNumber++; subscriptions[i].HeartRate = heartRateOption; } } else if (minNumbers.HeartRateMinNumber > currentMinNumbers.HeartRateMinNumber) { heartRateOption = new Option { Field = "HeartRate", Op = operators[rnd.Next(operators.Count)], Value = heartRate.ToString() }; currentMinNumbers.HeartRateMinNumber++; subscriptions[i].HeartRate = heartRateOption; } #endregion Generate subscription with the required occurence percentage of operator "=" } return(subscriptions); }
public List <Subscription> Generate(SubscriptionConfiguration subscriptionconfiguration, int noOfMessages) { MinNumbers currentMinNumbers = new MinNumbers() { PatientNameMinNumber = 0, EyeColorMinNumber = 0, DateOfBirthMinNumber = 0, HeightMinNumber = 0, HeartRateMinNumber = 0 }; MinEqualNumbers currentMinEqualNumbers = new MinEqualNumbers() { MinDateOfBirthEquals = 0, MinHeartRateEquals = 0, MinHeightEquals = 0 }; subscriptions = new List <Subscription>(); for (var i = 0; i < noOfMessages; i++) { string patientName = "", eyeColor = ""; DateTime?dateOfBirth = DateTime.Parse("01.01.1900"); double? height = 0; int? heartRate = 0; Option dateOfBirthOption = new Option(), heightOption = new Option(), heartRateOption = new Option(); #region Generate subscription with the required occurence percentage for each field var numberOfDaysInDateInterval = (subscriptionconfiguration.MaxDateValue - subscriptionconfiguration.MinDateValue).Days; if (minNumbers.PatientNameMinNumber > currentMinNumbers.PatientNameMinNumber) { // Generate subscription with field "PatientName" patientName = subscriptionconfiguration.PatientNames[rnd.Next(subscriptionconfiguration.PatientNames.Count)]; currentMinNumbers.PatientNameMinNumber++; } if (minNumbers.EyeColorMinNumber > currentMinNumbers.EyeColorMinNumber) { // Generate subscription with field "EyeColor" eyeColor = subscriptionconfiguration.EyeColors[rnd.Next(subscriptionconfiguration.EyeColors.Count)]; currentMinNumbers.EyeColorMinNumber++; } if (minNumbers.DateOfBirthMinNumber > currentMinNumbers.DateOfBirthMinNumber) { // Generate subscription with field "DateOfBirth" dateOfBirth = subscriptionconfiguration.MinDateValue.AddDays(rnd.Next(0, numberOfDaysInDateInterval)); currentMinNumbers.DateOfBirthMinNumber++; } if (minNumbers.HeightMinNumber > currentMinNumbers.HeightMinNumber) { // Generate subscription with field "Height" height = Random(subscriptionconfiguration.MinHeightValue, subscriptionconfiguration.MaxHeightValue); currentMinNumbers.HeightMinNumber++; } if (minNumbers.HeartRateMinNumber > currentMinNumbers.HeartRateMinNumber) { // Generate subscription with field "HeartRate" heartRate = Random(subscriptionconfiguration.MinHeartRateValue, subscriptionconfiguration.MaxHeartRateValue); currentMinNumbers.HeartRateMinNumber++; } #endregion Generate subscription with the required occurence percentage for each field #region Generate subscription with the required occurence percentage of operator "=" if (minEqualNumbers.MinDateOfBirthEquals > currentMinEqualNumbers.MinDateOfBirthEquals) { // Generate subcription with option "DateOfBirth","=","..." if (dateOfBirth != DateTime.Parse("01.01.1900")) { dateOfBirthOption = new Option { Field = "DateOfBirth", Op = equalOperator, Value = dateOfBirth.ToString() }; currentMinEqualNumbers.MinDateOfBirthEquals++; } else { dateOfBirthOption = new Option { Field = "DateOfBirth", Op = operators[rnd.Next(operators.Count)], Value = dateOfBirth.ToString() }; } } if (minEqualNumbers.MinHeightEquals > currentMinEqualNumbers.MinHeightEquals) { // Generate subcription with option "Height","=","..." if (height != 0) { heightOption = new Option { Field = "Height", Op = equalOperator, Value = height.ToString() }; currentMinEqualNumbers.MinHeightEquals++; } else { heightOption = new Option { Field = "Height", Op = operators[rnd.Next(operators.Count)], Value = height.ToString() }; } } if (minEqualNumbers.MinHeartRateEquals > currentMinEqualNumbers.MinHeartRateEquals) { // Generate subcription with option "HeartRate","=","..." if (height != 0) { heartRateOption = new Option { Field = "HeartRate", Op = equalOperator, Value = heartRate.ToString() }; currentMinEqualNumbers.MinHeartRateEquals++; } else { heartRateOption = new Option { Field = "HeartRate", Op = operators[rnd.Next(operators.Count)], Value = heartRate.ToString() }; } } #endregion Generate subscription with the required occurence percentage of operator "=" var subscription = new Subscription { PatientName = subscriptionconfiguration.PatientNames[rnd.Next(subscriptionconfiguration.PatientNames.Count)], EyeColor = subscriptionconfiguration.EyeColors[rnd.Next(subscriptionconfiguration.EyeColors.Count)], DateOfBirth = dateOfBirthOption, Height = heightOption, HeartRate = heartRateOption }; subscriptions.Add(subscription); } return(subscriptions); }