diff --git a/be-graphes-algos/src/main/java/org/insa/graphs/algorithm/ArcInspectorFactory.java b/be-graphes-algos/src/main/java/org/insa/graphs/algorithm/ArcInspectorFactory.java index 45c1a75..7bf06da 100644 --- a/be-graphes-algos/src/main/java/org/insa/graphs/algorithm/ArcInspectorFactory.java +++ b/be-graphes-algos/src/main/java/org/insa/graphs/algorithm/ArcInspectorFactory.java @@ -110,6 +110,70 @@ public class ArcInspectorFactory { } }; + private static class BicyleByTime implements ArcInspector { + static int maxBicycleSpeed = 20; + + @Override + public boolean isAllowed(Arc arc) { + return arc.getRoadInformation().getAccessRestrictions().isAllowedForAny( + AccessMode.BICYCLE, + EnumSet.complementOf(EnumSet.of(AccessRestriction.FORBIDDEN, + AccessRestriction.PRIVATE))); + } + + @Override + public double getCost(Arc arc) { + return arc.getTravelTime(Math.min(maxBicycleSpeed, arc.getRoadInformation().getMaximumSpeed())); + } + + @Override + public int getMaximumSpeed() { + return 20; + } + + @Override + public Mode getMode() { + return Mode.TIME; + } + + @Override + public String toString() { + return "Le plus rapide, chemin accessible en vélo uniquement"; + } + } + + private static class BicyleByLength implements ArcInspector { + static int maxBicycleSpeed = 20; + + @Override + public boolean isAllowed(Arc arc) { + return arc.getRoadInformation().getAccessRestrictions().isAllowedForAny( + AccessMode.BICYCLE, + EnumSet.complementOf(EnumSet.of(AccessRestriction.FORBIDDEN, + AccessRestriction.PRIVATE))); + } + + @Override + public double getCost(Arc arc) { + return arc.getLength(); + } + + @Override + public int getMaximumSpeed() { + return 20; + } + + @Override + public Mode getMode() { + return Mode.LENGTH; + } + + @Override + public String toString() { + return "Le plus court, chemin accessible en vélo uniquement"; + } + } + /** * @return List of all arc filters in this factory. */ @@ -118,7 +182,7 @@ public class ArcInspectorFactory { // to get an understandable output!): return Arrays.asList(new NoFilterByLengthArcInspector(), new OnlyCarsByLengthArcInspector(), new OnlyCarsByTimeArcInspector(), - new OnlyPedestrianByTime()); + new OnlyPedestrianByTime(), new BicyleByLength(), new BicyleByTime()); } }