Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,8 @@
*/
public class GMLConversionData {

public static final Integer NON_URBAN_ROAD_DEFAULT_SPEED = 60;

private final List<AeriusException> errors;
private final List<AeriusException> warnings;
private final Set<String> idMap = new HashSet<>();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
import nl.overheid.aerius.shared.domain.v2.source.road.ValuesPerVehicleType;
import nl.overheid.aerius.shared.domain.v2.source.road.Vehicles;
import nl.overheid.aerius.shared.exception.AeriusException;
import nl.overheid.aerius.shared.exception.ImaerExceptionReason;

/**
*
Expand Down Expand Up @@ -91,7 +92,7 @@ private void addEmissionValues(final String gmlRoadTypeCode, final List<Vehicles
final StandardVehicles standardVehicle = findExistingMatch(sv, mergingStandardVehicles, gmlRoadTypeCode).orElseGet(() -> {
final StandardVehicles vse = new StandardVehicles();

vse.setMaximumSpeed(getMaximumSpeed(gmlRoadTypeCode, sv.getMaximumSpeed()));
vse.setMaximumSpeed(getMaximumSpeed(source.getId(), true, gmlRoadTypeCode, sv.getMaximumSpeed()));
vse.setTimeUnit(TimeUnit.valueOf(sv.getTimeUnit().name()));
mergingStandardVehicles.add(vse);
addToVehicles.add(vse);
Expand All @@ -116,25 +117,37 @@ private void addEmissionValues(final String gmlRoadTypeCode, final List<Vehicles
* NATIONAL is representative for roads with speed >= 80 km/h. Therefore 80 is set. GENERAL represented roads with average speed of 60 km/h.
* Therefore 60 is set.
*
* @param sourceId The id of the source
* @param warn if set it will report a warning message in case a default speed is set
* @param gmlRoadTypeCode the road type code as set in the GML
* @param maximumSpeed optional max speed set in the GML
* @return the maximum speed to use.
*/
private static Integer getMaximumSpeed(final String gmlRoadTypeCode, final Integer maximumSpeed) {
private Integer getMaximumSpeed(final String sourceId, final boolean warn, final String gmlRoadTypeCode, final Integer maximumSpeed) {
if (maximumSpeed != null && maximumSpeed != 0) {
return maximumSpeed;
}
return switch (gmlRoadTypeCode) {
case "NON_URBAN_ROAD_NATIONAL" -> Integer.valueOf(80);
case "NON_URBAN_ROAD_GENERAL" -> Integer.valueOf(60);
case "NON_URBAN_ROAD_NATIONAL" -> getDefaultSpeed(sourceId, warn);
case "NON_URBAN_ROAD_GENERAL" -> getDefaultSpeed(sourceId, warn);
default -> maximumSpeed;
};
}

private Integer getDefaultSpeed(final String sourceId, final boolean warn) {
final Integer speed = GMLConversionData.NON_URBAN_ROAD_DEFAULT_SPEED;

if (warn) {
getConversionData().getWarnings().add(
new AeriusException(ImaerExceptionReason.GML_NON_URBAN_ROAD_DEFAULT_SPEED, sourceId, String.valueOf(speed)));
}
return speed;
}

private Optional<StandardVehicles> findExistingMatch(final IsGmlStandardVehicle sv, final List<StandardVehicles> mergingStandardVehicles,
final String gmlRoadTypeCode) {
return mergingStandardVehicles.stream()
.filter(x -> Objects.equals(x.getMaximumSpeed(), getMaximumSpeed(gmlRoadTypeCode, sv.getMaximumSpeed())))
.filter(x -> Objects.equals(x.getMaximumSpeed(), getMaximumSpeed(null, false, gmlRoadTypeCode, sv.getMaximumSpeed())))
.filter(x -> Boolean.TRUE.equals(x.getStrictEnforcement()) == Boolean.TRUE.equals((sv.isStrictEnforcement())))
.filter(x -> x.getTimeUnit() == TimeUnit.valueOf(sv.getTimeUnit().name()))
.filter(x -> !x.getValuesPerVehicleTypes().containsKey(sv.getVehicleType()))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,10 +45,10 @@ public GML2SRM2RoadV10(final GMLConversionData conversionData) {
@Override
protected void addEmissionValues(final RoadType roadType, final List<Vehicles> addToVehicles, final T source, final IsGmlStandardVehicle sv,
final List<StandardVehicles> mergingStandardVehicles) {
final StandardVehicles standardVehicle = findExistingMatch(sv, mergingStandardVehicles).orElseGet(() -> {
final StandardVehicles standardVehicle = findExistingMatch(sv, roadType, mergingStandardVehicles).orElseGet(() -> {
final StandardVehicles vse = new StandardVehicles();

vse.setMaximumSpeed(getMaximumSpeed(roadType, source.getMaximumSpeed()));
vse.setMaximumSpeed(getMaximumSpeed(source.getId(), true, roadType, source.getMaximumSpeed()));
vse.setStrictEnforcement(source.isStrictEnforcement());
vse.setTimeUnit(TimeUnit.valueOf(sv.getTimeUnit().name()));
mergingStandardVehicles.add(vse);
Expand All @@ -62,11 +62,10 @@ protected void addEmissionValues(final RoadType roadType, final List<Vehicles> a
}

@Override
protected Optional<StandardVehicles> findExistingMatch(final IsGmlStandardVehicle sv, final List<StandardVehicles> mergingStandardVehicles) {
protected Optional<StandardVehicles> findExistingMatch(final IsGmlStandardVehicle sv, final RoadType roadType,
final List<StandardVehicles> mergingStandardVehicles) {
return mergingStandardVehicles.stream()
.filter(x -> x.getTimeUnit() == TimeUnit.valueOf(sv.getTimeUnit().name()))
.filter(x -> !x.getValuesPerVehicleTypes().containsKey(sv.getVehicleType().getStandardVehicleCode()))
.findFirst();
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -17,15 +17,15 @@
package nl.overheid.aerius.gml.base.source.road.v11;

import nl.overheid.aerius.gml.base.GMLConversionData;
import nl.overheid.aerius.gml.base.source.road.v40.GML2SRM2Road;
import nl.overheid.aerius.gml.base.source.road.v40.GML2SRM2RoadV40;
import nl.overheid.aerius.gml.base.source.road.v40.IsGmlSRM2Road;
import nl.overheid.aerius.shared.ImaerConstants;

/**
* Version of GML2SRM2Road that handles dynamic segmentation for older versions (IMAER 1.1 and older),
* where from and to positions were defined in percentages instead of fractions.
*/
public class GML2SRM2RoadV11<T extends IsGmlSRM2Road> extends GML2SRM2Road<T> {
public class GML2SRM2RoadV11<T extends IsGmlSRM2Road> extends GML2SRM2RoadV40<T> {

/**
* @param conversionData
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,11 +50,6 @@ protected String convertRoadTypeCode(final IsGmlSRM1Road source, final RoadType
return source.getSpeedProfile().getRoadTypeCode();
}

@Override
protected Integer getMaximumSpeed(final RoadType roadType, final Integer maximumSpeed) {
return (maximumSpeed == null || maximumSpeed == 0) && roadType == RoadType.NON_URBAN_ROAD ? Integer.valueOf(60) : maximumSpeed;
}

@Override
protected void setOptionalVariables(final IsGmlSRM1Road source, final SRM1RoadEmissionSource emissionSource) throws AeriusException {
if (source.getTunnelFactor() != null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,13 +33,13 @@
/**
*
*/
public class GML2SRM2Road<T extends IsGmlSRM2Road> extends GML2SRMRoad<T, SRM2RoadEmissionSource> {
public class GML2SRM2RoadV40<T extends IsGmlSRM2Road> extends GML2SRMRoad<T, SRM2RoadEmissionSource> {

/**
* @param conversionData
* The conversion data to use.
*/
public GML2SRM2Road(final GMLConversionData conversionData) {
public GML2SRM2RoadV40(final GMLConversionData conversionData) {
super(conversionData);
}

Expand All @@ -50,12 +50,7 @@ protected SRM2RoadEmissionSource construct() {

@Override
protected String convertRoadTypeCode(final T source, final RoadType roadType) {
return roadType == null ? null : roadType.getRoadTypeCode();
}

@Override
protected Integer getMaximumSpeed(final RoadType roadType, final Integer maximumSpeed) {
return (maximumSpeed == null || maximumSpeed == 0) && roadType == RoadType.NON_URBAN_ROAD ? Integer.valueOf(80) : maximumSpeed;
return roadType == null ? null : roadType.getRoadTypeCode();
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@
import nl.overheid.aerius.shared.domain.v2.source.road.ValuesPerVehicleType;
import nl.overheid.aerius.shared.domain.v2.source.road.Vehicles;
import nl.overheid.aerius.shared.exception.AeriusException;
import nl.overheid.aerius.shared.exception.ImaerExceptionReason;

/**
*
Expand Down Expand Up @@ -76,7 +77,18 @@ public S convert(final T source) throws AeriusException {

protected abstract String convertRoadTypeCode(T source, RoadType roadType);

protected abstract Integer getMaximumSpeed(final RoadType roadType, final Integer maximumSpeed);
protected Integer getMaximumSpeed(final String sourceId, final boolean warn, final RoadType roadType, final Integer maximumSpeed) {
if ((maximumSpeed == null || maximumSpeed == 0) && roadType == RoadType.NON_URBAN_ROAD) {
final Integer speed = GMLConversionData.NON_URBAN_ROAD_DEFAULT_SPEED;
if (warn) {
getConversionData().getWarnings().add(
new AeriusException(ImaerExceptionReason.GML_NON_URBAN_ROAD_DEFAULT_SPEED, sourceId, String.valueOf(speed)));
}
return speed;
} else {
return maximumSpeed;
}
}

protected abstract void setOptionalVariables(T source, S emissionSource) throws AeriusException;

Expand All @@ -96,10 +108,10 @@ protected void addVehicleEmissions(final RoadType roadType, final List<Vehicles>

protected void addEmissionValues(final RoadType roadType, final List<Vehicles> addToVehicles, final T source, final IsGmlStandardVehicle sv,
final List<StandardVehicles> mergingStandardVehicles) {
final StandardVehicles standardVehicle = findExistingMatch(sv, mergingStandardVehicles).orElseGet(() -> {
final StandardVehicles standardVehicle = findExistingMatch(sv, roadType, mergingStandardVehicles).orElseGet(() -> {
final StandardVehicles vse = new StandardVehicles();

vse.setMaximumSpeed(getMaximumSpeed(roadType, sv.getMaximumSpeed()));
vse.setMaximumSpeed(getMaximumSpeed(source.getId(), true, roadType, sv.getMaximumSpeed()));
vse.setStrictEnforcement(sv.isStrictEnforcement());
vse.setTimeUnit(TimeUnit.valueOf(sv.getTimeUnit().name()));
mergingStandardVehicles.add(vse);
Expand All @@ -112,10 +124,11 @@ protected void addEmissionValues(final RoadType roadType, final List<Vehicles> a
standardVehicle.getValuesPerVehicleTypes().put(sv.getVehicleType().getStandardVehicleCode(), valuesPerVehicleType);
}

protected Optional<StandardVehicles> findExistingMatch(final IsGmlStandardVehicle sv, final List<StandardVehicles> mergingStandardVehicles) {
protected Optional<StandardVehicles> findExistingMatch(final IsGmlStandardVehicle sv, final RoadType roadType,
final List<StandardVehicles> mergingStandardVehicles) {
return mergingStandardVehicles.stream()
.filter(x -> Objects.equals(x.getMaximumSpeed(), sv.getMaximumSpeed()))
.filter(x -> Objects.equals(x.getStrictEnforcement(), sv.isStrictEnforcement()))
.filter(x -> Objects.equals(x.getMaximumSpeed(), getMaximumSpeed(null, false, roadType, sv.getMaximumSpeed())))
.filter(x -> Boolean.TRUE.equals(x.getStrictEnforcement()) == Boolean.TRUE.equals((sv.isStrictEnforcement())))
.filter(x -> x.getTimeUnit() == TimeUnit.valueOf(sv.getTimeUnit().name()))
.filter(x -> !x.getValuesPerVehicleTypes().containsKey(sv.getVehicleType().getStandardVehicleCode()))
.findFirst();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
import nl.overheid.aerius.gml.base.source.lodging.GML2Farm;
import nl.overheid.aerius.gml.base.source.mobile.v31.GML2OffRoad;
import nl.overheid.aerius.gml.base.source.plan.GML2Plan;
import nl.overheid.aerius.gml.base.source.road.v40.GML2SRM2Road;
import nl.overheid.aerius.gml.base.source.road.v40.GML2SRM2RoadV40;
import nl.overheid.aerius.gml.base.source.ship.v31.GML2InlandMooring;
import nl.overheid.aerius.gml.base.source.ship.v31.GML2InlandRoute;
import nl.overheid.aerius.gml.base.source.ship.v31.GML2MaritimeMooring;
Expand Down Expand Up @@ -60,7 +60,7 @@ class GML2SourceVisitor implements IsGML2SourceVisitor<EmissionSource> {
handlers.put(MaritimeShippingEmissionSource.class, new GML2MaritimeRoute<MaritimeShippingEmissionSource>(conversionData));
handlers.put(OffRoadMobileEmissionSource.class, new GML2OffRoad<OffRoadMobileEmissionSource>(conversionData, gml2SourceCharacteristics));
handlers.put(PlanEmissionSource.class, new GML2Plan<PlanEmissionSource>(conversionData));
handlers.put(SRM2RoadEmissionSource.class, new GML2SRM2Road<SRM2RoadEmissionSource>(conversionData));
handlers.put(SRM2RoadEmissionSource.class, new GML2SRM2RoadV40<SRM2RoadEmissionSource>(conversionData));
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
import nl.overheid.aerius.gml.base.source.lodging.GML2Farm;
import nl.overheid.aerius.gml.base.source.mobile.v31.GML2OffRoad;
import nl.overheid.aerius.gml.base.source.plan.GML2Plan;
import nl.overheid.aerius.gml.base.source.road.v40.GML2SRM2Road;
import nl.overheid.aerius.gml.base.source.road.v40.GML2SRM2RoadV40;
import nl.overheid.aerius.gml.base.source.ship.v31.GML2InlandMooring;
import nl.overheid.aerius.gml.base.source.ship.v31.GML2InlandRoute;
import nl.overheid.aerius.gml.base.source.ship.v31.GML2MaritimeMooring;
Expand Down Expand Up @@ -60,7 +60,7 @@ class GML2SourceVisitor implements IsGML2SourceVisitor<EmissionSource> {
handlers.put(MaritimeShippingEmissionSource.class, new GML2MaritimeRoute<MaritimeShippingEmissionSource>(conversionData));
handlers.put(OffRoadMobileEmissionSource.class, new GML2OffRoad<OffRoadMobileEmissionSource>(conversionData, gml2SourceCharacteristics));
handlers.put(PlanEmissionSource.class, new GML2Plan<PlanEmissionSource>(conversionData));
handlers.put(SRM2RoadEmissionSource.class, new GML2SRM2Road<SRM2RoadEmissionSource>(conversionData));
handlers.put(SRM2RoadEmissionSource.class, new GML2SRM2RoadV40<SRM2RoadEmissionSource>(conversionData));
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
import nl.overheid.aerius.gml.base.source.lodging.GML2Farm;
import nl.overheid.aerius.gml.base.source.mobile.v31.GML2OffRoad;
import nl.overheid.aerius.gml.base.source.plan.GML2Plan;
import nl.overheid.aerius.gml.base.source.road.v40.GML2SRM2Road;
import nl.overheid.aerius.gml.base.source.road.v40.GML2SRM2RoadV40;
import nl.overheid.aerius.gml.base.source.ship.v31.GML2InlandMooring;
import nl.overheid.aerius.gml.base.source.ship.v31.GML2InlandRoute;
import nl.overheid.aerius.gml.base.source.ship.v31.GML2MaritimeMooring;
Expand Down Expand Up @@ -60,7 +60,7 @@ class GML2SourceVisitor implements IsGML2SourceVisitor<EmissionSource> {
handlers.put(MaritimeShippingEmissionSource.class, new GML2MaritimeRoute<MaritimeShippingEmissionSource>(conversionData));
handlers.put(OffRoadMobileEmissionSource.class, new GML2OffRoad<OffRoadMobileEmissionSource>(conversionData, gml2SourceCharacteristics));
handlers.put(PlanEmissionSource.class, new GML2Plan<PlanEmissionSource>(conversionData));
handlers.put(SRM2RoadEmissionSource.class, new GML2SRM2Road<SRM2RoadEmissionSource>(conversionData));
handlers.put(SRM2RoadEmissionSource.class, new GML2SRM2RoadV40<SRM2RoadEmissionSource>(conversionData));
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
import nl.overheid.aerius.gml.base.source.mobile.v31.GML2OffRoad;
import nl.overheid.aerius.gml.base.source.plan.GML2Plan;
import nl.overheid.aerius.gml.base.source.road.v40.GML2SRM1Road;
import nl.overheid.aerius.gml.base.source.road.v40.GML2SRM2Road;
import nl.overheid.aerius.gml.base.source.road.v40.GML2SRM2RoadV40;
import nl.overheid.aerius.gml.base.source.ship.v31.GML2InlandMooring;
import nl.overheid.aerius.gml.base.source.ship.v31.GML2InlandRoute;
import nl.overheid.aerius.gml.base.source.ship.v31.GML2MaritimeMooring;
Expand Down Expand Up @@ -62,7 +62,7 @@ class GML2SourceVisitor implements IsGML2SourceVisitor<EmissionSource> {
handlers.put(MaritimeShippingEmissionSource.class, new GML2MaritimeRoute<MaritimeShippingEmissionSource>(conversionData));
handlers.put(OffRoadMobileEmissionSource.class, new GML2OffRoad<OffRoadMobileEmissionSource>(conversionData, gml2SourceCharacteristics));
handlers.put(PlanEmissionSource.class, new GML2Plan<PlanEmissionSource>(conversionData));
handlers.put(SRM2Road.class, new GML2SRM2Road<SRM2Road>(conversionData));
handlers.put(SRM2Road.class, new GML2SRM2RoadV40<SRM2Road>(conversionData));
handlers.put(SRM1Road.class, new GML2SRM1Road<SRM1Road>(conversionData));
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
import nl.overheid.aerius.gml.base.source.mobile.v31.GML2OffRoad;
import nl.overheid.aerius.gml.base.source.plan.GML2Plan;
import nl.overheid.aerius.gml.base.source.road.v40.GML2SRM1Road;
import nl.overheid.aerius.gml.base.source.road.v40.GML2SRM2Road;
import nl.overheid.aerius.gml.base.source.road.v40.GML2SRM2RoadV40;
import nl.overheid.aerius.gml.base.source.ship.v31.GML2InlandMooring;
import nl.overheid.aerius.gml.base.source.ship.v31.GML2InlandRoute;
import nl.overheid.aerius.gml.base.source.ship.v31.GML2MaritimeMooring;
Expand Down Expand Up @@ -65,7 +65,7 @@ class GML2SourceVisitor implements IsGML2SourceVisitor<EmissionSource> {
handlers.put(MaritimeShippingEmissionSource.class, new GML2MaritimeRoute<MaritimeShippingEmissionSource>(conversionData));
handlers.put(OffRoadMobileEmissionSource.class, new GML2OffRoad<OffRoadMobileEmissionSource>(conversionData, gml2SourceCharacteristics));
handlers.put(PlanEmissionSource.class, new GML2Plan<PlanEmissionSource>(conversionData));
handlers.put(SRM2Road.class, new GML2SRM2Road<SRM2Road>(conversionData));
handlers.put(SRM2Road.class, new GML2SRM2RoadV40<SRM2Road>(conversionData));
handlers.put(SRM1Road.class, new GML2SRM1Road<SRM1Road>(conversionData));
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
import nl.overheid.aerius.gml.base.source.mobile.v40.GML2OffRoad;
import nl.overheid.aerius.gml.base.source.plan.GML2Plan;
import nl.overheid.aerius.gml.base.source.road.v40.GML2SRM1Road;
import nl.overheid.aerius.gml.base.source.road.v40.GML2SRM2Road;
import nl.overheid.aerius.gml.base.source.road.v40.GML2SRM2RoadV40;
import nl.overheid.aerius.gml.base.source.ship.GML2InlandMooring;
import nl.overheid.aerius.gml.base.source.ship.GML2InlandRoute;
import nl.overheid.aerius.gml.base.source.ship.GML2MaritimeMooring;
Expand Down Expand Up @@ -66,7 +66,7 @@ class GML2SourceVisitor<S extends SourceCharacteristics> implements IsGML2Source
handlers.put(MaritimeShippingEmissionSource.class, new GML2MaritimeRoute<MaritimeShippingEmissionSource>(conversionData));
handlers.put(OffRoadMobileEmissionSource.class, new GML2OffRoad<OffRoadMobileEmissionSource>(conversionData, gml2SourceCharacteristics));
handlers.put(PlanEmissionSource.class, new GML2Plan<PlanEmissionSource>(conversionData));
handlers.put(SRM2Road.class, new GML2SRM2Road<SRM2Road>(conversionData));
handlers.put(SRM2Road.class, new GML2SRM2RoadV40<SRM2Road>(conversionData));
handlers.put(SRM1Road.class, new GML2SRM1Road<SRM1Road>(conversionData));
}

Expand Down
Loading
Loading