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);
        }
Beispiel #4
0
        private void RestoreState()
        {
            Foi          foi          = Foi.GetInstance();
            FoiCaretaker foiCaretaker = FoiCaretaker.GetInstance();

            foi.SetMemento(foiCaretaker.FoiMemento);

            Data.Add("Stanje mjesta i uredaja vraceno!");
        }
Beispiel #5
0
        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);
        }
Beispiel #12
0
 public SequentialAlgorithm(Foi foi) : base(foi)
 {
 }
 public AscendingIdentifierAlgorithm(Foi foi) : base(foi)
 {
 }
Beispiel #14
0
 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);
        }