Skip to content

Commit

Permalink
NVDB-5791: Using enum for route fields.
Browse files Browse the repository at this point in the history
* Connection links are true by default.
* Bug fix on missing typeVeg in POST.
  • Loading branch information
andpaas committed Oct 6, 2020
1 parent 320ba84 commit 185668a
Show file tree
Hide file tree
Showing 8 changed files with 176 additions and 87 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -35,14 +35,13 @@
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.UriBuilder;

import com.google.gson.JsonArray;

import com.google.gson.JsonObject;
import no.vegvesen.nvdbapi.client.gson.RouteParser;
import no.vegvesen.nvdbapi.client.model.Coordinates;
import no.vegvesen.nvdbapi.client.model.Geometry;
import no.vegvesen.nvdbapi.client.model.Projection;
import no.vegvesen.nvdbapi.client.model.roadnet.TypeOfRoad;
import no.vegvesen.nvdbapi.client.model.roadnet.route.RouteField;
import no.vegvesen.nvdbapi.client.model.roadnet.route.RouteOnRoadNet;

public class RoadNetRouteClient extends AbstractJerseyClient {
Expand Down Expand Up @@ -80,38 +79,38 @@ private WebTarget getWebTarget(RoadNetRouteRequest request) {

UriBuilder path = endpoint();

request.getPointInTime().ifPresent(v -> path.queryParam("tidspunkt", v));
request.getStartPointInTime().ifPresent(v -> path.queryParam("tidspunkt_start", v));
request.getEndPointInTime().ifPresent(v -> path.queryParam("tidspunkt_slutt", v));
path.queryParam("kortform", request.isBriefResponse());
path.queryParam("konnekteringslenker", request.isConnectionLinks());
path.queryParam("detaljerte_lenker", request.isDetailedLinks());
request.getRoadRefFilter().ifPresent(v -> path.queryParam("vegsystemreferanse", v));
request.getRoadUserGroup().ifPresent(v -> path.queryParam("trafikantgruppe", v.getTextValue()));
if (!request.getTypeOfRoad().isEmpty()) path.queryParam("typeveg", request.getTypeOfRoad()
request.getPointInTime().ifPresent(v -> path.queryParam(RouteField.POINT_IN_TIME.getName(), v));
request.getStartPointInTime().ifPresent(v -> path.queryParam(RouteField.START_POINT_IN_TIME.getName(), v));
request.getEndPointInTime().ifPresent(v -> path.queryParam(RouteField.END_POINT_IN_TIME.getName(), v));
path.queryParam(RouteField.BRIEF_RESPONSE.getName(), request.isBriefResponse());
path.queryParam(RouteField.CONNECTION_LINKS.getName(), request.isConnectionLinks());
path.queryParam(RouteField.DETAILED_LINKS.getName(), request.isDetailedLinks());
request.getRoadRefFilter().ifPresent(v -> path.queryParam(RouteField.ROAD_SYS_REFS.getName(), v));
request.getRoadUserGroup().ifPresent(v -> path.queryParam(RouteField.ROAD_USER_GROUP.getName(), v.getTextValue()));
if (!request.getTypeOfRoad().isEmpty()) path.queryParam(RouteField.TYPE_OF_ROAD.getName(), request.getTypeOfRoad()
.stream()
.map(TypeOfRoad::getTypeOfRoadSosi)
.collect(Collectors.joining(",")));

if (request.usesGeometry()) {
Geometry geometry = request.getGeometry();
path.queryParam("geometri", geometry.getWkt());
path.queryParam("maks_avstand", request.getDistanceThreshold());
path.queryParam(RouteField.GEOMETRY.getName(), geometry.getWkt());
path.queryParam(RouteField.DISTANCE.getName(), request.getDistance());
if (geometry.getProjection() != Projection.UTM33) {
path.queryParam("srid", geometry.getProjection().getSrid());
path.queryParam(RouteField.SRID.getName(), geometry.getProjection().getSrid());
}
} else if(request.usesReflinkPosition()) {
path.queryParam("start", request.getStartReflinkPosition());
path.queryParam("slutt", request.getEndReflinkPosition());
path.queryParam(RouteField.START.getName(), request.getStartReflinkPosition());
path.queryParam(RouteField.END.getName(), request.getEndReflinkPosition());
} else {
Coordinates startCoordinates = request.getStartCoordinates();
path.queryParam("start", startCoordinates);
path.queryParam("slutt", request.getEndCoordinates());
path.queryParam("maks_avstand", request.getDistanceThreshold());
path.queryParam("omkrets", request.getCircumferenceAroundPoints());
path.queryParam(RouteField.START.getName(), startCoordinates);
path.queryParam(RouteField.END.getName(), request.getEndCoordinates());
path.queryParam(RouteField.DISTANCE.getName(), request.getDistance());
path.queryParam(RouteField.ENVELOPE.getName(), request.getEnvelope());

if(startCoordinates.getProjection() != Projection.UTM33) {
path.queryParam("srid", startCoordinates.getProjection().getSrid());
path.queryParam(RouteField.SRID.getName(), startCoordinates.getProjection().getSrid());
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,14 @@
import no.vegvesen.nvdbapi.client.model.RefLinkPosition;
import no.vegvesen.nvdbapi.client.model.roadnet.RoadUserGroup;
import no.vegvesen.nvdbapi.client.model.roadnet.TypeOfRoad;
import no.vegvesen.nvdbapi.client.model.roadnet.route.RouteField;

import java.time.LocalDate;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;

import static java.util.Collections.emptyList;
import static java.util.Objects.nonNull;
Expand All @@ -21,15 +23,15 @@ public class RoadNetRouteRequest {
private final RefLinkPosition endReflinkPosition;
private final Coordinates startCoordinates;
private final Coordinates endCoordinates;
private final Geometry geometry;
private final int distance;
private final int envelope;
private final boolean briefResponse;
private final boolean connectionLinks;
private final boolean detailedLinks;
private final Geometry geometry;
private final int distanceThreshold;
private final int circumferenceAroundPoints;
private final Optional<String> roadRefFilter;
private final Optional<RoadUserGroup> roadUserGroup;
private final List<TypeOfRoad> typeOfRoad;
private final boolean briefResponse;
private final Optional<LocalDate> pointInTime;
private final Optional<LocalDate> startPointInTime;
private final Optional<LocalDate> endPointInTime;
Expand All @@ -40,12 +42,12 @@ private RoadNetRouteRequest(Builder b) {
this.startCoordinates = b.startCoordinates;
this.endCoordinates = b.endCoordinates;
this.geometry = b.geometry;
this.distanceThreshold = b.distanceThreshold;
this.circumferenceAroundPoints = b.circumferenceAroundPoints;
this.roadRefFilter = b.roadRefFilter;
this.briefResponse = b.briefReponse;
this.distance = b.distance;
this.envelope = b.envelope;
this.briefResponse = b.briefResponse;
this.connectionLinks = b.connectionLinks;
this.detailedLinks = b.detailedLinks;
this.roadRefFilter = b.roadSysRefs;
this.roadUserGroup = b.roadUserGroup;
this.typeOfRoad = b.typeOfRoad;
this.pointInTime = b.pointInTime;
Expand Down Expand Up @@ -89,12 +91,12 @@ public Coordinates getEndCoordinates() {
return endCoordinates;
}

public int getDistanceThreshold() {
return distanceThreshold;
public int getDistance() {
return distance;
}

public int getCircumferenceAroundPoints() {
return circumferenceAroundPoints;
public int getEnvelope() {
return envelope;
}

public boolean usesReflinkPosition() {
Expand Down Expand Up @@ -128,19 +130,20 @@ public Optional<LocalDate> getEndPointInTime() {
public Map<String, String> getJsonObject() {
Map<String, String> jsonMap = new HashMap<>();

if (startReflinkPosition != null) jsonMap.put("start", String.valueOf(startReflinkPosition));
if (endReflinkPosition != null) jsonMap.put("slutt", String.valueOf(endReflinkPosition));
if (geometry != null) jsonMap.put("geometri", geometry.toString(false));
jsonMap.put("kortform", String.valueOf(briefResponse));
jsonMap.put("konnekteringslenker", String.valueOf(connectionLinks));
jsonMap.put("detaljerte_lenker", String.valueOf(detailedLinks));
jsonMap.put("maks_avstand", String.valueOf(distanceThreshold));
jsonMap.put("omkrets", String.valueOf(circumferenceAroundPoints));
roadRefFilter.ifPresent(s -> jsonMap.put("vegsystemreferanse", s));
roadUserGroup.ifPresent(userGroup -> jsonMap.put("trafikantgruppe", userGroup.getTextValue()));
if (pointInTime.isPresent()) jsonMap.put("tidspunkt", String.valueOf(pointInTime));
if (startPointInTime.isPresent()) jsonMap.put("tidspunkt_start", String.valueOf(startPointInTime));
if (endPointInTime.isPresent()) jsonMap.put("tidspunkt_slutt", String.valueOf(endPointInTime));
if (startReflinkPosition != null) jsonMap.put(RouteField.START.getName(), String.valueOf(startReflinkPosition));
if (endReflinkPosition != null) jsonMap.put(RouteField.END.getName(), String.valueOf(endReflinkPosition));
if (geometry != null) jsonMap.put(RouteField.GEOMETRY.getName(), geometry.toString(false));
jsonMap.put(RouteField.DISTANCE.getName(), String.valueOf(distance));
jsonMap.put(RouteField.ENVELOPE.getName(), String.valueOf(envelope));
jsonMap.put(RouteField.BRIEF_RESPONSE.getName(), String.valueOf(briefResponse));
jsonMap.put(RouteField.CONNECTION_LINKS.getName(), String.valueOf(connectionLinks));
jsonMap.put(RouteField.DETAILED_LINKS.getName(), String.valueOf(detailedLinks));
roadRefFilter.ifPresent(s -> jsonMap.put(RouteField.ROAD_SYS_REFS.getName(), s));
roadUserGroup.ifPresent(userGroup -> jsonMap.put(RouteField.ROAD_USER_GROUP.getName(), userGroup.getTextValue()));
if (!typeOfRoad.isEmpty()) jsonMap.put(RouteField.TYPE_OF_ROAD.getName(), typeOfRoad.stream().map(TypeOfRoad::getTypeOfRoadSosi).collect(Collectors.joining(",")));
if (pointInTime.isPresent()) jsonMap.put(RouteField.POINT_IN_TIME.getName(), String.valueOf(pointInTime));
if (startPointInTime.isPresent()) jsonMap.put(RouteField.START_POINT_IN_TIME.getName(), String.valueOf(startPointInTime));
if (endPointInTime.isPresent()) jsonMap.put(RouteField.END_POINT_IN_TIME.getName(), String.valueOf(endPointInTime));

return jsonMap;
}
Expand All @@ -154,90 +157,88 @@ public static class Builder {
private RefLinkPosition endReflinkPosition;
private Coordinates startCoordinates;
private Coordinates endCoordinates;
private int distanceThreshold = 10;
private int circumferenceAroundPoints = 100;
private Geometry geometry;
private Optional<String> roadRefFilter = Optional.empty();
private Optional<RoadUserGroup> roadUserGroup = Optional.empty();
private boolean briefReponse = false;
private boolean connectionLinks = false;
private int distance = 10;
private int envelope = 100;
private boolean briefResponse = false;
private boolean connectionLinks = true;
private boolean detailedLinks = false;
private Optional<String> roadSysRefs = Optional.empty();
private Optional<RoadUserGroup> roadUserGroup = Optional.empty();
private List<TypeOfRoad> typeOfRoad = emptyList();
private Optional<LocalDate> pointInTime = Optional.empty();
private Optional<LocalDate> startPointInTime = Optional.empty();
private Optional<LocalDate> endPointInTime = Optional.empty();

public Builder between(RefLinkPosition startReflinkPosition,
RefLinkPosition endReflinkPosition) {
public Builder between(RefLinkPosition startReflinkPosition, RefLinkPosition endReflinkPosition) {
this.startReflinkPosition = startReflinkPosition;
this.endReflinkPosition = endReflinkPosition;
return this;
}

public Builder between(Coordinates startCoordinates,
Coordinates endCoordinates) {
public Builder between(Coordinates startCoordinates, Coordinates endCoordinates) {
this.startCoordinates = startCoordinates;
this.endCoordinates = endCoordinates;
return this;
}

public Builder withPointInTime(LocalDate pointInTime) {
this.pointInTime = Optional.ofNullable(pointInTime);
public Builder fromGeometry(Geometry geometry) {
this.geometry = geometry;
return this;
}

public Builder withStartPointInTime(LocalDate startPointInTime) {
this.startPointInTime = Optional.ofNullable(startPointInTime);
public Builder withDistance(int distance) {
this.distance = distance;
return this;
}

public Builder withEndPointInTime(LocalDate endPointInTime) {
this.endPointInTime = Optional.ofNullable(endPointInTime);
public Builder withEnvelope(int envelope) {
this.envelope = envelope;
return this;
}

public Builder withDistanceThreshold(int distanceThreshold) {
this.distanceThreshold = distanceThreshold;
public Builder withBriefResponse(boolean briefResponse) {
this.briefResponse = briefResponse;
return this;
}

public Builder withRoadRefFilter(String filter) {
this.roadRefFilter = Optional.ofNullable(filter);
public Builder withConnectionLinks(boolean connectionLinks) {
this.connectionLinks = connectionLinks;
return this;
}

public Builder withRoadUserGroup(RoadUserGroup roadUserGroup) {
this.roadUserGroup = Optional.ofNullable(roadUserGroup);
public Builder withDetailedLinks(boolean detailedLinks) {
this.detailedLinks = detailedLinks;
return this;
}

public Builder withTypeOfRoad(List<TypeOfRoad> typeOfRoad) {
this.typeOfRoad = typeOfRoad;
public Builder withRoadRefFilter(String filter) {
this.roadSysRefs = Optional.ofNullable(filter);
return this;
}

public Builder withCircumferenceAroundPoints(int circumferenceAroundPoints) {
this.circumferenceAroundPoints = circumferenceAroundPoints;
public Builder withRoadUserGroup(RoadUserGroup roadUserGroup) {
this.roadUserGroup = Optional.ofNullable(roadUserGroup);
return this;
}

public Builder fromGeometry(Geometry geometry) {
this.geometry = geometry;
public Builder withTypeOfRoad(List<TypeOfRoad> typeOfRoad) {
this.typeOfRoad = typeOfRoad;
return this;
}

public Builder withBriefResponse(boolean briefResponse) {
this.briefReponse = briefResponse;
public Builder withPointInTime(LocalDate pointInTime) {
this.pointInTime = Optional.ofNullable(pointInTime);
return this;
}

public Builder withConnectionLinks(boolean connectionLinks) {
this.connectionLinks = connectionLinks;
public Builder withStartPointInTime(LocalDate startPointInTime) {
this.startPointInTime = Optional.ofNullable(startPointInTime);
return this;
}

public Builder withDetailedLinks(boolean detailedLinks) {
this.detailedLinks = detailedLinks;
public Builder withEndPointInTime(LocalDate endPointInTime) {
this.endPointInTime = Optional.ofNullable(endPointInTime);
return this;
}

Expand Down
16 changes: 12 additions & 4 deletions src/main/java/no/vegvesen/nvdbapi/client/gson/RouteParser.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,29 +3,37 @@
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import no.vegvesen.nvdbapi.client.model.roadnet.route.RouteField;
import no.vegvesen.nvdbapi.client.model.roadnet.route.RouteOnRoadNet;
import no.vegvesen.nvdbapi.client.model.roadnet.route.RouteStatus;

import java.util.stream.Collectors;
import java.util.stream.StreamSupport;

public class RouteParser {
public static RouteOnRoadNet parseDetailed(JsonObject result) {
JsonArray segmenter = result.getAsJsonArray("vegnettsrutesegmenter");
JsonObject metadata = result.getAsJsonObject(RouteField.METADATA.getName());
JsonArray segmenter = result.getAsJsonArray(RouteField.ROUTE_SEGMENTS.getName());
return new RouteOnRoadNet(
StreamSupport.stream(
segmenter.spliterator(), false)
.map(JsonElement::getAsJsonObject)
.map(DetailedRouteSegmentParser::parse)
.collect(Collectors.toList()));
.collect(Collectors.toList()),
metadata.get(RouteField.LENGTH.getName()).getAsDouble(),
RouteStatus.valueOfCode(metadata.get(RouteField.STATUS.getName()).getAsInt()));
}

public static RouteOnRoadNet parseBrief(JsonObject result) {
JsonArray segmenter = result.getAsJsonArray("vegnettsrutesegmenter");
JsonObject metadata = result.getAsJsonObject(RouteField.METADATA.getName());
JsonArray segmenter = result.getAsJsonArray(RouteField.ROUTE_SEGMENTS.getName());
return new RouteOnRoadNet(
StreamSupport.stream(
segmenter.spliterator(), false)
.map(JsonElement::getAsJsonObject)
.map(BriefRouteSegmentParser::parse)
.collect(Collectors.toList()));
.collect(Collectors.toList()),
metadata.get(RouteField.LENGTH.getName()).getAsDouble(),
RouteStatus.valueOfCode(metadata.get(RouteField.STATUS.getName()).getAsInt()));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package no.vegvesen.nvdbapi.client.model.roadnet.route;

public enum RouteField {
ROUTE_SEGMENTS("vegnettsrutesegmenter"),
START("start"),
END("slutt"),
GEOMETRY("geometri"),
SRID("srid"),
BRIEF_RESPONSE("kortform"),
CONNECTION_LINKS("konnekteringslenker"),
DETAILED_LINKS("detaljerte_lenker"),
DISTANCE("maks_avstand"),
ENVELOPE("omkrets"),
ROAD_SYS_REFS("vegsystemreferanse"),
TYPE_OF_ROAD("typeveg"),
ROAD_USER_GROUP("trafikantgruppe"),
POINT_IN_TIME("tidspunkt"),
START_POINT_IN_TIME("tidspunkt_start"),
END_POINT_IN_TIME("tidspunkt_slutt"),
METADATA("metadata"),
LENGTH("lengde"),
STATUS("status"),
STATUS_TEXT("status_tekst");

private final String fieldName;

RouteField(String fieldName) {
this.fieldName = fieldName;
}

public String getName() {
return this.fieldName;
}
}
Loading

0 comments on commit 185668a

Please sign in to comment.