public Guid AddProgram(ProgramConfig programConfig)
        {
            ValidateCycleConfigs(programConfig.CycleConfigs);

            var newProgram = new Program(programConfig);

            lock (_programs)
            {
                var cycles = _programs.SelectMany(program => program.Cycles);

                foreach (var newCycle in newProgram.Cycles)
                {
                    foreach (var cycle in cycles)
                    {
                        if (newCycle.ConflictsWith(cycle))
                        {
                            throw new SprinklerControllerException($"Program overlaps with program {cycle.Parent.Id}, cycle {cycle.Id}");
                        }
                    }
                }

                _programs.Add(newProgram);
                WritePrograms();
            }
            return(newProgram.Id);
        }
Example #2
0
 internal Program(ProgramConfig programConfig)
 {
     Id   = Guid.NewGuid();
     Name = programConfig.Name;
     foreach (var config in programConfig.CycleConfigs)
     {
         _cycles.AddRange(WateringCycle.ToWateringCycles(this, config));
     }
 }