public override IEnumerable <ITool> Convert(AvailableToolLink input) { if (!InstancesMap.ContainsKey(input)) { var tool = input.Tool; if (!_shiftConverter.NamedInstances.ContainsKey(input.Shift.Name)) { _shiftConverter.Convert(input.Shift); } IShift shift = _shiftConverter.InstancesMap[input.Shift]; var tools = new HashSet <ITool>(); var converted = Factory.Create(tool.Name, shift); tools.Add(converted); var instances = new Dictionary <int, IToolInstance>(); ToolTypes.Add(converted, instances); for (int i = 0; i < input.AvailableQuantity; i++) { var instance = _toolInstanceFactory.Create(converted); instances.Add(instance.ID, instance); } InstancesMap.GetOrAdd(input, tools); // TODO: this should be a toolInstance converter and a toolDefinition converter // TODO: we have skillConverter which is the definition part, and laborConverter which is the instance part NamedInstances.GetOrAdd(tool.Name, tools.First()); } return(InstancesMap[input]); }
public override IZone Convert(DataSetServices.Data.Modeling.Resources.IZone input) { if (!InstancesMap.ContainsKey(input)) { var converted = Factory.Create(input.Name, input.MaxOccupants); return(InstancesMap.GetOrAdd(input, converted)); } return(InstancesMap[input]); }
public override ISkill Convert(ILabor input) { if (!InstancesMap.ContainsKey(input)) { var converted = Factory.Create(input.Name); InstancesMap.GetOrAdd(input, converted); NamedInstances.GetOrAdd(input.Name, converted); } return(InstancesMap[input]); }
public override IShift Convert(DataSetServices.Data.Modeling.Core.IShift input) { if (!InstancesMap.ContainsKey(input)) { var start = (int)input.StartTime.AsMinutes; var end = (int)input.EndTime.AsMinutes; var converted = Factory.Create(input.Name, start, end); NamedInstances.GetOrAdd(input.Name, converted); return(InstancesMap.GetOrAdd(input, converted)); } return(InstancesMap[input]); }
public override IEnumerable <IWorker> Convert(AvailableLaborLink input) { if (!InstancesMap.ContainsKey(input)) { var labor = input.Labor; if (!_skillConverter.NamedInstances.ContainsKey(labor.Name)) { _skillConverter.Convert(labor); } ISkill skill = _skillConverter.InstancesMap[labor]; if (!WorkerTypes.ContainsKey(skill)) { WorkerTypes.Add(skill, new Dictionary <int, IWorker>()); } if (!_shiftConverter.NamedInstances.ContainsKey(input.Shift.Name)) { _shiftConverter.Convert(input.Shift); } IShift shift = _shiftConverter.InstancesMap[input.Shift]; var workers = new HashSet <IWorker>(); for (int i = 0; i < input.AvailableQuantity; i++) { var worker = Factory.Create(skill, shift); workers.Add(worker); WorkerTypes[skill].Add(worker.ID, worker); } InstancesMap.GetOrAdd(input, workers); } else { string test = "do we really already have it?"; } return(InstancesMap[input]); }
public override IJob Convert(IActivitySchedule input) { if (!InstancesMap.ContainsKey(input)) { IJob converted = null; var duration = (int)input.TargetDuration.AsMinutes; var slack = (int)input.Float.AsMinutes; IZone zone = null; foreach (var zl in input.ScheduledItem.ZoneLinks) { if (!_zoneConverter.NamedInstances.ContainsKey(zl.Zone.Name)) { _zoneConverter.Convert(zl.Zone); } zone = _zoneConverter.InstancesMap[zl.Zone]; } converted = Factory.Create(input.ScheduledItem.UID, duration, slack, zone); // required skill types foreach (var ll in input.ScheduledItem.LaborLinks) { var labor = ll.Labor; converted.RequiredSkillSet.Add(_skillConverter.NamedInstances[labor.Name]); } // required tool types foreach (var tl in input.ScheduledItem.ToolLinks) { var tool = tl.Tool; converted.RequiredToolSet.Add(_toolConverter.NamedInstances[tool.Name]); } InstancesMap.GetOrAdd(input, converted); } return(InstancesMap[input]); }