diff --git a/jsprit-core/src/main/java/com/graphhopper/jsprit/core/problem/job/Service.java b/jsprit-core/src/main/java/com/graphhopper/jsprit/core/problem/job/Service.java index 50805639..88d7bb33 100644 --- a/jsprit-core/src/main/java/com/graphhopper/jsprit/core/problem/job/Service.java +++ b/jsprit-core/src/main/java/com/graphhopper/jsprit/core/problem/job/Service.java @@ -39,7 +39,6 @@ import java.util.Collection; */ public class Service extends AbstractJob { - /** * Builder that builds a service. * @@ -48,6 +47,8 @@ public class Service extends AbstractJob { public static class Builder { + + /** * Returns a new instance of builder that builds a service. * @@ -86,6 +87,8 @@ public class Service extends AbstractJob { private boolean twAdded = false; + private int priority = 2; + Builder(String id){ this.id = id; timeWindows = new TimeWindowsImpl(); @@ -206,6 +209,20 @@ public class Service extends AbstractJob { } return this; } + + /** + * Set priority to service. Only 1 = high priority, 2 = medium and 3 = low are allowed. + *

+ * Default is 2 = medium. + * + * @param priority + * @return builder + */ + public Builder setPriority(int priority) { + if(priority < 1 || priority > 3) throw new IllegalStateException("incorrect priority. only 1 = high, 2 = medium and 3 = low is allowed"); + this.priority = priority; + return this; + } } private final String id; @@ -226,6 +243,8 @@ public class Service extends AbstractJob { private final TimeWindows timeWindowManager; + private final int priority; + Service(Builder builder) { id = builder.id; serviceTime = builder.serviceTime; @@ -236,6 +255,7 @@ public class Service extends AbstractJob { name = builder.name; location = builder.location; timeWindowManager = builder.timeWindows; + priority = builder.priority; } public Collection getTimeWindows(){ @@ -338,4 +358,15 @@ public class Service extends AbstractJob { return name; } + /** + * Get priority of service. Only 1 = high priority, 2 = medium and 3 = low are allowed. + *

+ * Default is 2 = medium. + * + * @return priority + */ + public int getPriority() { + return priority; + } + } diff --git a/jsprit-core/src/main/java/com/graphhopper/jsprit/core/problem/job/Shipment.java b/jsprit-core/src/main/java/com/graphhopper/jsprit/core/problem/job/Shipment.java index 51b37cc7..6e862af9 100644 --- a/jsprit-core/src/main/java/com/graphhopper/jsprit/core/problem/job/Shipment.java +++ b/jsprit-core/src/main/java/com/graphhopper/jsprit/core/problem/job/Shipment.java @@ -46,6 +46,7 @@ public class Shipment extends AbstractJob { + /** * Builder that builds the shipment. * @@ -85,6 +86,8 @@ public class Shipment extends AbstractJob { private TimeWindowsImpl pickupTimeWindows; + private int priority = 2; + /** * Returns new instance of this builder. * @@ -263,6 +266,20 @@ public class Shipment extends AbstractJob { public Builder addPickupTimeWindow(double earliest, double latest) { return addPickupTimeWindow(TimeWindow.newInstance(earliest, latest)); } + + /** + * Set priority to shipment. Only 1 = high priority, 2 = medium and 3 = low are allowed. + *

+ * Default is 2 = medium. + * + * @param priority + * @return builder + */ + public Builder setPriority(int priority) { + if(priority < 1 || priority > 3) throw new IllegalStateException("incorrect priority. only 1 = high, 2 = medium and 3 = low is allowed"); + this.priority = priority; + return this; + } } private final String id; @@ -289,6 +306,8 @@ public class Shipment extends AbstractJob { private final TimeWindowsImpl pickupTimeWindows; + private final int priority; + Shipment(Builder builder) { this.id = builder.id; this.pickupServiceTime = builder.pickupServiceTime; @@ -302,6 +321,7 @@ public class Shipment extends AbstractJob { this.deliveryLocation_ = builder.deliveryLocation_; this.deliveryTimeWindows = builder.deliveryTimeWindows; this.pickupTimeWindows = builder.pickupTimeWindows; + this.priority = builder.priority; } @Override @@ -409,5 +429,14 @@ public class Shipment extends AbstractJob { return name; } - + /** + * Get priority of shipment. Only 1 = high priority, 2 = medium and 3 = low are allowed. + *

+ * Default is 2 = medium. + * + * @return priority + */ + public int getPriority() { + return priority; + } } diff --git a/jsprit-core/src/test/java/com/graphhopper/jsprit/core/problem/job/DeliveryTest.java b/jsprit-core/src/test/java/com/graphhopper/jsprit/core/problem/job/DeliveryTest.java index 1628235e..304ee13c 100644 --- a/jsprit-core/src/test/java/com/graphhopper/jsprit/core/problem/job/DeliveryTest.java +++ b/jsprit-core/src/test/java/com/graphhopper/jsprit/core/problem/job/DeliveryTest.java @@ -17,6 +17,7 @@ package com.graphhopper.jsprit.core.problem.job; import com.graphhopper.jsprit.core.problem.Location; +import org.junit.Assert; import org.junit.Test; import static org.junit.Assert.*; @@ -30,7 +31,7 @@ public class DeliveryTest { @Test public void whenAddingTwoCapDimension_nuOfDimsShouldBeTwo() { - Delivery one = (Delivery) Delivery.Builder.newInstance("s").setLocation(Location.newInstance("foofoo")) + Delivery one = Delivery.Builder.newInstance("s").setLocation(Location.newInstance("foofoo")) .addSizeDimension(0, 2) .addSizeDimension(1, 4) .build(); @@ -42,7 +43,7 @@ public class DeliveryTest { @Test public void whenPickupIsBuiltWithoutSpecifyingCapacity_itShouldHvCapWithOneDimAndDimValOfZero() { - Delivery one = (Delivery) Delivery.Builder.newInstance("s").setLocation(Location.newInstance("foofoo")) + Delivery one = Delivery.Builder.newInstance("s").setLocation(Location.newInstance("foofoo")) .build(); assertEquals(1, one.getSize().getNuOfDimensions()); assertEquals(0, one.getSize().get(0)); @@ -50,7 +51,7 @@ public class DeliveryTest { @Test public void whenPickupIsBuiltWithConstructorWhereSizeIsSpecified_capacityShouldBeSetCorrectly() { - Delivery one = (Delivery) Delivery.Builder.newInstance("s").addSizeDimension(0, 1).setLocation(Location.newInstance("foofoo")) + Delivery one = Delivery.Builder.newInstance("s").addSizeDimension(0, 1).setLocation(Location.newInstance("foofoo")) .build(); assertEquals(1, one.getSize().getNuOfDimensions()); assertEquals(1, one.getSize().get(0)); @@ -58,7 +59,7 @@ public class DeliveryTest { @Test public void whenAddingSkills_theyShouldBeAddedCorrectly() { - Delivery s = (Delivery) Delivery.Builder.newInstance("s").setLocation(Location.newInstance("loc")) + Delivery s = Delivery.Builder.newInstance("s").setLocation(Location.newInstance("loc")) .addRequiredSkill("drill").addRequiredSkill("screwdriver").build(); assertTrue(s.getRequiredSkills().containsSkill("drill")); assertTrue(s.getRequiredSkills().containsSkill("ScrewDriver")); @@ -66,7 +67,7 @@ public class DeliveryTest { @Test public void whenAddingSkillsCaseSens_theyShouldBeAddedCorrectly() { - Delivery s = (Delivery) Delivery.Builder.newInstance("s").setLocation(Location.newInstance("loc")) + Delivery s = Delivery.Builder.newInstance("s").setLocation(Location.newInstance("loc")) .addRequiredSkill("DriLl").addRequiredSkill("screwDriver").build(); assertTrue(s.getRequiredSkills().containsSkill("drill")); assertTrue(s.getRequiredSkills().containsSkill("drilL")); @@ -74,7 +75,7 @@ public class DeliveryTest { @Test public void whenAddingSkillsCaseSensV2_theyShouldBeAddedCorrectly() { - Delivery s = (Delivery) Delivery.Builder.newInstance("s").setLocation(Location.newInstance("loc")) + Delivery s = Delivery.Builder.newInstance("s").setLocation(Location.newInstance("loc")) .addRequiredSkill("screwDriver").build(); assertFalse(s.getRequiredSkills().containsSkill("drill")); assertFalse(s.getRequiredSkills().containsSkill("drilL")); @@ -82,10 +83,24 @@ public class DeliveryTest { @Test public void nameShouldBeAssigned() { - Delivery s = (Delivery) Delivery.Builder.newInstance("s").setLocation(Location.newInstance("loc")) + Delivery s = Delivery.Builder.newInstance("s").setLocation(Location.newInstance("loc")) .setName("name").build(); assertEquals("name", s.getName()); } + @Test + public void whenSettingPriorities_itShouldBeSetCorrectly(){ + Delivery s = Delivery.Builder.newInstance("s").setLocation(Location.newInstance("loc")) + .setPriority(3).build(); + Assert.assertEquals(3, s.getPriority()); + } + + @Test + public void whenNotSettingPriorities_defaultShouldBe(){ + Delivery s = Delivery.Builder.newInstance("s").setLocation(Location.newInstance("loc")) + .build(); + Assert.assertEquals(2, s.getPriority()); + } + } diff --git a/jsprit-core/src/test/java/com/graphhopper/jsprit/core/problem/job/PickupTest.java b/jsprit-core/src/test/java/com/graphhopper/jsprit/core/problem/job/PickupTest.java index 97211973..9482722f 100644 --- a/jsprit-core/src/test/java/com/graphhopper/jsprit/core/problem/job/PickupTest.java +++ b/jsprit-core/src/test/java/com/graphhopper/jsprit/core/problem/job/PickupTest.java @@ -17,6 +17,7 @@ package com.graphhopper.jsprit.core.problem.job; import com.graphhopper.jsprit.core.problem.Location; +import org.junit.Assert; import org.junit.Test; import static org.junit.Assert.*; @@ -30,7 +31,7 @@ public class PickupTest { @Test public void whenAddingTwoCapDimension_nuOfDimsShouldBeTwo() { - Pickup one = (Pickup) Pickup.Builder.newInstance("s").setLocation(Location.newInstance("foofoo")) + Pickup one = Pickup.Builder.newInstance("s").setLocation(Location.newInstance("foofoo")) .addSizeDimension(0, 2) .addSizeDimension(1, 4) .build(); @@ -42,7 +43,7 @@ public class PickupTest { @Test public void whenPickupIsBuiltWithoutSpecifyingCapacity_itShouldHvCapWithOneDimAndDimValOfZero() { - Pickup one = (Pickup) Pickup.Builder.newInstance("s").setLocation(Location.newInstance("foofoo")) + Pickup one = Pickup.Builder.newInstance("s").setLocation(Location.newInstance("foofoo")) .build(); assertEquals(1, one.getSize().getNuOfDimensions()); assertEquals(0, one.getSize().get(0)); @@ -50,7 +51,7 @@ public class PickupTest { @Test public void whenPickupIsBuiltWithConstructorWhereSizeIsSpecified_capacityShouldBeSetCorrectly() { - Pickup one = (Pickup) Pickup.Builder.newInstance("s").addSizeDimension(0, 1).setLocation(Location.newInstance("foofoo")) + Pickup one = Pickup.Builder.newInstance("s").addSizeDimension(0, 1).setLocation(Location.newInstance("foofoo")) .build(); assertEquals(1, one.getSize().getNuOfDimensions()); assertEquals(1, one.getSize().get(0)); @@ -58,7 +59,7 @@ public class PickupTest { @Test public void whenAddingSkills_theyShouldBeAddedCorrectly() { - Pickup s = (Pickup) Pickup.Builder.newInstance("s").setLocation(Location.newInstance("loc")) + Pickup s = Pickup.Builder.newInstance("s").setLocation(Location.newInstance("loc")) .addRequiredSkill("drill").addRequiredSkill("screwdriver").build(); assertTrue(s.getRequiredSkills().containsSkill("drill")); assertTrue(s.getRequiredSkills().containsSkill("drill")); @@ -67,7 +68,7 @@ public class PickupTest { @Test public void whenAddingSkillsCaseSens_theyShouldBeAddedCorrectly() { - Pickup s = (Pickup) Pickup.Builder.newInstance("s").setLocation(Location.newInstance("loc")) + Pickup s = Pickup.Builder.newInstance("s").setLocation(Location.newInstance("loc")) .addRequiredSkill("DriLl").addRequiredSkill("screwDriver").build(); assertTrue(s.getRequiredSkills().containsSkill("drill")); assertTrue(s.getRequiredSkills().containsSkill("drilL")); @@ -75,7 +76,7 @@ public class PickupTest { @Test public void whenAddingSkillsCaseSensV2_theyShouldBeAddedCorrectly() { - Pickup s = (Pickup) Pickup.Builder.newInstance("s").setLocation(Location.newInstance("loc")) + Pickup s = Pickup.Builder.newInstance("s").setLocation(Location.newInstance("loc")) .addRequiredSkill("screwDriver").build(); assertFalse(s.getRequiredSkills().containsSkill("drill")); assertFalse(s.getRequiredSkills().containsSkill("drilL")); @@ -83,10 +84,24 @@ public class PickupTest { @Test public void nameShouldBeAssigned() { - Pickup s = (Pickup) Pickup.Builder.newInstance("s").setLocation(Location.newInstance("loc")) + Pickup s = Pickup.Builder.newInstance("s").setLocation(Location.newInstance("loc")) .setName("name").build(); assertEquals("name", s.getName()); } + @Test + public void whenSettingPriorities_itShouldBeSetCorrectly(){ + Pickup s = Pickup.Builder.newInstance("s").setLocation(Location.newInstance("loc")) + .setPriority(3).build(); + Assert.assertEquals(3, s.getPriority()); + } + + @Test + public void whenNotSettingPriorities_defaultShouldBe(){ + Pickup s = Pickup.Builder.newInstance("s").setLocation(Location.newInstance("loc")) + .build(); + Assert.assertEquals(2, s.getPriority()); + } + } diff --git a/jsprit-core/src/test/java/com/graphhopper/jsprit/core/problem/job/ServiceTest.java b/jsprit-core/src/test/java/com/graphhopper/jsprit/core/problem/job/ServiceTest.java index da5ac763..8ed72c02 100644 --- a/jsprit-core/src/test/java/com/graphhopper/jsprit/core/problem/job/ServiceTest.java +++ b/jsprit-core/src/test/java/com/graphhopper/jsprit/core/problem/job/ServiceTest.java @@ -18,6 +18,7 @@ package com.graphhopper.jsprit.core.problem.job; import com.graphhopper.jsprit.core.problem.Location; import com.graphhopper.jsprit.core.problem.solution.route.activity.TimeWindow; +import org.junit.Assert; import org.junit.Test; import java.util.HashSet; @@ -234,4 +235,39 @@ public class ServiceTest { .setName("name").build(); } + @Test + public void whenSettingPriorities_itShouldBeSetCorrectly(){ + Service s = Service.Builder.newInstance("s").setLocation(Location.newInstance("loc")) + .setPriority(1).build(); + Assert.assertEquals(1, s.getPriority()); + } + + @Test + public void whenSettingPriorities_itShouldBeSetCorrectly2(){ + Service s = Service.Builder.newInstance("s").setLocation(Location.newInstance("loc")) + .setPriority(3).build(); + Assert.assertEquals(3, s.getPriority()); + } + + @Test + public void whenNotSettingPriorities_defaultShouldBe2(){ + Service s = Service.Builder.newInstance("s").setLocation(Location.newInstance("loc")) + .build(); + Assert.assertEquals(2, s.getPriority()); + } + + @Test(expected = IllegalStateException.class) + public void whenSettingIncorrectPriorities_itShouldThrowException(){ + Service s = Service.Builder.newInstance("s").setLocation(Location.newInstance("loc")) + .setPriority(30).build(); + + } + + @Test(expected = IllegalStateException.class) + public void whenSettingIncorrectPriorities_itShouldThrowException2(){ + Service s = Service.Builder.newInstance("s").setLocation(Location.newInstance("loc")) + .setPriority(0).build(); + + } + } diff --git a/jsprit-core/src/test/java/com/graphhopper/jsprit/core/problem/job/ShipmentTest.java b/jsprit-core/src/test/java/com/graphhopper/jsprit/core/problem/job/ShipmentTest.java index 205c6e7b..814f271f 100644 --- a/jsprit-core/src/test/java/com/graphhopper/jsprit/core/problem/job/ShipmentTest.java +++ b/jsprit-core/src/test/java/com/graphhopper/jsprit/core/problem/job/ShipmentTest.java @@ -20,6 +20,7 @@ import com.graphhopper.jsprit.core.problem.Location; import com.graphhopper.jsprit.core.problem.solution.route.activity.TimeWindow; import com.graphhopper.jsprit.core.util.Coordinate; import com.graphhopper.jsprit.core.util.TestUtils; +import org.junit.Assert; import org.junit.Test; import static org.hamcrest.core.Is.is; @@ -382,4 +383,45 @@ public class ShipmentTest { assertEquals("del", s.getDeliveryLocation().getId()); assertEquals("del", s.getDeliveryLocation().getId()); } + + @Test + public void whenSettingPriorities_itShouldBeSetCorrectly(){ + Shipment s = Shipment.Builder.newInstance("s").setPickupLocation(Location.newInstance("loc")) + .setDeliveryLocation(Location.newInstance("loc")) + .setPriority(1).build(); + Assert.assertEquals(1, s.getPriority()); + } + + @Test + public void whenSettingPriorities_itShouldBeSetCorrectly2(){ + Shipment s = Shipment.Builder.newInstance("s").setPickupLocation(Location.newInstance("loc")) + .setDeliveryLocation(Location.newInstance("loc")) + .setPriority(3).build(); + Assert.assertEquals(3, s.getPriority()); + } + + @Test + public void whenNotSettingPriorities_defaultShouldBe2(){ + Shipment s = Shipment.Builder.newInstance("s").setPickupLocation(Location.newInstance("loc")) + .setDeliveryLocation(Location.newInstance("loc")) + .build(); + Assert.assertEquals(2, s.getPriority()); + } + + @Test(expected = IllegalStateException.class) + public void whenSettingIncorrectPriorities_itShouldThrowException(){ + Shipment s = Shipment.Builder.newInstance("s").setPickupLocation(Location.newInstance("loc")) + .setDeliveryLocation(Location.newInstance("loc")) + .setPriority(30).build(); + + } + + @Test(expected = IllegalStateException.class) + public void whenSettingIncorrectPriorities_itShouldThrowException2(){ + Shipment s = Shipment.Builder.newInstance("s").setPickupLocation(Location.newInstance("loc")) + .setDeliveryLocation(Location.newInstance("loc")) + .setPriority(0).build(); + + } + }