diff --git a/src/main/java/no/nibio/vips/logic/service/ObservationService.java b/src/main/java/no/nibio/vips/logic/service/ObservationService.java index b2807641d1bee222572c57a7776b69564f4f0c80..4e093d77a7a792cba057ff5ef2e22ad345dba4d1 100755 --- a/src/main/java/no/nibio/vips/logic/service/ObservationService.java +++ b/src/main/java/no/nibio/vips/logic/service/ObservationService.java @@ -1011,14 +1011,15 @@ public class ObservationService { } } } - LOGGER.debug("sendNotification? " + sendNotification); + LOGGER.info("sendNotification? " + sendNotification); // All transactions finished, we can send notifications // if conditions are met if (sendNotification && ! (System.getProperty("DISABLE_MESSAGING_SYSTEM") != null && System.getProperty("DISABLE_MESSAGING_SYSTEM").equals("true")) ) { - LOGGER.debug("Sending the message!"); + LOGGER.info("Message sending is temporarily disabled"); + // LOGGER.debug("Sending the message!"); // messagingBean.sendUniversalMessage(mergeObs); } @@ -1028,7 +1029,7 @@ public class ObservationService { return Response.serverError().entity(e).build(); } } catch (Exception e) { - e.printStackTrace(); + LOGGER.error("Exception occurred while syncing observations from app", e); return Response.serverError().entity(e).build(); } 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 2d679977843de9d92b7281a23bc332964681d2e1..07e7e455098d8ed4e2a2bd253d062ec4429b4d2f 100644 --- a/src/main/java/no/nibio/vips/logic/service/ObservationTimeSeriesService.java +++ b/src/main/java/no/nibio/vips/logic/service/ObservationTimeSeriesService.java @@ -6,7 +6,10 @@ import com.webcohesion.enunciate.metadata.rs.TypeHint; import no.nibio.vips.logic.controller.session.ObservationTimeSeriesBean; import no.nibio.vips.logic.controller.session.OrganismBean; import no.nibio.vips.logic.controller.session.UserBean; -import no.nibio.vips.logic.entity.*; +import no.nibio.vips.logic.entity.Gis; +import no.nibio.vips.logic.entity.ObservationTimeSeries; +import no.nibio.vips.logic.entity.PolygonService; +import no.nibio.vips.logic.entity.VipsLogicUser; import no.nibio.vips.logic.entity.rest.PointMappingResponse; import no.nibio.vips.logic.entity.rest.ReferencedPoint; import no.nibio.vips.logic.util.GISEntityUtil; @@ -31,8 +34,9 @@ import java.util.stream.Collectors; @Path("rest/observationtimeseries") public class ObservationTimeSeriesService { + public static final String APPLICATION_JSON = "application/json;charset=UTF-8"; + public static final String GEO_INFO = "geoInfo"; private final static Logger LOGGER = LoggerFactory.getLogger(ObservationTimeSeriesService.class); - private static final String DELETED = "deleted"; private static final String OBSERVATION_TIME_SERIES_ID = "observationTimeSeriesId"; private static final String ORGANISM_ID = "organismId"; @@ -43,9 +47,6 @@ public class ObservationTimeSeriesService { private static final String DESCRIPTION = "description"; private static final String LOCATION_IS_PRIVATE = "locationIsPrivate"; private static final String POLYGON_SERVICE = "polygonService"; - public static final String APPLICATION_JSON = "application/json;charset=UTF-8"; - public static final String GEO_INFO = "geoInfo"; - @EJB UserBean userBean; @EJB @@ -170,7 +171,7 @@ public class ObservationTimeSeriesService { * This service is used by the VIPS Field observation app to sync data stored locally on the smartphone with the * state of a (potentially non-existent) observation time series in the VIPSLogic database * - * @param observationTimeSeriesJson Json representation of the observation time series + * @param jsonOts Json representation of the observation time series * @return The observation time series in its merged state, serialized to Json */ @POST @@ -178,7 +179,7 @@ public class ObservationTimeSeriesService { @Consumes(APPLICATION_JSON) @Produces(APPLICATION_JSON) @TypeHint(ObservationTimeSeries.class) - public Response syncObservationTimeSeriesFromApp(String observationTimeSeriesJson) { + public Response syncObservationTimeSeriesFromApp(String jsonOts) { LOGGER.info("In syncObservationTimeSeriesFromApp"); VipsLogicUser user = userBean.getUserFromUUID(httpServletRequest); if (user == null) { @@ -186,24 +187,28 @@ public class ObservationTimeSeriesService { } ObjectMapper oM = new ObjectMapper(); try { - Map<Object, Object> mapFromApp = oM.readValue(observationTimeSeriesJson, new TypeReference<HashMap<Object, Object>>() { - }); - Integer observationTimeSeriesId = (Integer) mapFromApp.get(OBSERVATION_TIME_SERIES_ID); - // Check if it is marked as deleted or not - if (mapFromApp.get(DELETED) != null && mapFromApp.get(DELETED).equals(true)) { - if (observationTimeSeriesBean.getObservationTimeSeries(observationTimeSeriesId) != null) { - observationTimeSeriesBean.deleteObservationTimeSeries(observationTimeSeriesId); + Map<Object, Object> mapFromApp = oM.readValue(jsonOts, new TypeReference<HashMap<Object, Object>>() {}); + + Integer otsId = (Integer) mapFromApp.get(OBSERVATION_TIME_SERIES_ID); + + // Check if the observation time series is marked as deleted + Boolean isDeleted = (Boolean) mapFromApp.getOrDefault(DELETED, false); + if (isDeleted) { + // If marked as deleted, delete the observation time series if it exists + if (observationTimeSeriesBean.getObservationTimeSeries(otsId) != null) { + observationTimeSeriesBean.deleteObservationTimeSeries(otsId); + LOGGER.info("ObservationTimeSeries with id={} deleted", otsId); return Response.ok().build(); } else { + LOGGER.warn("ObservationTimeSeries with id={} not found, nothing deleted", otsId); return Response.status(Response.Status.NOT_FOUND).build(); } } Date currentDate = new Date(); - ObservationTimeSeries otsToSave; - if(observationTimeSeriesId != null && observationTimeSeriesId > 0) { - otsToSave = observationTimeSeriesBean.getObservationTimeSeries(observationTimeSeriesId); + if (otsId != null && otsId > 0) { + otsToSave = observationTimeSeriesBean.getObservationTimeSeries(otsId); if (otsToSave == null) { return Response.status(Response.Status.NOT_FOUND).build(); } @@ -221,8 +226,8 @@ public class ObservationTimeSeriesService { otsToSave.setLocationIsPrivate(getValueFromMap(mapFromApp, LOCATION_IS_PRIVATE, Boolean.class)); Object polygonServiceValue = mapFromApp.get(POLYGON_SERVICE); - if(polygonServiceValue != null && !polygonServiceValue.toString().isBlank()) { - PolygonService polygonService = oM.convertValue(mapFromApp.get(POLYGON_SERVICE), PolygonService.class); + if (polygonServiceValue != null && !polygonServiceValue.toString().isBlank()) { + PolygonService polygonService = oM.convertValue(polygonServiceValue, PolygonService.class); otsToSave.setPolygonService(polygonService); }