Search in sources :

Example 1 with Search

use of io.arlas.server.core.model.request.Search in project ARLAS-server by gisaia.

the class StacRESTService method getStacFeatureCollection.

protected StacFeatureCollection getStacFeatureCollection(CollectionReference collectionReference, String partitionFilter, Optional<String> columnFilter, SearchBody body, List<String> filter, UriInfo uriInfo, String method, boolean isOgc) throws ArlasException {
    Search search = new Search();
    search.filter = ParamsParser.getFilter(collectionReference, filter, null, null);
    if (body != null) {
        search.page = ParamsParser.getPage(new IntParam(body.getLimit().toString()), new IntParam(body.getFrom().toString()), getCleanSortBy(collectionReference.params.idPath, body.getSortBy()), body.getAfter(), body.getBefore());
    }
    exploreService.setValidGeoFilters(collectionReference, search);
    ColumnFilterUtil.assertRequestAllowed(columnFilter, collectionReference, search);
    Search searchHeader = new Search();
    searchHeader.filter = ParamsParser.getFilter(partitionFilter);
    MixedRequest request = new MixedRequest();
    request.basicRequest = search;
    request.headerRequest = searchHeader;
    request.columnFilter = ColumnFilterUtil.getCollectionRelatedColumnFilter(columnFilter, collectionReference);
    ;
    HashMap<String, Object> context = new HashMap<>();
    FeatureCollection features = exploreService.getFeatures(request, collectionReference, false, uriInfo, method, context);
    // TODO what do we put in there?
    List<StacLink> links = new ArrayList<>();
    links.add(getRootLink(uriInfo));
    if (context.get("self") == null) {
        links.add(getSelfLink(uriInfo));
    } else {
        Arrays.asList("self", "next", "previous").forEach(rel -> {
            if (context.containsKey(rel)) {
                if (method.equals("POST")) {
                    links.add(getRawLink(((Link) context.get(rel)).href, rel, getSearchBody(body, (Search) ((Link) context.get(rel)).body)));
                } else {
                    links.add(getRawLink(((Link) context.get(rel)).href, rel));
                }
            }
        });
    }
    List<Item> items = features.getFeatures().stream().map(feat -> getItem(feat, collectionReference, uriInfo)).collect(Collectors.toList());
    StacFeatureCollection response = new StacFeatureCollection();
    response.setFeatures(items);
    response.setLinks(links);
    if (isOgc) {
        response.setNumberMatched(((Long) context.get("matched")).intValue());
        response.setNumberReturned(items.size());
        response.setTimeStamp(ITU.formatUtc(OffsetDateTime.now()));
    } else {
        Map<String, Object> ctx = new HashMap<>();
        ctx.put("returned", Long.valueOf(items.size()));
        ctx.put("limit", body.getLimit());
        ctx.put("matched", (Long) context.get("matched"));
        response.setContext(ctx);
    }
    return response;
}
Also used : java.util(java.util) Link(io.arlas.server.core.model.Link) MixedRequest(io.arlas.server.core.model.request.MixedRequest) Path(javax.ws.rs.Path) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) Feature(org.geojson.Feature) ComputationRequest(io.arlas.server.core.model.request.ComputationRequest) Collection(io.arlas.server.stac.model.Collection) MediaType(javax.ws.rs.core.MediaType) ArlasException(io.arlas.server.core.exceptions.ArlasException) ExploreService(io.arlas.server.core.services.ExploreService) FeatureCollection(org.geojson.FeatureCollection) InvalidParameterException(io.arlas.server.core.exceptions.InvalidParameterException) IntParam(io.dropwizard.jersey.params.IntParam) io.arlas.server.core.utils(io.arlas.server.core.utils) UriBuilder(javax.ws.rs.core.UriBuilder) Api(io.swagger.annotations.Api) ZoneOffset(java.time.ZoneOffset) Search(io.arlas.server.core.model.request.Search) Polygon(org.geojson.Polygon) CollectionReference(io.arlas.server.core.model.CollectionReference) CollectionReferenceService(io.arlas.server.core.services.CollectionReferenceService) GeoJsonObject(org.geojson.GeoJsonObject) ITU(com.ethlo.time.ITU) JsonProcessingException(com.fasterxml.jackson.core.JsonProcessingException) Instant(java.time.Instant) ComputationEnum(io.arlas.server.core.model.enumerations.ComputationEnum) io.arlas.server.stac.model(io.arlas.server.stac.model) Collectors(java.util.stream.Collectors) MD(io.arlas.server.core.model.response.MD) TimestampTypeMapper.formatDate(io.arlas.server.core.utils.TimestampTypeMapper.formatDate) DateTimeParseException(java.time.format.DateTimeParseException) OffsetDateTime(java.time.OffsetDateTime) Stream(java.util.stream.Stream) Response(javax.ws.rs.core.Response) ParseException(org.locationtech.jts.io.ParseException) STACConfiguration(io.arlas.server.core.app.STACConfiguration) Geometry(org.locationtech.jts.geom.Geometry) UriInfo(javax.ws.rs.core.UriInfo) OperatorEnum(io.arlas.server.core.model.enumerations.OperatorEnum) MixedRequest(io.arlas.server.core.model.request.MixedRequest) IntParam(io.dropwizard.jersey.params.IntParam) FeatureCollection(org.geojson.FeatureCollection) Search(io.arlas.server.core.model.request.Search) GeoJsonObject(org.geojson.GeoJsonObject) Link(io.arlas.server.core.model.Link)

Example 2 with Search

use of io.arlas.server.core.model.request.Search in project ARLAS-server by gisaia.

the class JdbiExploreService method getFeatures.

@Override
public FeatureCollection getFeatures(MixedRequest request, CollectionReference collectionReference, FluidSearchService fluidSearch, boolean flat, UriInfo uriInfo, String method, HashMap<String, Object> context) throws ArlasException {
    SelectRequest req = ((JdbiFluidSearch) fluidSearch).getRequest(true);
    Search searchRequest = (Search) request.basicRequest;
    FeatureCollection fc = new FeatureCollection();
    try (ResultIterator<Map<String, Object>> iter = dao.select(collectionReference.params.indexName, req.getSelectClause(), req.getWhereClause(), req.getGroupClause(), req.getOrderClause(), req.getLimitClause(), getParamMap(collectionReference, req.getWhereParams()))) {
        while (iter.hasNext()) {
            Map<String, Object> source = iter.next();
            Hit arlasHit = new Hit(collectionReference, source, searchRequest.returned_geometries, flat, true);
            if (searchRequest.returned_geometries != null) {
                for (String path : searchRequest.returned_geometries.split(",")) {
                    GeoJsonObject g = arlasHit.getGeometry(path);
                    if (g != null) {
                        fc.add(getFeatureFromHit(arlasHit, path, g));
                    }
                }
            } else {
                // Apply geometry or centroid to geo json feature
                if (arlasHit.md.geometry != null) {
                    fc.add(getFeatureFromHit(arlasHit, collectionReference.params.geometryPath, arlasHit.md.geometry));
                } else if (arlasHit.md.centroid != null) {
                    fc.add(getFeatureFromHit(arlasHit, collectionReference.params.centroidPath, arlasHit.md.centroid));
                }
            }
        }
    }
    if (searchRequest.page != null && searchRequest.page.before != null) {
        Collections.reverse(fc.getFeatures());
    }
    return fc;
}
Also used : Search(io.arlas.server.core.model.request.Search) SelectRequest(io.arlas.server.core.impl.jdbi.model.SelectRequest)

Example 3 with Search

use of io.arlas.server.core.model.request.Search in project ARLAS-server by gisaia.

the class TileRESTService method tiledgeosearch.

@Timed
@Path("{collection}/_tile/{z}/{x}/{y}.png")
@GET
@Produces({ TileRESTService.PRODUCES_PNG })
@Consumes(UTF8JSON)
@ApiOperation(value = "Tiled GeoSearch", produces = TileRESTService.PRODUCES_PNG, notes = Documentation.TILED_GEOSEARCH_OPERATION, consumes = UTF8JSON, response = FeatureCollection.class)
@ApiResponses(value = { @ApiResponse(code = 200, message = "Successful operation"), @ApiResponse(code = 500, message = "Arlas Server Error.", response = Error.class), @ApiResponse(code = 400, message = "Bad request.", response = Error.class) })
public Response tiledgeosearch(// --------------------------------------------------------
@ApiParam(name = "collection", value = "collection", required = true) @PathParam(value = "collection") String collection, @ApiParam(name = "x", value = "x", required = true) @PathParam(value = "x") Integer x, @ApiParam(name = "y", value = "y", required = true) @PathParam(value = "y") Integer y, @ApiParam(name = "z", value = "z", required = true) @PathParam(value = "z") Integer z, // --------------------------------------------------------
@ApiParam(name = "f", value = Documentation.FILTER_PARAM_F, allowMultiple = true) @QueryParam(value = "f") List<String> f, @ApiParam(name = "q", value = Documentation.FILTER_PARAM_Q, allowMultiple = true) @QueryParam(value = "q") List<String> q, @ApiParam(name = "dateformat", value = Documentation.FILTER_DATE_FORMAT) @QueryParam(value = "dateformat") String dateformat, @ApiParam(hidden = true) @HeaderParam(value = "partition-filter") String partitionFilter, @ApiParam(hidden = true) @HeaderParam(value = "Column-Filter") Optional<String> columnFilter, @ApiParam(name = "size", value = Documentation.PAGE_PARAM_SIZE, defaultValue = "10", allowableValues = "range[1, infinity]", type = "integer") @DefaultValue("10") @QueryParam(value = "size") IntParam size, @ApiParam(name = "from", value = Documentation.PAGE_PARAM_FROM, defaultValue = "0", allowableValues = "range[0, infinity]", type = "integer") @DefaultValue("0") @QueryParam(value = "from") IntParam from, @ApiParam(name = "sort", value = Documentation.PAGE_PARAM_SORT, allowMultiple = true) @QueryParam(value = "sort") String sort, @ApiParam(name = "after", value = Documentation.PAGE_PARAM_AFTER) @QueryParam(value = "after") String after, @ApiParam(name = "before", value = Documentation.PAGE_PARAM_BEFORE) @QueryParam(value = "before") String before, // --------------------------------------------------------
@ApiParam(name = "sampling", value = TileDocumentation.TILE_SAMPLING, defaultValue = "10") @QueryParam(value = "sampling") Integer sampling, @ApiParam(name = "coverage", value = TileDocumentation.TILE_COVERAGE, defaultValue = "70") @QueryParam(value = "coverage") Integer coverage, // --------------------------------------------------------
@ApiParam(value = "max-age-cache") @QueryParam(value = "max-age-cache") Integer maxagecache) throws NotFoundException, ArlasException {
    CollectionReference collectionReference = exploreService.getCollectionReferenceService().getCollectionReference(collection);
    if (collectionReference == null) {
        throw new NotFoundException(collection);
    }
    if (collectionReference.params.rasterTileURL == null) {
        throw new NotFoundException(collectionReference.collectionName + " has no URL defined for fetching the tiles.");
    }
    if (StringUtil.isNullOrEmpty(collectionReference.params.rasterTileURL.url)) {
        throw new NotFoundException(collectionReference.collectionName + " has no URL defined for fetching the tiles.");
    }
    if (z < collectionReference.params.rasterTileURL.minZ || z > collectionReference.params.rasterTileURL.maxZ) {
        LOGGER.info("Request level out of [" + collectionReference.params.rasterTileURL.minZ + "-" + collectionReference.params.rasterTileURL.maxZ + "]");
        return Response.noContent().build();
    }
    BoundingBox bbox = GeoTileUtil.getBoundingBox(new Tile(x, y, z));
    Search search = new Search();
    search.filter = ParamsParser.getFilter(collectionReference, f, q, dateformat);
    search.page = ParamsParser.getPage(size, from, sort, after, before);
    search.projection = ParamsParser.getProjection(collectionReference.params.rasterTileURL.idPath + "," + collectionReference.params.geometryPath, null);
    ColumnFilterUtil.assertRequestAllowed(columnFilter, collectionReference, search);
    Search searchHeader = new Search();
    searchHeader.filter = ParamsParser.getFilter(partitionFilter);
    MixedRequest request = new MixedRequest();
    request.basicRequest = search;
    request.headerRequest = searchHeader;
    request.columnFilter = ColumnFilterUtil.getCollectionRelatedColumnFilter(columnFilter, collectionReference);
    Queue<TileProvider<RasterTile>> providers = findCandidateTiles(collectionReference, request).stream().filter(match -> match._2().map(// if geo is available, does it intersect the bbox?
    polygon -> (!collectionReference.params.rasterTileURL.checkGeometry) || polygon.intersects(GeoTileUtil.toPolygon(bbox))).orElse(// otherwise, let's keep that match, we'll see later if it paints something
    Boolean.TRUE)).map(match -> new URLBasedRasterTileProvider(new RasterTileURL(collectionReference.params.rasterTileURL.url.replace("{id}", Optional.ofNullable(match._1()).orElse("")), collectionReference.params.rasterTileURL.minZ, collectionReference.params.rasterTileURL.maxZ, collectionReference.params.rasterTileURL.checkGeometry), collectionReference.params.rasterTileWidth, collectionReference.params.rasterTileHeight)).collect(Collectors.toCollection(LinkedList::new));
    if (providers.size() == 0) {
        return Response.noContent().build();
    }
    Try<Optional<RasterTile>, ArlasException> stacked = new RasterTileStacker().stack(providers).sampling(Optional.ofNullable(sampling).orElse(10)).upTo(new RasterTileStacker.Percentage(Optional.ofNullable(coverage).orElse(10))).on(new Tile(x, y, z));
    stacked.onFail(failure -> LOGGER.error("Failed to fetch a tile", failure));
    return stacked.map(otile -> otile.map(tile -> Try.withCatch(() -> {
        // lets write the image to the response's output
        final ByteArrayOutputStream out = new ByteArrayOutputStream();
        ImageIO.write(tile.getImg(), "png", out);
        return cache(Response.ok(out.toByteArray()), maxagecache);
    }, IOException.class).onFail(e -> Response.serverError().entity(e.getMessage()).build()).orElse(// Can't write the tile => No content
    Response.noContent().build())).orElse(// No tile => No content
    Response.noContent().build())).orElse(// No tile => No content
    Response.noContent().build());
}
Also used : Tuple2(cyclops.data.tuple.Tuple2) MixedRequest(io.arlas.server.core.model.request.MixedRequest) ByteArrayOutputStream(java.io.ByteArrayOutputStream) ApiParam(io.swagger.annotations.ApiParam) ApiResponses(io.swagger.annotations.ApiResponses) ApiOperation(io.swagger.annotations.ApiOperation) ArlasException(io.arlas.server.core.exceptions.ArlasException) ExploreService(io.arlas.server.core.services.ExploreService) FeatureCollection(org.geojson.FeatureCollection) RasterTileURL(io.arlas.server.core.model.RasterTileURL) IntParam(io.dropwizard.jersey.params.IntParam) io.arlas.server.core.utils(io.arlas.server.core.utils) ImageIO(javax.imageio.ImageIO) LinkedList(java.util.LinkedList) Search(io.arlas.server.core.model.request.Search) CollectionReference(io.arlas.server.core.model.CollectionReference) Documentation(io.arlas.server.core.app.Documentation) JsonProcessingException(com.fasterxml.jackson.core.JsonProcessingException) IOException(java.io.IOException) Collectors(java.util.stream.Collectors) Timed(com.codahale.metrics.annotation.Timed) ExploreRESTServices(io.arlas.server.rest.explore.ExploreRESTServices) List(java.util.List) javax.ws.rs(javax.ws.rs) Response(javax.ws.rs.core.Response) ParseException(org.locationtech.jts.io.ParseException) ApiResponse(io.swagger.annotations.ApiResponse) Try(cyclops.control.Try) Geometry(org.locationtech.jts.geom.Geometry) Optional(java.util.Optional) Queue(java.util.Queue) Error(io.arlas.server.core.model.response.Error) ArlasException(io.arlas.server.core.exceptions.ArlasException) Optional(java.util.Optional) ByteArrayOutputStream(java.io.ByteArrayOutputStream) CollectionReference(io.arlas.server.core.model.CollectionReference) RasterTileURL(io.arlas.server.core.model.RasterTileURL) MixedRequest(io.arlas.server.core.model.request.MixedRequest) Search(io.arlas.server.core.model.request.Search) Timed(com.codahale.metrics.annotation.Timed) ApiOperation(io.swagger.annotations.ApiOperation) ApiResponses(io.swagger.annotations.ApiResponses)

Example 4 with Search

use of io.arlas.server.core.model.request.Search in project ARLAS-server by gisaia.

the class AbstractPaginatedTest method testPOSTLinkSearchAfterGeoSort.

@Test
public void testPOSTLinkSearchAfterGeoSort() throws Exception {
    search.page.sort = "geodistance:10.0 10.0,id";
    search.page.size = 3;
    RequestSpecification requestWithIdInSort = givenFilterableRequestBody();
    ExtractableResponse firstResponse = requestWithIdInSort.body(handlePostRequest(search)).when().post(getUrlPath("geodata")).then().body("links.next", notNullValue()).body("links.self", notNullValue()).extract();
    String id_0 = firstResponse.path("hits[0].data.id");
    String id_1 = firstResponse.path("hits[1].data.id");
    /**
     * Second request fetches one document which id is 'id_0'. It returns the links 'next' to use in the third request *
     */
    search.page.sort = "geodistance:10.0 10.0,id";
    search.page.size = 1;
    RequestSpecification secondRequest = givenFilterableRequestBody();
    ExtractableResponse secondResponse = secondRequest.body(handlePostRequest(search)).when().post(getUrlPath("geodata")).then().body("hits[0].data.id", equalTo(id_0)).extract();
    /**
     * Third request will use 'after' param using links.next of the second response (with a size = 1) ==> the first hit id will be id_1
     */
    HashMap data = secondResponse.path("links.next.body");
    String href = secondResponse.path("links.next.href");
    ObjectMapper objectMapper = new ObjectMapper();
    Search searchFromLink = objectMapper.convertValue(data, Search.class);
    ExtractableResponse thirdResponse = givenFilterableRequestBody().body(handlePostRequest(searchFromLink)).when().post(href).then().body("hits[0].data.id", equalTo(id_1)).body("links.next", notNullValue()).body("links.self", notNullValue()).statusCode(200).extract();
    /**
     * Fourth request will use 'before' param using links.previous  of the third response (with a size = 1) ==> the first hit id will be id_0
     */
    HashMap dataPrevious = thirdResponse.path("links.previous.body");
    String hrefPreivous = thirdResponse.path("links.previous.href");
    Search searchFromLinkPrevious = objectMapper.convertValue(dataPrevious, Search.class);
    givenFilterableRequestBody().body(handlePostRequest(searchFromLinkPrevious)).when().post(hrefPreivous).then().body("hits[0].data.id", equalTo(id_0)).body("links.next", notNullValue()).body("links.self", notNullValue()).statusCode(200).extract();
}
Also used : HashMap(java.util.HashMap) ExtractableResponse(io.restassured.response.ExtractableResponse) Search(io.arlas.server.core.model.request.Search) RequestSpecification(io.restassured.specification.RequestSpecification) ObjectMapper(com.fasterxml.jackson.databind.ObjectMapper) Test(org.junit.Test)

Example 5 with Search

use of io.arlas.server.core.model.request.Search in project ARLAS-server by gisaia.

the class SearchRESTService method search.

@Timed
@Path("{collection}/_search")
@GET
@Produces({ UTF8JSON, ATOM.APPLICATION_ATOM_XML })
@Consumes(UTF8JSON)
@ApiOperation(value = "Search", produces = UTF8JSON + "," + ATOM.APPLICATION_ATOM_XML, notes = Documentation.SEARCH_OPERATION, consumes = UTF8JSON, response = Hits.class)
@ApiResponses(value = { @ApiResponse(code = 200, message = "Successful operation", response = Hits.class, responseContainer = "ArlasHits"), @ApiResponse(code = 500, message = "Arlas Server Error.", response = Error.class), @ApiResponse(code = 400, message = "Bad request.", response = Error.class) })
public Response search(@Context UriInfo uriInfo, // --------------------------------------------------------
@ApiParam(name = "collection", value = "collection", required = true) @PathParam(value = "collection") String collection, // --------------------------------------------------------
@ApiParam(name = "f", value = Documentation.FILTER_PARAM_F, allowMultiple = true) @QueryParam(value = "f") List<String> f, @ApiParam(name = "q", value = Documentation.FILTER_PARAM_Q, allowMultiple = true) @QueryParam(value = "q") List<String> q, @ApiParam(name = "dateformat", value = Documentation.FILTER_DATE_FORMAT) @QueryParam(value = "dateformat") String dateformat, @ApiParam(hidden = true) @HeaderParam(value = "partition-filter") String partitionFilter, @ApiParam(hidden = true) @HeaderParam(value = "Column-Filter") Optional<String> columnFilter, // --------------------------------------------------------
@ApiParam(name = "pretty", value = Documentation.FORM_PRETTY, defaultValue = "false") @DefaultValue("false") @QueryParam(value = "pretty") Boolean pretty, @ApiParam(name = "flat", value = Documentation.FORM_FLAT, defaultValue = "false") @QueryParam(value = "flat") Boolean flat, @ApiParam(name = "include", value = Documentation.PROJECTION_PARAM_INCLUDE, allowMultiple = true, defaultValue = "*") @QueryParam(value = "include") String include, @ApiParam(name = "exclude", value = Documentation.PROJECTION_PARAM_EXCLUDE, allowMultiple = true, defaultValue = "") @QueryParam(value = "exclude") String exclude, @ApiParam(name = "returned_geometries", value = Documentation.PROJECTION_PARAM_RETURNED_GEOMETRIES, defaultValue = "") @QueryParam(value = "returned_geometries") String returned_geometries, @ApiParam(name = "size", value = Documentation.PAGE_PARAM_SIZE, defaultValue = "10", allowableValues = "range[1, infinity]", type = "integer") @DefaultValue("10") @QueryParam(value = "size") IntParam size, @ApiParam(name = "from", value = Documentation.PAGE_PARAM_FROM, defaultValue = "0", allowableValues = "range[0, infinity]", type = "integer") @DefaultValue("0") @QueryParam(value = "from") IntParam from, @ApiParam(name = "sort", value = Documentation.PAGE_PARAM_SORT) @QueryParam(value = "sort") String sort, @ApiParam(name = "after", value = Documentation.PAGE_PARAM_AFTER) @QueryParam(value = "after") String after, @ApiParam(name = "before", value = Documentation.PAGE_PARAM_BEFORE) @QueryParam(value = "before") String before, // --------------------------------------------------------
@ApiParam(value = "max-age-cache") @QueryParam(value = "max-age-cache") Integer maxagecache) throws NotFoundException, ArlasException {
    CollectionReference collectionReference = exploreService.getCollectionReferenceService().getCollectionReference(collection);
    if (collectionReference == null) {
        throw new NotFoundException(collection);
    }
    CheckParams.checkReturnedGeometries(collectionReference, include, exclude, returned_geometries);
    Search search = new Search();
    search.filter = ParamsParser.getFilter(collectionReference, f, q, dateformat);
    search.page = ParamsParser.getPage(size, from, sort, after, before);
    search.projection = ParamsParser.getProjection(include, exclude);
    search.returned_geometries = returned_geometries;
    exploreService.setValidGeoFilters(collectionReference, search);
    ColumnFilterUtil.assertRequestAllowed(columnFilter, collectionReference, search);
    search.projection = ParamsParser.enrichIncludes(search.projection, returned_geometries);
    Search searchHeader = new Search();
    searchHeader.filter = ParamsParser.getFilter(partitionFilter);
    MixedRequest request = new MixedRequest();
    request.basicRequest = search;
    exploreService.setValidGeoFilters(collectionReference, searchHeader);
    request.headerRequest = searchHeader;
    request.columnFilter = ColumnFilterUtil.getCollectionRelatedColumnFilter(columnFilter, collectionReference);
    Hits hits = exploreService.search(request, collectionReference, Boolean.TRUE.equals(flat), uriInfo, "GET");
    return cache(Response.ok(hits), maxagecache);
}
Also used : MixedRequest(io.arlas.server.core.model.request.MixedRequest) Hits(io.arlas.server.core.model.response.Hits) Search(io.arlas.server.core.model.request.Search) CollectionReference(io.arlas.server.core.model.CollectionReference) Timed(com.codahale.metrics.annotation.Timed) ApiOperation(io.swagger.annotations.ApiOperation) ApiResponses(io.swagger.annotations.ApiResponses)

Aggregations

Search (io.arlas.server.core.model.request.Search)10 MixedRequest (io.arlas.server.core.model.request.MixedRequest)7 CollectionReference (io.arlas.server.core.model.CollectionReference)6 Timed (com.codahale.metrics.annotation.Timed)5 ApiOperation (io.swagger.annotations.ApiOperation)5 ApiResponses (io.swagger.annotations.ApiResponses)5 FeatureCollection (org.geojson.FeatureCollection)5 JsonProcessingException (com.fasterxml.jackson.core.JsonProcessingException)2 ObjectMapper (com.fasterxml.jackson.databind.ObjectMapper)2 ArlasException (io.arlas.server.core.exceptions.ArlasException)2 Hits (io.arlas.server.core.model.response.Hits)2 ExploreService (io.arlas.server.core.services.ExploreService)2 io.arlas.server.core.utils (io.arlas.server.core.utils)2 IntParam (io.dropwizard.jersey.params.IntParam)2 ExtractableResponse (io.restassured.response.ExtractableResponse)2 RequestSpecification (io.restassured.specification.RequestSpecification)2 File (java.io.File)2 IOException (java.io.IOException)2 Collectors (java.util.stream.Collectors)2 Response (javax.ws.rs.core.Response)2