public override void AddItem(PlatformItem item)
        {
            base.AddItem(item);
            var fieldList = ComposeLabelFields(item);

            PrintLabel(fieldList);
        }
        private List <Field> ComposeLabelFields(PlatformItem item)
        {
            //Start with a predefined label
            var fields = GetEmptyFieldsListForDemonstrator();

            //overwrite the barcode
            fields[0] = new Field("TrackingIdBarcode", item.ItemId.ToString(), "string");

            //ToDo: collect data from item.LogHistory and print it
            //var item = Entities.PlatformItems.FirstOrDefault();
            //var recipeList = item.Recipe.GetOrderedList();

            if (item.Route == null)
            {
                return(fields);
            }

            var recipeItems = item.Route.GetOrderedList();

            for (int i = 0; i < Math.Min(recipeItems.Count, fields.Count); i++)
            {
                if (!recipeItems[i].ModuleType.ToString().IsNullOrEmpty())
                {
                    fields[i].value = recipeItems[i].ModuleType.ToString();
                }
            }

            return(fields);
        }
Пример #3
0
        public void GivenItemWithRoute_WhenTargetFull_ShouldNotRouteSingleItem()
        {
            ModuleB.LimitItemCount = 1;
            ModuleB.Entities.PlatformItems.Add(new PlatformItem {
                ItemId = 99
            });
            var item = new PlatformItem {
                ItemId = 1
            };

            item.Route = new Route
            {
                RouteItems = new Collection <RouteItem>
                {
                    new RouteItem {
                        ModuleType = 1
                    },
                    new RouteItem {
                        ModuleType = 2
                    },
                }
            };

            ModuleA.TestCurrentItemRoutings.Should().HaveCount(0, "must not route because target port is full");

            ModuleA.SimulateItemDetected(item);

            ModuleA.TestCurrentItemRoutings.Should().HaveCount(0, "must not route because target port is still full");
        }
Пример #4
0
        private void UpdateRouteIndex(PlatformItem item, IPlatformModule module)
        {
            if (item == null || item.Route == null)
            {
                return;
            }

            int index = item.Route.CurrentIndex;

            if (index < (item.Route.RouteItems.Count - 1))
            {
                int nextModuleTypeId = item.Route.GetOrderedList()[index + 1].ModuleType;
                if (module.ModuleTypeId == nextModuleTypeId)
                {
                    item.Route.CurrentIndex++;

                    index = item.Route.CurrentIndex;
                    if (index + 1 < item.Route.RouteItems.Count)
                    {
                        nextModuleTypeId = item.Route.GetOrderedList()[index + 1].ModuleType;
                        Logger.DebugFormat("Updated Route. Next target is {0}", nextModuleTypeId);
                    }
                }
            }

            if (item.Route.CurrentIndex >= item.Route.RouteItems.Count - 1)
            {
                Logger.InfoFormat("Route completed for item {0}", item.ItemId);
            }
        }
Пример #5
0
        public void GivenItemWithRoute_WhenTargetPortFull_ShouldNotRouteSingleItem()
        {
            ModuleB.SimulateIsFull(0);
            var item = new PlatformItem();

            item.Route = new Route
            {
                RouteItems = new Collection <RouteItem>
                {
                    new RouteItem {
                        ModuleType = 1
                    },
                    new RouteItem {
                        ModuleType = 2
                    },
                }
            };

            ModuleA.SimulateNewItemCreated(item);

            ModuleA.TestCurrentItemRoutings.Should().HaveCount(0, "must not route because target port is full");

            ModuleA.SimulateItemDetected(item);

            ModuleA.TestCurrentItemRoutings.Should().HaveCount(0, "must not route because target port is still full");
        }
Пример #6
0
        public void FailJobItem(PlatformItem item, string reason)
        {
            if (item == null)
            {
                Logger.Warn("FailJobItem: The given platform item is null");
                return;
            }

            var job = GetJobByPlatformItem(item);

            if (job == null)
            {
                Logger.WarnFormat("FailJobItem: Unknown barcode '{0}'", item.ItemId);
                return;
            }

            var jobItem = job.GetJobItemByPlatformItem(item);

            if (jobItem != null)
            {
                jobItem.State        = JobItemState.Failed;
                jobItem.FailedReason = reason;

                Logger.WarnFormat("Job item failed - JobId='{0}', ItemId='{1}', reason='{2}'",
                                  job.JobId, jobItem.ItemHostId, reason);
            }
        }
Пример #7
0
        public void GivenItemWithRoute_WhenDetectedPingPong_ShouldRouteAndUpdateIndex()
        {
            var item = new PlatformItem();

            item.Route = new Route
            {
                RouteItems = new Collection <RouteItem>
                {
                    new RouteItem {
                        ModuleType = 1
                    },
                    new RouteItem {
                        ModuleType = 2
                    },
                    new RouteItem {
                        ModuleType = 1
                    }
                }
            };

            ModuleA.SimulateNewItemCreated(item);
            item.Route.CurrentIndex.Should().Be(0);
            ModuleA.TestCurrentItemRoutings.Should().ContainValue(0, "port 0 is the path to ModuleB which is next in the route");

            ModuleB.SimulateItemDetected(item);
            item.Route.CurrentIndex.Should().Be(1);
            ModuleA.TestCurrentItemRoutings.Should().HaveCount(0, "old routing task is fulfilled");
            ModuleB.TestCurrentItemRoutings.Should().ContainValue(0, "port 0 is the path to ModuleA");

            ModuleA.SimulateItemDetected(item);
            item.Route.CurrentIndex.Should().Be(2);
            ModuleB.TestCurrentItemRoutings.Should().HaveCount(0, "old routing task is fulfilled");
            ModuleA.TestCurrentItemRoutings.Should().HaveCount(0, "item has no more route items");
        }
Пример #8
0
        protected virtual void MoveItem(PlatformItem item, IPlatformModule targetModule)
        {
            if (item == null)
            {
                return;
            }

            var c = EntityContextFactory.CreateContext();

            c.Attach(Entities);

            ReleaseLinks(item);
            c.SaveEntityStateAsyncAndDispose();

            var context = EntityContextFactory.CreateContext();

            context.Attach(((PlatformModule)targetModule).Entities);
            context.Attach(item);
            item.AssociatedPlatformModuleEntity = ((PlatformModule)targetModule).Entities;
            context.SaveEntityStateAsyncAndDispose();
            Entities.PlatformItems.Remove(item);
            targetModule.AddItem(item);

            ItemRoutings.Remove(item);

            CurrentItemCountChangedEvent(this, new ItemCountChangedEventArgs(CurrentItemCount));
        }
Пример #9
0
 private void RecalculateRoute(PlatformItem item, IPlatformModule module)
 {
     if (!RouteCalculator.CalculateSingleItemRouting(item, module))
     {
         module.RemoveItemRouting(item);
     }
 }
Пример #10
0
        public void GivenItemWithRoute_WhenReleased_ShouldRouteAndUpdateIndex()
        {
            var item = new PlatformItem();

            item.Route = new Route
            {
                RouteItems = new Collection <RouteItem>
                {
                    new RouteItem {
                        ModuleType = 1
                    },
                    new RouteItem {
                        ModuleType = 3
                    },
                    new RouteItem {
                        ModuleType = 4
                    }
                }
            };
            ModuleA.Entities.PlatformItems.Add(item);

            ModuleA.SimulateItemReleased(item, 1);

            item.Route.CurrentIndex.Should().Be(1);
            ModuleC.Entities.PlatformItems.Should().Contain(item);
            ModuleC.TestCurrentItemRoutings.Should().HaveCount(1);
            ModuleA.Entities.PlatformItems.Should().HaveCount(0);

            ModuleC.SimulateItemReleased(item, 0);

            ModuleC.Entities.PlatformItems.Should().HaveCount(0);
            ModuleD.Entities.PlatformItems.Should().HaveCount(1);
        }
Пример #11
0
        public void WhenItemReachesLastRouteModule_ShouldBeFulfilled()
        {
            var item = new PlatformItem
            {
                Route = new Route
                {
                    RouteItems = new Collection <RouteItem> {
                        new RouteItem {
                            ModuleType = 6
                        },                              // ModuleF
                        new RouteItem {
                            ModuleType = 7
                        },                              // ModuleG
                    }
                }
            };

            JobManager.ResetCalls();

            ModuleF.SimulateNewItemCreated(item);
            ModuleG.SimulateItemDetected(item);
            ModuleG.SimulateItemDetected(item);
            ModuleG.SimulateItemReleased(item, 0);

            JobManager.Verify(j => j.FulfillJobItem(item));
        }
Пример #12
0
        public void GivenTwoLinkedItems_WhenMoveOne_ShouldReleaseLinks()
        {
            var logger = new Mock <ILogger>();
            var entityContextFactory = new EntityContextFactory(logger.Object);
            var dummy = new PlatformModule
            {
                EntityContextFactory = entityContextFactory,
                Logger = logger.Object,
                CompositeAlarmManager = new CompositeAlarmManager(logger.Object),
                Name = string.Empty
            };

            dummy.Construct();
            var item1 = new PlatformItem {
                ItemId = 1
            };
            var item2 = new PlatformItem {
                ItemId = 2
            };

            item1.ItemBehind  = item2;
            item2.ItemInFront = item1;
            _testee.AddItem(item1);
            _testee.AddItem(item2);

            _testee.MoveItem(item1.ItemId, dummy);

            item1.ItemInFront.Should().BeNull();
            item1.ItemBehind.Should().BeNull();
            item2.ItemInFront.Should().BeNull();
            item2.ItemBehind.Should().BeNull();
        }
Пример #13
0
 public virtual void AddItemRouting(PlatformItem item, int outputPortIndex)
 {
     if (!ItemRoutings.ContainsKey(item))
     {
         ItemRoutings.Add(item, outputPortIndex);
     }
 }
Пример #14
0
        private bool CreateEntity(string barcode, Workflow workflow)
        {
            var item = new PlatformItem
            {
                DetectedInModuleCount = 1,
                DetectedCount         = 1,
                ItemId            = HashHelper.ConvertStringToLong(barcode),
                LastDetectionTime = DateTime.Now,
                Route             = _workflowFactory.CreateRecipe()
            };

            _workflowFactory.CreateRecipe(item.Route, workflow);

            try
            {
                AddItem(item);
                EventAggregator.Publish(new PlatformItemEvent(item.ItemId, this, PlatformItemEventType.NewItemCreated)
                {
                    NewItem = item
                });
            }
            catch (Exception exception)
            {
                _logger.Error($"Creating PlatformItem Failed. {exception.Message}");
                return(false);
            }

            OnBarcodeEventHandler(new BarcodeEventArgs(barcode));

            return(true);
        }
Пример #15
0
 public void SimulateNewItemCreated(PlatformItem item)
 {
     EventAggregator.Publish(new PlatformItemEvent(item.ItemId, this, PlatformItemEventType.NewItemCreated)
     {
         NewItem = item
     });
 }
Пример #16
0
 public static PlatformItem getPlatform(int id)
 {
     PlatformItem platform = new PlatformItem ();
     platform.image = Items.instance.platforms [id].image;
     platform.width = Items.instance.platforms [id].width;
     platform.height = Items.instance.platforms [id].height;
     platform.type = id;
     return platform;
 }
Пример #17
0
        public void WhenAddItem_MustContainItem()
        {
            var item = new PlatformItem();

            _testee.AddItem(item);

            _testee.ContainsItem(item.ItemId).Should().BeTrue("item was added");
            _testee.Entities.PlatformItems.Contains(item).Should().BeTrue("item was added");
        }
Пример #18
0
        /// <summary>
        /// Default constructor
        /// </summary>
        /// <param name="originalTrItem">The original track item that we are representing for drawing</param>
        public DrawablePlatformItem(TrackItem originalTrItem)
            : base(originalTrItem)
        {
            Description = "platform";
            PlatformItem platform = originalTrItem as PlatformItem;

            this.itemName    = platform.ItemName;
            this.stationName = platform.Station;
        }
Пример #19
0
        public void GivenRouteAll_WhenDestinationStops_ShouldStopRouting()
        {
            var item = new PlatformItem();

            ModuleA.Entities.PlatformItems.Add(item);
            ModuleBusManager.ForcePath(ModuleA, ModuleB, 0, 0);

            ModuleB.Stop();

            ModuleA.TestCurrentAllPortRoutings.Should().HaveCount(0, "ModuleA must not route items because target is full now");
        }
Пример #20
0
        public void WhenReleaseItem_ShouldBeInNextModule()
        {
            var item = new PlatformItem();

            ModuleA.Entities.PlatformItems.Add(item);

            ModuleA.SimulateItemReleased(item, 0);

            ModuleB.Entities.PlatformItems.Should().Contain(item, "item should be in ModuleB because it comes next");
            ModuleA.Entities.PlatformItems.Should().HaveCount(0, "item has been released");
        }
Пример #21
0
        public void GivenItemCreatedInModuleA_WhenDetectedInModuleB_ShouldMoveItem()
        {
            var item = new PlatformItem();

            ModuleA.SimulateNewItemCreated(item);

            ModuleB.SimulateItemDetected(item);

            ModuleA.Entities.PlatformItems.Count.Should().Be(0, "item is now in ModuleB and cannot exist in ModuleA at the same time");
            ModuleB.Entities.PlatformItems.Contains(item).Should().BeTrue("item was detected in ModuleB");
        }
Пример #22
0
 public virtual void RemoveItemRouting(PlatformItem item)
 {
     if (item == null)
     {
         Logger.Warn("RemoveItemRouting: item is null");
     }
     else if (ItemRoutings.ContainsKey(item))
     {
         ItemRoutings.Remove(item);
     }
 }
Пример #23
0
        public void GivenItem_WhenRemove_ItemShouldBeRemoved()
        {
            var item = new PlatformItem();

            _testee.AddItem(item);

            _testee.RemoveItem(item.ItemId);

            _testee.ContainsItem(item.ItemId).Should().BeFalse("item has been removed");
            _testee.Entities.PlatformItems.Contains(item).Should().BeFalse("item has been removed");
            _testee.Entities.PlatformItems.Count.Should().Be(0, "there is no item in the module anymore");
        }
        public override void AddItem(PlatformItem item)
        {
            base.AddItem(item);

            if (SimulateRouteImmediately)
            {
                if (PortRoutings.Any())
                {
                    RaisePlatformItemReleased(item.ItemId, PortRoutings.First());
                }
            }
        }
Пример #25
0
        public void GivenModuleFullAndRouteAll_WhenNotFullAnymore_ShouldRouteAll()
        {
            var item = new PlatformItem();

            ModuleB.LimitItemCount = 1;
            ModuleB.Entities.PlatformItems.Add(item);
            ModuleBusManager.ForcePath(ModuleA, ModuleB, 0, 0);

            ModuleA.SimulateItemDetected(item);

            ModuleA.TestCurrentAllPortRoutings.Should().HaveCount(1);
        }
        public override void AddItemRouting(PlatformItem item, int outputPortIndex)
        {
            base.AddItemRouting(item, outputPortIndex);

            if (SimulateRouteImmediately)
            {
                if (Entities.PlatformItems.Contains(item))
                {
                    RaisePlatformItemReleased(item.ItemId, outputPortIndex);
                }
            }
        }
Пример #27
0
        public void WhenRemoveItem_MustRaiseEvent()
        {
            var item = new PlatformItem();

            _testee.AddItem(item);
            _testee.MonitorEvents();

            _testee.RemoveItem(item.ItemId);

            _testee
            .ShouldRaise("CurrentItemCountChangedEvent")
            .WithSender(_testee);
        }
Пример #28
0
        public void GivenItemInModule_WhenDetectedAgain_NothingHappens()
        {
            var item = new PlatformItem();

            ModuleA.Entities.PlatformItems.Add(item);
            ModuleA.MonitorEvents();

            // simulate a circulating buffer within ModuleA, where items detected multiple times
            ModuleA.SimulateItemDetected(item);
            ModuleA.SimulateItemDetected(item);

            ModuleA.Entities.PlatformItems.Count.Should().Be(1, "only one item is in ModuleA even if detected multiple times");
            ModuleA.ShouldNotRaise("CurrentItemCountChangedEvent");
        }
Пример #29
0
        private static void ReleaseLinks(PlatformItem item)
        {
            if (item.ItemBehind != null)
            {
                item.ItemBehind.ItemInFront = null;
                item.ItemBehind             = null;
            }

            if (item.ItemInFront != null)
            {
                item.ItemInFront.ItemBehind = null;
                item.ItemInFront            = null;
            }
        }
Пример #30
0
        public void GivenItemAlreadyCreated_WhenDetectedAgain_ShouldMoveShirt()
        {
            var item = new PlatformItem {
                ItemId = 1
            };

            ModuleA.SimulateNewItemCreated(item);

            ModuleB.SimulateItemDetected(new PlatformItem {
                ItemId = 1
            });

            ModuleA.Entities.PlatformItems.Should().HaveCount(0);
            ModuleB.ContainsItem(item.ItemId).Should().BeTrue();
            ModuleB.Entities.PlatformItems.First().Should().BeSameAs(item);
        }
Пример #31
0
        public void GivenItemWithRouteAndAlreadyCreated_WhenDetected_ShouldUpdateRoute()
        {
            var item = new PlatformItem {
                ItemId = 1
            };

            item.Route = CreateRoute();
            ModuleA.SimulateNewItemCreated(item);

            ModuleB.SimulateItemDetected(item);

            var route = ModuleB.Entities.PlatformItems.First().Route;

            route.Should().NotBeNull();
            route.CurrentIndex.Should().Be(1);
        }