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]);
        }
Beispiel #2
0
 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]);
        }
Beispiel #6
0
        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]);
        }