Skip to content
Open
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 @@ -48,13 +48,15 @@ protected GML2Road(final GMLConversionData conversionData) {
public S convert(final T source) throws AeriusException {
final S emissionSource = construct();
final List<StandardVehicles> mergingStandardVehicles = new ArrayList<>();
final String roadTypeCode = source.getRoadTypeCode();

for (final IsGmlProperty<IsGmlVehicle> vp : source.getVehicles()) {
addVehicleEmissions(emissionSource.getSubSources(), source, vp, mergingStandardVehicles);
addVehicleEmissions(source.getRoadTypeCode(), emissionSource.getSubSources(), source, vp, mergingStandardVehicles);
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
addVehicleEmissions(source.getRoadTypeCode(), emissionSource.getSubSources(), source, vp, mergingStandardVehicles);
addVehicleEmissions(roadTypeCode, emissionSource.getSubSources(), source, vp, mergingStandardVehicles);

}
emissionSource.setTrafficDirection(source.getTrafficDirection());
emissionSource.setRoadManager(source.getRoadManager());
emissionSource.setRoadAreaCode(source.getRoadAreaCode());
emissionSource.setRoadTypeCode(source.getRoadTypeCode());
emissionSource.setRoadTypeCode(roadTypeCode);

setSpecificVariables(source, emissionSource);

Expand All @@ -69,25 +71,27 @@ public S convert(final T source) throws AeriusException {

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

protected void addVehicleEmissions(final List<Vehicles> addToVehicles, final T source, final IsGmlProperty<IsGmlVehicle> vp,
protected void addVehicleEmissions(final String gmlRoadTypeCode, final List<Vehicles> addToVehicles, final T source,
final IsGmlProperty<IsGmlVehicle> vp,
final List<StandardVehicles> mergingStandardVehicles) {
final IsGmlVehicle av = vp.getProperty();
if (av instanceof final IsGmlStandardVehicle standardVehicle) {
addEmissionValues(addToVehicles, source, standardVehicle, mergingStandardVehicles);
} else if (av instanceof final IsGmlSpecificVehicle specificVehicle) {

switch (av) {
case final IsGmlStandardVehicle standardVehicle ->
addEmissionValues(gmlRoadTypeCode, addToVehicles, source, standardVehicle, mergingStandardVehicles);
case final IsGmlSpecificVehicle specificVehicle ->
addToVehicles.add(GML2VehicleUtil.convertEmissionValuesSpecific(source, specificVehicle, getConversionData()));
} else if (av instanceof final IsGmlCustomVehicle customVehicle) {
addToVehicles.add(GML2VehicleUtil.convertEmissionValuesCustom(customVehicle));
} else {
throw new IllegalArgumentException("Instance not supported:" + av.getClass().getCanonicalName());
case final IsGmlCustomVehicle customVehicle -> addToVehicles.add(GML2VehicleUtil.convertEmissionValuesCustom(customVehicle));
default -> throw new IllegalArgumentException("Instance not supported:" + av.getClass().getCanonicalName());
}
}

private void addEmissionValues(final List<Vehicles> addToVehicles, final T source, final IsGmlStandardVehicle sv,
private void addEmissionValues(final String gmlRoadTypeCode, final List<Vehicles> addToVehicles, final T source, final IsGmlStandardVehicle sv,
final List<StandardVehicles> mergingStandardVehicles) {
final StandardVehicles standardVehicle = findExistingMatch(sv, mergingStandardVehicles).orElseGet(() -> {
final StandardVehicles vse = new StandardVehicles();
vse.setMaximumSpeed(sv.getMaximumSpeed());

vse.setMaximumSpeed(getMaximumSpeed(gmlRoadTypeCode, sv.getMaximumSpeed()));
vse.setStrictEnforcement(sv.isStrictEnforcement());
vse.setTimeUnit(TimeUnit.valueOf(sv.getTimeUnit().name()));
mergingStandardVehicles.add(vse);
Expand All @@ -100,6 +104,26 @@ private void addEmissionValues(final List<Vehicles> addToVehicles, final T sourc
standardVehicle.getValuesPerVehicleTypes().put(sv.getVehicleType(), valuesPerVehicleType);
}

/**
* Get the maximum speed value. For NON_URBAN_ROAD_NATIONAL and NON_URBAN_ROAD_GENERAL fill in the speed in case of missing speed.
* 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 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) {
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);
default -> maximumSpeed;
};
}

private Optional<StandardVehicles> findExistingMatch(final IsGmlStandardVehicle sv, final List<StandardVehicles> mergingStandardVehicles) {
return mergingStandardVehicles.stream()
.filter(x -> Objects.equals(x.getMaximumSpeed(), sv.getMaximumSpeed()))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
import nl.overheid.aerius.gml.base.source.road.v11.GML2SRM2RoadV11;
import nl.overheid.aerius.gml.base.source.road.v40.IsGmlStandardVehicle;
import nl.overheid.aerius.shared.domain.v2.base.TimeUnit;
import nl.overheid.aerius.shared.domain.v2.source.road.RoadType;
import nl.overheid.aerius.shared.domain.v2.source.road.StandardVehicles;
import nl.overheid.aerius.shared.domain.v2.source.road.ValuesPerVehicleType;
import nl.overheid.aerius.shared.domain.v2.source.road.Vehicles;
Expand All @@ -42,11 +43,12 @@ public GML2SRM2RoadV10(final GMLConversionData conversionData) {
}

@Override
protected void addEmissionValues(final List<Vehicles> addToVehicles, final T source, final IsGmlStandardVehicle sv,
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 vse = new StandardVehicles();
vse.setMaximumSpeed(source.getMaximumSpeed());

vse.setMaximumSpeed(getMaximumSpeed(roadType, source.getMaximumSpeed()));
vse.setStrictEnforcement(source.isStrictEnforcement());
vse.setTimeUnit(TimeUnit.valueOf(sv.getTimeUnit().name()));
mergingStandardVehicles.add(vse);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
import nl.overheid.aerius.gml.base.GMLConversionData;
import nl.overheid.aerius.gml.base.IsGmlProperty;
import nl.overheid.aerius.shared.domain.v2.source.SRM1RoadEmissionSource;
import nl.overheid.aerius.shared.domain.v2.source.road.RoadType;
import nl.overheid.aerius.shared.domain.v2.source.road.SRM1LinearReference;
import nl.overheid.aerius.shared.exception.AeriusException;
import nl.overheid.aerius.shared.exception.ImaerExceptionReason;
Expand All @@ -45,9 +46,13 @@ protected SRM1RoadEmissionSource construct() {
}

@Override
protected void setSpecificVariables(final IsGmlSRM1Road source, final SRM1RoadEmissionSource emissionSource) {
// Overwrite the road type based on sector with the one based on speed profile
emissionSource.setRoadTypeCode(source.getSpeedProfile().getRoadTypeCode());
protected String convertRoadTypeCode(final IsGmlSRM1Road source, final RoadType 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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
import nl.overheid.aerius.gml.base.source.road.IsGmlRoadSideBarrier;
import nl.overheid.aerius.gml.base.source.road.IsGmlSRM2RoadLinearReference;
import nl.overheid.aerius.shared.domain.v2.source.SRM2RoadEmissionSource;
import nl.overheid.aerius.shared.domain.v2.source.road.RoadType;
import nl.overheid.aerius.shared.domain.v2.source.road.SRM2LinearReference;
import nl.overheid.aerius.shared.domain.v2.source.road.SRM2RoadSideBarrier;
import nl.overheid.aerius.shared.exception.AeriusException;
Expand All @@ -48,8 +49,13 @@ protected SRM2RoadEmissionSource construct() {
}

@Override
protected void setSpecificVariables(final T source, final SRM2RoadEmissionSource emissionSource) {
// NO-OP
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;
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,17 +57,15 @@ protected GML2SRMRoad(final GMLConversionData conversionData) {
public S convert(final T source) throws AeriusException {
final S emissionSource = construct();
final List<StandardVehicles> mergingStandardVehicles = new ArrayList<>();
final RoadType roadType = RoadType.valueFromSectorId(source.getSectorId());

emissionSource.setRoadTypeCode(convertRoadTypeCode(source, roadType));
for (final IsGmlProperty<IsGmlVehicle> vp : source.getVehicles()) {
addVehicleEmissions(emissionSource.getSubSources(), source, vp, mergingStandardVehicles);
addVehicleEmissions(roadType, emissionSource.getSubSources(), source, vp, mergingStandardVehicles);
}
emissionSource.setTrafficDirection(source.getTrafficDirection());
emissionSource.setRoadManager(source.getRoadManager());
emissionSource.setRoadAreaCode("NL");
// Ensure road type get set before specific, as it's overwritten by SRM1
final RoadType roadType = RoadType.valueFromSectorId(source.getSectorId());
emissionSource.setRoadTypeCode(roadType == null ? null : roadType.getRoadTypeCode());

setSpecificVariables(source, emissionSource);

setOptionalVariables(source, emissionSource);

Expand All @@ -76,30 +74,32 @@ public S convert(final T source) throws AeriusException {

protected abstract S construct();

protected abstract void setSpecificVariables(T source, S emissionSource);
protected abstract String convertRoadTypeCode(T source, RoadType roadType);

protected abstract Integer getMaximumSpeed(final RoadType roadType, final Integer maximumSpeed);

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

protected void addVehicleEmissions(final List<Vehicles> addToVehicles, final T source, final IsGmlProperty<IsGmlVehicle> vp,
final List<StandardVehicles> mergingStandardVehicles) {
protected void addVehicleEmissions(final RoadType roadType, final List<Vehicles> addToVehicles, final T source,
final IsGmlProperty<IsGmlVehicle> vp, final List<StandardVehicles> mergingStandardVehicles) {
final IsGmlVehicle av = vp.getProperty();
if (av instanceof IsGmlStandardVehicle) {
addEmissionValues(addToVehicles, source, (IsGmlStandardVehicle) av, mergingStandardVehicles);
addEmissionValues(roadType, addToVehicles, source, (IsGmlStandardVehicle) av, mergingStandardVehicles);
} else if (av instanceof IsGmlSpecificVehicle) {
addEmissionValues(addToVehicles, source, (IsGmlSpecificVehicle) av);
} else if (av instanceof IsGmlCustomVehicle) {
addEmissionValues(addToVehicles, (IsGmlCustomVehicle) av);
} else {
throw new IllegalArgumentException("Instance not supported:" + av.getClass().getCanonicalName());
}

}

protected void addEmissionValues(final List<Vehicles> addToVehicles, final T source, final IsGmlStandardVehicle sv,
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 vse = new StandardVehicles();
vse.setMaximumSpeed(sv.getMaximumSpeed());

vse.setMaximumSpeed(getMaximumSpeed(roadType, sv.getMaximumSpeed()));
vse.setStrictEnforcement(sv.isStrictEnforcement());
vse.setTimeUnit(TimeUnit.valueOf(sv.getTimeUnit().name()));
mergingStandardVehicles.add(vse);
Expand Down
Loading
Loading