EndpointsProperties.java

package org.heigit.ors.api;

import org.heigit.ors.routing.RoutingProfileType;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import static com.graphhopper.routing.weighting.Weighting.INFINITE_U_TURN_COSTS;

@Configuration
@ConfigurationProperties(prefix = "ors.endpoints")
public class EndpointsProperties {
    private EndpointDefaultProperties defaults;
    private EndpointRoutingProperties routing;
    private EndpointMatrixProperties matrix;
    private EndpointIsochronesProperties isochrones;
    private EndpointSnapProperties snap;
    private String swaggerDocumentationUrl;

    public void setSwaggerDocumentationUrl(String swaggerDocumentationUrl) {
        this.swaggerDocumentationUrl = swaggerDocumentationUrl;
    }

    public String getSwaggerDocumentationUrl() {
        return swaggerDocumentationUrl;
    }

    public EndpointDefaultProperties getDefaults() {
        return defaults;
    }

    public void setDefaults(EndpointDefaultProperties defaults) {
        this.defaults = defaults;
    }

    public EndpointRoutingProperties getRouting() {
        return routing;
    }

    public void setRouting(EndpointRoutingProperties routing) {
        this.routing = routing;
    }

    public EndpointMatrixProperties getMatrix() {
        return matrix;
    }

    public void setMatrix(EndpointMatrixProperties matrix) {
        this.matrix = matrix;
    }

    public EndpointIsochronesProperties getIsochrones() {
        return isochrones;
    }

    public void setIsochrones(EndpointIsochronesProperties isochrones) {
        this.isochrones = isochrones;
    }

    public EndpointSnapProperties getSnap() {
        return snap;
    }

    public void setSnap(EndpointSnapProperties snap) {
        this.snap = snap;
    }

    public static class EndpointDefaultProperties {
        private String attribution;

        public String getAttribution() {
            return attribution;
        }

        public void setAttribution(String attribution) {
            this.attribution = attribution;
        }
    }

    public static class EndpointRoutingProperties {
        private boolean enabled;
        private String attribution;
        private String gpxName;
        private String gpxDescription;
        private String gpxBaseUrl;
        private String gpxSupportMail;
        private String gpxAuthor;
        private String gpxContentLicence;
        private double maximumAvoidPolygonArea;
        private double maximumAvoidPolygonExtent;
        private int maximumAlternativeRoutes;

        public boolean isEnabled() {
            return enabled;
        }

        public void setEnabled(boolean enabled) {
            this.enabled = enabled;
        }

        public String getAttribution() {
            return attribution;
        }

        public void setAttribution(String attribution) {
            this.attribution = attribution;
        }

        public String getGpxName() {
            return gpxName;
        }

        public void setGpxName(String gpxName) {
            this.gpxName = gpxName;
        }

        public String getGpxDescription() {
            return gpxDescription;
        }

        public void setGpxDescription(String gpxDescription) {
            this.gpxDescription = gpxDescription;
        }

        public String getGpxBaseUrl() {
            return gpxBaseUrl;
        }

        public void setGpxBaseUrl(String gpxBaseUrl) {
            this.gpxBaseUrl = gpxBaseUrl;
        }

        public String getGpxSupportMail() {
            return gpxSupportMail;
        }

        public void setGpxSupportMail(String gpxSupportMail) {
            this.gpxSupportMail = gpxSupportMail;
        }

        public String getGpxAuthor() {
            return gpxAuthor;
        }

        public void setGpxAuthor(String gpxAuthor) {
            this.gpxAuthor = gpxAuthor;
        }

        public String getGpxContentLicence() {
            return gpxContentLicence;
        }

        public void setGpxContentLicence(String gpxContentLicence) {
            this.gpxContentLicence = gpxContentLicence;
        }

        public double getMaximumAvoidPolygonArea() {
            return maximumAvoidPolygonArea;
        }

        public void setMaximumAvoidPolygonArea(double maximumAvoidPolygonArea) {
            this.maximumAvoidPolygonArea = maximumAvoidPolygonArea;
        }

        public double getMaximumAvoidPolygonExtent() {
            return maximumAvoidPolygonExtent;
        }

        public void setMaximumAvoidPolygonExtent(double maximumAvoidPolygonExtent) {
            this.maximumAvoidPolygonExtent = maximumAvoidPolygonExtent;
        }


        public int getMaximumAlternativeRoutes() {
            return maximumAlternativeRoutes;
        }

        public void setMaximumAlternativeRoutes(Integer maximumAlternativeRoutes) {
            this.maximumAlternativeRoutes = maximumAlternativeRoutes;
        }


    }

    public static class EndpointMatrixProperties {
        private boolean enabled;
        private String attribution;
        private int maximumRoutes = 2500;
        private int maximumRoutesFlexible = 25;
        private int maximumVisitedNodes = 100000;
        private double maximumSearchRadius = 2000;
        // TODO: this parameter is only used in a binary check for infinity (==-1);
        //       Can't we reduce it to a boolean "forbid_u_turns"?
        private double uTurnCost = INFINITE_U_TURN_COSTS;


        public boolean isEnabled() {
            return enabled;
        }

        public void setEnabled(boolean enabled) {
            this.enabled = enabled;
        }

        public String getAttribution() {
            return attribution;
        }

        public void setAttribution(String attribution) {
            this.attribution = attribution;
        }

        public int getMaximumRoutes(boolean flexible) {
            return (flexible ? maximumRoutesFlexible : maximumRoutes);
        }

        public void setMaximumRoutes(int maximumRoutes) {
            this.maximumRoutes = maximumRoutes;
        }

        public void setMaximumRoutesFlexible(int maximumRoutesFlexible) {
            this.maximumRoutesFlexible = maximumRoutesFlexible;
        }

        public int getMaximumVisitedNodes() {
            return maximumVisitedNodes;
        }

        public void setMaximumVisitedNodes(int maximumVisitedNodes) {
            this.maximumVisitedNodes = maximumVisitedNodes;
        }

        public double getMaximumSearchRadius() {
            return maximumSearchRadius;
        }

        public void setMaximumSearchRadius(double maximumSearchRadius) {
            this.maximumSearchRadius = maximumSearchRadius;
        }

        public double getUTurnCost() {
            return uTurnCost;
        }

        public void setUTurnCost(double uTurnCosts) {
            this.uTurnCost = uTurnCosts;
        }
    }

    public static class MaximumRangeProperties {
        private int maximumRangeDistanceDefault;
        private List<MaximumRangeProperties.MaximumRangePropertiesEntry> maximumRangeDistance;
        private int maximumRangeTimeDefault;
        private List<MaximumRangeProperties.MaximumRangePropertiesEntry> maximumRangeTime;

        public int getMaximumRangeDistanceDefault() {
            return maximumRangeDistanceDefault;
        }

        public void setMaximumRangeDistanceDefault(int maximumRangeDistanceDefault) {
            this.maximumRangeDistanceDefault = maximumRangeDistanceDefault;
        }

        public List<MaximumRangeProperties.MaximumRangePropertiesEntry> getMaximumRangeDistance() {
            return maximumRangeDistance;
        }

        public void setMaximumRangeDistance(List<MaximumRangeProperties.MaximumRangePropertiesEntry> maximumRangeDistance) {
            this.maximumRangeDistance = maximumRangeDistance;
            for (MaximumRangeProperties.MaximumRangePropertiesEntry maximumRangePropertiesEntry : maximumRangeDistance)
                for (String profile : maximumRangePropertiesEntry.getProfiles())
                    profileMaxRangeDistances.put(RoutingProfileType.getFromString(profile), maximumRangePropertiesEntry.getValue());
        }

        public int getMaximumRangeTimeDefault() {
            return maximumRangeTimeDefault;
        }

        public void setMaximumRangeTimeDefault(int maximumRangeTimeDefault) {
            this.maximumRangeTimeDefault = maximumRangeTimeDefault;
        }

        public List<MaximumRangeProperties.MaximumRangePropertiesEntry> getMaximumRangeTime() {
            return maximumRangeTime;
        }

        public void setMaximumRangeTime(List<MaximumRangeProperties.MaximumRangePropertiesEntry> maximumRangeTime) {
            this.maximumRangeTime = maximumRangeTime;
            for (MaximumRangeProperties.MaximumRangePropertiesEntry maximumRangePropertiesEntry : maximumRangeTime)
                for (String profile : maximumRangePropertiesEntry.getProfiles())
                    profileMaxRangeTimes.put(RoutingProfileType.getFromString(profile), maximumRangePropertiesEntry.getValue());
        }

        private final Map<Integer, Integer> profileMaxRangeDistances = new HashMap<>();

        public Map<Integer, Integer> getProfileMaxRangeDistances() {
            return profileMaxRangeDistances;
        }

        private final Map<Integer, Integer> profileMaxRangeTimes = new HashMap<>();

        public Map<Integer, Integer> getProfileMaxRangeTimes() {
            return profileMaxRangeTimes;
        }

        public static class MaximumRangePropertiesEntry {
            private List<String> profiles;
            private int value;

            public List<String> getProfiles() {
                return profiles;
            }

            public void setProfiles(List<String> profiles) {
                this.profiles = profiles;
            }

            public int getValue() {
                return value;
            }

            public void setValue(int value) {
                this.value = value;
            }
        }
    }

    public static class EndpointIsochronesProperties extends MaximumRangeProperties {
        private boolean enabled;
        private String attribution;
        private int maximumLocations;
        private boolean allowComputeArea = true;
        private int maximumIntervals = 1;
        private MaximumRangeProperties fastisochrones;
        private Map<String, StatisticsProviderProperties> statisticsProviders = new HashMap<>();

        public boolean isEnabled() {
            return enabled;
        }

        public void setEnabled(boolean enabled) {
            this.enabled = enabled;
        }

        public String getAttribution() {
            return attribution;
        }

        public void setAttribution(String attribution) {
            this.attribution = attribution;
        }

        public int getMaximumLocations() {
            return maximumLocations;
        }

        public void setMaximumLocations(int maximumLocations) {
            this.maximumLocations = maximumLocations;
        }

        public boolean isAllowComputeArea() {
            return allowComputeArea;
        }

        public void setAllowComputeArea(boolean allowComputeArea) {
            this.allowComputeArea = allowComputeArea;
        }

        public int getMaximumIntervals() {
            return maximumIntervals;
        }

        public void setMaximumIntervals(int maximumIntervals) {
            this.maximumIntervals = maximumIntervals;
        }

        public MaximumRangeProperties getFastisochrones() {
            return fastisochrones;
        }

        public void setFastisochrones(MaximumRangeProperties fastisochrones) {
            this.fastisochrones = fastisochrones;
        }

        public Map<String, StatisticsProviderProperties> getStatisticsProviders() {
            return statisticsProviders;
        }

        public void setStatisticsProviders(Map<String, StatisticsProviderProperties> statisticsProviders) {
            this.statisticsProviders = statisticsProviders;
        }

        public static class StatisticsProviderProperties {
            private boolean enabled;
            private String providerName;
            private Map<String, Object> providerParameters;
            private Map<String, String> propertyMapping;
            private String attribution;

            public boolean isEnabled() {
                return enabled;
            }

            public void setEnabled(boolean enabled) {
                this.enabled = enabled;
            }

            public String getProviderName() {
                return providerName;
            }

            public void setProviderName(String providerName) {
                this.providerName = providerName;
            }

            public Map<String, Object> getProviderParameters() {
                return providerParameters;
            }

            public void setProviderParameters(Map<String, Object> providerParameters) {
                this.providerParameters = providerParameters;
            }

            public Map<String, String> getPropertyMapping() {
                return propertyMapping;
            }

            public void setPropertyMapping(Map<String, String> propertyMapping) {
                this.propertyMapping = propertyMapping;
            }

            public String getAttribution() {
                return attribution;
            }

            public void setAttribution(String attribution) {
                this.attribution = attribution;
            }
        }
    }

    public static class EndpointSnapProperties {
        private boolean enabled;
        private String attribution;

        public boolean isEnabled() {
            return enabled;
        }

        public void setEnabled(boolean enabled) {
            this.enabled = enabled;
        }

        public String getAttribution() {
            return attribution;
        }

        public void setAttribution(String attribution) {
            this.attribution = attribution;
        }

    }
}