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); }
internal Program(ProgramConfig programConfig) { Id = Guid.NewGuid(); Name = programConfig.Name; foreach (var config in programConfig.CycleConfigs) { _cycles.AddRange(WateringCycle.ToWateringCycles(this, config)); } }