public GenerateTestDataUI(IActivateItems activator, ICommandExecution command) : base(activator) { InitializeComponent(); var dataGeneratorFactory = new DataGeneratorFactory(); int yLoc = 0; foreach (Type t in dataGeneratorFactory.GetAvailableGenerators()) { var ui = new DataGeneratorUI(); ui.Generator = dataGeneratorFactory.Create(t, new Random()); ui.Location = new Point(0, yLoc); yLoc += ui.Height; pDatasets.Controls.Add(ui); } lblDirectory.Visible = false; EnableOrDisableGoButton(); if (command != null) { BuildHelpWorkflow(command); } helpIcon1.SetHelpText("Tutorial", "Click for tutorial", HelpWorkflow); }
private void btnGenerate_Click(object sender, EventArgs e) { var uis = pDatasets.Controls.OfType <DataGeneratorUI>().Where(ui => ui.Generate).ToArray(); if (!uis.Any()) { MessageBox.Show("At least one dataset must be selected"); return; } try { if (started) { MessageBox.Show("Generation already in progress"); return; } started = true; var r = _seed.HasValue ? new Random(_seed.Value):new Random(); var identifiers = new PersonCollection(); identifiers.GeneratePeople(populationSize, r); if (cbLookups.Checked) { DataGenerator.WriteLookups(_extractDirectory); } //run them at the same time if (!_seed.HasValue) { foreach (DataGeneratorUI ui in uis) { Executing.Add(ui); ui.BeginGeneration(identifiers, _extractDirectory); DataGeneratorUI ui1 = ui; ui.Completed += () => { Executing.Remove(ui1); AnnounceIfComplete(); }; } } else { Queue <DataGeneratorUI> queue = new Queue <DataGeneratorUI>(uis); Execute(identifiers, queue, queue.Dequeue(), r); } UsefulStuff.GetInstance().ShowFolderInWindowsExplorer(_extractDirectory); } catch (Exception exception) { ExceptionViewer.Show(exception); } }
private void Execute(PersonCollection identifiers, Queue <DataGeneratorUI> queue, DataGeneratorUI current, Random r) { if (current == null) { return; } //tell form it is running Executing.Add(current); var dataGeneratorFactory = new DataGeneratorFactory(); //reset the current generator to use the seed provided current.Generator = dataGeneratorFactory.Create(current.Generator.GetType(), r); current.BeginGeneration(identifiers, _extractDirectory); //when it is complete current.Completed += () => { if (queue.Count != 0) { Execute(identifiers, queue, queue.Dequeue(), r); } Executing.Remove(current); AnnounceIfComplete(); }; }