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 5d651556bb4096b5c119fa04e824bd0eac6ff9d2..1a8c8b3d9a66bb8872c8a8ead47f2ce715e6372f 100755 --- a/src/main/java/no/nibio/vips/logic/service/ObservationService.java +++ b/src/main/java/no/nibio/vips/logic/service/ObservationService.java @@ -177,7 +177,6 @@ public class ObservationService { userBean.getOrganization(organizationId).getDefaultLocale()); LOGGER.debug("Get filtered observations for user {}", user != null ? user.getUserId() : "<no user>"); - List<ObservationListItem> observations = getFilteredObservationsFromBackend( organizationId, pestId, @@ -782,10 +781,11 @@ public class ObservationService { VipsLogicUser user ) { List<Observation> filteredObservations = this.getFilteredObservationsFromBackend(organizationId, pestId, cropId, cropCategoryId, fromStr, toStr, isPositive); - //filteredObservations.forEach(o->System.out.println(o.getObservationId())); + // If superuser or orgadmin: Return everything, unchanged, uncensored if (user != null && (user.isSuperUser() || user.isOrganizationAdmin())) { - return filteredObservations; + LOGGER.debug("Return uncensored list of {} observations to {}", filteredObservations.size(), (user.isSuperUser() ? "super" : "admin") + " user"); + return sortObservationsByDateAndId(filteredObservations); } List<Observation> retVal = filteredObservations.stream().filter(obs -> obs.getBroadcastMessage() || (isPositive == null || !isPositive)).collect(Collectors.toList()); //retVal.forEach(o->System.out.println(o.getObservationId())); @@ -793,11 +793,13 @@ public class ObservationService { //retVal.forEach(o->System.out.println(o.getObservationId())); // If user is not logged in, return only the publicly available observations if (user == null) { - return retVal; + LOGGER.debug("Return {} masked public observations for unregistered user", retVal.size()); + return sortObservationsByDateAndId(retVal); } // Else: This is a registered user without special privileges. Show public observations + user's own retVal.addAll(observationBean.getObservationsForUser(user)); - return retVal; + LOGGER.debug("Return {} masked public observations and user's own observations for registered user {}", retVal.size(), user.getUserId()); + return sortObservationsByDateAndId(retVal); } /** @@ -907,7 +909,7 @@ public class ObservationService { String observationJson ) { LOGGER.info("In syncObservationFromApp"); - LOGGER.info(observationJson); + LOGGER.debug(observationJson); try { VipsLogicUser user = userBean.getUserFromUUID(httpServletRequest); @@ -1057,4 +1059,25 @@ public class ObservationService { } } + + + /** + * Sort observations by date in descending order, and by id in descending order if dates are identical + * + * @param observations The original list of unordered observations + * @return a sorted list of observations + */ + private List<Observation> sortObservationsByDateAndId(List<Observation> observations) { + return observations.stream() + .sorted((o1, o2) -> { + int timeCompare = o2.getTimeOfObservation().compareTo(o1.getTimeOfObservation()); + if (timeCompare != 0) { + return timeCompare; + } else { + return Integer.compare(o2.getObservationId(), o1.getObservationId()); + } + }) + .collect(Collectors.toList()); + } + } diff --git a/src/test/java/no/nibio/vips/logic/service/ObservationTimeSeriesServiceTest.java b/src/test/java/no/nibio/vips/logic/service/ObservationTimeSeriesServiceTest.java deleted file mode 100644 index 030e3261f192a5740979b4b4f3848aa90fe2635f..0000000000000000000000000000000000000000 --- a/src/test/java/no/nibio/vips/logic/service/ObservationTimeSeriesServiceTest.java +++ /dev/null @@ -1,5 +0,0 @@ -package no.nibio.vips.logic.service; - -public class ObservationTimeSeriesServiceTest { - -} \ No newline at end of file