public void Run(WarehouseDataProcessingContext context) { var result = context .WarehouseData .Materials .Select(x => x.WarehouseInformation .Select(warehouse => (warehouse.WarehouseName, x.MaterialId, Quantity: warehouse.MaterialQuantity))) .SelectMany(x => x) .GroupBy(x => x.WarehouseName, (warehouseName, materials) => new { Key = warehouseName, Material = materials, }) .Select(r => new WarehouseMaterialAvailability() { WarehouseName = r.Key, Materials = r.Material .Select(m => new MaterialAvailability { MaterialId = m.MaterialId, MaterialQuantity = m.Quantity }).ToList() }).ToList(); context.WarehousesMaterialAvailability = result; }
private static void SetupWarehouseChainOfResponsibilities() { var input = Resources.Data; _context = new WarehouseDataProcessingContext(new StringReader(input)); _warehouseHandler = new WarehouseHandler( new InputReaderHandler(), new WarehouseEngineHandler(), new OutputGenerationHandler()); }
public void Run(WarehouseDataProcessingContext context) { var line = string.Empty; while (line != null) { try { line = context.InputData.ReadLine(); if (string.IsNullOrEmpty(line) || line.StartsWith("#")) { continue; } var parts = line.Split(';'); var materialName = parts[0].Trim(); var materialId = parts[1].Trim(); var storageInformation = parts[2].Trim().Split('|'); var warehouses = new List <Warehouse>(); foreach (var warehouseInfo in storageInformation) { var singleWarehouse = warehouseInfo.Split(','); var warehouseName = singleWarehouse[0].Trim(); var quantity = int.Parse(singleWarehouse[1].Trim()); warehouses.Add(new Warehouse { WarehouseName = warehouseName, MaterialQuantity = quantity }); } context.WarehouseData.Materials.Add(new MaterialInfo { MaterialId = materialId, MaterialName = materialName, WarehouseInformation = warehouses }); } catch (Exception e) { Console.WriteLine(Resources.InputReaderProcessor_Run_Invalid_line_detected_); continue; } } }
public void Handle(WarehouseDataProcessingContext context) { try { foreach (var warehouseHandler in _handlers) { warehouseHandler.Handle(context); } } catch (Exception e) { Console.WriteLine(e.Message); throw; } }
public void Run(WarehouseDataProcessingContext context) { var result = new StringBuilder(); context.WarehousesMaterialAvailability.ForEach(x => { result.AppendLine($"{x.WarehouseName} (total {x.TotalMaterials}) "); x.Materials.ToList().ForEach(material => { result.AppendLine($"{material.MaterialId}: {material.MaterialQuantity}"); }); result.AppendLine(); }); context.OutputData = result.ToString(); }