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);
+ }
+ }
+}