public void LoadEntities(Configuration configuration) { _configuration = configuration; new RandomGeneratorFacade(configuration.GeneratorSeed ?? 0); _thingsOfFoi = LoadDevices(configuration); if (_thingsOfFoi == null) { return; } _foi = LoadPlaces(configuration, _thingsOfFoi); if (_foi == null) { return; } _schedules = LoadSchedules(_configuration); Initialize(); Notify(); }
private void EquipPlaces(Foi foi) { RandomGeneratorFacade randomGeneratorFacade = new RandomGeneratorFacade(); IIterator placeIterator = foi.Places.CreateIterator(IteratorType.AscendingValue); Place place = placeIterator.First(); while (place != null) { List <Device> actuators = place.Devices.FindAll(d => d.DeviceType == DeviceType.Actuator && d.IsBeingUsed && d.Malfunctional == false); List <Device> sensors = place.Devices.FindAll(d => d.DeviceType == DeviceType.Sensor && d.IsBeingUsed && d.Malfunctional == false); foreach (var actuator in actuators) { int numberOfSensorsToEquipActuator = randomGeneratorFacade.GiveRandomNumber(1, sensors.Count); List <int> usedSensorIndexes = new List <int>(); int[] availableSensorIndexes = Enumerable.Range(0, sensors.Count).ToArray(); for (int i = 0; i < numberOfSensorsToEquipActuator; i++) { int[] unusedSensorIndexes = availableSensorIndexes.Except(usedSensorIndexes).ToArray(); int randomIndex = randomGeneratorFacade.GiveRandomNumber(0, sensors.Count - 1, unusedSensorIndexes, 1); usedSensorIndexes.Add(randomIndex); actuator.AddChild(sensors[randomIndex]); sensors[randomIndex].AddParent(actuator); } } RepairOneDevice(place); ListDevices(place); place = placeIterator.Next(); } }
private Foi LoadPlaces(Configuration configuration, ThingsOfFoi thingsOfFoi) { Foi foi = Foi.GetInstance(); List <Dictionary <string, string> > placeList = Csv.Parse(configuration.PlaceFilePath); IPlaceBuilder placeBuilder = new PlaceBuilderImpl(); PlaceBuildDirector placeBuildDirector = new PlaceBuildDirector(placeBuilder); foreach (var row in placeList) { Place newPlace = placeBuildDirector.Construct(row, thingsOfFoi); if (newPlace != null) { if (newPlace.IsPlaceValid()) { foi.AddPlace(newPlace); } else { Data.Add("Unos za mjesto: '" + newPlace.Name + "' nije dobar. Preskacem!"); } } } if (placeList.Count == 0 || foi.Places.Count == 0) { Data.Add("Nije ucitano nijedno mjesto. Program ne moze nastaviti!"); return(null); } return(foi); }
private void RestoreState() { Foi foi = Foi.GetInstance(); FoiCaretaker foiCaretaker = FoiCaretaker.GetInstance(); foi.SetMemento(foiCaretaker.FoiMemento); Data.Add("Stanje mjesta i uredaja vraceno!"); }
private void SaveState() { Foi foi = Foi.GetInstance(); FoiCaretaker foiCaretaker = FoiCaretaker.GetInstance(); foiCaretaker.FoiMemento = foi.CreateMemento(); Data.Add("Stanje mjesta i uredaja spremljeno!"); }
private void PrintStatistics() { Foi foi = Foi.GetInstance(); foreach (var place in foi.Places) { Data.Add(""); Data.Add(place.ToString()); foreach (var device in place.Devices) { Data.Add(device.ToString()); } Data.Add(""); } }
private void InitializeSystem(Foi foi) { IIterator placeIterator = foi.Places.CreateIterator(IteratorType.Sequential); Place place = placeIterator.First(); while (place != null) { foreach (var device in place.Devices) { if (device.Initialize() == 0) { device.IsBeingUsed = false; } } place = placeIterator.Next(); } }
public Algorithm CreateAlgorithm(string algorithm, Foi foi) { switch (algorithm) { case "AscendingIdentifierAlgorithm": return(new AscendingIdentifierAlgorithm(foi)); case "DescendingIdentifierAlgorithm": return(new DescendingIdentifierAlgorithm(foi)); case "RandomAlgorithm": return(new RandomAlgorithm(foi)); case "SequentialAlgorithm": return(new SequentialAlgorithm(foi)); default: return(new AscendingIdentifierAlgorithm(foi)); } }
private void CheckDevices(Configuration configuration, Foi foi) { Output output = Output.GetInstance(); AlgorithmCreator algorithmCreator = new AlgorithmCreator(); Algorithm algorithm = algorithmCreator.CreateAlgorithm(configuration.Algorithm, foi); new Thread(() => { Thread.CurrentThread.IsBackground = false; for (int i = 0; i < configuration.NumberOfThreadCycles; i++) { algorithm.Run(configuration.ThreadCycleDuration ?? 1); } ShowStatistics(foi); output.NotifyEnd(); }).Start(); }
private void ShowStatistics(Foi foi) { Output output = Output.GetInstance(); IIterator placeIterator = foi.Places.CreateIterator(IteratorType.Sequential); for ( Place place = (Place)placeIterator.First(); !placeIterator.IsDone(); place = (Place)placeIterator.Next() ) { output.WriteLine(place.ToString()); output.WriteLine(">>>>>>>>>>>>>>> > UREĐAJI < <<<<<<<<<<<<<<<<<\r\n"); foreach (var device in place.Devices) { output.WriteLine(device.ToString()); } } }
private Foi LoadPlaces(Configuration configuration, ThingsOfFoi thingsOfFoi) { Output output = Output.GetInstance(); Foi foi = new Foi(); List <Dictionary <string, string> > placeList = Csv.Parse(configuration.PlaceFilePath); IPlaceBuilder placeBuilder = new PlaceBuilderImpl(); PlaceBuildDirector placeBuildDirector = new PlaceBuildDirector(placeBuilder); foreach (var placeParams in placeList) { Place newPlace = placeBuildDirector.Construct(placeParams, thingsOfFoi, foi); if (newPlace == null) { output.WriteLine("Mjesto '" + placeParams["naziv"] + "' već postoji. Preskačem ..."); } else { if (newPlace.IsPlaceValid()) { foi.Places[foi.Places.Count] = newPlace; } else { output.WriteLine("Unos za mjesto: '" + newPlace.Name + "' nije dobar. Preskačem!"); } } } if (placeList.Count == 0 || foi.Places.Count == 0) { output.WriteLine("Nije učitano nijedno mjesto. Program ne može nastaviti!"); return(null); } return(foi); }
public SequentialAlgorithm(Foi foi) : base(foi) { }
public AscendingIdentifierAlgorithm(Foi foi) : base(foi) { }
public RandomAlgorithm(Foi foi) : base(foi) { }
protected Algorithm(Foi foi) { Foi = foi; }
static void Main(string[] args) { Output output = Output.GetInstance(); output.WelcomeUser(); if (args.Length > 18 || (args.Length < 4 && args.Length != 1)) { output.WriteLine("Nedovoljan broj argumenata!", true); output.NotifyEnd(); return; } else { if (args.Length == 1 && args[0] == "--help") { output.HelpUser(); output.NotifyEnd(); return; } else { if (args.Length % 2 != 0) { output.WriteLine("Broja argumenata mora biti paran!", true); output.NotifyEnd(); return; } } } Program program = new Program(); Configuration configuration = program.LoadConfiguration(args); if (!configuration.IsConfigurationValid()) { output.WriteLine("Argumenti nisu valjani! Provjerite argumente!", true); output.NotifyEnd(); return; } program.SetUpOutput(configuration); program.InitializeRandomGenerator(configuration); ThingsOfFoi thingsOfFoi = program.LoadDevices(configuration); if (thingsOfFoi == null) { output.NotifyEnd(); return; } Foi foi = program.LoadPlaces(configuration, thingsOfFoi); if (foi == null) { output.NotifyEnd(); return; } program.InitializeSystem(foi); program.EquipPlaces(foi); program.CheckDevices(configuration, foi); }