123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177 |
- package org.insa.algo;
-
- import java.util.ArrayList;
- import java.util.EnumSet;
- import java.util.List;
-
- import org.insa.algo.AbstractInputData.Mode;
- import org.insa.graph.AccessRestrictions.AccessMode;
- import org.insa.graph.AccessRestrictions.AccessRestriction;
- import org.insa.graph.Arc;
- import org.insa.graph.GraphStatistics;
-
- public class ArcInspectorFactory {
-
- /**
- * @return List of all arc filters in this factory.
- */
- public static List<ArcInspector> getAllFilters() {
- List<ArcInspector> filters = new ArrayList<>();
-
- // Common filters:
-
- // No filter (all arcs allowed):
- filters.add(new ArcInspector() {
- @Override
- public boolean isAllowed(Arc arc) {
- return true;
- }
-
- @Override
- public double getCost(Arc arc) {
- return arc.getLength();
- }
-
- @Override
- public int getMaximumSpeed() {
- return GraphStatistics.NO_MAXIMUM_SPEED;
- }
-
- @Override
- public Mode getMode() {
- return Mode.LENGTH;
- }
-
- @Override
- public String toString() {
- return "Shortest path, all roads allowed";
- }
- });
-
- // Only road allowed for cars and length:
- filters.add(new ArcInspector() {
- @Override
- public boolean isAllowed(Arc arc) {
- return arc.getRoadInformation().getAccessRestrictions()
- .isAllowedForAny(AccessMode.MOTORCAR, EnumSet.complementOf(EnumSet
- .of(AccessRestriction.FORBIDDEN, AccessRestriction.PRIVATE)));
- }
-
- @Override
- public double getCost(Arc arc) {
- return arc.getLength();
- }
-
- @Override
- public int getMaximumSpeed() {
- return GraphStatistics.NO_MAXIMUM_SPEED;
- }
-
- @Override
- public Mode getMode() {
- return Mode.LENGTH;
- }
-
- @Override
- public String toString() {
- return "Shortest path, only roads open for cars";
- }
- });
-
- // Only road allowed for cars and time:
-
- filters.add(new ArcInspector() {
- @Override
- public boolean isAllowed(Arc arc) {
- return true;
- }
-
- @Override
- public double getCost(Arc arc) {
- return arc.getMinimumTravelTime();
- }
-
- @Override
- public int getMaximumSpeed() {
- return GraphStatistics.NO_MAXIMUM_SPEED;
- }
-
- @Override
- public Mode getMode() {
- return Mode.TIME;
- }
-
- @Override
- public String toString() {
- return "Fastest path, all roads allowed";
- }
- });
-
- filters.add(new ArcInspector() {
- @Override
- public boolean isAllowed(Arc arc) {
- return arc.getRoadInformation().getAccessRestrictions()
- .isAllowedForAny(AccessMode.MOTORCAR, EnumSet.complementOf(EnumSet
- .of(AccessRestriction.FORBIDDEN, AccessRestriction.PRIVATE)));
- }
-
- @Override
- public double getCost(Arc arc) {
- return arc.getMinimumTravelTime();
- }
-
- @Override
- public int getMaximumSpeed() {
- return GraphStatistics.NO_MAXIMUM_SPEED;
- }
-
- @Override
- public Mode getMode() {
- return Mode.TIME;
- }
-
- @Override
- public String toString() {
- return "Fastest path, only roads open for cars";
- }
- });
-
- // Non-private roads for pedestrian and bicycle:
- filters.add(new ArcInspector() {
-
- @Override
- public boolean isAllowed(Arc arc) {
- return arc.getRoadInformation().getAccessRestrictions()
- .isAllowedForAny(AccessMode.FOOT, EnumSet.complementOf(EnumSet
- .of(AccessRestriction.FORBIDDEN, AccessRestriction.PRIVATE)));
- }
-
- @Override
- public double getCost(Arc arc) {
- return arc.getTravelTime(
- Math.min(getMaximumSpeed(), arc.getRoadInformation().getMaximumSpeed()));
- }
-
- @Override
- public String toString() {
- return "Fastest path for pedestrian";
- }
-
- @Override
- public int getMaximumSpeed() {
- return 5;
- }
-
- @Override
- public Mode getMode() {
- return Mode.TIME;
- }
- });
-
- // Add your own filters here (do not forget to implement toString()
- // to get an understandable output!):
-
- return filters;
- }
-
- }
|