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); }
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"); }
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); } }
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"); }
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); } }
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"); }
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)); }
private void RecalculateRoute(PlatformItem item, IPlatformModule module) { if (!RouteCalculator.CalculateSingleItemRouting(item, module)) { module.RemoveItemRouting(item); } }
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); }
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)); }
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(); }
public virtual void AddItemRouting(PlatformItem item, int outputPortIndex) { if (!ItemRoutings.ContainsKey(item)) { ItemRoutings.Add(item, outputPortIndex); } }
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); }
public void SimulateNewItemCreated(PlatformItem item) { EventAggregator.Publish(new PlatformItemEvent(item.ItemId, this, PlatformItemEventType.NewItemCreated) { NewItem = item }); }
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; }
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"); }
/// <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; }
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"); }
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"); }
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"); }
public virtual void RemoveItemRouting(PlatformItem item) { if (item == null) { Logger.Warn("RemoveItemRouting: item is null"); } else if (ItemRoutings.ContainsKey(item)) { ItemRoutings.Remove(item); } }
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()); } } }
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); } } }
public void WhenRemoveItem_MustRaiseEvent() { var item = new PlatformItem(); _testee.AddItem(item); _testee.MonitorEvents(); _testee.RemoveItem(item.ItemId); _testee .ShouldRaise("CurrentItemCountChangedEvent") .WithSender(_testee); }
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"); }
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; } }
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); }
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); }