diff --git a/ors-engine/src/main/java/org/heigit/ors/config/ElevationProperties.java b/ors-engine/src/main/java/org/heigit/ors/config/ElevationProperties.java index fdbb18a9d1..352d7c9142 100644 --- a/ors-engine/src/main/java/org/heigit/ors/config/ElevationProperties.java +++ b/ors-engine/src/main/java/org/heigit/ors/config/ElevationProperties.java @@ -11,20 +11,24 @@ import org.heigit.ors.config.utils.PathSerializer; import java.nio.file.Path; -import java.nio.file.Paths; @Getter -@Setter(AccessLevel.PACKAGE) +@Setter(AccessLevel.PROTECTED) public class ElevationProperties { - private boolean preprocessed = false; + @Getter + private Boolean preprocessed; @JsonProperty("data_access") - private DataAccessEnum dataAccess = DataAccessEnum.MMAP; + private DataAccessEnum dataAccess; @JsonProperty("cache_clear") - private boolean cacheClear = false; + private Boolean cacheClear; @JsonProperty("provider") - private String provider = "multi"; + private String provider; @JsonProperty("cache_path") @JsonDeserialize(using = PathDeserializer.class) @JsonSerialize(using = PathSerializer.class) - private Path cachePath = Paths.get("./elevation_cache"); + private Path cachePath; + + public Boolean isPreprocessed() { + return preprocessed; + } } \ No newline at end of file diff --git a/ors-engine/src/main/java/org/heigit/ors/config/EngineProperties.java b/ors-engine/src/main/java/org/heigit/ors/config/EngineProperties.java index c88d12f601..2104115e05 100644 --- a/ors-engine/src/main/java/org/heigit/ors/config/EngineProperties.java +++ b/ors-engine/src/main/java/org/heigit/ors/config/EngineProperties.java @@ -9,7 +9,9 @@ import lombok.Setter; import org.heigit.ors.common.DataAccessEnum; import org.heigit.ors.config.profile.ProfileProperties; -import org.heigit.ors.config.profile.defaults.*; +import org.heigit.ors.config.profile.defaults.DefaultElevationProperties; +import org.heigit.ors.config.profile.defaults.DefaultProfileProperties; +import org.heigit.ors.config.profile.defaults.DefaultProfiles; import org.heigit.ors.config.utils.PathDeserializer; import org.heigit.ors.config.utils.PathSerializer; import org.heigit.ors.routing.configuration.RouteProfileConfiguration; @@ -22,46 +24,54 @@ import java.util.Map; @Getter -@Setter(AccessLevel.PACKAGE) +@Setter(AccessLevel.PROTECTED) public class EngineProperties { - private static final Map DEFAULT_PROFILES = new LinkedHashMap<>(); - static { - DEFAULT_PROFILES.put("car", new DefaultProfilePropertiesCar()); - DEFAULT_PROFILES.put("hgv", new DefaultProfilePropertiesHgv()); - DEFAULT_PROFILES.put("bike-regular", new DefaultProfilePropertiesBikeRegular()); - DEFAULT_PROFILES.put("bike-electric", new DefaultProfilePropertiesBikeElectric()); - DEFAULT_PROFILES.put("bike-mountain", new DefaultProfilePropertiesBikeMountain()); - DEFAULT_PROFILES.put("bike-road", new DefaultProfilePropertiesBikeRoad()); - DEFAULT_PROFILES.put("walking", new DefaultProfilePropertiesWalking()); - DEFAULT_PROFILES.put("hiking", new DefaultProfilePropertiesHiking()); - DEFAULT_PROFILES.put("wheelchair", new DefaultProfilePropertiesWheelchair()); - DEFAULT_PROFILES.put("public-transport", new DefaultProfilePropertiesPublicTransport()); - } + @JsonIgnore + private Map default_profiles = new LinkedHashMap<>(); @JsonProperty("source_file") @JsonDeserialize(using = PathDeserializer.class) @JsonSerialize(using = PathSerializer.class) - private Path sourceFile = Paths.get(""); + private Path sourceFile; @JsonProperty("init_threads") - private Integer initThreads = 1; + private Integer initThreads; @JsonProperty("preparation_mode") - private Boolean preparationMode = false; + private Boolean preparationMode; @JsonProperty("config_output_mode") - private Boolean configOutputMode = false; + private Boolean configOutputMode; @JsonProperty("graphs_root_path") @JsonDeserialize(using = PathDeserializer.class) @JsonSerialize(using = PathSerializer.class) - private Path graphsRootPath = Paths.get("./graphs"); + private Path graphsRootPath; @JsonProperty("graphs_data_access") - private DataAccessEnum graphsDataAccess = DataAccessEnum.RAM_STORE; + private DataAccessEnum graphsDataAccess; @JsonProperty("elevation") - private ElevationProperties elevation = new ElevationProperties(); + private ElevationProperties elevation; @JsonProperty("profile_default") - private ProfileProperties profileDefault = new DefaultProfileProperties(); + private ProfileProperties profileDefault; @JsonProperty("profiles") - private Map profiles = DEFAULT_PROFILES; + private Map profiles; + + public EngineProperties() { + this(false); + } + + public EngineProperties(Boolean setDefaults) { + setProfiles(new LinkedHashMap<>()); + setProfileDefault(new DefaultProfileProperties(setDefaults)); + setDefault_profiles(new DefaultProfiles(setDefaults).getProfiles()); + setElevation(new DefaultElevationProperties(setDefaults)); + if (setDefaults) { + setSourceFile(Paths.get("")); + setInitThreads(1); + setPreparationMode(false); + setConfigOutputMode(false); + setGraphsRootPath(Paths.get("./graphs")); + setGraphsDataAccess(DataAccessEnum.RAM_STORE); + } + } @JsonIgnore public RouteProfileConfiguration[] getConvertedProfiles() { diff --git a/ors-engine/src/main/java/org/heigit/ors/config/profile/PreparationProperties.java b/ors-engine/src/main/java/org/heigit/ors/config/profile/PreparationProperties.java index 672f9cae32..a7ad73fb39 100644 --- a/ors-engine/src/main/java/org/heigit/ors/config/profile/PreparationProperties.java +++ b/ors-engine/src/main/java/org/heigit/ors/config/profile/PreparationProperties.java @@ -3,7 +3,6 @@ import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; -import lombok.AccessLevel; import lombok.Getter; import lombok.Setter; import lombok.experimental.Accessors; @@ -53,7 +52,7 @@ public MethodsProperties(Boolean setDefaults) { @Setter @JsonInclude(JsonInclude.Include.NON_NULL) public static class CHProperties { - @Getter(AccessLevel.NONE) + @JsonProperty("enabled") private Boolean enabled; private Integer threads; private String weightings; @@ -68,7 +67,7 @@ public Boolean isEnabled() { @Setter @JsonInclude(JsonInclude.Include.NON_NULL) public static class LMProperties { - @Getter(AccessLevel.NONE) + @JsonProperty("enabled") private Boolean enabled; private Integer threads; private String weightings; @@ -84,7 +83,7 @@ public Boolean isEnabled() { @Setter @JsonInclude(JsonInclude.Include.NON_NULL) public static class CoreProperties { - @Getter(AccessLevel.NONE) + @JsonProperty("enabled") private Boolean enabled; private Integer threads; private String weightings; @@ -101,7 +100,7 @@ public Boolean isEnabled() { @Setter @JsonInclude(JsonInclude.Include.NON_NULL) public static class FastIsochroneProperties { - @Getter(AccessLevel.NONE) + @JsonProperty("enabled") private Boolean enabled; private Integer threads; private String weightings; diff --git a/ors-engine/src/main/java/org/heigit/ors/config/profile/ProfileProperties.java b/ors-engine/src/main/java/org/heigit/ors/config/profile/ProfileProperties.java index 2c537f9f9a..4b81e94cda 100644 --- a/ors-engine/src/main/java/org/heigit/ors/config/profile/ProfileProperties.java +++ b/ors-engine/src/main/java/org/heigit/ors/config/profile/ProfileProperties.java @@ -99,49 +99,91 @@ public abstract class ProfileProperties { private Map extStorages = new HashMap<>(); protected ProfileProperties() { - encoderOptions = new DefaultEncoderOptionsProperties(); - preparation = new PreparationProperties(); - execution = new ExecutionProperties(); + this(false); + } + + protected ProfileProperties(Boolean setDefaults) { + if (setDefaults) { + encoderOptions = new DefaultEncoderOptionsProperties(); + preparation = new DefaultPreparationProperties(); + execution = new DefaultExecutionProperties(); + } else { + encoderOptions = new EncoderOptionsProperties(); + preparation = new PreparationProperties(); + execution = new ExecutionProperties(); + } } @JsonSetter("encoder_options") public void setEncoderOptions(EncoderOptionsProperties encoderOptions) { - if (encoderOptions != null) { + // TODO if null apply default values as is + // TODO after deserialization apply the profile_default values -> maybe move setter to getter logic + // TODO add getgraphpath override to the profile property classes + this.encoderOptions = encoderOptions; + } + + + public EncoderOptionsProperties getEncoderOptions(Boolean mergeWithDefault) { + if (mergeWithDefault) { DefaultEncoderOptionsProperties defaultEncoderOptionsProperties = new DefaultEncoderOptionsProperties(this.getEncoderName()); - encoderOptions = (EncoderOptionsProperties) PropertyUtils.deepCopyObjectsProperties(defaultEncoderOptionsProperties, encoderOptions, false, false); + if (this.encoderOptions == null) { + return defaultEncoderOptionsProperties; + } + EncoderOptionsProperties test = (EncoderOptionsProperties) PropertyUtils.deepCopyObjectsProperties(defaultEncoderOptionsProperties, this.encoderOptions, false, false); + return test; } - this.encoderOptions = encoderOptions; + return this.encoderOptions; } @JsonSetter("preparation") public void setPreparation(PreparationProperties preparation) { - if (preparation != null) { + this.preparation = preparation; + } + + public PreparationProperties getPreparation(Boolean mergeWithDefault) { + if (mergeWithDefault) { DefaultPreparationProperties defaultPreparationProperties = new DefaultPreparationProperties(this.getEncoderName()); - preparation = (PreparationProperties) PropertyUtils.deepCopyObjectsProperties(defaultPreparationProperties, preparation, false, false); + if (this.preparation == null) { + return defaultPreparationProperties; + } + PreparationProperties test = (PreparationProperties) PropertyUtils.deepCopyObjectsProperties(defaultPreparationProperties, this.preparation, false, false); + return test; } - this.preparation = preparation; + return this.preparation; } @JsonSetter("execution") public void setExecution(ExecutionProperties execution) { - if (execution != null) { + this.execution = execution; + } + + public ExecutionProperties getExecution(Boolean mergeWithDefault) { + if (mergeWithDefault) { DefaultExecutionProperties defaultExecutionProperties = new DefaultExecutionProperties(this.getEncoderName()); - execution = (ExecutionProperties) PropertyUtils.deepCopyObjectsProperties(defaultExecutionProperties, execution, false, false); + if (this.execution == null) { + return defaultExecutionProperties; + } + ExecutionProperties test = (ExecutionProperties) PropertyUtils.deepCopyObjectsProperties(defaultExecutionProperties, this.execution, false, false); + return test; } - this.execution = execution; + return this.execution; } @JsonSetter("ext_storages") public void setExtStorages(Map extStorages) { - if (extStorages == null) { - this.extStorages = new HashMap<>(); - } else { + this.extStorages = extStorages; + } + + public Map getExtStorages(Boolean mergeWithDefault) { + if (mergeWithDefault) { DefaultExtendedStoragesProperties defaultExtendedStoragesProperties = new DefaultExtendedStoragesProperties(this.getEncoderName()); - extStorages = PropertyUtils.deepCopyMapsProperties(defaultExtendedStoragesProperties.getExtStorages(), extStorages, false, false, false); - if (extStorages != null) { - this.extStorages = extStorages; + if (this.extStorages == null) { + return defaultExtendedStoragesProperties.getExtStorages(); } + Map test = PropertyUtils.deepCopyMapsProperties(defaultExtendedStoragesProperties.getExtStorages(), this.extStorages, false, false, false); + return test; } + return this.extStorages; } @JsonIgnore diff --git a/ors-engine/src/main/java/org/heigit/ors/config/profile/defaults/DefaultElevationProperties.java b/ors-engine/src/main/java/org/heigit/ors/config/profile/defaults/DefaultElevationProperties.java new file mode 100644 index 0000000000..af0509b0ed --- /dev/null +++ b/ors-engine/src/main/java/org/heigit/ors/config/profile/defaults/DefaultElevationProperties.java @@ -0,0 +1,23 @@ +package org.heigit.ors.config.profile.defaults; + +import org.heigit.ors.common.DataAccessEnum; +import org.heigit.ors.config.ElevationProperties; + +import java.nio.file.Paths; + +public class DefaultElevationProperties extends ElevationProperties { + + public DefaultElevationProperties() { + this(false); + } + + public DefaultElevationProperties(Boolean setDefaults) { + if (setDefaults) { + setPreprocessed(false); + setDataAccess(DataAccessEnum.MMAP); + setCacheClear(false); + setProvider("multi"); + setCachePath(Paths.get("./elevation_cache")); + } + } +} diff --git a/ors-engine/src/main/java/org/heigit/ors/config/profile/defaults/DefaultEncoderOptionsProperties.java b/ors-engine/src/main/java/org/heigit/ors/config/profile/defaults/DefaultEncoderOptionsProperties.java index 7a78d688dc..0b963a0ceb 100644 --- a/ors-engine/src/main/java/org/heigit/ors/config/profile/defaults/DefaultEncoderOptionsProperties.java +++ b/ors-engine/src/main/java/org/heigit/ors/config/profile/defaults/DefaultEncoderOptionsProperties.java @@ -5,47 +5,52 @@ import org.heigit.ors.config.profile.EncoderOptionsProperties; public class DefaultEncoderOptionsProperties extends EncoderOptionsProperties { - public DefaultEncoderOptionsProperties() { - setBlockFords(false); - setTurnCosts(true); - setConsiderElevation(false); - setUseAcceleration(false); - setConditionalAccess(false); // Default from EncodingManager.java - setMaximumGradeLevel(null); // TODO find default - setPreferredSpeedFactor(null); // TODO find default - setProblematicSpeedFactor(null); // TODO find default - setConditionalSpeed(false); // TODO find default + public DefaultEncoderOptionsProperties() { + this(false, null); } - public DefaultEncoderOptionsProperties(EncoderNameEnum encoderName) { - this(); - if (encoderName == null) { - encoderName = EncoderNameEnum.UNKNOWN; + public DefaultEncoderOptionsProperties(Boolean setDefaults, EncoderNameEnum encoderName) { + this(encoderName); + if (setDefaults) { + setBlockFords(false); + setTurnCosts(true); + setConsiderElevation(false); + setUseAcceleration(false); + setConditionalAccess(false); // Default from EncodingManager.java + setMaximumGradeLevel(null); // TODO find default + setPreferredSpeedFactor(null); // TODO find default + setProblematicSpeedFactor(null); // TODO find default + setConditionalSpeed(false); // TODO find default } + } - switch (encoderName) { - case DRIVING_CAR -> { - // Just set the ones from below - setTurnCosts(true); - setBlockFords(false); - setUseAcceleration(true); - setConsiderElevation(false); - } - case DRIVING_HGV -> { - setTurnCosts(true); - setBlockFords(false); - setUseAcceleration(true); - } - case CYCLING_REGULAR, CYCLING_MOUNTAIN, CYCLING_ROAD, CYCLING_ELECTRIC -> { - setConsiderElevation(true); - setTurnCosts(true); - setBlockFords(false); - } - case FOOT_HIKING, FOOT_WALKING, WHEELCHAIR, PUBLIC_TRANSPORT -> // Just set the ones from below + public DefaultEncoderOptionsProperties(EncoderNameEnum encoderName) { + if (encoderName != null) { + switch (encoderName) { + case DRIVING_CAR -> { + // Just set the ones from below + setTurnCosts(true); + setBlockFords(false); + setUseAcceleration(true); + setConsiderElevation(false); + } + case DRIVING_HGV -> { + setTurnCosts(true); setBlockFords(false); - default -> { + setUseAcceleration(true); + } + case CYCLING_REGULAR, CYCLING_MOUNTAIN, CYCLING_ROAD, CYCLING_ELECTRIC -> { + setConsiderElevation(true); + setTurnCosts(true); + setBlockFords(false); + } + case FOOT_HIKING, FOOT_WALKING, WHEELCHAIR, PUBLIC_TRANSPORT -> // Just set the ones from below + setBlockFords(false); + default -> { + } } } + } } \ No newline at end of file diff --git a/ors-engine/src/main/java/org/heigit/ors/config/profile/defaults/DefaultProfileProperties.java b/ors-engine/src/main/java/org/heigit/ors/config/profile/defaults/DefaultProfileProperties.java index ca8b62fd68..e4b533ee61 100644 --- a/ors-engine/src/main/java/org/heigit/ors/config/profile/defaults/DefaultProfileProperties.java +++ b/ors-engine/src/main/java/org/heigit/ors/config/profile/defaults/DefaultProfileProperties.java @@ -4,28 +4,36 @@ import org.heigit.ors.config.profile.ProfileProperties; public class DefaultProfileProperties extends ProfileProperties { + public DefaultProfileProperties() { - super(); - this.setEncoderName(EncoderNameEnum.UNKNOWN); - setEnabled(false); - setElevation(true); - setElevationSmoothing(true); - setEncoderFlagsSize(8); - setInstructions(true); - setOptimize(false); - setTraffic(false); - setInterpolateBridgesAndTunnels(true); - setForceTurnCosts(false); - setLocationIndexResolution(500); - setLocationIndexSearchIterations(4); - setMaximumDistance(100000d); - setMaximumDistanceDynamicWeights(100000d); - setMaximumDistanceAvoidAreas(100000d); - setMaximumDistanceAlternativeRoutes(100000d); - setMaximumDistanceRoundTripRoutes(100000d); - setMaximumSpeedLowerBound(80d); - setMaximumWayPoints(50); - setMaximumSnappingRadius(400); - setMaximumVisitedNodes(1000000); + this(false); + } + + public DefaultProfileProperties(Boolean setDefaults) { + super(setDefaults); + if (setDefaults) { + this.setEncoderName(EncoderNameEnum.UNKNOWN); + setEncoderOptions(new DefaultEncoderOptionsProperties()); + setEnabled(false); + setElevation(true); + setElevationSmoothing(true); + setEncoderFlagsSize(8); + setInstructions(true); + setOptimize(false); + setTraffic(false); + setInterpolateBridgesAndTunnels(true); + setForceTurnCosts(false); + setLocationIndexResolution(500); + setLocationIndexSearchIterations(4); + setMaximumDistance(100000d); + setMaximumDistanceDynamicWeights(100000d); + setMaximumDistanceAvoidAreas(100000d); + setMaximumDistanceAlternativeRoutes(100000d); + setMaximumDistanceRoundTripRoutes(100000d); + setMaximumSpeedLowerBound(80d); + setMaximumWayPoints(50); + setMaximumSnappingRadius(400); + setMaximumVisitedNodes(1000000); + } } } diff --git a/ors-engine/src/main/java/org/heigit/ors/config/profile/defaults/DefaultProfilePropertiesBikeElectric.java b/ors-engine/src/main/java/org/heigit/ors/config/profile/defaults/DefaultProfilePropertiesBikeElectric.java index 9cd95a7c2e..de1f4ff401 100644 --- a/ors-engine/src/main/java/org/heigit/ors/config/profile/defaults/DefaultProfilePropertiesBikeElectric.java +++ b/ors-engine/src/main/java/org/heigit/ors/config/profile/defaults/DefaultProfilePropertiesBikeElectric.java @@ -1,10 +1,15 @@ package org.heigit.ors.config.profile.defaults; import org.heigit.ors.common.EncoderNameEnum; +import org.heigit.ors.config.profile.ProfileProperties; -public class DefaultProfilePropertiesBikeElectric extends DefaultProfileProperties { +public class DefaultProfilePropertiesBikeElectric extends ProfileProperties { public DefaultProfilePropertiesBikeElectric() { - super(); + this(false); + } + + public DefaultProfilePropertiesBikeElectric(Boolean setDefaults) { + super(setDefaults); this.setEncoderName(EncoderNameEnum.CYCLING_ELECTRIC); } } diff --git a/ors-engine/src/main/java/org/heigit/ors/config/profile/defaults/DefaultProfilePropertiesBikeMountain.java b/ors-engine/src/main/java/org/heigit/ors/config/profile/defaults/DefaultProfilePropertiesBikeMountain.java index a7f8cd6368..c80d3356d5 100644 --- a/ors-engine/src/main/java/org/heigit/ors/config/profile/defaults/DefaultProfilePropertiesBikeMountain.java +++ b/ors-engine/src/main/java/org/heigit/ors/config/profile/defaults/DefaultProfilePropertiesBikeMountain.java @@ -1,10 +1,15 @@ package org.heigit.ors.config.profile.defaults; import org.heigit.ors.common.EncoderNameEnum; +import org.heigit.ors.config.profile.ProfileProperties; -public class DefaultProfilePropertiesBikeMountain extends DefaultProfileProperties { +public class DefaultProfilePropertiesBikeMountain extends ProfileProperties { public DefaultProfilePropertiesBikeMountain() { - super(); + this(false); + } + + public DefaultProfilePropertiesBikeMountain(Boolean setDefaults) { + super(setDefaults); this.setEncoderName(EncoderNameEnum.CYCLING_MOUNTAIN); } } diff --git a/ors-engine/src/main/java/org/heigit/ors/config/profile/defaults/DefaultProfilePropertiesBikeRegular.java b/ors-engine/src/main/java/org/heigit/ors/config/profile/defaults/DefaultProfilePropertiesBikeRegular.java index ead272c244..675ee61653 100644 --- a/ors-engine/src/main/java/org/heigit/ors/config/profile/defaults/DefaultProfilePropertiesBikeRegular.java +++ b/ors-engine/src/main/java/org/heigit/ors/config/profile/defaults/DefaultProfilePropertiesBikeRegular.java @@ -1,10 +1,15 @@ package org.heigit.ors.config.profile.defaults; import org.heigit.ors.common.EncoderNameEnum; +import org.heigit.ors.config.profile.ProfileProperties; -public class DefaultProfilePropertiesBikeRegular extends DefaultProfileProperties { +public class DefaultProfilePropertiesBikeRegular extends ProfileProperties { public DefaultProfilePropertiesBikeRegular() { - super(); + this(false); + } + + public DefaultProfilePropertiesBikeRegular(Boolean setDefaults) { + super(setDefaults); this.setEncoderName(EncoderNameEnum.CYCLING_REGULAR); } } diff --git a/ors-engine/src/main/java/org/heigit/ors/config/profile/defaults/DefaultProfilePropertiesBikeRoad.java b/ors-engine/src/main/java/org/heigit/ors/config/profile/defaults/DefaultProfilePropertiesBikeRoad.java index a9150f699a..49da882649 100644 --- a/ors-engine/src/main/java/org/heigit/ors/config/profile/defaults/DefaultProfilePropertiesBikeRoad.java +++ b/ors-engine/src/main/java/org/heigit/ors/config/profile/defaults/DefaultProfilePropertiesBikeRoad.java @@ -1,10 +1,15 @@ package org.heigit.ors.config.profile.defaults; import org.heigit.ors.common.EncoderNameEnum; +import org.heigit.ors.config.profile.ProfileProperties; -public class DefaultProfilePropertiesBikeRoad extends DefaultProfileProperties { +public class DefaultProfilePropertiesBikeRoad extends ProfileProperties { public DefaultProfilePropertiesBikeRoad() { - super(); + this(false); + } + + public DefaultProfilePropertiesBikeRoad(Boolean setDefaults) { + super(setDefaults); this.setEncoderName(EncoderNameEnum.CYCLING_ROAD); } } diff --git a/ors-engine/src/main/java/org/heigit/ors/config/profile/defaults/DefaultProfilePropertiesCar.java b/ors-engine/src/main/java/org/heigit/ors/config/profile/defaults/DefaultProfilePropertiesCar.java index cb39ab9488..cccdc8fa5a 100644 --- a/ors-engine/src/main/java/org/heigit/ors/config/profile/defaults/DefaultProfilePropertiesCar.java +++ b/ors-engine/src/main/java/org/heigit/ors/config/profile/defaults/DefaultProfilePropertiesCar.java @@ -1,11 +1,21 @@ package org.heigit.ors.config.profile.defaults; import org.heigit.ors.common.EncoderNameEnum; +import org.heigit.ors.config.profile.ProfileProperties; -public class DefaultProfilePropertiesCar extends DefaultProfileProperties { +public class DefaultProfilePropertiesCar extends ProfileProperties { public DefaultProfilePropertiesCar() { - super(); + this(false); + } + + public DefaultProfilePropertiesCar(Boolean setDefaults) { + super(setDefaults); this.setEncoderName(EncoderNameEnum.DRIVING_CAR); + if (setDefaults) { + // Set the default extended storage properties + DefaultExtendedStoragesProperties defaultExtendedStoragesProperties = new DefaultExtendedStoragesProperties(this.getEncoderName()); + setExtStorages(defaultExtendedStoragesProperties.getExtStorages()); + } } } diff --git a/ors-engine/src/main/java/org/heigit/ors/config/profile/defaults/DefaultProfilePropertiesHgv.java b/ors-engine/src/main/java/org/heigit/ors/config/profile/defaults/DefaultProfilePropertiesHgv.java index 46b7bc453f..e4a4779508 100644 --- a/ors-engine/src/main/java/org/heigit/ors/config/profile/defaults/DefaultProfilePropertiesHgv.java +++ b/ors-engine/src/main/java/org/heigit/ors/config/profile/defaults/DefaultProfilePropertiesHgv.java @@ -1,10 +1,15 @@ package org.heigit.ors.config.profile.defaults; import org.heigit.ors.common.EncoderNameEnum; +import org.heigit.ors.config.profile.ProfileProperties; -public class DefaultProfilePropertiesHgv extends DefaultProfileProperties { +public class DefaultProfilePropertiesHgv extends ProfileProperties { public DefaultProfilePropertiesHgv() { - super(); + this(false); + } + + public DefaultProfilePropertiesHgv(Boolean setDefaults) { + super(setDefaults); this.setEncoderName(EncoderNameEnum.DRIVING_HGV); } } diff --git a/ors-engine/src/main/java/org/heigit/ors/config/profile/defaults/DefaultProfilePropertiesHiking.java b/ors-engine/src/main/java/org/heigit/ors/config/profile/defaults/DefaultProfilePropertiesHiking.java index e890b59c7e..03165e6e4f 100644 --- a/ors-engine/src/main/java/org/heigit/ors/config/profile/defaults/DefaultProfilePropertiesHiking.java +++ b/ors-engine/src/main/java/org/heigit/ors/config/profile/defaults/DefaultProfilePropertiesHiking.java @@ -1,10 +1,15 @@ package org.heigit.ors.config.profile.defaults; import org.heigit.ors.common.EncoderNameEnum; +import org.heigit.ors.config.profile.ProfileProperties; -public class DefaultProfilePropertiesHiking extends DefaultProfileProperties { +public class DefaultProfilePropertiesHiking extends ProfileProperties { public DefaultProfilePropertiesHiking() { - super(); + this(false); + } + + public DefaultProfilePropertiesHiking(Boolean setDefaults) { + super(setDefaults); this.setEncoderName(EncoderNameEnum.FOOT_HIKING); } } diff --git a/ors-engine/src/main/java/org/heigit/ors/config/profile/defaults/DefaultProfilePropertiesPublicTransport.java b/ors-engine/src/main/java/org/heigit/ors/config/profile/defaults/DefaultProfilePropertiesPublicTransport.java index 2edaf9b121..030ae6130a 100644 --- a/ors-engine/src/main/java/org/heigit/ors/config/profile/defaults/DefaultProfilePropertiesPublicTransport.java +++ b/ors-engine/src/main/java/org/heigit/ors/config/profile/defaults/DefaultProfilePropertiesPublicTransport.java @@ -2,16 +2,25 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import org.heigit.ors.common.EncoderNameEnum; +import org.heigit.ors.config.profile.ProfileProperties; import java.nio.file.Path; @JsonIgnoreProperties({"ext_storages"}) -public class DefaultProfilePropertiesPublicTransport extends DefaultProfileProperties { +public class DefaultProfilePropertiesPublicTransport extends ProfileProperties { public DefaultProfilePropertiesPublicTransport() { - super(); + this(false); + } + + public DefaultProfilePropertiesPublicTransport(Boolean setDefaults) { + super(setDefaults); this.setEncoderName(EncoderNameEnum.PUBLIC_TRANSPORT); - setElevation(true); - setMaximumVisitedNodes(1000000); - setGtfsFile(Path.of("")); + + if (setDefaults) { + this.setEncoderName(EncoderNameEnum.PUBLIC_TRANSPORT); + setElevation(true); + setMaximumVisitedNodes(1000000); + setGtfsFile(Path.of("")); + } } } diff --git a/ors-engine/src/main/java/org/heigit/ors/config/profile/defaults/DefaultProfilePropertiesWalking.java b/ors-engine/src/main/java/org/heigit/ors/config/profile/defaults/DefaultProfilePropertiesWalking.java index 441fa3a2cd..a48a66eec2 100644 --- a/ors-engine/src/main/java/org/heigit/ors/config/profile/defaults/DefaultProfilePropertiesWalking.java +++ b/ors-engine/src/main/java/org/heigit/ors/config/profile/defaults/DefaultProfilePropertiesWalking.java @@ -1,10 +1,15 @@ package org.heigit.ors.config.profile.defaults; import org.heigit.ors.common.EncoderNameEnum; +import org.heigit.ors.config.profile.ProfileProperties; -public class DefaultProfilePropertiesWalking extends DefaultProfileProperties { +public class DefaultProfilePropertiesWalking extends ProfileProperties { public DefaultProfilePropertiesWalking() { - super(); + this(false); + } + + public DefaultProfilePropertiesWalking(Boolean setDefaults) { + super(setDefaults); this.setEncoderName(EncoderNameEnum.FOOT_WALKING); } } diff --git a/ors-engine/src/main/java/org/heigit/ors/config/profile/defaults/DefaultProfilePropertiesWheelchair.java b/ors-engine/src/main/java/org/heigit/ors/config/profile/defaults/DefaultProfilePropertiesWheelchair.java index a3aaa5e8c7..9f9793454e 100644 --- a/ors-engine/src/main/java/org/heigit/ors/config/profile/defaults/DefaultProfilePropertiesWheelchair.java +++ b/ors-engine/src/main/java/org/heigit/ors/config/profile/defaults/DefaultProfilePropertiesWheelchair.java @@ -1,11 +1,18 @@ package org.heigit.ors.config.profile.defaults; import org.heigit.ors.common.EncoderNameEnum; +import org.heigit.ors.config.profile.ProfileProperties; -public class DefaultProfilePropertiesWheelchair extends DefaultProfileProperties { +public class DefaultProfilePropertiesWheelchair extends ProfileProperties { public DefaultProfilePropertiesWheelchair() { - super(); + this(false); + } + + public DefaultProfilePropertiesWheelchair(Boolean setDefaults) { + super(setDefaults); this.setEncoderName(EncoderNameEnum.WHEELCHAIR); - setMaximumSnappingRadius(50); + + if (setDefaults) setMaximumSnappingRadius(50); + } } diff --git a/ors-engine/src/main/java/org/heigit/ors/config/profile/defaults/DefaultProfiles.java b/ors-engine/src/main/java/org/heigit/ors/config/profile/defaults/DefaultProfiles.java new file mode 100644 index 0000000000..0fee2d03b4 --- /dev/null +++ b/ors-engine/src/main/java/org/heigit/ors/config/profile/defaults/DefaultProfiles.java @@ -0,0 +1,28 @@ +package org.heigit.ors.config.profile.defaults; + +import lombok.Getter; +import org.heigit.ors.config.profile.ProfileProperties; + +import java.util.HashMap; +import java.util.Map; + +@Getter +public class DefaultProfiles { + Map profiles = new HashMap<>(); + + public DefaultProfiles(Boolean setDefaults) { + if (setDefaults) { + profiles.put("driving-car", new DefaultProfileProperties(true)); + profiles.put("driving-hgv", new DefaultProfileProperties(true)); + profiles.put("cycling-regular", new DefaultProfileProperties(true)); + profiles.put("cycling-mountain", new DefaultProfileProperties(true)); + profiles.put("cycling-road", new DefaultProfileProperties(true)); + profiles.put("cycling-electric", new DefaultProfileProperties(true)); + profiles.put("foot-walking", new DefaultProfileProperties(true)); + profiles.put("foot-hiking", new DefaultProfileProperties(true)); + profiles.put("wheelchair", new DefaultProfileProperties(true)); + profiles.put("public-transport", new DefaultProfileProperties(true)); + } + } + +} diff --git a/ors-engine/src/test/java/org/heigit/ors/config/EnginePropertiesTest.java b/ors-engine/src/test/java/org/heigit/ors/config/EnginePropertiesTest.java index a8cfe6c52d..ce40f5a812 100644 --- a/ors-engine/src/test/java/org/heigit/ors/config/EnginePropertiesTest.java +++ b/ors-engine/src/test/java/org/heigit/ors/config/EnginePropertiesTest.java @@ -4,17 +4,17 @@ import com.fasterxml.jackson.databind.ObjectMapper; import org.heigit.ors.common.DataAccessEnum; import org.heigit.ors.common.EncoderNameEnum; +import org.heigit.ors.config.profile.EncoderOptionsProperties; import org.heigit.ors.config.profile.ExecutionProperties; import org.heigit.ors.config.profile.PreparationProperties; import org.heigit.ors.config.profile.ProfileProperties; -import org.heigit.ors.config.profile.defaults.DefaultProfileProperties; -import org.heigit.ors.config.profile.storages.ExtendedStorage; -import org.heigit.ors.config.profile.storages.ExtendedStorageRoadAccessRestrictions; -import org.heigit.ors.config.profile.storages.ExtendedStorageWayCategory; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import java.lang.reflect.Field; import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.List; import java.util.Map; import static org.junit.jupiter.api.Assertions.*; @@ -22,75 +22,20 @@ class EnginePropertiesTest { private EngineProperties engineProperties; + private String testJson; @BeforeEach void setUp() { engineProperties = new EngineProperties(); + testJson = "{\n" + " \"graphs_data_access\": \"MMAP\",\n" + " \"elevation\": {},\n" + " \"profile_default\": {\n" + " \"preparation\": {\n" + " \"min_network_size\": 300,\n" + " \"methods\": {\n" + " \"lm\": {\n" + " \"enabled\": false,\n" + " \"threads\": 4,\n" + " \"weightings\": \"shortest\",\n" + " \"landmarks\": 2\n" + " }\n" + " }\n" + " },\n" + " \"execution\": {\n" + " \"methods\": {\n" + " \"lm\": {\n" + " \"active_landmarks\": 8\n" + " }\n" + " }\n" + " }\n" + " },\n" + " \"profiles\": {\n" + " \"car\": {\n" + " \"encoder_name\": \"driving-car\",\n" + " \"enabled\": true,\n" + " \"encoder_options\": {},\n" + " \"preparation\": {" + " \"methods\": {\n" + " \"lm\": {\n" + " \"enabled\": true,\n" + " \"threads\": 1\n" + " }\n" + " }\n" + " },\n" + " \"execution\": {\n" + " \"methods\": {" + " \"lm\": {" + " \"active_landmarks\": 2" + " }\n" + " }\n" + " },\n" + " \"ext_storages\": {}\n" + " }\n" + " }\n" + "}"; } @Test - void sourceFile_DefaultValue() { - assertEquals(Paths.get(""), engineProperties.getSourceFile()); - } - - @Test - void initThreads_DefaultValue() { - assertEquals(1, engineProperties.getInitThreads()); - } - - @Test - void preparationMode_DefaultValue() { - assertFalse(engineProperties.getPreparationMode()); - } - - @Test - void configOutputMode_DefaultValue() { - assertFalse(engineProperties.getConfigOutputMode()); - } - - @Test - void graphsRootPath_DefaultValue() { - assertEquals(Paths.get("./graphs"), engineProperties.getGraphsRootPath()); - } - - @Test - void graphsDataAccess_DefaultValue() { - assertEquals(DataAccessEnum.RAM_STORE, engineProperties.getGraphsDataAccess()); - } - - @Test - void elevation_DefaultValue() { - assertNotNull(engineProperties.getElevation()); - } - - @Test - void profileDefault_DefaultValue() { - assertNotNull(engineProperties.getProfileDefault()); - } - - @Test - void profiles_DefaultValue() { - Map profiles = engineProperties.getProfiles(); - assertNotNull(profiles); - assertEquals(10, profiles.size()); - assertTrue(profiles.containsKey("car")); - assertTrue(profiles.containsKey("hgv")); - assertTrue(profiles.containsKey("bike-regular")); - assertTrue(profiles.containsKey("bike-electric")); - assertTrue(profiles.containsKey("bike-mountain")); - assertTrue(profiles.containsKey("bike-road")); - assertTrue(profiles.containsKey("walking")); - assertTrue(profiles.containsKey("hiking")); - assertTrue(profiles.containsKey("wheelchair")); - assertTrue(profiles.containsKey("public-transport")); - } - - @Test - void testSerializeDefaultEngineProperties() throws JsonProcessingException { + void testSerializeEmptyDefaultEngineProperties() throws JsonProcessingException { ObjectMapper objectMapper = new ObjectMapper(); String json = objectMapper.writeValueAsString(engineProperties); assertNotNull(json); - String expectedJson = "{\"source_file\":\"\",\"init_threads\":1,\"preparation_mode\":false,\"config_output_mode\":false,\"graphs_root_path\":\"./graphs\",\"graphs_data_access\":\"RAM_STORE\",\"elevation\":{\"preprocessed\":false,\"data_access\":\"MMAP\",\"cache_clear\":false,\"provider\":\"multi\",\"cache_path\":\"./elevation_cache\"},\"profile_default\":{\"enabled\":false,\"encoder_name\":\"unknown\",\"elevation\":true,\"elevation_smoothing\":true,\"encoder_flags_size\":8,\"instructions\":true,\"optimize\":false,\"traffic\":false,\"interpolate_bridges_and_tunnels\":true,\"force_turn_costs\":false,\"location_index_resolution\":500,\"location_index_search_iterations\":4,\"maximum_distance\":100000.0,\"maximum_distance_dynamic_weights\":100000.0,\"maximum_distance_avoid_areas\":100000.0,\"maximum_distance_alternative_routes\":100000.0,\"maximum_distance_round_trip_routes\":100000.0,\"maximum_speed_lower_bound\":80.0,\"maximum_way_points\":50,\"maximum_snapping_radius\":400,\"maximum_visited_nodes\":1000000,\"ext_storages\":{}},\"profiles\":{\"car\":{\"enabled\":false,\"encoder_name\":\"driving-car\",\"elevation\":true,\"elevation_smoothing\":true,\"encoder_flags_size\":8,\"instructions\":true,\"optimize\":false,\"traffic\":false,\"interpolate_bridges_and_tunnels\":true,\"force_turn_costs\":false,\"location_index_resolution\":500,\"location_index_search_iterations\":4,\"maximum_distance\":100000.0,\"maximum_distance_dynamic_weights\":100000.0,\"maximum_distance_avoid_areas\":100000.0,\"maximum_distance_alternative_routes\":100000.0,\"maximum_distance_round_trip_routes\":100000.0,\"maximum_speed_lower_bound\":80.0,\"maximum_way_points\":50,\"maximum_snapping_radius\":400,\"maximum_visited_nodes\":1000000,\"ext_storages\":{}},\"hgv\":{\"enabled\":false,\"encoder_name\":\"driving-hgv\",\"elevation\":true,\"elevation_smoothing\":true,\"encoder_flags_size\":8,\"instructions\":true,\"optimize\":false,\"traffic\":false,\"interpolate_bridges_and_tunnels\":true,\"force_turn_costs\":false,\"location_index_resolution\":500,\"location_index_search_iterations\":4,\"maximum_distance\":100000.0,\"maximum_distance_dynamic_weights\":100000.0,\"maximum_distance_avoid_areas\":100000.0,\"maximum_distance_alternative_routes\":100000.0,\"maximum_distance_round_trip_routes\":100000.0,\"maximum_speed_lower_bound\":80.0,\"maximum_way_points\":50,\"maximum_snapping_radius\":400,\"maximum_visited_nodes\":1000000,\"ext_storages\":{}},\"bike-regular\":{\"enabled\":false,\"encoder_name\":\"cycling-regular\",\"elevation\":true,\"elevation_smoothing\":true,\"encoder_flags_size\":8,\"instructions\":true,\"optimize\":false,\"traffic\":false,\"interpolate_bridges_and_tunnels\":true,\"force_turn_costs\":false,\"location_index_resolution\":500,\"location_index_search_iterations\":4,\"maximum_distance\":100000.0,\"maximum_distance_dynamic_weights\":100000.0,\"maximum_distance_avoid_areas\":100000.0,\"maximum_distance_alternative_routes\":100000.0,\"maximum_distance_round_trip_routes\":100000.0,\"maximum_speed_lower_bound\":80.0,\"maximum_way_points\":50,\"maximum_snapping_radius\":400,\"maximum_visited_nodes\":1000000,\"ext_storages\":{}},\"bike-electric\":{\"enabled\":false,\"encoder_name\":\"cycling-electric\",\"elevation\":true,\"elevation_smoothing\":true,\"encoder_flags_size\":8,\"instructions\":true,\"optimize\":false,\"traffic\":false,\"interpolate_bridges_and_tunnels\":true,\"force_turn_costs\":false,\"location_index_resolution\":500,\"location_index_search_iterations\":4,\"maximum_distance\":100000.0,\"maximum_distance_dynamic_weights\":100000.0,\"maximum_distance_avoid_areas\":100000.0,\"maximum_distance_alternative_routes\":100000.0,\"maximum_distance_round_trip_routes\":100000.0,\"maximum_speed_lower_bound\":80.0,\"maximum_way_points\":50,\"maximum_snapping_radius\":400,\"maximum_visited_nodes\":1000000,\"ext_storages\":{}},\"bike-mountain\":{\"enabled\":false,\"encoder_name\":\"cycling-mountain\",\"elevation\":true,\"elevation_smoothing\":true,\"encoder_flags_size\":8,\"instructions\":true,\"optimize\":false,\"traffic\":false,\"interpolate_bridges_and_tunnels\":true,\"force_turn_costs\":false,\"location_index_resolution\":500,\"location_index_search_iterations\":4,\"maximum_distance\":100000.0,\"maximum_distance_dynamic_weights\":100000.0,\"maximum_distance_avoid_areas\":100000.0,\"maximum_distance_alternative_routes\":100000.0,\"maximum_distance_round_trip_routes\":100000.0,\"maximum_speed_lower_bound\":80.0,\"maximum_way_points\":50,\"maximum_snapping_radius\":400,\"maximum_visited_nodes\":1000000,\"ext_storages\":{}},\"bike-road\":{\"enabled\":false,\"encoder_name\":\"cycling-road\",\"elevation\":true,\"elevation_smoothing\":true,\"encoder_flags_size\":8,\"instructions\":true,\"optimize\":false,\"traffic\":false,\"interpolate_bridges_and_tunnels\":true,\"force_turn_costs\":false,\"location_index_resolution\":500,\"location_index_search_iterations\":4,\"maximum_distance\":100000.0,\"maximum_distance_dynamic_weights\":100000.0,\"maximum_distance_avoid_areas\":100000.0,\"maximum_distance_alternative_routes\":100000.0,\"maximum_distance_round_trip_routes\":100000.0,\"maximum_speed_lower_bound\":80.0,\"maximum_way_points\":50,\"maximum_snapping_radius\":400,\"maximum_visited_nodes\":1000000,\"ext_storages\":{}},\"walking\":{\"enabled\":false,\"encoder_name\":\"foot-walking\",\"elevation\":true,\"elevation_smoothing\":true,\"encoder_flags_size\":8,\"instructions\":true,\"optimize\":false,\"traffic\":false,\"interpolate_bridges_and_tunnels\":true,\"force_turn_costs\":false,\"location_index_resolution\":500,\"location_index_search_iterations\":4,\"maximum_distance\":100000.0,\"maximum_distance_dynamic_weights\":100000.0,\"maximum_distance_avoid_areas\":100000.0,\"maximum_distance_alternative_routes\":100000.0,\"maximum_distance_round_trip_routes\":100000.0,\"maximum_speed_lower_bound\":80.0,\"maximum_way_points\":50,\"maximum_snapping_radius\":400,\"maximum_visited_nodes\":1000000,\"ext_storages\":{}},\"hiking\":{\"enabled\":false,\"encoder_name\":\"foot-hiking\",\"elevation\":true,\"elevation_smoothing\":true,\"encoder_flags_size\":8,\"instructions\":true,\"optimize\":false,\"traffic\":false,\"interpolate_bridges_and_tunnels\":true,\"force_turn_costs\":false,\"location_index_resolution\":500,\"location_index_search_iterations\":4,\"maximum_distance\":100000.0,\"maximum_distance_dynamic_weights\":100000.0,\"maximum_distance_avoid_areas\":100000.0,\"maximum_distance_alternative_routes\":100000.0,\"maximum_distance_round_trip_routes\":100000.0,\"maximum_speed_lower_bound\":80.0,\"maximum_way_points\":50,\"maximum_snapping_radius\":400,\"maximum_visited_nodes\":1000000,\"ext_storages\":{}},\"wheelchair\":{\"enabled\":false,\"encoder_name\":\"wheelchair\",\"elevation\":true,\"elevation_smoothing\":true,\"encoder_flags_size\":8,\"instructions\":true,\"optimize\":false,\"traffic\":false,\"interpolate_bridges_and_tunnels\":true,\"force_turn_costs\":false,\"location_index_resolution\":500,\"location_index_search_iterations\":4,\"maximum_distance\":100000.0,\"maximum_distance_dynamic_weights\":100000.0,\"maximum_distance_avoid_areas\":100000.0,\"maximum_distance_alternative_routes\":100000.0,\"maximum_distance_round_trip_routes\":100000.0,\"maximum_speed_lower_bound\":80.0,\"maximum_way_points\":50,\"maximum_snapping_radius\":50,\"maximum_visited_nodes\":1000000,\"ext_storages\":{}},\"public-transport\":{\"enabled\":false,\"encoder_name\":\"public-transport\",\"elevation\":true,\"elevation_smoothing\":true,\"encoder_flags_size\":8,\"instructions\":true,\"optimize\":false,\"traffic\":false,\"interpolate_bridges_and_tunnels\":true,\"force_turn_costs\":false,\"location_index_resolution\":500,\"location_index_search_iterations\":4,\"maximum_distance\":100000.0,\"maximum_distance_dynamic_weights\":100000.0,\"maximum_distance_avoid_areas\":100000.0,\"maximum_distance_alternative_routes\":100000.0,\"maximum_distance_round_trip_routes\":100000.0,\"maximum_speed_lower_bound\":80.0,\"maximum_way_points\":50,\"maximum_snapping_radius\":400,\"maximum_visited_nodes\":1000000}}}"; + String expectedJson = "{\"source_file\":null,\"init_threads\":null,\"preparation_mode\":null,\"config_output_mode\":null,\"graphs_root_path\":null,\"graphs_data_access\":null,\"elevation\":{\"preprocessed\":null,\"data_access\":null,\"cache_clear\":null,\"provider\":null,\"cache_path\":null},\"profile_default\":{\"ext_storages\":{}},\"profiles\":{}}"; assertEquals(expectedJson, json); } @@ -167,177 +112,151 @@ void testDeserialize() throws JsonProcessingException { assertTrue(hgvProfile.getExtStorages().isEmpty()); } + Boolean assertAllNull(Object o, ArrayList ignoreList) { + for (Field field : o.getClass().getDeclaredFields()) { + field.setAccessible(true); + try { + if (ignoreList.contains(field.getName())) { + continue; + } + Object value = field.get(o); + if (value == null) { + continue; + } + return false; + } catch (IllegalAccessException e) { + e.printStackTrace(); + } + } + return true; + } + @Test - void deserializeOneCompleteProfile() throws JsonProcessingException { - DefaultProfileProperties defaultProfileProperties = new DefaultProfileProperties(); - // Cast to (ExtendedStorageWayCategoryTest) - String json = "{\n" + - " \"source_file\": \"ors-api/src/test/files/heidelberg.osm.gz\",\n" + - " \"config_output_mode\": true,\n" + - " \"graphs_root_path\": \"./graphs\",\n" + - " \"graphs_data_access\": \"RAM_STORE\",\n" + - " \"elevation\": {\n" + - " \"cache_path\": \"./elevation_cache\"\n" + - " },\n" + - " \"profile_default\": {\n" + - " \"enabled\": true,\n" + - " \"preparation\": {\n" + - " \"min_network_size\": 300,\n" + - " \"methods\": {\n" + - " \"lm\": {\n" + - " \"enabled\": true,\n" + - " \"threads\": 4,\n" + - " \"weightings\": \"shortest\",\n" + - " \"landmarks\": 2\n" + - " }\n" + - " }\n" + - " },\n" + - " \"execution\": {\n" + - " \"methods\": {\n" + - " \"lm\": {\n" + - " \"active_landmarks\": 8\n" + - " }\n" + - " }\n" + - " }\n" + - " },\n" + - " \"profiles\": {\n" + - " \"car\": {\n" + - " \"enabled\": true,\n" + - " \"encoder_name\": \"driving-car\",\n" + - " \"encoder_options\": {\n" + - " \"turn_costs\": true\n" + - " },\n" + - " \"preparation\": {\n" + - " \"min_network_size\": 900,\n" + - " \"methods\": {\n" + - " \"ch\": {\n" + - " \"enabled\": true,\n" + - " \"threads\": 1,\n" + - " \"weightings\": \"fastest\"\n" + - " }\n" + - " }\n" + - " },\n" + - " \"execution\": {\n" + - " \"methods\": {\n" + - " \"lm\": {\n" + - " \"active_landmarks\": 2\n" + - " },\n" + - " \"core\": {\n" + - " \"active_landmarks\": 6\n" + - " }\n" + - " }\n" + - " },\n" + - " \"ext_storages\": {\n" + - " \"WayCategory\": {},\n" + - " \"RoadAccessRestrictions\": {\n" + - " \"use_for_warnings\": true\n" + - " }\n" + - " }\n" + - " }\n" + - " }\n" + - "}"; - ObjectMapper objectMapper = new ObjectMapper(); - EngineProperties deserializedEngineProperties = objectMapper.readValue(json, EngineProperties.class); - assertNotNull(deserializedEngineProperties); - assertEquals(Paths.get("ors-api/src/test/files/heidelberg.osm.gz").toAbsolutePath(), deserializedEngineProperties.getSourceFile()); - assertFalse(deserializedEngineProperties.getPreparationMode()); - assertTrue(deserializedEngineProperties.getConfigOutputMode()); - assertEquals(Paths.get("./graphs").toAbsolutePath(), deserializedEngineProperties.getGraphsRootPath()); - assertEquals(DataAccessEnum.RAM_STORE, deserializedEngineProperties.getGraphsDataAccess()); - assertNotNull(deserializedEngineProperties.getElevation()); - assertNotNull(deserializedEngineProperties.getProfileDefault()); + void testRawSettingEverythingElseNullDefaultProfiles() throws JsonProcessingException, IllegalAccessException, NoSuchFieldException { + ObjectMapper mapper = new ObjectMapper(); + EngineProperties foo = mapper.readValue(testJson, EngineProperties.class); - ProfileProperties deserializedDefaultProfile = deserializedEngineProperties.getProfileDefault(); - // Check default overrides - assertTrue(deserializedDefaultProfile.getEnabled()); - assertEquals(300, deserializedDefaultProfile.getPreparation().getMinNetworkSize()); - assertNull(deserializedDefaultProfile.getPreparation().getMethods().getCh()); - assertNull(deserializedDefaultProfile.getPreparation().getMethods().getCore()); - assertNull(deserializedDefaultProfile.getPreparation().getMethods().getFastisochrones()); - - // Check Defaults - assertEquals(defaultProfileProperties.getElevation(), deserializedDefaultProfile.getElevation()); - assertEquals(defaultProfileProperties.getElevationSmoothing(), deserializedDefaultProfile.getElevationSmoothing()); - assertEquals(defaultProfileProperties.getEncoderFlagsSize(), deserializedDefaultProfile.getEncoderFlagsSize()); - assertEquals(defaultProfileProperties.getInstructions(), deserializedDefaultProfile.getInstructions()); - assertEquals(defaultProfileProperties.getOptimize(), deserializedDefaultProfile.getOptimize()); - assertEquals(defaultProfileProperties.getTraffic(), deserializedDefaultProfile.getTraffic()); - assertEquals(defaultProfileProperties.getInterpolateBridgesAndTunnels(), deserializedDefaultProfile.getInterpolateBridgesAndTunnels()); - assertEquals(defaultProfileProperties.getForceTurnCosts(), deserializedDefaultProfile.getForceTurnCosts()); - assertEquals(defaultProfileProperties.getLocationIndexResolution(), deserializedDefaultProfile.getLocationIndexResolution()); - assertEquals(defaultProfileProperties.getLocationIndexSearchIterations(), deserializedDefaultProfile.getLocationIndexSearchIterations()); - assertEquals(defaultProfileProperties.getMaximumDistance(), deserializedDefaultProfile.getMaximumDistance()); - assertEquals(defaultProfileProperties.getMaximumDistanceDynamicWeights(), deserializedDefaultProfile.getMaximumDistanceDynamicWeights()); - assertEquals(defaultProfileProperties.getMaximumDistanceAvoidAreas(), deserializedDefaultProfile.getMaximumDistanceAvoidAreas()); - assertEquals(defaultProfileProperties.getMaximumDistanceAlternativeRoutes(), deserializedDefaultProfile.getMaximumDistanceAlternativeRoutes()); - assertEquals(defaultProfileProperties.getMaximumDistanceRoundTripRoutes(), deserializedDefaultProfile.getMaximumDistanceRoundTripRoutes()); - assertEquals(defaultProfileProperties.getMaximumSpeedLowerBound(), deserializedDefaultProfile.getMaximumSpeedLowerBound()); - assertEquals(defaultProfileProperties.getMaximumWayPoints(), deserializedDefaultProfile.getMaximumWayPoints()); - assertEquals(defaultProfileProperties.getMaximumSnappingRadius(), deserializedDefaultProfile.getMaximumSnappingRadius()); - assertEquals(defaultProfileProperties.getMaximumVisitedNodes(), deserializedDefaultProfile.getMaximumVisitedNodes()); - assertEquals(0, deserializedDefaultProfile.getExtStorages().size()); - - - PreparationProperties.MethodsProperties lmMethods = deserializedDefaultProfile.getPreparation().getMethods(); - assertNotNull(lmMethods); - assertTrue(lmMethods.getLm().isEnabled()); - assertEquals(4, lmMethods.getLm().getThreads()); - assertEquals("shortest", lmMethods.getLm().getWeightings()); - assertEquals(2, lmMethods.getLm().getLandmarks()); - - assertNull(deserializedDefaultProfile.getExecution().getMethods().getAstar()); - assertNull(deserializedDefaultProfile.getExecution().getMethods().getCore()); - - ExecutionProperties.MethodsProperties lmExecutionMethods = deserializedDefaultProfile.getExecution().getMethods(); - assertNotNull(lmExecutionMethods); - assertEquals(8, lmExecutionMethods.getLm().getActiveLandmarks()); + Map defaultProfiles = foo.getDefault_profiles(); + assertEquals(0, defaultProfiles.size()); + } - Map profiles = deserializedEngineProperties.getProfiles(); - assertNotNull(profiles); + @Test + void testRawSettingEverythingElseNullGraphsDataAccess() throws JsonProcessingException, IllegalAccessException, NoSuchFieldException { + ObjectMapper mapper = new ObjectMapper(); + EngineProperties foo = mapper.readValue(testJson, EngineProperties.class); + assertEquals(DataAccessEnum.MMAP, foo.getGraphsDataAccess()); + } + + @Test + void testRawSettingEverythingElseNullElevationProperties() throws JsonProcessingException, IllegalAccessException, NoSuchFieldException { + ObjectMapper mapper = new ObjectMapper(); + EngineProperties foo = mapper.readValue(testJson, EngineProperties.class); + + ElevationProperties elevationProperties = foo.getElevation(); + assertTrue(assertAllNull(elevationProperties, new ArrayList<>())); + } + + @Test + void testRawSettingEverythingElseNullProfileDefaultProperties() throws JsonProcessingException, IllegalAccessException, NoSuchFieldException { + ObjectMapper mapper = new ObjectMapper(); + EngineProperties foo = mapper.readValue(testJson, EngineProperties.class); + + ProfileProperties profileProperties = foo.getProfileDefault(); + + assertTrue(assertAllNull(profileProperties, new ArrayList<>())); + + EncoderOptionsProperties encoderOptions = profileProperties.getEncoderOptions(); + assertTrue(assertAllNull(encoderOptions, new ArrayList<>())); + + PreparationProperties preparationProperties = profileProperties.getPreparation(); + assertEquals(300, preparationProperties.getMinNetworkSize()); + assertNull(preparationProperties.getMinOneWayNetworkSize()); + + PreparationProperties.MethodsProperties methodsProperties = preparationProperties.getMethods(); + assertTrue(assertAllNull(methodsProperties, new ArrayList<>(List.of("lm")))); + + PreparationProperties.MethodsProperties.LMProperties lmProperties = methodsProperties.getLm(); + assertFalse(lmProperties.isEnabled()); + assertEquals(4, lmProperties.getThreads()); + assertEquals("shortest", lmProperties.getWeightings()); + assertEquals(2, lmProperties.getLandmarks()); + + ExecutionProperties executionProperties = profileProperties.getExecution(); + assertTrue(assertAllNull(executionProperties.getMethods(), new ArrayList<>(List.of("lm")))); + + ExecutionProperties.MethodsProperties.LMProperties lmExecutionProperties = executionProperties.getMethods().getLm(); + assertEquals(8, lmExecutionProperties.getActiveLandmarks()); + assertEquals(0, profileProperties.getExtStorages().size()); + } + + @Test + void testRawSettingEverythingElseNullCarProfileProperties() throws JsonProcessingException, IllegalAccessException, NoSuchFieldException { + ObjectMapper mapper = new ObjectMapper(); + EngineProperties foo = mapper.readValue(testJson, EngineProperties.class); + + Map profiles = foo.getProfiles(); assertEquals(1, profiles.size()); assertTrue(profiles.containsKey("car")); - ProfileProperties deserializedCarProfile = profiles.get("car"); - assertNotNull(deserializedCarProfile); - assertTrue(deserializedCarProfile.getEnabled()); - assertEquals(EncoderNameEnum.DRIVING_CAR, deserializedCarProfile.getEncoderName()); - assertNotNull(deserializedCarProfile.getEncoderOptions()); - assertTrue(deserializedCarProfile.getEncoderOptions().getTurnCosts()); - assertEquals(900, deserializedCarProfile.getPreparation().getMinNetworkSize()); - assertNull(deserializedCarProfile.getPreparation().getMethods().getLm()); - assertNull(deserializedCarProfile.getPreparation().getMethods().getFastisochrones()); - assertNotNull(deserializedCarProfile.getPreparation().getMethods().getCh()); - - PreparationProperties.MethodsProperties.CHProperties ch = deserializedCarProfile.getPreparation().getMethods().getCh(); - assertNotNull(ch); - assertTrue(ch.isEnabled()); - assertEquals(1, ch.getThreads()); - assertEquals("fastest", ch.getWeightings()); - - ExecutionProperties.MethodsProperties executionMethods = deserializedCarProfile.getExecution().getMethods(); - assertNotNull(executionMethods); - assertNull(executionMethods.getAstar()); - assertNotNull(executionMethods.getLm()); - assertEquals(2, executionMethods.getLm().getActiveLandmarks()); - assertNotNull(executionMethods.getCore()); - assertEquals(6, executionMethods.getCore().getActiveLandmarks()); - - - Map extStorages = deserializedCarProfile.getExtStorages(); - assertNotNull(extStorages); - assertEquals(2, extStorages.size()); - assertTrue(extStorages.containsKey("WayCategory")); - assertTrue(extStorages.containsKey("RoadAccessRestrictions")); - - ExtendedStorageWayCategory wayCategory = (ExtendedStorageWayCategory) extStorages.get("WayCategory"); - assertNotNull(wayCategory); - assertTrue(wayCategory.getEnabled()); - - ExtendedStorageRoadAccessRestrictions roadAccessRestrictions = (ExtendedStorageRoadAccessRestrictions) extStorages.get("RoadAccessRestrictions"); - assertNotNull(roadAccessRestrictions); - assertTrue(roadAccessRestrictions.getEnabled()); - assertTrue(roadAccessRestrictions.getUseForWarnings()); + ProfileProperties carProfile = profiles.get("car"); + assertTrue(carProfile.getEnabled()); + assertEquals(EncoderNameEnum.DRIVING_CAR, carProfile.getEncoderName()); + + assertTrue(assertAllNull(carProfile, new ArrayList<>(List.of("encoderName", "enabled", "encoderOptions", "preparation", "execution", "extStorages")))); + + EncoderOptionsProperties carEncoderOptions = carProfile.getEncoderOptions(); + assertTrue(assertAllNull(carEncoderOptions, new ArrayList<>())); + + PreparationProperties carPreparation = carProfile.getPreparation(); + assertTrue(assertAllNull(carPreparation, new ArrayList<>(List.of("methods")))); + + PreparationProperties.MethodsProperties carMethods = carPreparation.getMethods(); + assertTrue(assertAllNull(carMethods, new ArrayList<>(List.of("lm")))); + PreparationProperties.MethodsProperties.LMProperties carLm = carMethods.getLm(); + assertTrue(assertAllNull(carLm, new ArrayList<>(List.of("enabled", "threads")))); + assertTrue(carLm.isEnabled()); + assertEquals(1, carLm.getThreads()); + + ExecutionProperties carExecution = carProfile.getExecution(); + assertTrue(assertAllNull(carExecution.getMethods(), new ArrayList<>(List.of("lm")))); + + ExecutionProperties.MethodsProperties.LMProperties carLmExecution = carExecution.getMethods().getLm(); + assertEquals(2, carLmExecution.getActiveLandmarks()); + assertEquals(0, carProfile.getExtStorages().size()); } + @Test + void testDefaultEngineProperties() { +// EngineProperties defaultEngineProperties = new EngineProperties(true); +// // DONE! TODO finish logic that the user settings are the only thing set without the default booleans true. everything else null. +// // TODO find a way so that the profile defaults only get the profile related differences. everything else null -> in progress +// // Todo initialize the ProfileDefault with everything except the ext_storages +// +// +// // Assure the root level is intact and set to default +// assertEquals(DataAccessEnum.MMAP, foo.getGraphsDataAccess()); +// +// // Check that the nested object elevation is set from defaults +// assertEquals(defaultEngineProperties.getElevation().getProvider(), foo.getElevation().getProvider()); +// assertEquals(defaultEngineProperties.getElevation().getCachePath(), foo.getElevation().getCachePath()); +// assertEquals(defaultEngineProperties.getElevation().getDataAccess(), foo.getElevation().getDataAccess()); +// assertEquals(defaultEngineProperties.getElevation().isPreprocessed(), foo.getElevation().isPreprocessed()); +// assertEquals(defaultEngineProperties.getElevation().getCacheClear(), foo.getElevation().getCacheClear()); +// +// // Check that the profile default is set correctly +// assertEquals(defaultEngineProperties.getProfileDefault().getEnabled(), foo.getProfileDefault().getEnabled()); +// assertEquals(defaultEngineProperties.getProfileDefault().getElevation(), foo.getProfileDefault().getElevation()); +// assertEquals(defaultEngineProperties.getProfileDefault().getEncoderOptions().getBlockFords(), foo.getProfileDefault().getEncoderOptions().getBlockFords()); +// +// // Ensure preparation is only default on the min_one_way_network_size and the nested methods section and not the min_network_size since that was set manually. +// assertEquals(300, foo.getProfileDefault().getPreparation().getMinNetworkSize()); +// assertEquals(defaultEngineProperties.getProfileDefault().getPreparation().getMinOneWayNetworkSize(), foo.getProfileDefault().getPreparation().getMinOneWayNetworkSize()); +// assertEquals(defaultEngineProperties.getProfileDefault().getPreparation().getMethods(), foo.getProfileDefault().getPreparation().getMethods()); +// +// +// // Check profile default +// ProfileProperties profileDefault = foo.getProfileDefault(); +// assertNotNull(profileDefault); + } } \ No newline at end of file