private IManagementRequirement InstantiateManagementRequirement(string[] parameters) { string type = parameters[2]; string garbageTypeName = type + "Garbage"; Type garbageType = Assembly.GetExecutingAssembly().DefinedTypes.FirstOrDefault(x => x.Name == garbageTypeName); double minEnergyBalance = double.Parse(parameters[0]); double minCapitalBalance = double.Parse(parameters[1]); IManagementRequirement requirement = new ManagementRequirement(minEnergyBalance, minCapitalBalance, garbageType); return(requirement); }
private IManagementRequirement InstantiateNewManagementRequiremenet(string[] parameters) { var type = parameters[2]; var garbageTypeName = type + "Garbage"; Type garbageType = Assembly.GetExecutingAssembly().GetTypes().FirstOrDefault(t => t.Name == garbageTypeName); var minEnergy = double.Parse(parameters[0]); var minCapital = double.Parse(parameters[1]); var requirement = new ManagementRequirement(garbageType, minCapital, minEnergy); return(requirement); }
public string ChangeManagementRequirement(params string[] argsStrings) { //ChangeManagementRequirement {energyBalance}|{capitalBalance}|{garbageType} var energyBalance = double.Parse(argsStrings[0]); var capitalBalance = double.Parse(argsStrings[1]); var typeString = argsStrings[2]; var wasteType = GetWasteType(typeString); var newManagementRequirement = new ManagementRequirement(energyBalance, capitalBalance, wasteType); this.managementRequirement = newManagementRequirement; return($"Management requirement changed!"); }
private static void Main(string[] args) { double energy = 0; double capital = 0; ManagementRequirement managementRequierement = null; var input = Console.ReadLine(); while (input != "TimeToRecycle") { if (input == "Status") { Console.WriteLine("Energy: {0:0.00} Capital: {1:0.00}", energy, capital); } else { var commandArgs = input?.Split(' ', '|'); if (commandArgs?[0] == "ProcessGarbage") { var strategyHolder = new StrategyHolder(); strategyHolder.AddStrategy(typeof(RecyclableAttribute), new RecyclableGarbageDsiposalStrategy()); strategyHolder.AddStrategy(typeof(BurnableAttribute), new BurnableGarbageDisposalStrategy()); strategyHolder.AddStrategy(typeof(StorableAttribute), new StorableGarbageDisposalStrategy()); var garbageProcessor = new GarbageProcessor(strategyHolder); var name = commandArgs[1]; var weight = Convert.ToDouble(commandArgs[2]); var volumePerKg = Convert.ToDouble(commandArgs[3]); var type = commandArgs[4]; IWaste garbage = null; switch (type) { case "Recyclable": garbage = new RecyclableGarbage(name, volumePerKg, weight); break; case "Burnable": garbage = new BurnableGarbage(name, volumePerKg, weight); break; case "Storable": garbage = new StorableGarbage(name, volumePerKg, weight); break; default: throw new ArgumentException(); } if (managementRequierement != null && (managementRequierement.CapitalBalance > capital || managementRequierement.EnergyBalance > energy)) { Type attrType = Type.GetType("RecyclingStation.WasteDisposal.Attributes." + managementRequierement.GarbageType + "Attribute"); strategyHolder.RemoveStrategy(attrType); } var data = garbageProcessor.ProcessWaste(garbage); if (data != null) { energy += data.EnergyBalance; capital += data.CapitalBalance; Console.WriteLine("{0:0.00} kg of {1} successfully processed!", weight, name); } else { Console.WriteLine("Processing Denied!"); } } else if (commandArgs?[0] == "ChangeManagementRequirement") { var energyBalance = Convert.ToDouble(commandArgs[1]); var capitalBalance = Convert.ToDouble(commandArgs[2]); var garbageType = commandArgs[3]; managementRequierement = new ManagementRequirement(energyBalance, capitalBalance, garbageType); Console.WriteLine("Management requirement changed!"); } } input = Console.ReadLine(); } }