From 8ccb7862c6024a5aea4ce0a365d7026e9108d019 Mon Sep 17 00:00:00 2001 From: lewa <lene.wasskog@nibio.no> Date: Mon, 26 Aug 2024 08:53:01 +0200 Subject: [PATCH] fix: Ensure client is closed after masking location, use correct key --- .../service/ObservationTimeSeriesService.java | 50 ++++++++++--------- 1 file changed, 27 insertions(+), 23 deletions(-) diff --git a/src/main/java/no/nibio/vips/logic/service/ObservationTimeSeriesService.java b/src/main/java/no/nibio/vips/logic/service/ObservationTimeSeriesService.java index 3d428239..ea874ebd 100644 --- a/src/main/java/no/nibio/vips/logic/service/ObservationTimeSeriesService.java +++ b/src/main/java/no/nibio/vips/logic/service/ObservationTimeSeriesService.java @@ -99,6 +99,7 @@ public class ObservationTimeSeriesService { @Produces(APPLICATION_JSON) @TypeHint(ObservationTimeSeries.class) public Response getObservationTimeSeries(@PathParam("observationTimeSeriesId") Integer observationTimeSeriesId, @QueryParam("userUUID") String userUUID) { + LOGGER.debug("Get ObservationTimeSeries with id={}", observationTimeSeriesId); ObservationTimeSeries ots = observationTimeSeriesBean.getObservationTimeSeries(observationTimeSeriesId); if (ots == null) { return Response.status(Response.Status.NOT_FOUND).build(); @@ -130,30 +131,33 @@ public class ObservationTimeSeriesService { */ private void maskLocation(PolygonService polygonService, ObservationTimeSeries observationTimeSeries) { Client client = ClientBuilder.newClient(); - WebTarget target = client.target(polygonService.getGisSearchUrlTemplate()); - ReferencedPoint rp = new ReferencedPoint(); - rp.setId(String.valueOf(observationTimeSeries.getObservationTimeSeriesId())); - rp.setLon(observationTimeSeries.getLocationPointOfInterest().getLongitude()); - rp.setLat(observationTimeSeries.getLocationPointOfInterest().getLatitude()); - - ReferencedPoint[] pointArray = {rp}; - PointMappingResponse response = target.request(MediaType.APPLICATION_JSON).post(Entity.entity(pointArray, MediaType.APPLICATION_JSON), PointMappingResponse.class); - // We need to loop through the observations and find corresponding featurecollections and replace those - Map<Integer, Feature> indexedPolygons = new HashMap<>(); - for (Feature feature : response.getFeatureCollection().getFeatures()) { - indexedPolygons.put((Integer) feature.getProperties().get(OBSERVATION_TIME_SERIES_ID), feature); - } - GISEntityUtil gisEntityUtil = new GISEntityUtil(); - for (Map mapping : response.getMapping()) { - Integer observationTimeSeriesId = Integer.valueOf((String) mapping.get(OBSERVATION_TIME_SERIES_ID)); - if (observationTimeSeries.getObservationTimeSeriesId().equals(observationTimeSeriesId)) { - Integer borderId = (Integer) mapping.get("borderid"); - Gis polygon = gisEntityUtil.getGisFromFeature(indexedPolygons.get(borderId)); - List<Gis> gis = new ArrayList<>(); - gis.add(polygon); - observationTimeSeries.setLocationPointOfInterest(null); - observationTimeSeries.setLocationPointOfInterestId(null); + try { + WebTarget target = client.target(polygonService.getGisSearchUrlTemplate()); + ReferencedPoint rp = new ReferencedPoint(); + rp.setId(String.valueOf(observationTimeSeries.getObservationTimeSeriesId())); + rp.setLon(observationTimeSeries.getLocationPointOfInterest().getLongitude()); + rp.setLat(observationTimeSeries.getLocationPointOfInterest().getLatitude()); + ReferencedPoint[] pointArray = {rp}; + PointMappingResponse response = target.request(MediaType.APPLICATION_JSON).post(Entity.entity(pointArray, MediaType.APPLICATION_JSON), PointMappingResponse.class); + // We need to loop through the observations and find corresponding featurecollections and replace those + Map<Integer, Feature> indexedPolygons = new HashMap<>(); + for (Feature feature : response.getFeatureCollection().getFeatures()) { + indexedPolygons.put((Integer) feature.getProperties().get("id"), feature); + } + GISEntityUtil gisEntityUtil = new GISEntityUtil(); + for (Map mapping : response.getMapping()) { + Integer observationTimeSeriesId = Integer.valueOf((String) mapping.get("id")); + if (observationTimeSeries.getObservationTimeSeriesId().equals(observationTimeSeriesId)) { + Integer borderId = (Integer) mapping.get("borderid"); + Gis polygon = gisEntityUtil.getGisFromFeature(indexedPolygons.get(borderId)); + List<Gis> gis = new ArrayList<>(); + gis.add(polygon); + observationTimeSeries.setLocationPointOfInterest(null); + observationTimeSeries.setLocationPointOfInterestId(null); + } } + } finally { + client.close(); } } -- GitLab