Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update traveltime sdk #25

Merged
merged 2 commits into from
Jan 24, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ public Object init(Map args, Object persistence, CacheRegenerator regenerator) {

@Override
public TravelTimes getOrFresh(TravelTimeQueryParameters key) {
key = new TravelTimeQueryParameters(null, key.getOrigin(), 0, key.getMode(), null);
key = new TravelTimeQueryParameters(null, key.getOrigin(), 0, key.getMode(), null, key.getRequestType());
TravelTimes result = get(key);
if (result == null) {
synchronized (lock) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
import com.traveltime.sdk.auth.TravelTimeCredentials;
import com.traveltime.sdk.dto.common.Coordinates;
import com.traveltime.sdk.dto.requests.TimeFilterFastProtoRequest;
import com.traveltime.sdk.dto.requests.proto.OneToMany;
import com.traveltime.sdk.dto.responses.TimeFilterFastProtoResponse;
import com.traveltime.sdk.dto.responses.errors.IOError;
import com.traveltime.sdk.dto.responses.errors.ResponseError;
Expand Down Expand Up @@ -53,16 +52,12 @@ public ProtoFetcher(URI uri, String id, String key) {
public List<Integer> getTimes(TravelTimeQueryParameters params, ArrayList<Coordinates> destinations) {
val fastProto = TimeFilterFastProtoRequest
.builder()
.oneToMany(
OneToMany
.builder()
.country(params.getCountry())
.transportation(params.getMode())
.originCoordinate(params.getOrigin())
.destinationCoordinates(destinations)
.travelTime(params.getLimit())
.build()
)
.requestType(params.getRequestType())
.country(params.getCountry())
.transportation(params.getMode())
.originCoordinate(params.getOrigin())
.destinationCoordinates(destinations)
.travelTime(params.getLimit())
.build();


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import com.traveltime.plugin.solr.util.Util;
import com.traveltime.sdk.dto.common.Coordinates;
import com.traveltime.sdk.dto.requests.proto.Country;
import com.traveltime.sdk.dto.requests.proto.RequestType;
import com.traveltime.sdk.dto.requests.proto.Transportation;
import lombok.Data;
import lombok.With;
Expand All @@ -11,8 +12,7 @@
import org.apache.solr.schema.LatLonPointSpatialField;
import org.apache.solr.search.SyntaxError;

import java.util.Optional;
import java.util.function.Function;
import static com.traveltime.plugin.solr.util.Util.findByNameOrError;

@Data
public class TravelTimeQueryParameters implements QueryParams {
Expand All @@ -23,6 +23,8 @@ public class TravelTimeQueryParameters implements QueryParams {
private final Transportation mode;
@With
private final Country country;
@With
private final RequestType requestType;

@Override
public int getTravelTime() {
Expand All @@ -34,15 +36,7 @@ public int getTravelTime() {
public static final String MODE = "mode";
public static final String LIMIT = "limit";
public static final String COUNTRY = "country";

private static <T> T findByNameOrError(String what, String name, Function<String, Optional<T>> finder) {
val result = finder.apply(name);
if (!result.isPresent()) {
throw new IllegalArgumentException(String.format("Couldn't find a %s with the name %s", what, name));
} else {
return result.get();
}
}
public static final String REQUEST_TYPE = "requestType";

public static TravelTimeQueryParameters parse(
IndexSchema schema,
Expand All @@ -67,6 +61,11 @@ public static TravelTimeQueryParameters parse(
params.getParam(TravelTimeQueryParameters.COUNTRY),
Util::findCountryByName
);
val requestType = findByNameOrError(
"request type",
params.getOptionalParam(TravelTimeQueryParameters.REQUEST_TYPE).orElse(RequestType.ONE_TO_MANY.name()),
Util::findRequestTypeByName
);

int limit;
try {
Expand All @@ -78,7 +77,7 @@ public static TravelTimeQueryParameters parse(
throw new SyntaxError("traveltime limit must be > 0");
}

return new TravelTimeQueryParameters(field, origin, limit, mode, country);
return new TravelTimeQueryParameters(field, origin, limit, mode, country, requestType);
}

@Override
Expand Down
15 changes: 15 additions & 0 deletions 6/src/main/java/com/traveltime/plugin/solr/util/Util.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import com.traveltime.sdk.dto.common.Coordinates;
import com.traveltime.sdk.dto.requests.proto.Country;
import com.traveltime.sdk.dto.requests.proto.RequestType;
import com.traveltime.sdk.dto.requests.proto.Transportation;
import lombok.val;
import org.apache.lucene.geo.GeoEncodingUtils;
Expand All @@ -13,13 +14,23 @@

import java.util.Arrays;
import java.util.Optional;
import java.util.function.Function;
import java.util.function.Supplier;

public final class Util {
private Util() {
throw new UnsupportedOperationException("This is a utility class and cannot be instantiated");
}

public static <T> T findByNameOrError(String what, String name, Function<String, Optional<T>> finder) {
val result = finder.apply(name);
if (!result.isPresent()) {
throw new IllegalArgumentException(String.format("Couldn't find a %s with the name %s", what, name));
} else {
return result.get();
}
}

public static Coordinates decode(long value) {
double lat = GeoEncodingUtils.decodeLatitude((int) (value >> 32));
double lon = GeoEncodingUtils.decodeLongitude((int) value);
Expand Down Expand Up @@ -66,6 +77,10 @@ public static Optional<Country> findCountryByName(String name) {
return Arrays.stream(Country.values()).filter(it -> it.getValue().equals(name)).findFirst();
}

public static Optional<RequestType> findRequestTypeByName(String name) {
return Arrays.stream(RequestType.values()).filter(it -> it.toString().equals(name)).findFirst();
}

public static <A> A time(Logger logger, Supplier<A> expr) {
val startTime = System.currentTimeMillis();
val res = expr.get();
Expand Down
2 changes: 1 addition & 1 deletion 6/src/test/resources/run-tests.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

set -ex

trap "docker stop $IMAGE_NAME; exit 1" EXIT
trap "docker logs $IMAGE_NAME; docker stop $IMAGE_NAME; exit 1" EXIT

SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ public Object init(Map args, Object persistence, CacheRegenerator regenerator) {

@Override
public TravelTimes getOrFresh(TravelTimeQueryParameters key) {
key = new TravelTimeQueryParameters(null, key.getOrigin(), 0, key.getMode(), null);
key = new TravelTimeQueryParameters(null, key.getOrigin(), 0, key.getMode(), null, key.getRequestType());
TravelTimes result = get(key);
if (result == null) {
synchronized (lock) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
import com.traveltime.sdk.auth.TravelTimeCredentials;
import com.traveltime.sdk.dto.common.Coordinates;
import com.traveltime.sdk.dto.requests.TimeFilterFastProtoRequest;
import com.traveltime.sdk.dto.requests.proto.OneToMany;
import com.traveltime.sdk.dto.responses.TimeFilterFastProtoResponse;
import com.traveltime.sdk.dto.responses.errors.IOError;
import com.traveltime.sdk.dto.responses.errors.ResponseError;
Expand Down Expand Up @@ -53,16 +52,12 @@ public ProtoFetcher(URI uri, String id, String key) {
public List<Integer> getTimes(TravelTimeQueryParameters params, ArrayList<Coordinates> destinations) {
val fastProto = TimeFilterFastProtoRequest
.builder()
.oneToMany(
OneToMany
.builder()
.country(params.getCountry())
.transportation(params.getMode())
.originCoordinate(params.getOrigin())
.destinationCoordinates(destinations)
.travelTime(params.getLimit())
.build()
)
.requestType(params.getRequestType())
.country(params.getCountry())
.transportation(params.getMode())
.originCoordinate(params.getOrigin())
.destinationCoordinates(destinations)
.travelTime(params.getLimit())
.build();


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import com.traveltime.plugin.solr.util.Util;
import com.traveltime.sdk.dto.common.Coordinates;
import com.traveltime.sdk.dto.requests.proto.Country;
import com.traveltime.sdk.dto.requests.proto.RequestType;
import com.traveltime.sdk.dto.requests.proto.Transportation;
import lombok.Data;
import lombok.With;
Expand All @@ -11,8 +12,7 @@
import org.apache.solr.schema.LatLonPointSpatialField;
import org.apache.solr.search.SyntaxError;

import java.util.Optional;
import java.util.function.Function;
import static com.traveltime.plugin.solr.util.Util.findByNameOrError;

@Data
public class TravelTimeQueryParameters implements QueryParams {
Expand All @@ -23,6 +23,8 @@ public class TravelTimeQueryParameters implements QueryParams {
private final Transportation mode;
@With
private final Country country;
@With
private final RequestType requestType;

@Override
public int getTravelTime() {
Expand All @@ -34,15 +36,7 @@ public int getTravelTime() {
public static final String MODE = "mode";
public static final String LIMIT = "limit";
public static final String COUNTRY = "country";

private static <T> T findByNameOrError(String what, String name, Function<String, Optional<T>> finder) {
val result = finder.apply(name);
if (!result.isPresent()) {
throw new IllegalArgumentException(String.format("Couldn't find a %s with the name %s", what, name));
} else {
return result.get();
}
}
public static final String REQUEST_TYPE = "requestType";

public static TravelTimeQueryParameters parse(
IndexSchema schema,
Expand All @@ -67,6 +61,11 @@ public static TravelTimeQueryParameters parse(
params.getParam(TravelTimeQueryParameters.COUNTRY),
Util::findCountryByName
);
val requestType = findByNameOrError(
"request type",
params.getOptionalParam(TravelTimeQueryParameters.REQUEST_TYPE).orElse(RequestType.ONE_TO_MANY.name()),
Util::findRequestTypeByName
);

int limit;
try {
Expand All @@ -78,7 +77,7 @@ public static TravelTimeQueryParameters parse(
throw new SyntaxError("traveltime limit must be > 0");
}

return new TravelTimeQueryParameters(field, origin, limit, mode, country);
return new TravelTimeQueryParameters(field, origin, limit, mode, country, requestType);
}

@Override
Expand Down
15 changes: 15 additions & 0 deletions 7/src/main/java/com/traveltime/plugin/solr/util/Util.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import com.traveltime.sdk.dto.common.Coordinates;
import com.traveltime.sdk.dto.requests.proto.Country;
import com.traveltime.sdk.dto.requests.proto.RequestType;
import com.traveltime.sdk.dto.requests.proto.Transportation;
import lombok.val;
import org.apache.lucene.geo.GeoEncodingUtils;
Expand All @@ -13,13 +14,23 @@

import java.util.Arrays;
import java.util.Optional;
import java.util.function.Function;
import java.util.function.Supplier;

public final class Util {
private Util() {
throw new UnsupportedOperationException("This is a utility class and cannot be instantiated");
}

public static <T> T findByNameOrError(String what, String name, Function<String, Optional<T>> finder) {
val result = finder.apply(name);
if (!result.isPresent()) {
throw new IllegalArgumentException(String.format("Couldn't find a %s with the name %s", what, name));
} else {
return result.get();
}
}

public static Coordinates decode(long value) {
double lat = GeoEncodingUtils.decodeLatitude((int) (value >> 32));
double lon = GeoEncodingUtils.decodeLongitude((int) value);
Expand Down Expand Up @@ -66,6 +77,10 @@ public static Optional<Country> findCountryByName(String name) {
return Arrays.stream(Country.values()).filter(it -> it.getValue().equals(name)).findFirst();
}

public static Optional<RequestType> findRequestTypeByName(String name) {
return Arrays.stream(RequestType.values()).filter(it -> it.toString().equals(name)).findFirst();
}

public static <A> A time(Logger logger, Supplier<A> expr) {
val startTime = System.currentTimeMillis();
val res = expr.get();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ public Object init(Map args, Object persistence, CacheRegenerator regenerator) {

@Override
public TravelTimes getOrFresh(TravelTimeQueryParameters key) {
key = new TravelTimeQueryParameters(null, key.getOrigin(), 0, key.getMode(), null);
key = new TravelTimeQueryParameters(null, key.getOrigin(), 0, key.getMode(), null, key.getRequestType());
TravelTimes result = get(key);
if (result == null) {
synchronized (lock) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
import com.traveltime.sdk.auth.TravelTimeCredentials;
import com.traveltime.sdk.dto.common.Coordinates;
import com.traveltime.sdk.dto.requests.TimeFilterFastProtoRequest;
import com.traveltime.sdk.dto.requests.proto.OneToMany;
import com.traveltime.sdk.dto.responses.TimeFilterFastProtoResponse;
import com.traveltime.sdk.dto.responses.errors.IOError;
import com.traveltime.sdk.dto.responses.errors.ResponseError;
Expand Down Expand Up @@ -53,16 +52,12 @@ public ProtoFetcher(URI uri, String id, String key) {
public List<Integer> getTimes(TravelTimeQueryParameters params, ArrayList<Coordinates> destinations) {
val fastProto = TimeFilterFastProtoRequest
.builder()
.oneToMany(
OneToMany
.builder()
.country(params.getCountry())
.transportation(params.getMode())
.originCoordinate(params.getOrigin())
.destinationCoordinates(destinations)
.travelTime(params.getLimit())
.build()
)
.requestType(params.getRequestType())
.country(params.getCountry())
.transportation(params.getMode())
.originCoordinate(params.getOrigin())
.destinationCoordinates(destinations)
.travelTime(params.getLimit())
.build();


Expand Down
Loading
Loading