diff --git a/src/main/java/com/traveltime/sdk/dto/requests/BaseTimeMapFastRequest.java b/src/main/java/com/traveltime/sdk/dto/requests/BaseTimeMapFastRequest.java new file mode 100644 index 00000000..9745456c --- /dev/null +++ b/src/main/java/com/traveltime/sdk/dto/requests/BaseTimeMapFastRequest.java @@ -0,0 +1,22 @@ +package com.traveltime.sdk.dto.requests; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.traveltime.sdk.dto.requests.timemapfast.ArrivalSearches; +import lombok.*; +import lombok.experimental.SuperBuilder; + +@SuperBuilder +@Getter +@EqualsAndHashCode(callSuper = true) +@JsonInclude(JsonInclude.Include.NON_NULL) +@NoArgsConstructor +public abstract class BaseTimeMapFastRequest extends BaseTravelTimePostRequest { + + @NonNull + ArrivalSearches arrivalSearches; + + @Override + protected String endpoint() { + return "time-map/fast"; + } +} diff --git a/src/main/java/com/traveltime/sdk/dto/requests/BaseTimeMapRequest.java b/src/main/java/com/traveltime/sdk/dto/requests/BaseTimeMapRequest.java new file mode 100644 index 00000000..24aab99d --- /dev/null +++ b/src/main/java/com/traveltime/sdk/dto/requests/BaseTimeMapRequest.java @@ -0,0 +1,35 @@ +package com.traveltime.sdk.dto.requests; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.traveltime.sdk.dto.requests.timemap.*; +import jakarta.validation.Valid; +import java.util.List; +import lombok.*; +import lombok.experimental.SuperBuilder; + +@SuperBuilder +@Getter +@EqualsAndHashCode(callSuper = true) +@JsonInclude(JsonInclude.Include.NON_NULL) +@NoArgsConstructor +public abstract class BaseTimeMapRequest extends BaseTravelTimePostRequest { + + @Valid + @Singular + List departureSearches; + + @Valid + @Singular + List arrivalSearches; + + @Singular + List intersections; + + @Singular + List unions; + + @Override + protected String endpoint() { + return "time-map"; + } +} diff --git a/src/main/java/com/traveltime/sdk/dto/requests/BaseTravelTimePostRequest.java b/src/main/java/com/traveltime/sdk/dto/requests/BaseTravelTimePostRequest.java new file mode 100644 index 00000000..09c80e52 --- /dev/null +++ b/src/main/java/com/traveltime/sdk/dto/requests/BaseTravelTimePostRequest.java @@ -0,0 +1,35 @@ +package com.traveltime.sdk.dto.requests; + +import com.traveltime.sdk.auth.TravelTimeCredentials; +import com.traveltime.sdk.dto.responses.errors.TravelTimeError; +import com.traveltime.sdk.utils.*; +import io.vavr.control.Either; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; +import lombok.val; +import okhttp3.*; + +@SuperBuilder +@NoArgsConstructor +public abstract class BaseTravelTimePostRequest extends TravelTimeRequest { + + protected abstract String endpoint(); + + protected abstract AcceptType acceptType(); + + @Override + public final Either createRequest(HttpUrl baseUri, TravelTimeCredentials credentials) { + val uri = baseUri.newBuilder().addPathSegments(endpoint()).build(); + return JsonUtils.toJson(this).map(json -> createPostRequest(credentials, uri, json)); + } + + protected final Request createPostRequest(TravelTimeCredentials credentials, HttpUrl url, String jsonString) { + return new Request.Builder() + .url(url) + .headers(credentials.getHeaders()) + .addHeader("Accept", acceptType().getValue()) + .addHeader("User-Agent", "Travel Time Java SDK " + Version.getVersion()) + .post(RequestBody.create(jsonString, JSON)) + .build(); + } +} diff --git a/src/main/java/com/traveltime/sdk/dto/requests/RoutesRequest.java b/src/main/java/com/traveltime/sdk/dto/requests/RoutesRequest.java index 465c88e9..0271e98a 100644 --- a/src/main/java/com/traveltime/sdk/dto/requests/RoutesRequest.java +++ b/src/main/java/com/traveltime/sdk/dto/requests/RoutesRequest.java @@ -1,21 +1,15 @@ package com.traveltime.sdk.dto.requests; import com.fasterxml.jackson.annotation.JsonInclude; -import com.traveltime.sdk.auth.TravelTimeCredentials; import com.traveltime.sdk.dto.common.Location; import com.traveltime.sdk.dto.requests.routes.ArrivalSearch; import com.traveltime.sdk.dto.requests.routes.DepartureSearch; import com.traveltime.sdk.dto.responses.RoutesResponse; -import com.traveltime.sdk.dto.responses.errors.TravelTimeError; import com.traveltime.sdk.utils.AcceptType; -import com.traveltime.sdk.utils.JsonUtils; -import io.vavr.control.Either; import jakarta.validation.Valid; import java.util.List; import lombok.*; import lombok.extern.jackson.Jacksonized; -import okhttp3.HttpUrl; -import okhttp3.Request; @Data @Builder @@ -23,7 +17,7 @@ @AllArgsConstructor @EqualsAndHashCode(callSuper = true) @JsonInclude(JsonInclude.Include.NON_NULL) -public class RoutesRequest extends TravelTimeRequest { +public class RoutesRequest extends BaseTravelTimePostRequest { @NonNull @Singular List locations; @@ -37,10 +31,13 @@ public class RoutesRequest extends TravelTimeRequest { List arrivalSearches; @Override - public Either createRequest(HttpUrl baseUri, TravelTimeCredentials credentials) { - val uri = baseUri.newBuilder().addPathSegments("routes").build(); - return JsonUtils.toJson(this) - .map(json -> createPostRequest(credentials, uri, json, AcceptType.APPLICATION_JSON)); + protected String endpoint() { + return "routes"; + } + + @Override + protected AcceptType acceptType() { + return AcceptType.APPLICATION_JSON; } @Override diff --git a/src/main/java/com/traveltime/sdk/dto/requests/SupportedLocationsRequest.java b/src/main/java/com/traveltime/sdk/dto/requests/SupportedLocationsRequest.java index a8d0f3d8..9c067674 100644 --- a/src/main/java/com/traveltime/sdk/dto/requests/SupportedLocationsRequest.java +++ b/src/main/java/com/traveltime/sdk/dto/requests/SupportedLocationsRequest.java @@ -1,33 +1,30 @@ package com.traveltime.sdk.dto.requests; -import com.traveltime.sdk.auth.TravelTimeCredentials; import com.traveltime.sdk.dto.common.Location; import com.traveltime.sdk.dto.responses.SupportedLocationsResponse; -import com.traveltime.sdk.dto.responses.errors.TravelTimeError; import com.traveltime.sdk.utils.AcceptType; -import com.traveltime.sdk.utils.JsonUtils; -import io.vavr.control.Either; import java.util.List; import lombok.*; import lombok.extern.jackson.Jacksonized; -import okhttp3.HttpUrl; -import okhttp3.Request; @Data @Builder @Jacksonized @AllArgsConstructor @EqualsAndHashCode(callSuper = true) -public class SupportedLocationsRequest extends TravelTimeRequest { +public class SupportedLocationsRequest extends BaseTravelTimePostRequest { @NonNull @Singular List locations; @Override - public Either createRequest(HttpUrl baseUri, TravelTimeCredentials credentials) { - val uri = baseUri.newBuilder().addPathSegments("supported-locations").build(); - return JsonUtils.toJson(this) - .map(json -> createPostRequest(credentials, uri, json, AcceptType.APPLICATION_JSON)); + protected String endpoint() { + return "supported-locations"; + } + + @Override + protected AcceptType acceptType() { + return AcceptType.APPLICATION_JSON; } @Override diff --git a/src/main/java/com/traveltime/sdk/dto/requests/TimeFilterDistrictsRequest.java b/src/main/java/com/traveltime/sdk/dto/requests/TimeFilterDistrictsRequest.java index de60154b..d6d0d538 100644 --- a/src/main/java/com/traveltime/sdk/dto/requests/TimeFilterDistrictsRequest.java +++ b/src/main/java/com/traveltime/sdk/dto/requests/TimeFilterDistrictsRequest.java @@ -1,24 +1,19 @@ package com.traveltime.sdk.dto.requests; -import com.traveltime.sdk.auth.TravelTimeCredentials; -import com.traveltime.sdk.dto.requests.zones.*; +import com.traveltime.sdk.dto.requests.zones.ArrivalSearch; +import com.traveltime.sdk.dto.requests.zones.DepartureSearch; import com.traveltime.sdk.dto.responses.TimeFilterDistrictsResponse; -import com.traveltime.sdk.dto.responses.errors.TravelTimeError; import com.traveltime.sdk.utils.AcceptType; -import com.traveltime.sdk.utils.JsonUtils; -import io.vavr.control.Either; import java.util.List; import lombok.*; import lombok.extern.jackson.Jacksonized; -import okhttp3.HttpUrl; -import okhttp3.Request; @Data @Builder @Jacksonized @AllArgsConstructor @EqualsAndHashCode(callSuper = true) -public class TimeFilterDistrictsRequest extends TravelTimeRequest { +public class TimeFilterDistrictsRequest extends BaseTravelTimePostRequest { @Singular List departureSearches; @@ -26,12 +21,13 @@ public class TimeFilterDistrictsRequest extends TravelTimeRequest arrivalSearches; @Override - public Either createRequest(HttpUrl baseUri, TravelTimeCredentials credentials) { - val uri = baseUri.newBuilder() - .addPathSegments("time-filter/postcode-districts") - .build(); - return JsonUtils.toJson(this) - .map(json -> createPostRequest(credentials, uri, json, AcceptType.APPLICATION_JSON)); + protected String endpoint() { + return "time-filter/postcode-districts"; + } + + @Override + protected AcceptType acceptType() { + return AcceptType.APPLICATION_JSON; } @Override diff --git a/src/main/java/com/traveltime/sdk/dto/requests/TimeFilterFastRequest.java b/src/main/java/com/traveltime/sdk/dto/requests/TimeFilterFastRequest.java index a4f0c4fd..661169a9 100644 --- a/src/main/java/com/traveltime/sdk/dto/requests/TimeFilterFastRequest.java +++ b/src/main/java/com/traveltime/sdk/dto/requests/TimeFilterFastRequest.java @@ -1,25 +1,19 @@ package com.traveltime.sdk.dto.requests; -import com.traveltime.sdk.auth.TravelTimeCredentials; import com.traveltime.sdk.dto.common.Location; import com.traveltime.sdk.dto.requests.timefilterfast.ArrivalSearches; import com.traveltime.sdk.dto.responses.TimeFilterFastResponse; -import com.traveltime.sdk.dto.responses.errors.TravelTimeError; import com.traveltime.sdk.utils.AcceptType; -import com.traveltime.sdk.utils.JsonUtils; -import io.vavr.control.Either; import java.util.List; import lombok.*; import lombok.extern.jackson.Jacksonized; -import okhttp3.HttpUrl; -import okhttp3.Request; @Data @Builder @Jacksonized @AllArgsConstructor @EqualsAndHashCode(callSuper = true) -public class TimeFilterFastRequest extends TravelTimeRequest { +public class TimeFilterFastRequest extends BaseTravelTimePostRequest { @NonNull @Singular List locations; @@ -28,10 +22,13 @@ public class TimeFilterFastRequest extends TravelTimeRequest createRequest(HttpUrl baseUri, TravelTimeCredentials credentials) { - val uri = baseUri.newBuilder().addPathSegments("time-filter/fast").build(); - return JsonUtils.toJson(this) - .map(json -> createPostRequest(credentials, uri, json, AcceptType.APPLICATION_JSON)); + protected String endpoint() { + return "time-filter/fast"; + } + + @Override + protected AcceptType acceptType() { + return AcceptType.APPLICATION_JSON; } @Override diff --git a/src/main/java/com/traveltime/sdk/dto/requests/TimeFilterPostcodesRequest.java b/src/main/java/com/traveltime/sdk/dto/requests/TimeFilterPostcodesRequest.java index 882008f5..cf967a6d 100644 --- a/src/main/java/com/traveltime/sdk/dto/requests/TimeFilterPostcodesRequest.java +++ b/src/main/java/com/traveltime/sdk/dto/requests/TimeFilterPostcodesRequest.java @@ -1,25 +1,20 @@ package com.traveltime.sdk.dto.requests; -import com.traveltime.sdk.auth.TravelTimeCredentials; -import com.traveltime.sdk.dto.requests.postcodes.*; +import com.traveltime.sdk.dto.requests.postcodes.ArrivalSearch; +import com.traveltime.sdk.dto.requests.postcodes.DepartureSearch; import com.traveltime.sdk.dto.responses.TimeFilterPostcodesResponse; -import com.traveltime.sdk.dto.responses.errors.TravelTimeError; import com.traveltime.sdk.utils.AcceptType; -import com.traveltime.sdk.utils.JsonUtils; -import io.vavr.control.Either; import jakarta.validation.Valid; import java.util.List; import lombok.*; import lombok.extern.jackson.Jacksonized; -import okhttp3.HttpUrl; -import okhttp3.Request; @Data @Builder @Jacksonized @AllArgsConstructor @EqualsAndHashCode(callSuper = true) -public class TimeFilterPostcodesRequest extends TravelTimeRequest { +public class TimeFilterPostcodesRequest extends BaseTravelTimePostRequest { @Valid @Singular List departureSearches; @@ -29,10 +24,13 @@ public class TimeFilterPostcodesRequest extends TravelTimeRequest arrivalSearches; @Override - public Either createRequest(HttpUrl baseUri, TravelTimeCredentials credentials) { - val uri = baseUri.newBuilder().addPathSegments("time-filter/postcodes").build(); - return JsonUtils.toJson(this) - .map(json -> createPostRequest(credentials, uri, json, AcceptType.APPLICATION_JSON)); + protected String endpoint() { + return "time-filter/postcodes"; + } + + @Override + protected AcceptType acceptType() { + return AcceptType.APPLICATION_JSON; } @Override diff --git a/src/main/java/com/traveltime/sdk/dto/requests/TimeFilterRequest.java b/src/main/java/com/traveltime/sdk/dto/requests/TimeFilterRequest.java index ea775a50..d24e7236 100644 --- a/src/main/java/com/traveltime/sdk/dto/requests/TimeFilterRequest.java +++ b/src/main/java/com/traveltime/sdk/dto/requests/TimeFilterRequest.java @@ -1,21 +1,15 @@ package com.traveltime.sdk.dto.requests; import com.fasterxml.jackson.annotation.JsonInclude; -import com.traveltime.sdk.auth.TravelTimeCredentials; import com.traveltime.sdk.dto.common.Location; import com.traveltime.sdk.dto.requests.timefilter.ArrivalSearch; import com.traveltime.sdk.dto.requests.timefilter.DepartureSearch; import com.traveltime.sdk.dto.responses.TimeFilterResponse; -import com.traveltime.sdk.dto.responses.errors.TravelTimeError; import com.traveltime.sdk.utils.AcceptType; -import com.traveltime.sdk.utils.JsonUtils; -import io.vavr.control.Either; import jakarta.validation.Valid; import java.util.List; import lombok.*; import lombok.extern.jackson.Jacksonized; -import okhttp3.HttpUrl; -import okhttp3.Request; @Data @Builder @@ -23,7 +17,7 @@ @AllArgsConstructor @EqualsAndHashCode(callSuper = true) @JsonInclude(JsonInclude.Include.NON_NULL) -public class TimeFilterRequest extends TravelTimeRequest { +public class TimeFilterRequest extends BaseTravelTimePostRequest { @NonNull @Singular List locations; @@ -37,10 +31,13 @@ public class TimeFilterRequest extends TravelTimeRequest { List arrivalSearches; @Override - public Either createRequest(HttpUrl baseUri, TravelTimeCredentials credentials) { - val uri = baseUri.newBuilder().addPathSegments("time-filter").build(); - return JsonUtils.toJson(this) - .map(json -> createPostRequest(credentials, uri, json, AcceptType.APPLICATION_JSON)); + protected String endpoint() { + return "time-filter"; + } + + @Override + protected AcceptType acceptType() { + return AcceptType.APPLICATION_JSON; } @Override diff --git a/src/main/java/com/traveltime/sdk/dto/requests/TimeFilterSectorsRequest.java b/src/main/java/com/traveltime/sdk/dto/requests/TimeFilterSectorsRequest.java index 099cc6de..6936ec30 100644 --- a/src/main/java/com/traveltime/sdk/dto/requests/TimeFilterSectorsRequest.java +++ b/src/main/java/com/traveltime/sdk/dto/requests/TimeFilterSectorsRequest.java @@ -1,24 +1,20 @@ package com.traveltime.sdk.dto.requests; -import com.traveltime.sdk.auth.TravelTimeCredentials; -import com.traveltime.sdk.dto.requests.zones.*; +import com.traveltime.sdk.dto.requests.zones.ArrivalSearch; +import com.traveltime.sdk.dto.requests.zones.DepartureSearch; import com.traveltime.sdk.dto.responses.TimeFilterSectorsResponse; -import com.traveltime.sdk.dto.responses.errors.TravelTimeError; import com.traveltime.sdk.utils.AcceptType; -import com.traveltime.sdk.utils.JsonUtils; -import io.vavr.control.Either; import java.util.List; import lombok.*; import lombok.extern.jackson.Jacksonized; -import okhttp3.HttpUrl; -import okhttp3.Request; @Data @Builder @Jacksonized @AllArgsConstructor @EqualsAndHashCode(callSuper = true) -public class TimeFilterSectorsRequest extends TravelTimeRequest { +public class TimeFilterSectorsRequest extends BaseTravelTimePostRequest { + @Singular List departureSearches; @@ -26,12 +22,13 @@ public class TimeFilterSectorsRequest extends TravelTimeRequest arrivalSearches; @Override - public Either createRequest(HttpUrl baseUri, TravelTimeCredentials credentials) { - val uri = baseUri.newBuilder() - .addPathSegments("time-filter/postcode-sectors") - .build(); - return JsonUtils.toJson(this) - .map(json -> createPostRequest(credentials, uri, json, AcceptType.APPLICATION_JSON)); + protected String endpoint() { + return "time-filter/postcode-sectors"; + } + + @Override + protected AcceptType acceptType() { + return AcceptType.APPLICATION_JSON; } @Override diff --git a/src/main/java/com/traveltime/sdk/dto/requests/TimeMapBoxesRequest.java b/src/main/java/com/traveltime/sdk/dto/requests/TimeMapBoxesRequest.java index e57fc21b..f2dac3e5 100644 --- a/src/main/java/com/traveltime/sdk/dto/requests/TimeMapBoxesRequest.java +++ b/src/main/java/com/traveltime/sdk/dto/requests/TimeMapBoxesRequest.java @@ -1,49 +1,19 @@ package com.traveltime.sdk.dto.requests; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.traveltime.sdk.auth.TravelTimeCredentials; -import com.traveltime.sdk.dto.requests.timemap.ArrivalSearch; -import com.traveltime.sdk.dto.requests.timemap.DepartureSearch; -import com.traveltime.sdk.dto.requests.timemap.Intersection; -import com.traveltime.sdk.dto.requests.timemap.Union; import com.traveltime.sdk.dto.responses.TimeMapBoxesResponse; -import com.traveltime.sdk.dto.responses.errors.TravelTimeError; import com.traveltime.sdk.utils.AcceptType; -import com.traveltime.sdk.utils.JsonUtils; -import io.vavr.control.Either; -import jakarta.validation.Valid; -import java.util.List; -import lombok.*; +import lombok.EqualsAndHashCode; +import lombok.experimental.SuperBuilder; import lombok.extern.jackson.Jacksonized; -import okhttp3.HttpUrl; -import okhttp3.Request; -@Data -@Builder +@SuperBuilder @Jacksonized -@AllArgsConstructor @EqualsAndHashCode(callSuper = true) -@JsonInclude(JsonInclude.Include.NON_NULL) -public class TimeMapBoxesRequest extends TravelTimeRequest { - @Valid - @Singular - List departureSearches; - - @Valid - @Singular - List arrivalSearches; - - @Singular - List intersections; - - @Singular - List unions; +public class TimeMapBoxesRequest extends BaseTimeMapRequest { @Override - public Either createRequest(HttpUrl baseUri, TravelTimeCredentials credentials) { - val uri = baseUri.newBuilder().addPathSegments("time-map").build(); - AcceptType acceptType = AcceptType.APPLICATION_BOUNDING_BOXES_JSON; - return JsonUtils.toJson(this).map(json -> createPostRequest(credentials, uri, json, acceptType)); + protected AcceptType acceptType() { + return AcceptType.APPLICATION_BOUNDING_BOXES_JSON; } @Override diff --git a/src/main/java/com/traveltime/sdk/dto/requests/TimeMapFastBoxesRequest.java b/src/main/java/com/traveltime/sdk/dto/requests/TimeMapFastBoxesRequest.java index 9e48110d..ff249040 100644 --- a/src/main/java/com/traveltime/sdk/dto/requests/TimeMapFastBoxesRequest.java +++ b/src/main/java/com/traveltime/sdk/dto/requests/TimeMapFastBoxesRequest.java @@ -1,33 +1,19 @@ package com.traveltime.sdk.dto.requests; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.traveltime.sdk.auth.TravelTimeCredentials; -import com.traveltime.sdk.dto.requests.timemapfast.ArrivalSearches; import com.traveltime.sdk.dto.responses.TimeMapFastBoxesResponse; -import com.traveltime.sdk.dto.responses.errors.TravelTimeError; import com.traveltime.sdk.utils.AcceptType; -import com.traveltime.sdk.utils.JsonUtils; -import io.vavr.control.Either; -import lombok.*; +import lombok.EqualsAndHashCode; +import lombok.experimental.SuperBuilder; import lombok.extern.jackson.Jacksonized; -import okhttp3.HttpUrl; -import okhttp3.Request; -@Data -@Builder +@SuperBuilder @Jacksonized -@AllArgsConstructor @EqualsAndHashCode(callSuper = true) -@JsonInclude(JsonInclude.Include.NON_NULL) -public class TimeMapFastBoxesRequest extends TravelTimeRequest { - @NonNull - ArrivalSearches arrivalSearches; +public class TimeMapFastBoxesRequest extends BaseTimeMapFastRequest { @Override - public Either createRequest(HttpUrl baseUri, TravelTimeCredentials credentials) { - val uri = baseUri.newBuilder().addPathSegments("time-map/fast").build(); - AcceptType acceptType = AcceptType.APPLICATION_BOUNDING_BOXES_JSON; - return JsonUtils.toJson(this).map(json -> createPostRequest(credentials, uri, json, acceptType)); + protected AcceptType acceptType() { + return AcceptType.APPLICATION_BOUNDING_BOXES_JSON; } @Override diff --git a/src/main/java/com/traveltime/sdk/dto/requests/TimeMapFastGeoJsonRequest.java b/src/main/java/com/traveltime/sdk/dto/requests/TimeMapFastGeoJsonRequest.java index c8d36e19..213e88c8 100644 --- a/src/main/java/com/traveltime/sdk/dto/requests/TimeMapFastGeoJsonRequest.java +++ b/src/main/java/com/traveltime/sdk/dto/requests/TimeMapFastGeoJsonRequest.java @@ -1,33 +1,19 @@ package com.traveltime.sdk.dto.requests; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.traveltime.sdk.auth.TravelTimeCredentials; -import com.traveltime.sdk.dto.requests.timemapfast.ArrivalSearches; import com.traveltime.sdk.dto.responses.TimeMapFastGeoJsonResponse; -import com.traveltime.sdk.dto.responses.errors.TravelTimeError; import com.traveltime.sdk.utils.AcceptType; -import com.traveltime.sdk.utils.JsonUtils; -import io.vavr.control.Either; -import lombok.*; +import lombok.EqualsAndHashCode; +import lombok.experimental.SuperBuilder; import lombok.extern.jackson.Jacksonized; -import okhttp3.HttpUrl; -import okhttp3.Request; -@Data -@Builder +@SuperBuilder @Jacksonized -@AllArgsConstructor @EqualsAndHashCode(callSuper = true) -@JsonInclude(JsonInclude.Include.NON_NULL) -public class TimeMapFastGeoJsonRequest extends TravelTimeRequest { - @NonNull - ArrivalSearches arrivalSearches; +public class TimeMapFastGeoJsonRequest extends BaseTimeMapFastRequest { @Override - public Either createRequest(HttpUrl baseUri, TravelTimeCredentials credentials) { - val uri = baseUri.newBuilder().addPathSegments("time-map/fast").build(); - return JsonUtils.toJson(this) - .map(json -> createPostRequest(credentials, uri, json, AcceptType.APPLICATION_GEO_JSON)); + protected AcceptType acceptType() { + return AcceptType.APPLICATION_GEO_JSON; } @Override diff --git a/src/main/java/com/traveltime/sdk/dto/requests/TimeMapFastRequest.java b/src/main/java/com/traveltime/sdk/dto/requests/TimeMapFastRequest.java index 59d2f8e3..2f68f361 100644 --- a/src/main/java/com/traveltime/sdk/dto/requests/TimeMapFastRequest.java +++ b/src/main/java/com/traveltime/sdk/dto/requests/TimeMapFastRequest.java @@ -1,33 +1,19 @@ package com.traveltime.sdk.dto.requests; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.traveltime.sdk.auth.TravelTimeCredentials; -import com.traveltime.sdk.dto.requests.timemapfast.ArrivalSearches; import com.traveltime.sdk.dto.responses.TimeMapFastResponse; -import com.traveltime.sdk.dto.responses.errors.TravelTimeError; import com.traveltime.sdk.utils.AcceptType; -import com.traveltime.sdk.utils.JsonUtils; -import io.vavr.control.Either; -import lombok.*; +import lombok.EqualsAndHashCode; +import lombok.experimental.SuperBuilder; import lombok.extern.jackson.Jacksonized; -import okhttp3.HttpUrl; -import okhttp3.Request; -@Data -@Builder +@SuperBuilder @Jacksonized -@AllArgsConstructor @EqualsAndHashCode(callSuper = true) -@JsonInclude(JsonInclude.Include.NON_NULL) -public class TimeMapFastRequest extends TravelTimeRequest { - @NonNull - ArrivalSearches arrivalSearches; +public class TimeMapFastRequest extends BaseTimeMapFastRequest { @Override - public Either createRequest(HttpUrl baseUri, TravelTimeCredentials credentials) { - val uri = baseUri.newBuilder().addPathSegments("time-map/fast").build(); - return JsonUtils.toJson(this) - .map(json -> createPostRequest(credentials, uri, json, AcceptType.APPLICATION_JSON)); + protected AcceptType acceptType() { + return AcceptType.APPLICATION_JSON; } @Override diff --git a/src/main/java/com/traveltime/sdk/dto/requests/TimeMapFastWktRequest.java b/src/main/java/com/traveltime/sdk/dto/requests/TimeMapFastWktRequest.java index 46b8ffe4..4c984d2a 100644 --- a/src/main/java/com/traveltime/sdk/dto/requests/TimeMapFastWktRequest.java +++ b/src/main/java/com/traveltime/sdk/dto/requests/TimeMapFastWktRequest.java @@ -1,39 +1,25 @@ package com.traveltime.sdk.dto.requests; import com.fasterxml.jackson.annotation.JsonInclude; -import com.traveltime.sdk.auth.TravelTimeCredentials; -import com.traveltime.sdk.dto.requests.timemapfast.ArrivalSearches; import com.traveltime.sdk.dto.responses.TimeMapFastWktResponse; -import com.traveltime.sdk.dto.responses.errors.TravelTimeError; import com.traveltime.sdk.utils.AcceptType; -import com.traveltime.sdk.utils.JsonUtils; -import io.vavr.control.Either; import lombok.*; +import lombok.experimental.SuperBuilder; import lombok.extern.jackson.Jacksonized; -import okhttp3.HttpUrl; -import okhttp3.Request; -@Data -@Builder +@SuperBuilder @Jacksonized -@AllArgsConstructor @EqualsAndHashCode(callSuper = true) @JsonInclude(JsonInclude.Include.NON_NULL) -public class TimeMapFastWktRequest extends TravelTimeRequest { - @NonNull - ArrivalSearches arrivalSearches; +public class TimeMapFastWktRequest extends BaseTimeMapFastRequest { @Builder.Default + @Getter boolean withHoles = true; - private AcceptType acceptType() { - return withHoles ? AcceptType.APPLICATION_WKT_JSON : AcceptType.APPLICATION_WKT_NO_HOLES_JSON; - } - @Override - public Either createRequest(HttpUrl baseUri, TravelTimeCredentials credentials) { - val uri = baseUri.newBuilder().addPathSegments("time-map/fast").build(); - return JsonUtils.toJson(this).map(json -> createPostRequest(credentials, uri, json, acceptType())); + protected AcceptType acceptType() { + return withHoles ? AcceptType.APPLICATION_WKT_JSON : AcceptType.APPLICATION_WKT_NO_HOLES_JSON; } @Override diff --git a/src/main/java/com/traveltime/sdk/dto/requests/TimeMapGeoJsonRequest.java b/src/main/java/com/traveltime/sdk/dto/requests/TimeMapGeoJsonRequest.java index 3f05fcc4..a75ff1d1 100644 --- a/src/main/java/com/traveltime/sdk/dto/requests/TimeMapGeoJsonRequest.java +++ b/src/main/java/com/traveltime/sdk/dto/requests/TimeMapGeoJsonRequest.java @@ -1,49 +1,19 @@ package com.traveltime.sdk.dto.requests; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.traveltime.sdk.auth.TravelTimeCredentials; -import com.traveltime.sdk.dto.requests.timemap.ArrivalSearch; -import com.traveltime.sdk.dto.requests.timemap.DepartureSearch; -import com.traveltime.sdk.dto.requests.timemap.Intersection; -import com.traveltime.sdk.dto.requests.timemap.Union; import com.traveltime.sdk.dto.responses.TimeMapGeoJsonResponse; -import com.traveltime.sdk.dto.responses.errors.TravelTimeError; import com.traveltime.sdk.utils.AcceptType; -import com.traveltime.sdk.utils.JsonUtils; -import io.vavr.control.Either; -import jakarta.validation.Valid; -import java.util.List; -import lombok.*; +import lombok.EqualsAndHashCode; +import lombok.experimental.SuperBuilder; import lombok.extern.jackson.Jacksonized; -import okhttp3.HttpUrl; -import okhttp3.Request; -@Data -@Builder +@SuperBuilder @Jacksonized -@AllArgsConstructor @EqualsAndHashCode(callSuper = true) -@JsonInclude(JsonInclude.Include.NON_NULL) -public class TimeMapGeoJsonRequest extends TravelTimeRequest { - @Valid - @Singular - List departureSearches; - - @Valid - @Singular - List arrivalSearches; - - @Singular - List intersections; - - @Singular - List unions; +public class TimeMapGeoJsonRequest extends BaseTimeMapRequest { @Override - public Either createRequest(HttpUrl baseUri, TravelTimeCredentials credentials) { - val uri = baseUri.newBuilder().addPathSegments("time-map").build(); - return JsonUtils.toJson(this) - .map(json -> createPostRequest(credentials, uri, json, AcceptType.APPLICATION_GEO_JSON)); + protected AcceptType acceptType() { + return AcceptType.APPLICATION_GEO_JSON; } @Override diff --git a/src/main/java/com/traveltime/sdk/dto/requests/TimeMapKmlRequest.java b/src/main/java/com/traveltime/sdk/dto/requests/TimeMapKmlRequest.java index c06c47bc..806aab8a 100644 --- a/src/main/java/com/traveltime/sdk/dto/requests/TimeMapKmlRequest.java +++ b/src/main/java/com/traveltime/sdk/dto/requests/TimeMapKmlRequest.java @@ -1,49 +1,19 @@ package com.traveltime.sdk.dto.requests; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.traveltime.sdk.auth.TravelTimeCredentials; -import com.traveltime.sdk.dto.requests.timemap.ArrivalSearch; -import com.traveltime.sdk.dto.requests.timemap.DepartureSearch; -import com.traveltime.sdk.dto.requests.timemap.Intersection; -import com.traveltime.sdk.dto.requests.timemap.Union; -import com.traveltime.sdk.dto.responses.errors.TravelTimeError; import com.traveltime.sdk.utils.AcceptType; -import com.traveltime.sdk.utils.JsonUtils; import de.micromata.opengis.kml.v_2_2_0.Kml; -import io.vavr.control.Either; -import jakarta.validation.Valid; -import java.util.List; -import lombok.*; +import lombok.EqualsAndHashCode; +import lombok.experimental.SuperBuilder; import lombok.extern.jackson.Jacksonized; -import okhttp3.HttpUrl; -import okhttp3.Request; -@Data -@Builder +@SuperBuilder @Jacksonized -@AllArgsConstructor @EqualsAndHashCode(callSuper = true) -@JsonInclude(JsonInclude.Include.NON_NULL) -public class TimeMapKmlRequest extends TravelTimeRequest { - @Valid - @Singular - List departureSearches; - - @Valid - @Singular - List arrivalSearches; - - @Singular - List intersections; - - @Singular - List unions; +public class TimeMapKmlRequest extends BaseTimeMapRequest { @Override - public Either createRequest(HttpUrl baseUri, TravelTimeCredentials credentials) { - val uri = baseUri.newBuilder().addPathSegments("time-map").build(); - return JsonUtils.toJson(this) - .map(json -> createPostRequest(credentials, uri, json, AcceptType.APPLICATION_KML)); + protected AcceptType acceptType() { + return AcceptType.APPLICATION_KML; } @Override diff --git a/src/main/java/com/traveltime/sdk/dto/requests/TimeMapRequest.java b/src/main/java/com/traveltime/sdk/dto/requests/TimeMapRequest.java index c28af7f1..da9ed9ce 100644 --- a/src/main/java/com/traveltime/sdk/dto/requests/TimeMapRequest.java +++ b/src/main/java/com/traveltime/sdk/dto/requests/TimeMapRequest.java @@ -1,49 +1,19 @@ package com.traveltime.sdk.dto.requests; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.traveltime.sdk.auth.TravelTimeCredentials; -import com.traveltime.sdk.dto.requests.timemap.ArrivalSearch; -import com.traveltime.sdk.dto.requests.timemap.DepartureSearch; -import com.traveltime.sdk.dto.requests.timemap.Intersection; -import com.traveltime.sdk.dto.requests.timemap.Union; import com.traveltime.sdk.dto.responses.TimeMapResponse; -import com.traveltime.sdk.dto.responses.errors.TravelTimeError; import com.traveltime.sdk.utils.AcceptType; -import com.traveltime.sdk.utils.JsonUtils; -import io.vavr.control.Either; -import jakarta.validation.Valid; -import java.util.List; -import lombok.*; +import lombok.EqualsAndHashCode; +import lombok.experimental.SuperBuilder; import lombok.extern.jackson.Jacksonized; -import okhttp3.HttpUrl; -import okhttp3.Request; -@Data -@Builder +@SuperBuilder @Jacksonized -@AllArgsConstructor @EqualsAndHashCode(callSuper = true) -@JsonInclude(JsonInclude.Include.NON_NULL) -public class TimeMapRequest extends TravelTimeRequest { - @Valid - @Singular - List departureSearches; - - @Valid - @Singular - List arrivalSearches; - - @Singular - List intersections; - - @Singular - List unions; +public class TimeMapRequest extends BaseTimeMapRequest { @Override - public Either createRequest(HttpUrl baseUri, TravelTimeCredentials credentials) { - val uri = baseUri.newBuilder().addPathSegments("time-map").build(); - return JsonUtils.toJson(this) - .map(json -> createPostRequest(credentials, uri, json, AcceptType.APPLICATION_JSON)); + protected AcceptType acceptType() { + return AcceptType.APPLICATION_JSON; } @Override diff --git a/src/main/java/com/traveltime/sdk/dto/requests/TimeMapWktRequest.java b/src/main/java/com/traveltime/sdk/dto/requests/TimeMapWktRequest.java index d5042ff9..fa436aae 100644 --- a/src/main/java/com/traveltime/sdk/dto/requests/TimeMapWktRequest.java +++ b/src/main/java/com/traveltime/sdk/dto/requests/TimeMapWktRequest.java @@ -1,55 +1,25 @@ package com.traveltime.sdk.dto.requests; import com.fasterxml.jackson.annotation.JsonInclude; -import com.traveltime.sdk.auth.TravelTimeCredentials; -import com.traveltime.sdk.dto.requests.timemap.ArrivalSearch; -import com.traveltime.sdk.dto.requests.timemap.DepartureSearch; -import com.traveltime.sdk.dto.requests.timemap.Intersection; -import com.traveltime.sdk.dto.requests.timemap.Union; import com.traveltime.sdk.dto.responses.TimeMapWktResponse; -import com.traveltime.sdk.dto.responses.errors.TravelTimeError; import com.traveltime.sdk.utils.AcceptType; -import com.traveltime.sdk.utils.JsonUtils; -import io.vavr.control.Either; -import jakarta.validation.Valid; -import java.util.List; import lombok.*; +import lombok.experimental.SuperBuilder; import lombok.extern.jackson.Jacksonized; -import okhttp3.HttpUrl; -import okhttp3.Request; -@Data -@Builder +@SuperBuilder @Jacksonized -@AllArgsConstructor @EqualsAndHashCode(callSuper = true) @JsonInclude(JsonInclude.Include.NON_NULL) -public class TimeMapWktRequest extends TravelTimeRequest { - @Valid - @Singular - List departureSearches; - - @Valid - @Singular - List arrivalSearches; - - @Singular - List intersections; - - @Singular - List unions; +public class TimeMapWktRequest extends BaseTimeMapRequest { @Builder.Default + @Getter boolean withHoles = true; - public AcceptType acceptType() { - return withHoles ? AcceptType.APPLICATION_WKT_JSON : AcceptType.APPLICATION_WKT_NO_HOLES_JSON; - } - @Override - public Either createRequest(HttpUrl baseUri, TravelTimeCredentials credentials) { - val uri = baseUri.newBuilder().addPathSegments("time-map").build(); - return JsonUtils.toJson(this).map(json -> createPostRequest(credentials, uri, json, acceptType())); + protected AcceptType acceptType() { + return withHoles ? AcceptType.APPLICATION_WKT_JSON : AcceptType.APPLICATION_WKT_NO_HOLES_JSON; } @Override diff --git a/src/main/java/com/traveltime/sdk/dto/requests/TravelTimeRequest.java b/src/main/java/com/traveltime/sdk/dto/requests/TravelTimeRequest.java index 49a49a96..81bdba7b 100644 --- a/src/main/java/com/traveltime/sdk/dto/requests/TravelTimeRequest.java +++ b/src/main/java/com/traveltime/sdk/dto/requests/TravelTimeRequest.java @@ -2,19 +2,21 @@ import com.traveltime.sdk.auth.TravelTimeCredentials; import com.traveltime.sdk.dto.responses.errors.TravelTimeError; -import com.traveltime.sdk.utils.AcceptType; import com.traveltime.sdk.utils.QueryElement; import com.traveltime.sdk.utils.Version; import io.vavr.control.Either; import java.util.ArrayList; import java.util.List; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; import okhttp3.HttpUrl; import okhttp3.MediaType; import okhttp3.Request; -import okhttp3.RequestBody; +@SuperBuilder +@NoArgsConstructor public abstract class TravelTimeRequest { - private static final MediaType JSON = MediaType.parse("application/json; charset=utf-8"); + protected static final MediaType JSON = MediaType.parse("application/json; charset=utf-8"); public abstract Either createRequest(HttpUrl baseUri, TravelTimeCredentials credentials); @@ -33,15 +35,4 @@ protected Request createGetRequest(HttpUrl url, TravelTimeCredentials credential .get() .build(); } - - protected Request createPostRequest( - TravelTimeCredentials credentials, HttpUrl url, String jsonString, AcceptType acceptType) { - return new Request.Builder() - .url(url) - .headers(credentials.getHeaders()) - .addHeader("Accept", acceptType.getValue()) - .addHeader("User-Agent", "Travel Time Java SDK " + Version.getVersion()) - .post(RequestBody.create(jsonString, JSON)) - .build(); - } } diff --git a/src/main/java/com/traveltime/sdk/dto/requests/postcodes/ArrivalSearch.java b/src/main/java/com/traveltime/sdk/dto/requests/postcodes/ArrivalSearch.java index d4894f4d..4e3d18b3 100644 --- a/src/main/java/com/traveltime/sdk/dto/requests/postcodes/ArrivalSearch.java +++ b/src/main/java/com/traveltime/sdk/dto/requests/postcodes/ArrivalSearch.java @@ -1,47 +1,17 @@ package com.traveltime.sdk.dto.requests.postcodes; import com.fasterxml.jackson.annotation.JsonInclude; -import com.traveltime.sdk.dto.common.Coordinates; -import com.traveltime.sdk.dto.common.FullRange; -import com.traveltime.sdk.dto.common.Property; -import com.traveltime.sdk.dto.common.Snapping; -import com.traveltime.sdk.dto.common.transportation.Transportation; -import jakarta.validation.Valid; -import jakarta.validation.constraints.Positive; import java.time.Instant; -import java.util.List; import lombok.*; +import lombok.experimental.SuperBuilder; import lombok.extern.jackson.Jacksonized; -@Value -@Builder +@SuperBuilder +@Getter @Jacksonized -@AllArgsConstructor +@EqualsAndHashCode(callSuper = true) @JsonInclude(JsonInclude.Include.NON_NULL) -public class ArrivalSearch { - @NonNull - String id; - - @NonNull - Coordinates coords; - - @Valid - @NonNull - Transportation transportation; - +public class ArrivalSearch extends BaseSearch { @NonNull Instant arrivalTime; - - @NonNull - @Positive(message = "travelTime should be positive") - Integer travelTime; - - @NonNull - @Singular - List properties; - - @Valid - FullRange range; - - Snapping snapping; } diff --git a/src/main/java/com/traveltime/sdk/dto/requests/postcodes/BaseSearch.java b/src/main/java/com/traveltime/sdk/dto/requests/postcodes/BaseSearch.java new file mode 100644 index 00000000..77d8bc7f --- /dev/null +++ b/src/main/java/com/traveltime/sdk/dto/requests/postcodes/BaseSearch.java @@ -0,0 +1,39 @@ +package com.traveltime.sdk.dto.requests.postcodes; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.traveltime.sdk.dto.common.*; +import com.traveltime.sdk.dto.common.transportation.Transportation; +import jakarta.validation.Valid; +import jakarta.validation.constraints.Positive; +import java.util.List; +import lombok.*; +import lombok.experimental.SuperBuilder; + +@SuperBuilder +@Getter +@EqualsAndHashCode +@JsonInclude(JsonInclude.Include.NON_NULL) +public abstract class BaseSearch { + @NonNull + String id; + + @NonNull + Coordinates coords; + + @Valid + @NonNull + Transportation transportation; + + @NonNull + @Positive(message = "travelTime should be positive") + Integer travelTime; + + @NonNull + @Singular + List properties; + + @Valid + FullRange range; + + Snapping snapping; +} diff --git a/src/main/java/com/traveltime/sdk/dto/requests/postcodes/DepartureSearch.java b/src/main/java/com/traveltime/sdk/dto/requests/postcodes/DepartureSearch.java index 6aa535a9..b5daa87e 100644 --- a/src/main/java/com/traveltime/sdk/dto/requests/postcodes/DepartureSearch.java +++ b/src/main/java/com/traveltime/sdk/dto/requests/postcodes/DepartureSearch.java @@ -1,47 +1,17 @@ package com.traveltime.sdk.dto.requests.postcodes; import com.fasterxml.jackson.annotation.JsonInclude; -import com.traveltime.sdk.dto.common.Coordinates; -import com.traveltime.sdk.dto.common.FullRange; -import com.traveltime.sdk.dto.common.Property; -import com.traveltime.sdk.dto.common.Snapping; -import com.traveltime.sdk.dto.common.transportation.Transportation; -import jakarta.validation.Valid; -import jakarta.validation.constraints.Positive; import java.time.Instant; -import java.util.List; import lombok.*; +import lombok.experimental.SuperBuilder; import lombok.extern.jackson.Jacksonized; -@Value -@Builder +@SuperBuilder +@Getter @Jacksonized -@AllArgsConstructor +@EqualsAndHashCode(callSuper = true) @JsonInclude(JsonInclude.Include.NON_NULL) -public class DepartureSearch { - @NonNull - String id; - - @NonNull - Coordinates coords; - - @Valid - @NonNull - Transportation transportation; - +public class DepartureSearch extends BaseSearch { @NonNull Instant departureTime; - - @NonNull - @Positive(message = "travelTime should be positive") - Integer travelTime; - - @NonNull - @Singular - List properties; - - @Valid - FullRange range; - - Snapping snapping; } diff --git a/src/main/java/com/traveltime/sdk/dto/requests/routes/ArrivalSearch.java b/src/main/java/com/traveltime/sdk/dto/requests/routes/ArrivalSearch.java index f49b59ba..8d0feb10 100644 --- a/src/main/java/com/traveltime/sdk/dto/requests/routes/ArrivalSearch.java +++ b/src/main/java/com/traveltime/sdk/dto/requests/routes/ArrivalSearch.java @@ -1,25 +1,18 @@ package com.traveltime.sdk.dto.requests.routes; import com.fasterxml.jackson.annotation.JsonInclude; -import com.traveltime.sdk.dto.common.FullRange; -import com.traveltime.sdk.dto.common.Property; -import com.traveltime.sdk.dto.common.Snapping; -import com.traveltime.sdk.dto.common.transportation.Transportation; -import jakarta.validation.Valid; import java.time.Instant; import java.util.List; import lombok.*; +import lombok.experimental.SuperBuilder; import lombok.extern.jackson.Jacksonized; -@Value -@Builder +@SuperBuilder +@Getter @Jacksonized -@AllArgsConstructor +@EqualsAndHashCode(callSuper = true) @JsonInclude(JsonInclude.Include.NON_NULL) -public class ArrivalSearch { - @NonNull - String id; - +public class ArrivalSearch extends BaseSearch { @NonNull @Singular List departureLocationIds; @@ -27,18 +20,6 @@ public class ArrivalSearch { @NonNull String arrivalLocationId; - @NonNull - Transportation transportation; - @NonNull Instant arrivalTime; - - @NonNull - @Singular - List properties; - - @Valid - FullRange range; - - Snapping snapping; } diff --git a/src/main/java/com/traveltime/sdk/dto/requests/routes/BaseSearch.java b/src/main/java/com/traveltime/sdk/dto/requests/routes/BaseSearch.java new file mode 100644 index 00000000..a402cbc9 --- /dev/null +++ b/src/main/java/com/traveltime/sdk/dto/requests/routes/BaseSearch.java @@ -0,0 +1,30 @@ +package com.traveltime.sdk.dto.requests.routes; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.traveltime.sdk.dto.common.*; +import com.traveltime.sdk.dto.common.transportation.Transportation; +import jakarta.validation.Valid; +import java.util.List; +import lombok.*; +import lombok.experimental.SuperBuilder; + +@SuperBuilder +@Getter +@EqualsAndHashCode +@JsonInclude(JsonInclude.Include.NON_NULL) +public abstract class BaseSearch { + @NonNull + String id; + + @NonNull + Transportation transportation; + + @NonNull + @Singular + List properties; + + @Valid + FullRange range; + + Snapping snapping; +} diff --git a/src/main/java/com/traveltime/sdk/dto/requests/routes/DepartureSearch.java b/src/main/java/com/traveltime/sdk/dto/requests/routes/DepartureSearch.java index ad0a93f5..36411882 100644 --- a/src/main/java/com/traveltime/sdk/dto/requests/routes/DepartureSearch.java +++ b/src/main/java/com/traveltime/sdk/dto/requests/routes/DepartureSearch.java @@ -1,25 +1,18 @@ package com.traveltime.sdk.dto.requests.routes; import com.fasterxml.jackson.annotation.JsonInclude; -import com.traveltime.sdk.dto.common.FullRange; -import com.traveltime.sdk.dto.common.Property; -import com.traveltime.sdk.dto.common.Snapping; -import com.traveltime.sdk.dto.common.transportation.Transportation; -import jakarta.validation.Valid; import java.time.Instant; import java.util.List; import lombok.*; +import lombok.experimental.SuperBuilder; import lombok.extern.jackson.Jacksonized; -@Value -@Builder +@SuperBuilder +@Getter @Jacksonized -@AllArgsConstructor +@EqualsAndHashCode(callSuper = true) @JsonInclude(JsonInclude.Include.NON_NULL) -public class DepartureSearch { - @NonNull - String id; - +public class DepartureSearch extends BaseSearch { @NonNull String departureLocationId; @@ -27,18 +20,6 @@ public class DepartureSearch { @Singular List arrivalLocationIds; - @NonNull - Transportation transportation; - @NonNull Instant departureTime; - - @NonNull - @Singular - List properties; - - @Valid - FullRange range; - - Snapping snapping; } diff --git a/src/main/java/com/traveltime/sdk/dto/requests/timefilter/ArrivalSearch.java b/src/main/java/com/traveltime/sdk/dto/requests/timefilter/ArrivalSearch.java index df84f825..8b1a75f4 100644 --- a/src/main/java/com/traveltime/sdk/dto/requests/timefilter/ArrivalSearch.java +++ b/src/main/java/com/traveltime/sdk/dto/requests/timefilter/ArrivalSearch.java @@ -1,26 +1,18 @@ package com.traveltime.sdk.dto.requests.timefilter; import com.fasterxml.jackson.annotation.JsonInclude; -import com.traveltime.sdk.dto.common.FullRange; -import com.traveltime.sdk.dto.common.Property; -import com.traveltime.sdk.dto.common.Snapping; -import com.traveltime.sdk.dto.common.transportation.Transportation; -import jakarta.validation.Valid; -import jakarta.validation.constraints.Positive; import java.time.Instant; import java.util.List; import lombok.*; +import lombok.experimental.SuperBuilder; import lombok.extern.jackson.Jacksonized; -@Value -@Builder +@SuperBuilder +@Getter @Jacksonized -@AllArgsConstructor +@EqualsAndHashCode(callSuper = true) @JsonInclude(JsonInclude.Include.NON_NULL) -public class ArrivalSearch { - @NonNull - String id; - +public class ArrivalSearch extends BaseSearch { @NonNull @Singular List departureLocationIds; @@ -28,21 +20,6 @@ public class ArrivalSearch { @NonNull String arrivalLocationId; - @NonNull - Transportation transportation; - @NonNull Instant arrivalTime; - - @NonNull - @Positive(message = "travelTime must be greater than 0") - Integer travelTime; - - @NonNull - List properties; - - @Valid - FullRange range; - - Snapping snapping; } diff --git a/src/main/java/com/traveltime/sdk/dto/requests/timefilter/BaseSearch.java b/src/main/java/com/traveltime/sdk/dto/requests/timefilter/BaseSearch.java new file mode 100644 index 00000000..64459426 --- /dev/null +++ b/src/main/java/com/traveltime/sdk/dto/requests/timefilter/BaseSearch.java @@ -0,0 +1,34 @@ +package com.traveltime.sdk.dto.requests.timefilter; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.traveltime.sdk.dto.common.*; +import com.traveltime.sdk.dto.common.transportation.Transportation; +import jakarta.validation.Valid; +import jakarta.validation.constraints.Positive; +import java.util.List; +import lombok.*; +import lombok.experimental.SuperBuilder; + +@SuperBuilder +@Getter +@EqualsAndHashCode +@JsonInclude(JsonInclude.Include.NON_NULL) +public abstract class BaseSearch { + @NonNull + String id; + + @NonNull + Transportation transportation; + + @NonNull + @Positive(message = "travelTime must be greater than 0") + Integer travelTime; + + @NonNull + List properties; + + @Valid + FullRange range; + + Snapping snapping; +} diff --git a/src/main/java/com/traveltime/sdk/dto/requests/timefilter/DepartureSearch.java b/src/main/java/com/traveltime/sdk/dto/requests/timefilter/DepartureSearch.java index 672445ea..1115c35f 100644 --- a/src/main/java/com/traveltime/sdk/dto/requests/timefilter/DepartureSearch.java +++ b/src/main/java/com/traveltime/sdk/dto/requests/timefilter/DepartureSearch.java @@ -1,26 +1,18 @@ package com.traveltime.sdk.dto.requests.timefilter; import com.fasterxml.jackson.annotation.JsonInclude; -import com.traveltime.sdk.dto.common.FullRange; -import com.traveltime.sdk.dto.common.Property; -import com.traveltime.sdk.dto.common.Snapping; -import com.traveltime.sdk.dto.common.transportation.Transportation; -import jakarta.validation.Valid; -import jakarta.validation.constraints.Positive; import java.time.Instant; import java.util.List; import lombok.*; +import lombok.experimental.SuperBuilder; import lombok.extern.jackson.Jacksonized; -@Value -@Builder +@SuperBuilder +@Getter @Jacksonized -@AllArgsConstructor +@EqualsAndHashCode(callSuper = true) @JsonInclude(JsonInclude.Include.NON_NULL) -public class DepartureSearch { - @NonNull - String id; - +public class DepartureSearch extends BaseSearch { @NonNull String departureLocationId; @@ -28,22 +20,6 @@ public class DepartureSearch { @Singular List arrivalLocationIds; - @NonNull - Transportation transportation; - @NonNull Instant departureTime; - - @NonNull - @Positive(message = "travelTime must be greater than 0") - Integer travelTime; - - @NonNull - @Singular - List properties; - - @Valid - FullRange range; - - Snapping snapping; } diff --git a/src/main/java/com/traveltime/sdk/dto/requests/timefilterfast/BaseSearch.java b/src/main/java/com/traveltime/sdk/dto/requests/timefilterfast/BaseSearch.java new file mode 100644 index 00000000..8d8ca023 --- /dev/null +++ b/src/main/java/com/traveltime/sdk/dto/requests/timefilterfast/BaseSearch.java @@ -0,0 +1,34 @@ +package com.traveltime.sdk.dto.requests.timefilterfast; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.traveltime.sdk.dto.common.Property; +import com.traveltime.sdk.dto.common.Snapping; +import com.traveltime.sdk.dto.common.transportationfast.Transportation; +import java.util.List; +import lombok.*; +import lombok.experimental.SuperBuilder; + +@SuperBuilder +@Getter +@EqualsAndHashCode +@JsonInclude(JsonInclude.Include.NON_NULL) +@NoArgsConstructor +public abstract class BaseSearch { + @NonNull + String id; + + @NonNull + Transportation transportation; + + @NonNull + Integer travelTime; + + @NonNull + String arrivalTimePeriod; + + @NonNull + @Singular + List properties; + + Snapping snapping; +} diff --git a/src/main/java/com/traveltime/sdk/dto/requests/timefilterfast/ManyToOne.java b/src/main/java/com/traveltime/sdk/dto/requests/timefilterfast/ManyToOne.java index 79910944..cacc3730 100644 --- a/src/main/java/com/traveltime/sdk/dto/requests/timefilterfast/ManyToOne.java +++ b/src/main/java/com/traveltime/sdk/dto/requests/timefilterfast/ManyToOne.java @@ -1,11 +1,9 @@ package com.traveltime.sdk.dto.requests.timefilterfast; import com.fasterxml.jackson.annotation.JsonInclude; -import com.traveltime.sdk.dto.common.Property; -import com.traveltime.sdk.dto.common.Snapping; -import com.traveltime.sdk.dto.common.transportationfast.Transportation; import java.util.List; import lombok.*; +import lombok.experimental.SuperBuilder; import lombok.extern.jackson.Jacksonized; /** @@ -14,14 +12,12 @@ * This class is useful for scenarios such as finding optimal routes from multiple starting points to a common destination * (e.g., several employees traveling to the same office, or delivery vehicles returning to a central depot). */ -@Value -@Builder +@SuperBuilder +@Getter @Jacksonized -@AllArgsConstructor +@EqualsAndHashCode(callSuper = true) @JsonInclude(JsonInclude.Include.NON_NULL) -public class ManyToOne { - @NonNull - String id; +public class ManyToOne extends BaseSearch { @NonNull String arrivalLocationId; @@ -29,19 +25,4 @@ public class ManyToOne { @NonNull @Singular List departureLocationIds; - - @NonNull - Transportation transportation; - - @NonNull - Integer travelTime; - - @NonNull - String arrivalTimePeriod; - - @NonNull - @Singular - List properties; - - Snapping snapping; } diff --git a/src/main/java/com/traveltime/sdk/dto/requests/timefilterfast/OneToMany.java b/src/main/java/com/traveltime/sdk/dto/requests/timefilterfast/OneToMany.java index b23ac328..03f4796a 100644 --- a/src/main/java/com/traveltime/sdk/dto/requests/timefilterfast/OneToMany.java +++ b/src/main/java/com/traveltime/sdk/dto/requests/timefilterfast/OneToMany.java @@ -1,11 +1,9 @@ package com.traveltime.sdk.dto.requests.timefilterfast; import com.fasterxml.jackson.annotation.JsonInclude; -import com.traveltime.sdk.dto.common.Property; -import com.traveltime.sdk.dto.common.Snapping; -import com.traveltime.sdk.dto.common.transportationfast.Transportation; import java.util.List; import lombok.*; +import lombok.experimental.SuperBuilder; import lombok.extern.jackson.Jacksonized; /** @@ -14,14 +12,12 @@ * This class is useful for scenarios such as finding optimal routes from one starting point to multiple destinations * (e.g., delivery routes from a warehouse to customer locations). */ -@Value -@Builder +@SuperBuilder @Jacksonized -@AllArgsConstructor +@Getter +@EqualsAndHashCode(callSuper = true) @JsonInclude(JsonInclude.Include.NON_NULL) -public class OneToMany { - @NonNull - String id; +public class OneToMany extends BaseSearch { @NonNull String departureLocationId; @@ -29,19 +25,4 @@ public class OneToMany { @NonNull @Singular List arrivalLocationIds; - - @NonNull - Transportation transportation; - - @NonNull - Integer travelTime; - - @NonNull - String arrivalTimePeriod; - - @NonNull - @Singular - List properties; - - Snapping snapping; } diff --git a/src/main/java/com/traveltime/sdk/dto/requests/timemap/ArrivalSearch.java b/src/main/java/com/traveltime/sdk/dto/requests/timemap/ArrivalSearch.java index b0574da2..d617c49e 100644 --- a/src/main/java/com/traveltime/sdk/dto/requests/timemap/ArrivalSearch.java +++ b/src/main/java/com/traveltime/sdk/dto/requests/timemap/ArrivalSearch.java @@ -1,61 +1,17 @@ package com.traveltime.sdk.dto.requests.timemap; import com.fasterxml.jackson.annotation.JsonInclude; -import com.traveltime.sdk.dto.common.Coordinates; -import com.traveltime.sdk.dto.common.RenderMode; -import com.traveltime.sdk.dto.common.Snapping; -import com.traveltime.sdk.dto.common.levelofdetail.LevelOfDetail; -import com.traveltime.sdk.dto.common.transportation.Transportation; -import jakarta.validation.Valid; -import jakarta.validation.constraints.Positive; import java.time.Instant; import lombok.*; +import lombok.experimental.SuperBuilder; import lombok.extern.jackson.Jacksonized; -@Value -@Builder +@SuperBuilder +@Getter @Jacksonized -@AllArgsConstructor +@EqualsAndHashCode(callSuper = true) @JsonInclude(JsonInclude.Include.NON_NULL) -public class ArrivalSearch { - @NonNull - String id; - - @NonNull - Coordinates coords; - - @Valid - @NonNull - Transportation transportation; - +public class ArrivalSearch extends BaseSearch { @NonNull Instant arrivalTime; - - @NonNull - @Positive(message = "travelTime should be positive") - Integer travelTime; - - Range range; - LevelOfDetail levelOfDetail; - - // TODO: Replace to https://docs.traveltime.com/api/reference/isochrones#departure_searches-polygons_filter-limit - Boolean singleShape; - - /** - * Enable to remove holes from returned polygons. - * Note that this will likely result in loss in accuracy. - */ - Boolean noHoles; - - Snapping snapping; - - RenderMode renderMode; - - Integer bufferDistance; - - /** - * When true (API default), the returned shape will not cover large nearby water bodies. - * Set to false to allow the shape to cover water bodies like large lakes, wide rivers, and seas. - */ - Boolean removeWaterBodies; } diff --git a/src/main/java/com/traveltime/sdk/dto/requests/timemap/BaseSearch.java b/src/main/java/com/traveltime/sdk/dto/requests/timemap/BaseSearch.java new file mode 100644 index 00000000..d9231351 --- /dev/null +++ b/src/main/java/com/traveltime/sdk/dto/requests/timemap/BaseSearch.java @@ -0,0 +1,55 @@ +package com.traveltime.sdk.dto.requests.timemap; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.traveltime.sdk.dto.common.*; +import com.traveltime.sdk.dto.common.levelofdetail.LevelOfDetail; +import com.traveltime.sdk.dto.common.transportation.Transportation; +import jakarta.validation.Valid; +import jakarta.validation.constraints.Positive; +import lombok.*; +import lombok.experimental.SuperBuilder; + +@SuperBuilder +@Getter +@EqualsAndHashCode +@JsonInclude(JsonInclude.Include.NON_NULL) +public abstract class BaseSearch { + @NonNull + String id; + + @NonNull + Coordinates coords; + + @Valid + @NonNull + Transportation transportation; + + @NonNull + @Positive(message = "travelTime should be positive") + Integer travelTime; + + Range range; + + LevelOfDetail levelOfDetail; + + // TODO: Replace to https://docs.traveltime.com/api/reference/isochrones#departure_searches-polygons_filter-limit + Boolean singleShape; + + /** + * Enable to remove holes from returned polygons. + * Note that this will likely result in loss in accuracy. + */ + Boolean noHoles; + + Snapping snapping; + + RenderMode renderMode; + + Integer bufferDistance; + + /** + * When true (API default), the returned shape will not cover large nearby water bodies. + * Set to false to allow the shape to cover water bodies like large lakes, wide rivers, and seas. + */ + Boolean removeWaterBodies; +} diff --git a/src/main/java/com/traveltime/sdk/dto/requests/timemap/DepartureSearch.java b/src/main/java/com/traveltime/sdk/dto/requests/timemap/DepartureSearch.java index 000af371..0950bac3 100644 --- a/src/main/java/com/traveltime/sdk/dto/requests/timemap/DepartureSearch.java +++ b/src/main/java/com/traveltime/sdk/dto/requests/timemap/DepartureSearch.java @@ -1,63 +1,17 @@ package com.traveltime.sdk.dto.requests.timemap; import com.fasterxml.jackson.annotation.JsonInclude; -import com.traveltime.sdk.dto.common.Coordinates; -import com.traveltime.sdk.dto.common.RenderMode; -import com.traveltime.sdk.dto.common.Snapping; -import com.traveltime.sdk.dto.common.levelofdetail.LevelOfDetail; -import com.traveltime.sdk.dto.common.transportation.Transportation; -import jakarta.validation.Valid; -import jakarta.validation.constraints.Positive; import java.time.Instant; import lombok.*; +import lombok.experimental.SuperBuilder; import lombok.extern.jackson.Jacksonized; -@Value -@Builder +@SuperBuilder +@Getter @Jacksonized -@AllArgsConstructor +@EqualsAndHashCode(callSuper = true) @JsonInclude(JsonInclude.Include.NON_NULL) -public class DepartureSearch { - @NonNull - String id; - - @NonNull - Coordinates coords; - - @Valid - @NonNull - Transportation transportation; - +public class DepartureSearch extends BaseSearch { @NonNull Instant departureTime; - - @NonNull - @Positive(message = "travelTime should be positive") - Integer travelTime; - - @Valid - Range range; - - LevelOfDetail levelOfDetail; - - // TODO: Replace to https://docs.traveltime.com/api/reference/isochrones#departure_searches-polygons_filter-limit - Boolean singleShape; - - /** - * Enable to remove holes from returned polygons. - * Note that this will likely result in loss in accuracy. - */ - Boolean noHoles; - - Snapping snapPenalty; - - RenderMode renderMode; - - Integer bufferDistance; - - /** - * When true (API default), the returned shape will not cover large nearby water bodies. - * Set to false to allow the shape to cover water bodies like large lakes, wide rivers, and seas. - */ - Boolean removeWaterBodies; } diff --git a/src/main/java/com/traveltime/sdk/dto/requests/timemapfast/ArrivalSearches.java b/src/main/java/com/traveltime/sdk/dto/requests/timemapfast/ArrivalSearches.java index 3acf241b..dd1420fa 100644 --- a/src/main/java/com/traveltime/sdk/dto/requests/timemapfast/ArrivalSearches.java +++ b/src/main/java/com/traveltime/sdk/dto/requests/timemapfast/ArrivalSearches.java @@ -13,8 +13,8 @@ @AllArgsConstructor public class ArrivalSearches { @NonNull - List manyToOne; + List manyToOne; @NonNull - List oneToMany; + List oneToMany; } diff --git a/src/main/java/com/traveltime/sdk/dto/requests/timemapfast/OneToMany.java b/src/main/java/com/traveltime/sdk/dto/requests/timemapfast/OneToMany.java deleted file mode 100644 index d49696a3..00000000 --- a/src/main/java/com/traveltime/sdk/dto/requests/timemapfast/OneToMany.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.traveltime.sdk.dto.requests.timemapfast; - -import com.traveltime.sdk.dto.common.Coordinates; -import com.traveltime.sdk.dto.common.RenderMode; -import com.traveltime.sdk.dto.common.Snapping; -import com.traveltime.sdk.dto.common.levelofdetail.LevelOfDetail; -import com.traveltime.sdk.dto.common.transportationfast.Transportation; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.NonNull; -import lombok.Value; -import lombok.extern.jackson.Jacksonized; - -@Value -@Builder -@Jacksonized -@AllArgsConstructor -public class OneToMany { - @NonNull - String id; - - @NonNull - Coordinates coords; - - @NonNull - String arrivalTimePeriod; - - @NonNull - Integer travelTime; - - @NonNull - Transportation transportation; - - LevelOfDetail levelOfDetail; - Snapping snapping; - - RenderMode renderMode; - - Integer bufferDistance; - - /** - * When true (API default), the returned shape will not cover large nearby water bodies. - * Set to false to allow the shape to cover water bodies like large lakes, wide rivers, and seas. - */ - Boolean removeWaterBodies; -} diff --git a/src/main/java/com/traveltime/sdk/dto/requests/timemapfast/ManyToOne.java b/src/main/java/com/traveltime/sdk/dto/requests/timemapfast/Search.java similarity index 75% rename from src/main/java/com/traveltime/sdk/dto/requests/timemapfast/ManyToOne.java rename to src/main/java/com/traveltime/sdk/dto/requests/timemapfast/Search.java index 1800c35f..c4f5b8cc 100644 --- a/src/main/java/com/traveltime/sdk/dto/requests/timemapfast/ManyToOne.java +++ b/src/main/java/com/traveltime/sdk/dto/requests/timemapfast/Search.java @@ -1,21 +1,16 @@ package com.traveltime.sdk.dto.requests.timemapfast; -import com.traveltime.sdk.dto.common.Coordinates; -import com.traveltime.sdk.dto.common.RenderMode; -import com.traveltime.sdk.dto.common.Snapping; +import com.traveltime.sdk.dto.common.*; import com.traveltime.sdk.dto.common.levelofdetail.LevelOfDetail; import com.traveltime.sdk.dto.common.transportationfast.Transportation; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.NonNull; -import lombok.Value; +import lombok.*; import lombok.extern.jackson.Jacksonized; @Value @Builder @Jacksonized @AllArgsConstructor -public class ManyToOne { +public class Search { @NonNull String id; diff --git a/src/main/java/com/traveltime/sdk/dto/requests/zones/ArrivalSearch.java b/src/main/java/com/traveltime/sdk/dto/requests/zones/ArrivalSearch.java index 65ec33c5..6af12f55 100644 --- a/src/main/java/com/traveltime/sdk/dto/requests/zones/ArrivalSearch.java +++ b/src/main/java/com/traveltime/sdk/dto/requests/zones/ArrivalSearch.java @@ -1,59 +1,17 @@ package com.traveltime.sdk.dto.requests.zones; import com.fasterxml.jackson.annotation.JsonInclude; -import com.traveltime.sdk.dto.common.Coordinates; -import com.traveltime.sdk.dto.common.FullRange; -import com.traveltime.sdk.dto.common.transportation.Transportation; -import jakarta.validation.Valid; -import jakarta.validation.constraints.Positive; import java.time.Instant; -import java.util.List; import lombok.*; +import lombok.experimental.SuperBuilder; import lombok.extern.jackson.Jacksonized; -@Value -@Builder +@SuperBuilder +@Getter @Jacksonized -@AllArgsConstructor +@EqualsAndHashCode(callSuper = true) @JsonInclude(JsonInclude.Include.NON_NULL) -public class ArrivalSearch { - @NonNull - String id; - - @NonNull - Coordinates coords; - - @NonNull - Transportation transportation; - +public class ArrivalSearch extends BaseSearch { @NonNull Instant arrivalTime; - - @NonNull - @Positive(message = "travelTime must be greater than 0") - Integer travelTime; - - /** - * Specifies the minimum percentage of reachable postcodes required for a sector to be included in results. - *

- * This threshold is expressed as a decimal value between 0.0 and 1.0, where: - * - 0.0 means sectors with any reachable postcodes (even just one) will be included - * - 0.5 means only sectors where at least 50% of postcodes are reachable will be included - * - 1.0 means only sectors where 100% of postcodes are reachable will be included - *

- * For example, if set to 0.75, a sector containing 100 postcodes would only appear in results - * if at least 75 of those postcodes can be reached within the specified travel time. - *

- * This parameter helps filter results to focus on areas with meaningful coverage, - * avoiding sectors that are technically reachable but have minimal practical accessibility. - */ - @NonNull - Double reachablePostcodesThreshold; - - @NonNull - @Singular - List properties; - - @Valid - FullRange range; } diff --git a/src/main/java/com/traveltime/sdk/dto/requests/zones/BaseSearch.java b/src/main/java/com/traveltime/sdk/dto/requests/zones/BaseSearch.java new file mode 100644 index 00000000..4b40b3b6 --- /dev/null +++ b/src/main/java/com/traveltime/sdk/dto/requests/zones/BaseSearch.java @@ -0,0 +1,54 @@ +package com.traveltime.sdk.dto.requests.zones; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.traveltime.sdk.dto.common.Coordinates; +import com.traveltime.sdk.dto.common.FullRange; +import com.traveltime.sdk.dto.common.transportation.Transportation; +import jakarta.validation.Valid; +import jakarta.validation.constraints.Positive; +import java.util.List; +import lombok.*; +import lombok.experimental.SuperBuilder; + +@SuperBuilder +@Getter +@EqualsAndHashCode +@JsonInclude(JsonInclude.Include.NON_NULL) +public abstract class BaseSearch { + @NonNull + String id; + + @NonNull + Coordinates coords; + + @NonNull + Transportation transportation; + + @NonNull + @Positive(message = "travelTime must be greater than 0") + Integer travelTime; + + /** + * Specifies the minimum percentage of reachable postcodes required for a sector to be included in results. + *

+ * This threshold is expressed as a decimal value between 0.0 and 1.0, where: + * - 0.0 means sectors with any reachable postcodes (even just one) will be included + * - 0.5 means only sectors where at least 50% of postcodes are reachable will be included + * - 1.0 means only sectors where 100% of postcodes are reachable will be included + *

+ * For example, if set to 0.75, a sector containing 100 postcodes would only appear in results + * if at least 75 of those postcodes can be reached within the specified travel time. + *

+ * This parameter helps filter results to focus on areas with meaningful coverage, + * avoiding sectors that are technically reachable but have minimal practical accessibility. + */ + @NonNull + Double reachablePostcodesThreshold; + + @NonNull + @Singular + List properties; + + @Valid + FullRange range; +} diff --git a/src/main/java/com/traveltime/sdk/dto/requests/zones/DepartureSearch.java b/src/main/java/com/traveltime/sdk/dto/requests/zones/DepartureSearch.java index 590e0f68..8c9b58b8 100644 --- a/src/main/java/com/traveltime/sdk/dto/requests/zones/DepartureSearch.java +++ b/src/main/java/com/traveltime/sdk/dto/requests/zones/DepartureSearch.java @@ -1,59 +1,17 @@ package com.traveltime.sdk.dto.requests.zones; import com.fasterxml.jackson.annotation.JsonInclude; -import com.traveltime.sdk.dto.common.Coordinates; -import com.traveltime.sdk.dto.common.FullRange; -import com.traveltime.sdk.dto.common.transportation.Transportation; -import jakarta.validation.Valid; -import jakarta.validation.constraints.Positive; import java.time.Instant; -import java.util.List; import lombok.*; +import lombok.experimental.SuperBuilder; import lombok.extern.jackson.Jacksonized; -@Value -@Builder +@SuperBuilder +@Getter @Jacksonized -@AllArgsConstructor +@EqualsAndHashCode(callSuper = true) @JsonInclude(JsonInclude.Include.NON_NULL) -public class DepartureSearch { - @NonNull - String id; - - @NonNull - Coordinates coords; - - @NonNull - Transportation transportation; - +public class DepartureSearch extends BaseSearch { @NonNull Instant departureTime; - - @NonNull - @Positive(message = "travelTime must be greater than 0") - Integer travelTime; - - /** - * Specifies the minimum percentage of reachable postcodes required for a sector to be included in results. - *

- * This threshold is expressed as a decimal value between 0.0 and 1.0, where: - * - 0.0 means sectors with any reachable postcodes (even just one) will be included - * - 0.5 means only sectors where at least 50% of postcodes are reachable will be included - * - 1.0 means only sectors where 100% of postcodes are reachable will be included - *

- * For example, if set to 0.75, a sector containing 100 postcodes would only appear in results - * if at least 75 of those postcodes can be reached within the specified travel time. - *

- * This parameter helps filter results to focus on areas with meaningful coverage, - * avoiding sectors that are technically reachable but have minimal practical accessibility. - */ - @NonNull - Double reachablePostcodesThreshold; - - @NonNull - @Singular - List properties; - - @Valid - FullRange range; } diff --git a/src/test/java/com/traveltime/sdk/JsonUtilsTest.java b/src/test/java/com/traveltime/sdk/JsonUtilsTest.java index 4316f1a4..44ca4570 100644 --- a/src/test/java/com/traveltime/sdk/JsonUtilsTest.java +++ b/src/test/java/com/traveltime/sdk/JsonUtilsTest.java @@ -63,9 +63,11 @@ public void shouldParseAllJsonFiles() throws IOException { for (ImmutablePair, String> json : jsons) { String expectedContent = Common.readFile(json.getValue()); + String result = JsonUtils.toJsonPretty( JsonUtils.fromJson(expectedContent, json.getKey()).get()) .get(); + Assert.assertEquals(expectedContent, result); } } diff --git a/src/test/java/com/traveltime/sdk/RoutesTest.java b/src/test/java/com/traveltime/sdk/RoutesTest.java index 6ff3611d..a789ee69 100644 --- a/src/test/java/com/traveltime/sdk/RoutesTest.java +++ b/src/test/java/com/traveltime/sdk/RoutesTest.java @@ -54,29 +54,29 @@ public void shouldSendRoutesRequests() { private List createDepartureSearch( String departureLocation, List arrivalLocations, Transportation transportation) { - DepartureSearch ds = new DepartureSearch( - "Test departure search", - departureLocation, - arrivalLocations, - transportation, - Instant.now(), - Arrays.asList(Property.TRAVEL_TIME, Property.DISTANCE, Property.ROUTE), - new FullRange(true, 1, 300), - null); + DepartureSearch ds = DepartureSearch.builder() + .id("Test departure search") + .departureLocationId(departureLocation) + .arrivalLocationIds(arrivalLocations) + .transportation(transportation) + .departureTime(Instant.now()) + .properties(Arrays.asList(Property.TRAVEL_TIME, Property.DISTANCE, Property.ROUTE)) + .range(new FullRange(true, 1, 300)) + .build(); return Collections.singletonList(ds); } private List createArrivalSearch( List departureLocations, String arrivalLocation, Transportation transportation) { - ArrivalSearch as = new ArrivalSearch( - "Test arrival search", - departureLocations, - arrivalLocation, - transportation, - Instant.now(), - Arrays.asList(Property.TRAVEL_TIME, Property.DISTANCE, Property.ROUTE, Property.FARES), - new FullRange(true, 1, 300), - null); + ArrivalSearch as = ArrivalSearch.builder() + .id("Test arrival search") + .departureLocationIds(departureLocations) + .arrivalLocationId(arrivalLocation) + .transportation(transportation) + .arrivalTime(Instant.now()) + .properties(Arrays.asList(Property.TRAVEL_TIME, Property.DISTANCE, Property.ROUTE, Property.FARES)) + .range(new FullRange(true, 1, 300)) + .build(); return Collections.singletonList(as); } } diff --git a/src/test/java/com/traveltime/sdk/TimeFilterPostcodesTest.java b/src/test/java/com/traveltime/sdk/TimeFilterPostcodesTest.java index fdeaabe7..f59fc9f1 100644 --- a/src/test/java/com/traveltime/sdk/TimeFilterPostcodesTest.java +++ b/src/test/java/com/traveltime/sdk/TimeFilterPostcodesTest.java @@ -40,28 +40,28 @@ public void shouldSendTimeFilterPostcodesRequest() { } private List createDepartureSearch(Coordinates coordinates, Transportation transportation) { - DepartureSearch ds = new DepartureSearch( - "Test departure search", - coordinates, - transportation, - Instant.now(), - 900, - Collections.singletonList(Property.TRAVEL_TIME), - new FullRange(true, 1, 300), - null); + DepartureSearch ds = DepartureSearch.builder() + .id("Test departure search") + .coords(coordinates) + .transportation(transportation) + .departureTime(Instant.now()) + .travelTime(900) + .properties(Collections.singletonList(Property.TRAVEL_TIME)) + .range(new FullRange(true, 1, 300)) + .build(); return Collections.singletonList(ds); } private List createArrivalSearch(Coordinates coordinates, Transportation transportation) { - ArrivalSearch as = new ArrivalSearch( - "Test arrival search", - coordinates, - transportation, - Instant.now(), - 900, - Collections.singletonList(Property.TRAVEL_TIME), - new FullRange(true, 1, 300), - null); + ArrivalSearch as = ArrivalSearch.builder() + .id("Test arrival search") + .coords(coordinates) + .transportation(transportation) + .arrivalTime(Instant.now()) + .travelTime(900) + .properties(Collections.singletonList(Property.TRAVEL_TIME)) + .range(new FullRange(true, 1, 300)) + .build(); return Collections.singletonList(as); } } diff --git a/src/test/java/com/traveltime/sdk/TimeFilterTest.java b/src/test/java/com/traveltime/sdk/TimeFilterTest.java index bc8ad901..48259d05 100644 --- a/src/test/java/com/traveltime/sdk/TimeFilterTest.java +++ b/src/test/java/com/traveltime/sdk/TimeFilterTest.java @@ -66,64 +66,66 @@ public void shouldSendTimeFilterFastRequest() { } private List createManyToOne(String arrivalLocation, List departureLocations) { - ManyToOne manyToOne = new ManyToOne( - "test many to one", - arrivalLocation, - departureLocations, - DrivingAndPublicTransport.builder().build(), - 900, - "weekday_morning", - Arrays.asList(Property.TRAVEL_TIME, Property.FARES), - Snapping.builder() + ManyToOne manyToOne = ManyToOne.builder() + .id("test many to one") + .arrivalLocationId(arrivalLocation) + .departureLocationIds(departureLocations) + .transportation(DrivingAndPublicTransport.builder().build()) + .travelTime(900) + .arrivalTimePeriod("weekday_morning") + .properties(Arrays.asList(Property.TRAVEL_TIME, Property.FARES)) + .snapping(Snapping.builder() .acceptRoads(Snapping.AcceptRoads.BOTH_DRIVABLE_AND_WALKABLE) .penalty(Snapping.SnapPenalty.ENABLED) - .build()); + .build()) + .build(); return Collections.singletonList(manyToOne); } private List createOneToMany(String departureLocation, List arrivalLocations) { - OneToMany oneToMany = new OneToMany( - "test one to many", - departureLocation, - arrivalLocations, - DrivingAndPublicTransport.builder().build(), - 900, - "weekday_morning", - Arrays.asList(Property.TRAVEL_TIME, Property.FARES), - Snapping.builder() + OneToMany oneToMany = OneToMany.builder() + .id("test one to many") + .departureLocationId(departureLocation) + .arrivalLocationIds(arrivalLocations) + .transportation(DrivingAndPublicTransport.builder().build()) + .travelTime(900) + .arrivalTimePeriod("weekday_morning") + .properties(Arrays.asList(Property.TRAVEL_TIME, Property.FARES)) + .snapping(Snapping.builder() .acceptRoads(Snapping.AcceptRoads.ANY_DRIVABLE) .penalty(Snapping.SnapPenalty.DISABLED) - .build()); + .build()) + .build(); return Collections.singletonList(oneToMany); } private List createDepartureSearch(String departureLocation, List arrivalLocations) { - DepartureSearch ds = new DepartureSearch( - "Test departure search", - departureLocation, - arrivalLocations, - PublicTransport.builder().build(), - Instant.now(), - 900, - Arrays.asList(Property.TRAVEL_TIME, Property.DISTANCE, Property.ROUTE), - new FullRange(true, 2, 300), - null); + DepartureSearch ds = DepartureSearch.builder() + .id("Test departure search") + .departureLocationId(departureLocation) + .arrivalLocationIds(arrivalLocations) + .transportation(PublicTransport.builder().build()) + .departureTime(Instant.now()) + .travelTime(900) + .properties(Arrays.asList(Property.TRAVEL_TIME, Property.DISTANCE, Property.ROUTE)) + .range(new FullRange(true, 2, 300)) + .build(); return Collections.singletonList(ds); } private List createArrivalSearch(List departureLocations, String arrivalLocation) { - ArrivalSearch as = new ArrivalSearch( - "Test arrival search", - departureLocations, - arrivalLocation, - PublicTransport.builder().build(), - Instant.now(), - 900, - Arrays.asList(Property.TRAVEL_TIME, Property.DISTANCE, Property.ROUTE, Property.FARES), - new FullRange(true, 1, 300), - null); + ArrivalSearch as = ArrivalSearch.builder() + .id("Test arrival search") + .departureLocationIds(departureLocations) + .arrivalLocationId(arrivalLocation) + .transportation(PublicTransport.builder().build()) + .arrivalTime(Instant.now()) + .travelTime(900) + .properties(Arrays.asList(Property.TRAVEL_TIME, Property.DISTANCE, Property.ROUTE, Property.FARES)) + .range(new FullRange(true, 1, 300)) + .build(); return Collections.singletonList(as); } } diff --git a/src/test/java/com/traveltime/sdk/TimeFilterZonesTest.java b/src/test/java/com/traveltime/sdk/TimeFilterZonesTest.java index b992e21e..b01e47e4 100644 --- a/src/test/java/com/traveltime/sdk/TimeFilterZonesTest.java +++ b/src/test/java/com/traveltime/sdk/TimeFilterZonesTest.java @@ -52,28 +52,30 @@ public void shouldSendTimeFilterSectorsRequest() { } private List createDepartureSearch(Coordinates coordinates, Transportation transportation) { - DepartureSearch ds = new DepartureSearch( - "Test departure search", - coordinates, - transportation, - Instant.now(), - 900, - 0.1, - Collections.singletonList(Property.COVERAGE), - new FullRange(true, 1, 300)); + DepartureSearch ds = DepartureSearch.builder() + .id("Test departure search") + .coords(coordinates) + .transportation(transportation) + .departureTime(Instant.now()) + .travelTime(900) + .reachablePostcodesThreshold(0.1) + .property(Property.COVERAGE) + .range(new FullRange(true, 1, 300)) + .build(); return Collections.singletonList(ds); } private List createArrivalSearch(Coordinates coordinates, Transportation transportation) { - ArrivalSearch as = new ArrivalSearch( - "Test arrival search", - coordinates, - transportation, - Instant.now(), - 900, - 0.1, - Collections.singletonList(Property.COVERAGE), - new FullRange(true, 1, 300)); + ArrivalSearch as = ArrivalSearch.builder() + .id("Test arrival search") + .coords(coordinates) + .transportation(transportation) + .arrivalTime(Instant.now()) + .travelTime(900) + .reachablePostcodesThreshold(0.1) + .property(Property.COVERAGE) + .range(new FullRange(true, 1, 300)) + .build(); return Collections.singletonList(as); } } diff --git a/src/test/java/com/traveltime/sdk/TimeMapAsyncTest.java b/src/test/java/com/traveltime/sdk/TimeMapAsyncTest.java index 30caf9a5..d289a628 100644 --- a/src/test/java/com/traveltime/sdk/TimeMapAsyncTest.java +++ b/src/test/java/com/traveltime/sdk/TimeMapAsyncTest.java @@ -5,7 +5,6 @@ import com.traveltime.sdk.dto.common.levelofdetail.Level; import com.traveltime.sdk.dto.common.levelofdetail.SimpleLevelOfDetail; import com.traveltime.sdk.dto.common.transportation.PublicTransport; -import com.traveltime.sdk.dto.common.transportation.Transportation; import com.traveltime.sdk.dto.requests.TimeMapRequest; import com.traveltime.sdk.dto.requests.timemap.ArrivalSearch; import com.traveltime.sdk.dto.requests.timemap.Range; @@ -33,22 +32,18 @@ public void init() { @Test public void shouldSendAsyncTimeMapRequest() throws ExecutionException, InterruptedException { - Coordinates coords = new Coordinates(51.507609, -0.128315); - Transportation transportation = PublicTransport.builder().build(); - - TimeMapRequest request = TimeMapRequest.builder() - .arrivalSearches(createArrivalSearch(coords, transportation)) - .build(); + TimeMapRequest request = + TimeMapRequest.builder().arrivalSearches(createArrivalSearch()).build(); CompletableFuture> response = sdk.sendAsync(request); Assert.assertTrue(response.get().isRight()); } - private List createArrivalSearch(Coordinates coords, Transportation transportation) { + private List createArrivalSearch() { ArrivalSearch as = ArrivalSearch.builder() .id("Test async arrival search") - .coords(coords) - .transportation(transportation) + .coords(new Coordinates(51.507609, -0.128315)) + .transportation(PublicTransport.builder().build()) .arrivalTime(Instant.now()) .travelTime(900) .range(new Range(true, 400)) diff --git a/src/test/java/com/traveltime/sdk/TimeMapFastTest.java b/src/test/java/com/traveltime/sdk/TimeMapFastTest.java index 4fbebcbf..62ce5172 100644 --- a/src/test/java/com/traveltime/sdk/TimeMapFastTest.java +++ b/src/test/java/com/traveltime/sdk/TimeMapFastTest.java @@ -3,13 +3,11 @@ import com.traveltime.sdk.auth.TravelTimeCredentials; import com.traveltime.sdk.dto.common.Coordinates; import com.traveltime.sdk.dto.common.transportationfast.PublicTransport; -import com.traveltime.sdk.dto.common.transportationfast.Transportation; import com.traveltime.sdk.dto.requests.TimeMapFastBoxesRequest; import com.traveltime.sdk.dto.requests.TimeMapFastGeoJsonRequest; import com.traveltime.sdk.dto.requests.TimeMapFastRequest; import com.traveltime.sdk.dto.requests.TimeMapFastWktRequest; -import com.traveltime.sdk.dto.requests.timemapfast.ArrivalSearches; -import com.traveltime.sdk.dto.requests.timemapfast.OneToMany; +import com.traveltime.sdk.dto.requests.timemapfast.*; import com.traveltime.sdk.dto.responses.TimeMapFastBoxesResponse; import com.traveltime.sdk.dto.responses.TimeMapFastGeoJsonResponse; import com.traveltime.sdk.dto.responses.TimeMapFastResponse; @@ -34,10 +32,9 @@ public void init() { @Test public void shouldSendTimeMapFastRequest() { - Coordinates coords = new Coordinates(51.507609, -0.128315); - Transportation transportation = new PublicTransport(); - - TimeMapFastRequest request = new TimeMapFastRequest(createArrivalSearches(coords, transportation)); + TimeMapFastRequest request = TimeMapFastRequest.builder() + .arrivalSearches(createArrivalSearches()) + .build(); Either response = sdk.send(request); Common.assertResponseIsRight(response); @@ -45,10 +42,9 @@ public void shouldSendTimeMapFastRequest() { @Test public void shouldReceiveValidJsonResponse() { - Coordinates coords = new Coordinates(51.507609, -0.128315); - Transportation transportation = new PublicTransport(); - - TimeMapFastRequest request = new TimeMapFastRequest(createArrivalSearches(coords, transportation)); + TimeMapFastRequest request = TimeMapFastRequest.builder() + .arrivalSearches(createArrivalSearches()) + .build(); Either response = sdk.getJsonResponse(request); Assert.assertTrue(JsonUtils.isJsonValid(response.get())); @@ -57,11 +53,9 @@ public void shouldReceiveValidJsonResponse() { @Test public void shouldSendTimeMapFastGeoJsonRequest() { - Coordinates coords = new Coordinates(51.507609, -0.128315); - Transportation transportation = new PublicTransport(); - - TimeMapFastGeoJsonRequest request = - new TimeMapFastGeoJsonRequest(createArrivalSearches(coords, transportation)); + TimeMapFastGeoJsonRequest request = TimeMapFastGeoJsonRequest.builder() + .arrivalSearches(createArrivalSearches()) + .build(); Either response = sdk.send(request); Common.assertResponseIsRight(response); @@ -69,10 +63,9 @@ public void shouldSendTimeMapFastGeoJsonRequest() { @Test public void shouldSendTimeMapFastBoundingBoxRequest() { - Coordinates coords = new Coordinates(51.507609, -0.128315); - Transportation transportation = new PublicTransport(); - - TimeMapFastBoxesRequest request = new TimeMapFastBoxesRequest(createArrivalSearches(coords, transportation)); + TimeMapFastBoxesRequest request = TimeMapFastBoxesRequest.builder() + .arrivalSearches(createArrivalSearches()) + .build(); Either response = sdk.send(request); Common.assertResponseIsRight(response); @@ -80,21 +73,21 @@ public void shouldSendTimeMapFastBoundingBoxRequest() { @Test public void shouldSendTimeMapFastWktRequest() { - Coordinates coords = new Coordinates(51.507609, -0.128315); - Transportation transportation = new PublicTransport(); - - TimeMapFastWktRequest request = new TimeMapFastWktRequest(createArrivalSearches(coords, transportation), true); + TimeMapFastWktRequest request = TimeMapFastWktRequest.builder() + .arrivalSearches(createArrivalSearches()) + .withHoles(true) + .build(); Either response = sdk.send(request); Common.assertResponseIsRight(response); } - private ArrivalSearches createArrivalSearches(Coordinates coords, Transportation transportation) { - OneToMany oneToMany = OneToMany.builder() + private ArrivalSearches createArrivalSearches() { + Search oneToMany = Search.builder() .id("Test arrival search fast") .arrivalTimePeriod("weekday_morning") - .transportation(transportation) - .coords(coords) + .transportation(new PublicTransport()) + .coords(new Coordinates(51.507609, -0.128315)) .travelTime(900) .removeWaterBodies(true) .build(); diff --git a/src/test/java/com/traveltime/sdk/TimeMapTest.java b/src/test/java/com/traveltime/sdk/TimeMapTest.java index e116ea54..1954c275 100644 --- a/src/test/java/com/traveltime/sdk/TimeMapTest.java +++ b/src/test/java/com/traveltime/sdk/TimeMapTest.java @@ -5,7 +5,6 @@ import com.traveltime.sdk.dto.common.levelofdetail.Level; import com.traveltime.sdk.dto.common.levelofdetail.SimpleLevelOfDetail; import com.traveltime.sdk.dto.common.transportation.PublicTransport; -import com.traveltime.sdk.dto.common.transportation.Transportation; import com.traveltime.sdk.dto.requests.*; import com.traveltime.sdk.dto.requests.timemap.*; import com.traveltime.sdk.dto.responses.*; @@ -15,15 +14,16 @@ import io.vavr.control.Either; import java.time.Instant; import java.util.Arrays; -import java.util.Collections; import java.util.List; -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; +import org.junit.*; public class TimeMapTest { TravelTimeSDK sdk; + private final String arrSearchId = "Test arrival search"; + private final String depSearchId = "Test departure search"; + private final List searchIds = Arrays.asList(arrSearchId, depSearchId); + @Before public void init() { TravelTimeCredentials credentials = @@ -33,15 +33,13 @@ public void init() { @Test public void shouldSendTimeMapRequest() { - Coordinates coords = new Coordinates(51.507609, -0.128315); - Transportation transportation = PublicTransport.builder().build(); - List searchIds = Arrays.asList("Test arrival search", "Test departure search"); - TimeMapRequest request = new TimeMapRequest( - createDepartureSearch(coords, transportation), - createArrivalSearch(coords, transportation), - createIntersection(searchIds), - createUnion(searchIds)); + TimeMapRequest request = TimeMapRequest.builder() + .departureSearch(createDepartureSearch()) + .arrivalSearch(createArrivalSearch()) + .intersection(createIntersection()) + .union(createUnion()) + .build(); Either response = sdk.send(request); Common.assertResponseIsRight(response); @@ -49,15 +47,13 @@ public void shouldSendTimeMapRequest() { @Test public void shouldReceiveValidJsonResponse() { - Coordinates coords = new Coordinates(51.507609, -0.128315); - Transportation transportation = PublicTransport.builder().build(); - List searchIds = Arrays.asList("Test arrival search", "Test departure search"); - TimeMapRequest request = new TimeMapRequest( - createDepartureSearch(coords, transportation), - createArrivalSearch(coords, transportation), - createIntersection(searchIds), - createUnion(searchIds)); + TimeMapRequest request = TimeMapRequest.builder() + .departureSearch(createDepartureSearch()) + .arrivalSearch(createArrivalSearch()) + .intersection(createIntersection()) + .union(createUnion()) + .build(); Either response = sdk.getJsonResponse(request); Assert.assertTrue(JsonUtils.isJsonValid(response.get())); @@ -66,15 +62,13 @@ public void shouldReceiveValidJsonResponse() { @Test public void shouldSendTimeMapGeoJsonRequest() { - Coordinates coords = new Coordinates(51.507609, -0.128315); - Transportation transportation = PublicTransport.builder().build(); - List searchIds = Arrays.asList("Test arrival search", "Test departure search"); - TimeMapGeoJsonRequest request = new TimeMapGeoJsonRequest( - createDepartureSearch(coords, transportation), - createArrivalSearch(coords, transportation), - createIntersection(searchIds), - createUnion(searchIds)); + TimeMapGeoJsonRequest request = TimeMapGeoJsonRequest.builder() + .departureSearch(createDepartureSearch()) + .arrivalSearch(createArrivalSearch()) + .intersection(createIntersection()) + .union(createUnion()) + .build(); Either response = sdk.send(request); Common.assertResponseIsRight(response); @@ -82,15 +76,13 @@ public void shouldSendTimeMapGeoJsonRequest() { @Test public void shouldSendTimeMapKMLRequest() { - Coordinates coords = new Coordinates(51.507609, -0.128315); - Transportation transportation = PublicTransport.builder().build(); - List searchIds = Arrays.asList("Test arrival search", "Test departure search"); - TimeMapKmlRequest request = new TimeMapKmlRequest( - createDepartureSearch(coords, transportation), - createArrivalSearch(coords, transportation), - createIntersection(searchIds), - createUnion(searchIds)); + TimeMapKmlRequest request = TimeMapKmlRequest.builder() + .departureSearch(createDepartureSearch()) + .arrivalSearch(createArrivalSearch()) + .intersection(createIntersection()) + .union(createUnion()) + .build(); Either response = sdk.send(request); Common.assertResponseIsRight(response); @@ -98,15 +90,13 @@ public void shouldSendTimeMapKMLRequest() { @Test public void shouldSendTimeMapBoundingBoxRequest() { - Coordinates coords = new Coordinates(51.507609, -0.128315); - Transportation transportation = PublicTransport.builder().build(); - List searchIds = Arrays.asList("Test arrival search", "Test departure search"); - TimeMapBoxesRequest request = new TimeMapBoxesRequest( - createDepartureSearch(coords, transportation), - createArrivalSearch(coords, transportation), - createIntersection(searchIds), - createUnion(searchIds)); + TimeMapBoxesRequest request = TimeMapBoxesRequest.builder() + .departureSearch(createDepartureSearch()) + .arrivalSearch(createArrivalSearch()) + .intersection(createIntersection()) + .union(createUnion()) + .build(); Either response = sdk.send(request); Common.assertResponseIsRight(response); @@ -114,26 +104,24 @@ public void shouldSendTimeMapBoundingBoxRequest() { @Test public void shouldSendFullTimeMapWktRequest() { - Coordinates coords = new Coordinates(51.507609, -0.128315); - Transportation transportation = PublicTransport.builder().build(); - List searchIds = Arrays.asList("Test arrival search", "Test departure search"); - TimeMapWktRequest request = new TimeMapWktRequest( - createDepartureSearch(coords, transportation), - createArrivalSearch(coords, transportation), - createIntersection(searchIds), - createUnion(searchIds), - true); + TimeMapWktRequest request = TimeMapWktRequest.builder() + .departureSearch(createDepartureSearch()) + .arrivalSearch(createArrivalSearch()) + .intersection(createIntersection()) + .union(createUnion()) + .withHoles(true) + .build(); Either response = sdk.send(request); Common.assertResponseIsRight(response); } - private List createArrivalSearch(Coordinates coords, Transportation transportation) { - ArrivalSearch as = ArrivalSearch.builder() - .id("Test arrival search") - .coords(coords) - .transportation(transportation) + private ArrivalSearch createArrivalSearch() { + return ArrivalSearch.builder() + .id(arrSearchId) + .coords(new Coordinates(51.507609, -0.128315)) + .transportation(PublicTransport.builder().build()) .arrivalTime(Instant.now()) .travelTime(900) .range(new Range(true, 400)) @@ -142,15 +130,13 @@ private List createArrivalSearch(Coordinates coords, Transportati .noHoles(false) .removeWaterBodies(false) .build(); - - return Collections.singletonList(as); } - private List createDepartureSearch(Coordinates coords, Transportation transportation) { - DepartureSearch ds = DepartureSearch.builder() - .id("Test departure search") - .coords(coords) - .transportation(transportation) + private DepartureSearch createDepartureSearch() { + return DepartureSearch.builder() + .id(depSearchId) + .coords(new Coordinates(51.507609, -0.128315)) + .transportation(PublicTransport.builder().build()) .departureTime(Instant.now()) .travelTime(900) .range(new Range(true, 400)) @@ -159,16 +145,13 @@ private List createDepartureSearch(Coordinates coords, Transpor .noHoles(false) .removeWaterBodies(true) .build(); - return Collections.singletonList(ds); } - private List createUnion(List searchIds) { - Union union = new Union("union of driving and public transport", searchIds); - return Collections.singletonList(union); + private Union createUnion() { + return new Union("union of driving and public transport", searchIds); } - private List createIntersection(List searchIds) { - Intersection intersection = new Intersection("intersection of driving and public transport", searchIds); - return Collections.singletonList(intersection); + private Intersection createIntersection() { + return new Intersection("intersection of driving and public transport", searchIds); } } diff --git a/src/test/resources/dto/requests/routesRequest.json b/src/test/resources/dto/requests/routesRequest.json index 11e7e7ec..ef70461c 100644 --- a/src/test/resources/dto/requests/routesRequest.json +++ b/src/test/resources/dto/requests/routesRequest.json @@ -20,22 +20,20 @@ } ], "departure_searches" : [ { "id" : "departure search example", - "departure_location_id" : "London center", - "arrival_location_ids" : [ "Hyde Park", "ZSL London Zoo" ], "transportation" : { "type" : "driving" }, - "departure_time" : "2021-11-08T08:00:00Z", "properties" : [ "travel_time", "distance", "route" ], "snapping" : { "penalty" : "disabled", "accept_roads" : "any_drivable" - } + }, + "departure_location_id" : "London center", + "arrival_location_ids" : [ "Hyde Park", "ZSL London Zoo" ], + "departure_time" : "2021-11-08T08:00:00Z" } ], "arrival_searches" : [ { "id" : "arrival search example", - "departure_location_ids" : [ "Hyde Park", "ZSL London Zoo" ], - "arrival_location_id" : "London center", "transportation" : { "type" : "public_transport", "max_changes" : { @@ -43,12 +41,14 @@ "limit" : 3 } }, - "arrival_time" : "2021-11-08T09:00:00Z", "properties" : [ "travel_time", "distance", "route", "fares" ], "range" : { "enabled" : true, "max_results" : 1, "width" : 1800 - } + }, + "departure_location_ids" : [ "Hyde Park", "ZSL London Zoo" ], + "arrival_location_id" : "London center", + "arrival_time" : "2021-11-08T09:00:00Z" } ] } \ No newline at end of file diff --git a/src/test/resources/dto/requests/timeFilterDistrictsRequest.json b/src/test/resources/dto/requests/timeFilterDistrictsRequest.json index 3267af45..feb9dc9a 100644 --- a/src/test/resources/dto/requests/timeFilterDistrictsRequest.json +++ b/src/test/resources/dto/requests/timeFilterDistrictsRequest.json @@ -12,10 +12,10 @@ "limit" : 5 } }, - "departure_time" : "2021-11-10T08:00:00Z", "travel_time" : 1800, "reachable_postcodes_threshold" : 0.1, - "properties" : [ "coverage", "travel_time_reachable", "travel_time_all" ] + "properties" : [ "coverage", "travel_time_reachable", "travel_time_all" ], + "departure_time" : "2021-11-10T08:00:00Z" } ], "arrival_searches" : [ { "id" : "public transport to Trafalgar Square", @@ -26,9 +26,9 @@ "transportation" : { "type" : "public_transport" }, - "arrival_time" : "2021-11-10T08:00:00Z", "travel_time" : 1800, "reachable_postcodes_threshold" : 0.1, - "properties" : [ "coverage", "travel_time_reachable", "travel_time_all" ] + "properties" : [ "coverage", "travel_time_reachable", "travel_time_all" ], + "arrival_time" : "2021-11-10T08:00:00Z" } ] } \ No newline at end of file diff --git a/src/test/resources/dto/requests/timeFilterFastRequest.json b/src/test/resources/dto/requests/timeFilterFastRequest.json index b149a83f..d1bd5508 100644 --- a/src/test/resources/dto/requests/timeFilterFastRequest.json +++ b/src/test/resources/dto/requests/timeFilterFastRequest.json @@ -21,19 +21,17 @@ "arrival_searches" : { "many_to_one" : [ { "id" : "arrive-at many-to-one search example", - "arrival_location_id" : "London center", - "departure_location_ids" : [ "Hyde Park", "ZSL London Zoo" ], "transportation" : { "type" : "public_transport" }, "travel_time" : 1900, "arrival_time_period" : "weekday_morning", - "properties" : [ "travel_time", "fares" ] + "properties" : [ "travel_time", "fares" ], + "arrival_location_id" : "London center", + "departure_location_ids" : [ "Hyde Park", "ZSL London Zoo" ] } ], "one_to_many" : [ { "id" : "arrive-at one-to-many search example", - "departure_location_id" : "London center", - "arrival_location_ids" : [ "Hyde Park", "ZSL London Zoo" ], "transportation" : { "type" : "public_transport" }, @@ -42,7 +40,9 @@ "properties" : [ "travel_time", "fares" ], "snapping" : { "penalty" : "enabled" - } + }, + "departure_location_id" : "London center", + "arrival_location_ids" : [ "Hyde Park", "ZSL London Zoo" ] } ] } } \ No newline at end of file diff --git a/src/test/resources/dto/requests/timeFilterPostcodesRequest.json b/src/test/resources/dto/requests/timeFilterPostcodesRequest.json index 2e52db61..3060280a 100644 --- a/src/test/resources/dto/requests/timeFilterPostcodesRequest.json +++ b/src/test/resources/dto/requests/timeFilterPostcodesRequest.json @@ -12,9 +12,9 @@ "limit" : 3 } }, - "departure_time" : "2021-11-10T08:00:00Z", "travel_time" : 1800, - "properties" : [ "travel_time", "distance" ] + "properties" : [ "travel_time", "distance" ], + "departure_time" : "2021-11-10T08:00:00Z" } ], "arrival_searches" : [ { "id" : "public transport to Trafalgar Square", @@ -25,8 +25,8 @@ "transportation" : { "type" : "public_transport" }, - "arrival_time" : "2021-11-10T08:00:00Z", "travel_time" : 1800, - "properties" : [ "travel_time", "distance" ] + "properties" : [ "travel_time", "distance" ], + "arrival_time" : "2021-11-10T08:00:00Z" } ] } \ No newline at end of file diff --git a/src/test/resources/dto/requests/timeFilterRequest.json b/src/test/resources/dto/requests/timeFilterRequest.json index a5f0c189..9441a667 100644 --- a/src/test/resources/dto/requests/timeFilterRequest.json +++ b/src/test/resources/dto/requests/timeFilterRequest.json @@ -20,8 +20,6 @@ } ], "departure_searches" : [ { "id" : "forward search example", - "departure_location_id" : "London center", - "arrival_location_ids" : [ "Hyde Park", "ZSL London Zoo" ], "transportation" : { "type" : "bus", "max_changes" : { @@ -29,27 +27,29 @@ "limit" : 3 } }, - "departure_time" : "2021-10-13T08:00:00Z", "travel_time" : 1800, "properties" : [ "travel_time" ], "range" : { "enabled" : true, "max_results" : 3, "width" : 600 - } + }, + "departure_location_id" : "London center", + "arrival_location_ids" : [ "Hyde Park", "ZSL London Zoo" ], + "departure_time" : "2021-10-13T08:00:00Z" } ], "arrival_searches" : [ { "id" : "backward search example", - "departure_location_ids" : [ "Hyde Park", "ZSL London Zoo" ], - "arrival_location_id" : "London center", "transportation" : { "type" : "public_transport" }, - "arrival_time" : "2021-10-13T08:00:00Z", "travel_time" : 1900, "properties" : [ "travel_time", "distance", "fares" ], "snapping" : { "accept_roads" : "both_drivable_and_walkable" - } + }, + "departure_location_ids" : [ "Hyde Park", "ZSL London Zoo" ], + "arrival_location_id" : "London center", + "arrival_time" : "2021-10-13T08:00:00Z" } ] } \ No newline at end of file diff --git a/src/test/resources/dto/requests/timeFilterSectorsRequest.json b/src/test/resources/dto/requests/timeFilterSectorsRequest.json index f0097110..d15f8c87 100644 --- a/src/test/resources/dto/requests/timeFilterSectorsRequest.json +++ b/src/test/resources/dto/requests/timeFilterSectorsRequest.json @@ -8,10 +8,10 @@ "transportation" : { "type" : "public_transport" }, - "departure_time" : "2021-11-10T08:00:00Z", "travel_time" : 1800, "reachable_postcodes_threshold" : 0.1, - "properties" : [ "coverage", "travel_time_reachable", "travel_time_all" ] + "properties" : [ "coverage", "travel_time_reachable", "travel_time_all" ], + "departure_time" : "2021-11-10T08:00:00Z" } ], "arrival_searches" : [ { "id" : "public transport to Trafalgar Square", @@ -26,9 +26,9 @@ "limit" : 3 } }, - "arrival_time" : "2021-11-10T08:00:00Z", "travel_time" : 1800, "reachable_postcodes_threshold" : 0.1, - "properties" : [ "coverage", "travel_time_reachable", "travel_time_all" ] + "properties" : [ "coverage", "travel_time_reachable", "travel_time_all" ], + "arrival_time" : "2021-11-10T08:00:00Z" } ] } \ No newline at end of file diff --git a/src/test/resources/dto/requests/timeMapRequest.json b/src/test/resources/dto/requests/timeMapRequest.json index 0b627a49..eb7f3603 100644 --- a/src/test/resources/dto/requests/timeMapRequest.json +++ b/src/test/resources/dto/requests/timeMapRequest.json @@ -8,9 +8,9 @@ "transportation" : { "type" : "public_transport" }, - "departure_time" : "2021-10-12T08:30:00Z", "travel_time" : 900, - "remove_water_bodies" : true + "remove_water_bodies" : true, + "departure_time" : "2021-10-12T08:30:00Z" } ], "arrival_searches" : [ { "id" : "public transport to Trafalgar Square", @@ -21,13 +21,13 @@ "transportation" : { "type" : "public_transport" }, - "arrival_time" : "2021-10-12T08:00:00Z", "travel_time" : 900, "range" : { "enabled" : true, "width" : 3600 }, - "remove_water_bodies" : false + "remove_water_bodies" : false, + "arrival_time" : "2021-10-12T08:00:00Z" } ], "intersections" : [ ], "unions" : [ ]