Esempio n. 1
0
        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;
                }
            }
        }
Esempio n. 4
0
 public void Handle(WarehouseDataProcessingContext context)
 {
     try
     {
         foreach (var warehouseHandler in _handlers)
         {
             warehouseHandler.Handle(context);
         }
     }
     catch (Exception e)
     {
         Console.WriteLine(e.Message);
         throw;
     }
 }
Esempio n. 5
0
        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();
        }