From 2cd2f54b271aa93e09680c25c79a1c6ef8b46bc5 Mon Sep 17 00:00:00 2001 From: oblonski <4sschroeder@gmail.com> Date: Sat, 28 Jun 2014 23:22:32 +0200 Subject: [PATCH] added skills to jobs --- .../java/jsprit/core/problem/job/Service.java | 33 +++++++++++++++++++ .../jsprit/core/problem/job/Shipment.java | 20 +++++++++++ .../jsprit/core/problem/job/DeliveryTest.java | 18 ++++++++++ .../jsprit/core/problem/job/PickupTest.java | 18 ++++++++++ .../jsprit/core/problem/job/ServiceTest.java | 17 ++++++++++ .../jsprit/core/problem/job/ShipmentTest.java | 17 ++++++++++ 6 files changed, 123 insertions(+) diff --git a/jsprit-core/src/main/java/jsprit/core/problem/job/Service.java b/jsprit-core/src/main/java/jsprit/core/problem/job/Service.java index b8a21f8b..f4594ca5 100644 --- a/jsprit-core/src/main/java/jsprit/core/problem/job/Service.java +++ b/jsprit-core/src/main/java/jsprit/core/problem/job/Service.java @@ -16,6 +16,10 @@ ******************************************************************************/ package jsprit.core.problem.job; +import java.util.Collections; +import java.util.HashSet; +import java.util.Set; + import jsprit.core.problem.Capacity; import jsprit.core.problem.solution.route.activity.TimeWindow; import jsprit.core.util.Coordinate; @@ -67,6 +71,8 @@ public class Service implements Job { protected Capacity capacity; + protected Set skills = new HashSet(); + /** * Constructs the builder. * @@ -179,6 +185,11 @@ public class Service implements Job { capacity = capacityBuilder.build(); return new Service(this); } + + public Builder addSkill(String string) { + skills.add(string.toLowerCase()); + return this; + } } @@ -196,6 +207,8 @@ public class Service implements Job { private final TimeWindow timeWindow; private final Capacity size; + + private final Set skills; Service(Builder builder){ id = builder.id; @@ -205,6 +218,7 @@ public class Service implements Job { timeWindow = builder.timeWindow; type = builder.type; size = builder.capacity; + skills = builder.skills; } @Override @@ -299,5 +313,24 @@ public class Service implements Job { public Capacity getSize() { return size; } + + /** + * Returns set of required skills. All skills are in lower case. + * + * @return + */ + public Set getRequiredSkills() { + return Collections.unmodifiableSet(skills); + } + + /** + * Returns true if this contains requiredSkill. Not case sensitive. + * + * @param requiredSkill + * @return + */ + public boolean requiresSkill(String requiredSkill){ + return skills.contains(requiredSkill.toLowerCase()); + } } diff --git a/jsprit-core/src/main/java/jsprit/core/problem/job/Shipment.java b/jsprit-core/src/main/java/jsprit/core/problem/job/Shipment.java index 24617550..0c94f6e8 100644 --- a/jsprit-core/src/main/java/jsprit/core/problem/job/Shipment.java +++ b/jsprit-core/src/main/java/jsprit/core/problem/job/Shipment.java @@ -1,5 +1,9 @@ package jsprit.core.problem.job; +import java.util.Collections; +import java.util.HashSet; +import java.util.Set; + import jsprit.core.problem.Capacity; import jsprit.core.problem.solution.route.activity.TimeWindow; import jsprit.core.util.Coordinate; @@ -53,6 +57,8 @@ public class Shipment implements Job{ private Capacity capacity; + private Set skills = new HashSet(); + /** * Returns new instance of this builder. * @@ -230,6 +236,11 @@ public class Shipment implements Job{ return new Shipment(this); } + public Builder addSkill(String string) { + skills.add(string.toLowerCase()); + return this; + } + } @@ -252,6 +263,8 @@ public class Shipment implements Job{ private final TimeWindow pickupTimeWindow; private final Capacity capacity; + + private final Set skills; /** @@ -270,6 +283,7 @@ public class Shipment implements Job{ this.deliveryServiceTime = builder.deliveryServiceTime; this.deliveryTimeWindow = builder.deliveryTimeWindow; this.capacity = builder.capacity; + this.skills = builder.skills; } @Override @@ -386,5 +400,11 @@ public class Shipment implements Job{ return capacity; } + public Set getRequiredSkills() { + return Collections.unmodifiableSet(skills); + } + public boolean requiresSkill(String requiredSkill){ + return skills.contains(requiredSkill.toLowerCase()); + } } diff --git a/jsprit-core/src/test/java/jsprit/core/problem/job/DeliveryTest.java b/jsprit-core/src/test/java/jsprit/core/problem/job/DeliveryTest.java index 2b714a5a..6855e992 100644 --- a/jsprit-core/src/test/java/jsprit/core/problem/job/DeliveryTest.java +++ b/jsprit-core/src/test/java/jsprit/core/problem/job/DeliveryTest.java @@ -1,6 +1,7 @@ package jsprit.core.problem.job; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; import org.junit.Test; @@ -38,6 +39,23 @@ public class DeliveryTest { assertEquals(1,one.getSize().getNuOfDimensions()); assertEquals(1,one.getSize().get(0)); } + + @Test + public void whenAddingSkills_theyShouldBeAddedCorrectly(){ + Delivery s = (Delivery) Delivery.Builder.newInstance("s").setLocationId("loc") + .addSkill("drill").addSkill("screwdriver").build(); + assertTrue(s.getRequiredSkills().contains("drill")); + assertTrue(s.requiresSkill("drill")); + assertTrue(s.requiresSkill("ScrewDriver")); + } + + @Test + public void whenAddingSkillsCaseSens_theyShouldBeAddedCorrectly(){ + Delivery s = (Delivery) Delivery.Builder.newInstance("s").setLocationId("loc") + .addSkill("DriLl").addSkill("screwDriver").build(); + assertTrue(s.getRequiredSkills().contains("drill")); + assertTrue(s.requiresSkill("drilL")); + } } diff --git a/jsprit-core/src/test/java/jsprit/core/problem/job/PickupTest.java b/jsprit-core/src/test/java/jsprit/core/problem/job/PickupTest.java index 7d7cee9f..5987c4f1 100644 --- a/jsprit-core/src/test/java/jsprit/core/problem/job/PickupTest.java +++ b/jsprit-core/src/test/java/jsprit/core/problem/job/PickupTest.java @@ -1,6 +1,7 @@ package jsprit.core.problem.job; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; import org.junit.Test; @@ -38,6 +39,23 @@ public class PickupTest { assertEquals(1,one.getSize().getNuOfDimensions()); assertEquals(1,one.getSize().get(0)); } + + @Test + public void whenAddingSkills_theyShouldBeAddedCorrectly(){ + Pickup s = (Pickup) Pickup.Builder.newInstance("s").setLocationId("loc") + .addSkill("drill").addSkill("screwdriver").build(); + assertTrue(s.getRequiredSkills().contains("drill")); + assertTrue(s.requiresSkill("drill")); + assertTrue(s.requiresSkill("ScrewDriver")); + } + + @Test + public void whenAddingSkillsCaseSens_theyShouldBeAddedCorrectly(){ + Pickup s = (Pickup) Pickup.Builder.newInstance("s").setLocationId("loc") + .addSkill("DriLl").addSkill("screwDriver").build(); + assertTrue(s.getRequiredSkills().contains("drill")); + assertTrue(s.requiresSkill("drilL")); + } } diff --git a/jsprit-core/src/test/java/jsprit/core/problem/job/ServiceTest.java b/jsprit-core/src/test/java/jsprit/core/problem/job/ServiceTest.java index a556c7cc..b215408b 100644 --- a/jsprit-core/src/test/java/jsprit/core/problem/job/ServiceTest.java +++ b/jsprit-core/src/test/java/jsprit/core/problem/job/ServiceTest.java @@ -146,5 +146,22 @@ public class ServiceTest { assertEquals(1.0,s.getTimeWindow().getStart(),0.01); assertEquals(2.0,s.getTimeWindow().getEnd(),0.01); } + + @Test + public void whenAddingSkills_theyShouldBeAddedCorrectly(){ + Service s = Service.Builder.newInstance("s").setLocationId("loc") + .addSkill("drill").addSkill("screwdriver").build(); + assertTrue(s.getRequiredSkills().contains("drill")); + assertTrue(s.requiresSkill("drill")); + assertTrue(s.requiresSkill("ScrewDriver")); + } + + @Test + public void whenAddingSkillsCaseSens_theyShouldBeAddedCorrectly(){ + Service s = Service.Builder.newInstance("s").setLocationId("loc") + .addSkill("DriLl").addSkill("screwDriver").build(); + assertTrue(s.getRequiredSkills().contains("drill")); + assertTrue(s.requiresSkill("drilL")); + } } diff --git a/jsprit-core/src/test/java/jsprit/core/problem/job/ShipmentTest.java b/jsprit-core/src/test/java/jsprit/core/problem/job/ShipmentTest.java index a314775e..5aa3d039 100644 --- a/jsprit-core/src/test/java/jsprit/core/problem/job/ShipmentTest.java +++ b/jsprit-core/src/test/java/jsprit/core/problem/job/ShipmentTest.java @@ -231,4 +231,21 @@ public class ShipmentTest { assertEquals(1,one.getSize().getNuOfDimensions()); assertEquals(1,one.getSize().get(0)); } + + @Test + public void whenAddingSkills_theyShouldBeAddedCorrectly(){ + Shipment s = Shipment.Builder.newInstance("s").setPickupLocation("loc").setDeliveryLocation("delLoc") + .addSkill("drill").addSkill("screwdriver").build(); + assertTrue(s.getRequiredSkills().contains("drill")); + assertTrue(s.requiresSkill("drill")); + assertTrue(s.requiresSkill("ScrewDriver")); + } + + @Test + public void whenAddingSkillsCaseSens_theyShouldBeAddedCorrectly(){ + Delivery s = (Delivery) Delivery.Builder.newInstance("s").setLocationId("loc") + .addSkill("DriLl").addSkill("screwDriver").build(); + assertTrue(s.getRequiredSkills().contains("drill")); + assertTrue(s.requiresSkill("drilL")); + } }