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