SnappingApiRequest.java

package org.heigit.ors.api.requests.snapping;

import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import org.heigit.ors.api.requests.common.APIRequest;
import org.heigit.ors.api.APIEnums;

import java.util.List;

@Schema(name = "SnappingRequest", description = "Snapping service endpoint.")
@JsonInclude(JsonInclude.Include.NON_DEFAULT)
public class SnappingApiRequest extends APIRequest {
    public static final String PARAM_PROFILE = "profile";
    public static final String PARAM_LOCATIONS = "locations";
    public static final String PARAM_MAXIMUM_SEARCH_RADIUS = "radius";
    public static final String PARAM_FORMAT = "format";

    @Schema(name = PARAM_PROFILE, hidden = true)
    private APIEnums.Profile profile;

    @Schema(name = PARAM_LOCATIONS, description = "The locations to be snapped as array of `longitude/latitude` pairs.",
            example = "[[8.681495,49.41461],[8.686507,49.41943]]",
            requiredMode = Schema.RequiredMode.REQUIRED)
    @JsonProperty(PARAM_LOCATIONS)
    private List<List<Double>> locations; //apparently, this has to be a non-primitive type…

    @Schema(name = PARAM_FORMAT, hidden = true)
    @JsonProperty(PARAM_FORMAT)
    private APIEnums.SnappingResponseType responseType = APIEnums.SnappingResponseType.JSON;

    @Schema(name = PARAM_MAXIMUM_SEARCH_RADIUS, description = "Maximum radius in meters around given coordinates to search for graph edges.",
        example ="300", requiredMode = Schema.RequiredMode.REQUIRED)
    @JsonProperty(PARAM_MAXIMUM_SEARCH_RADIUS)
    private double maximumSearchRadius;

    @JsonCreator
    public SnappingApiRequest(@JsonProperty(value = PARAM_LOCATIONS, required = true) List<List<Double>> locations) {
        this.locations = locations;
    }

    public APIEnums.Profile getProfile() {
        return profile;
    }

    public void setProfile(APIEnums.Profile profile) {
        this.profile = profile;
    }

    public double getMaximumSearchRadius() {
        return maximumSearchRadius;
    }

    public List<List<Double>> getLocations() {
        return locations;
    }

    public void setLocations(List<List<Double>> locations) {
        this.locations = locations;
    }

    public void setResponseType(APIEnums.SnappingResponseType responseType) {
        this.responseType = responseType;
    }
}