diff --git a/Trunk/Components/CzokoŚmieciarka.DataModels/CzokoŚmieciarka.DataModels.csproj b/Trunk/Components/CzokoŚmieciarka.DataModels/CzokoŚmieciarka.DataModels.csproj index edceb74..f746f4d 100644 --- a/Trunk/Components/CzokoŚmieciarka.DataModels/CzokoŚmieciarka.DataModels.csproj +++ b/Trunk/Components/CzokoŚmieciarka.DataModels/CzokoŚmieciarka.DataModels.csproj @@ -41,6 +41,7 @@ + @@ -52,11 +53,12 @@ - + + diff --git a/Trunk/Components/CzokoŚmieciarka.DataModels/Exceptions.cs b/Trunk/Components/CzokoŚmieciarka.DataModels/Exceptions.cs new file mode 100644 index 0000000..fb15cd3 --- /dev/null +++ b/Trunk/Components/CzokoŚmieciarka.DataModels/Exceptions.cs @@ -0,0 +1,29 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CzokoŚmieciarka.DataModels +{ + public class WrongPositionException : Exception + { + public WrongPositionException(string message) : base(message) + { + } + public WrongPositionException(string message,Exception innerException) : base(message,innerException) + { + } + } + + public class TrashContainerNotFound : Exception + { + public TrashContainerNotFound(string message) : base(message) + { + } + public TrashContainerNotFound(string message, Exception innerException) : base(message, innerException) + { + } + } + +} diff --git a/Trunk/Components/CzokoŚmieciarka.DataModels/Interfaces/IStep.cs b/Trunk/Components/CzokoŚmieciarka.DataModels/Interfaces/IStep.cs new file mode 100644 index 0000000..fa8c4ad --- /dev/null +++ b/Trunk/Components/CzokoŚmieciarka.DataModels/Interfaces/IStep.cs @@ -0,0 +1,7 @@ +namespace CzokoŚmieciarka.DataModels.Interfaces +{ + public interface IStep + { + void Invoke(); + } +} diff --git a/Trunk/Components/CzokoŚmieciarka.DataModels/Interfaces/TrashCans/ADump.cs b/Trunk/Components/CzokoŚmieciarka.DataModels/Interfaces/TrashCans/ADump.cs index 429f5be..d471b14 100644 --- a/Trunk/Components/CzokoŚmieciarka.DataModels/Interfaces/TrashCans/ADump.cs +++ b/Trunk/Components/CzokoŚmieciarka.DataModels/Interfaces/TrashCans/ADump.cs @@ -15,6 +15,6 @@ namespace CzokoŚmieciarka.DataModels.Interfaces this.Localization = localization; } - Coords Localization { get; } + public Coords Localization { get; } } } diff --git a/Trunk/Components/CzokoŚmieciarka.DataModels/Interfaces/TrashCans/ATrashCan.cs b/Trunk/Components/CzokoŚmieciarka.DataModels/Interfaces/TrashCans/ATrashCan.cs index cba1124..5859ad4 100644 --- a/Trunk/Components/CzokoŚmieciarka.DataModels/Interfaces/TrashCans/ATrashCan.cs +++ b/Trunk/Components/CzokoŚmieciarka.DataModels/Interfaces/TrashCans/ATrashCan.cs @@ -21,7 +21,7 @@ namespace CzokoŚmieciarka.DataModels.Interfaces.TrashCans get { return Garbage.Volume / this.MaxVolume; } } - public virtual bool AddGarbage(AGarbage garbage) + public virtual bool AddGarbage(IGarbage garbage) { if (this.TypeOfGarbage != garbage.TypeOfGarbage) throw new Exception("You cannot add up different type garbage!"); diff --git a/Trunk/Components/CzokoŚmieciarka.DataModels/Interfaces/TrashCans/IStep.cs b/Trunk/Components/CzokoŚmieciarka.DataModels/Interfaces/TrashCans/IStep.cs deleted file mode 100644 index 4af9bc1..0000000 --- a/Trunk/Components/CzokoŚmieciarka.DataModels/Interfaces/TrashCans/IStep.cs +++ /dev/null @@ -1,13 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace CzokoŚmieciarka.DataModels.Interfaces.TrashCans -{ - public interface IStep - { - void Invoke(); - } -} diff --git a/Trunk/Components/CzokoŚmieciarka.DataModels/Models/Steps/CollectStep.cs b/Trunk/Components/CzokoŚmieciarka.DataModels/Models/Steps/CollectStep.cs index cf96da6..f0b1791 100644 --- a/Trunk/Components/CzokoŚmieciarka.DataModels/Models/Steps/CollectStep.cs +++ b/Trunk/Components/CzokoŚmieciarka.DataModels/Models/Steps/CollectStep.cs @@ -24,15 +24,15 @@ namespace CzokoŚmieciarka.DataModels.Models.Steps public void Invoke() { if(_garbageCollector.Position != _garbageLocalization.Coords) - throw new Exception("Śmieciarka nie jest w miejscu odebrania śmieci"); + throw new WrongPositionException("Śmieciarka nie jest w miejscu oderbania śmieci"); var trashCans = _garbageLocalization.TrashCans.Where(t => t.TypeOfGarbage == _typeOfGarbage); var garbage = trashCans.Select(t => t.TakeGarbage()).Aggregate((a,b)=>a+b); - if (!_garbageCollector.TrashContainers.Any(c => c.TypeOfGarbage == _typeOfGarbage)) - throw new Exception("Ta śmieciarka nie może zebrać żądanych śmieci."); + if (_garbageCollector.TrashContainers.All(c => c.TypeOfGarbage != _typeOfGarbage)) + throw new TrashContainerNotFound($"Nie znaleziono kontenera na {_typeOfGarbage.GarbageType}."); - _garbageCollector.TrashContainers.FirstOrDefault(t => t.TypeOfGarbage == _typeOfGarbage).AddGarbage(garbage); + _garbageCollector.TrashContainers.First(t => t.TypeOfGarbage == _typeOfGarbage).AddGarbage(garbage); } } } diff --git a/Trunk/Components/CzokoŚmieciarka.DataModels/Models/Steps/SpillStep.cs b/Trunk/Components/CzokoŚmieciarka.DataModels/Models/Steps/SpillStep.cs new file mode 100644 index 0000000..0cb7891 --- /dev/null +++ b/Trunk/Components/CzokoŚmieciarka.DataModels/Models/Steps/SpillStep.cs @@ -0,0 +1,41 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using CzokoŚmieciarka.DataModels.Interfaces; + +namespace CzokoŚmieciarka.DataModels.Models.Steps +{ + public class SpillStep : IStep + { + public SpillStep(IGarbageCollector garbageCollector, ADump dump, ITypeOfGarbage typeOfGarbage) + { + this._garbageCollector = garbageCollector; + this._dump = dump; + this._typeOfGarbage = typeOfGarbage; + } + + private IGarbageCollector _garbageCollector; + private ADump _dump; + private ITypeOfGarbage _typeOfGarbage; + + public void Invoke() + { + if(_garbageCollector.Position != _dump.Localization) + throw new WrongPositionException("Śmieciarka nie na terenie podanego wyspiska"); + + if(_dump.TypeOfGarbage != _typeOfGarbage) + throw new TrashContainerNotFound($"Wysypisko nie przyjmuje smieci typu {_typeOfGarbage.GarbageType}"); + + if(_garbageCollector.TrashContainers.All(c => c.TypeOfGarbage != _typeOfGarbage)) + throw new TrashContainerNotFound($"Smieciarka nie ma pojemnika na {_typeOfGarbage.GarbageType}!"); + + var garbage = _garbageCollector.TrashContainers.Where(t => t.TypeOfGarbage == _typeOfGarbage) + .Select(t => t.TakeGarbage()) + .Aggregate((a, b) => a + b); + + _dump.AddGarbage(garbage); + } + } +}