diff --git a/src/main/java/no/nibio/vips/logic/controller/session/ObservationBean.java b/src/main/java/no/nibio/vips/logic/controller/session/ObservationBean.java index 356e7c92270881ee360253bb0dcd4629d543ab2a..fd28c779bae0014927e955fc5a7e636a4ee1e831 100755 --- a/src/main/java/no/nibio/vips/logic/controller/session/ObservationBean.java +++ b/src/main/java/no/nibio/vips/logic/controller/session/ObservationBean.java @@ -48,6 +48,7 @@ import no.nibio.vips.logic.entity.Organization; import no.nibio.vips.logic.entity.PointOfInterest; import no.nibio.vips.logic.entity.VipsLogicUser; import no.nibio.vips.logic.util.SessionControllerGetter; +import no.nibio.vips.logic.util.SystemTime; import org.apache.commons.fileupload.FileItem; import org.apache.commons.io.FilenameUtils; import org.wololo.geojson.Feature; @@ -234,6 +235,12 @@ public class ObservationBean { em.remove(observation); } + /** + * + * @param organizationId + * @param season + * @return + */ public List<Observation> getBroadcastObservations(Integer organizationId, Integer season) { Organization organization= em.find(Organization.class, organizationId); /*List<VipsLogicUser> users = em.createNamedQuery("VipsLogicUser.findByOrganizationId", VipsLogicUser.class) @@ -255,15 +262,44 @@ public class ObservationBean { Date start = cal.getTime(); cal.set(season, Calendar.DECEMBER, 31, 23, 59, 59); Date end = cal.getTime(); - retVal = this.getObservationsWithGeoInfo(em.createNamedQuery("Observation.findByOrganizationIdAndStatusTypeIdAndBroadcastMessageAndSeason") - .setParameter("organizationId", organization) - .setParameter("statusTypeId", Observation.STATUS_TYPE_ID_APPROVED) - .setParameter("start", start) - .setParameter("end", end) - .getResultList()); + retVal = this.getBroadcastObservations(organizationId, start, end); } return retVal; } + + /** + * + * @param organizationId + * @param start When period starts. Default: Jan 1st 2000 + * @param end When period ends. Default: 100 years from now + * @return + */ + public List<Observation> getBroadcastObservations(Integer organizationId, Date start, Date end) { + if(start == null || end == null) + { + Calendar cal = Calendar.getInstance(); + if(start == null) // Default Jan 1st 2000 + { + cal.set(2000, Calendar.JANUARY,1,0,0,0); + start = cal.getTime(); + } + if(end == null) // Default: Today + 100 years + { + cal.setTime(SystemTime.getSystemTime()); + cal.add(Calendar.YEAR, 100); + end = cal.getTime(); + } + } + Organization organization= em.find(Organization.class, organizationId); + return this.getObservationsWithGeoInfo(em.createNamedQuery("Observation.findByOrganizationIdAndStatusTypeIdAndBroadcastMessageAndPeriod") + .setParameter("organizationId", organization) + .setParameter("statusTypeId", Observation.STATUS_TYPE_ID_APPROVED) + .setParameter("start", start) + .setParameter("end", end) + .getResultList()); + } + + /** * * @param message diff --git a/src/main/java/no/nibio/vips/logic/entity/Observation.java b/src/main/java/no/nibio/vips/logic/entity/Observation.java index 2ef03bff78356a0547a756f88171be349643c3af..110984161a49fc3fc6c2d4163bb00fc0c4dc4b4c 100755 --- a/src/main/java/no/nibio/vips/logic/entity/Observation.java +++ b/src/main/java/no/nibio/vips/logic/entity/Observation.java @@ -69,7 +69,7 @@ import org.hibernate.annotations.TypeDefs; @NamedQuery(name = "Observation.findByOrganizationId", query = "SELECT o FROM Observation o WHERE o.userId IN(SELECT v.userId FROM VipsLogicUser v WHERE v.organizationId = :organizationId OR v.organizationId IN(SELECT o.organizationId FROM Organization o WHERE o.parentOrganizationId = :organizationId))"), @NamedQuery(name = "Observation.findByOrganizationIdAndStatusTypeId", query = "SELECT o FROM Observation o WHERE o.userId IN(SELECT v.userId FROM VipsLogicUser v WHERE v.organizationId = :organizationId OR v.organizationId IN(SELECT o.organizationId FROM Organization o WHERE o.parentOrganizationId = :organizationId)) AND o.statusTypeId= :statusTypeId"), @NamedQuery(name = "Observation.findByOrganizationIdAndStatusTypeIdAndBroadcastMessage", query = "SELECT o FROM Observation o WHERE o.userId IN(SELECT v.userId FROM VipsLogicUser v WHERE v.organizationId = :organizationId OR v.organizationId IN(SELECT o.organizationId FROM Organization o WHERE o.parentOrganizationId = :organizationId)) AND o.statusTypeId= :statusTypeId AND o.broadcastMessage IS TRUE"), - @NamedQuery(name = "Observation.findByOrganizationIdAndStatusTypeIdAndBroadcastMessageAndSeason", query = "SELECT o FROM Observation o WHERE o.timeOfObservation BETWEEN :start AND :end AND o.userId IN(SELECT v.userId FROM VipsLogicUser v WHERE v.organizationId = :organizationId OR v.organizationId IN(SELECT o.organizationId FROM Organization o WHERE o.parentOrganizationId = :organizationId)) AND o.statusTypeId= :statusTypeId AND o.broadcastMessage IS TRUE"), + @NamedQuery(name = "Observation.findByOrganizationIdAndStatusTypeIdAndBroadcastMessageAndPeriod", query = "SELECT o FROM Observation o WHERE o.timeOfObservation BETWEEN :start AND :end AND o.userId IN(SELECT v.userId FROM VipsLogicUser v WHERE v.organizationId = :organizationId OR v.organizationId IN(SELECT o.organizationId FROM Organization o WHERE o.parentOrganizationId = :organizationId)) AND o.statusTypeId= :statusTypeId AND o.broadcastMessage IS TRUE"), @NamedQuery(name = "Observation.findByOrganism", query = "SELECT o FROM Observation o WHERE o.organism = :organism"), @NamedQuery(name = "Observation.findByTimeOfObservation", query = "SELECT o FROM Observation o WHERE o.timeOfObservation = :timeOfObservation") }) 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 b4fda92d7b3b2bc9ebbdf8be256c6cde1cbfe50a..179666f2fed3648680ad9371de10bb8686d5eeb7 100755 --- a/src/main/java/no/nibio/vips/logic/service/ObservationService.java +++ b/src/main/java/no/nibio/vips/logic/service/ObservationService.java @@ -197,10 +197,38 @@ public class ObservationService { @Produces("application/json;charset=UTF-8") public Response getBroadcastObservations( @PathParam("organizationId") Integer organizationId, - @QueryParam("season") Integer season + @QueryParam("season") Integer season, + @QueryParam("timeOfObservationFrom") String timeOfObservationFrom, + @QueryParam("timeOfObservationTo") String timeOfObservationTo ) { - return Response.ok().entity(SessionControllerGetter.getObservationBean().getBroadcastObservations(organizationId, season)).build(); + if((timeOfObservationFrom != null && ! timeOfObservationFrom.isEmpty()) + || (timeOfObservationTo != null && ! timeOfObservationTo.isEmpty())) + { + Date from = null; + Date to = null; + try + { + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); + if(timeOfObservationFrom != null && ! timeOfObservationFrom.isEmpty()) + { + from = format.parse(timeOfObservationFrom); + } + if(timeOfObservationTo != null && ! timeOfObservationTo.isEmpty()) + { + to = format.parse(timeOfObservationTo); + } + return Response.ok().entity(SessionControllerGetter.getObservationBean().getBroadcastObservations(organizationId, from, to)).build(); + } + catch(ParseException ex) + { + return Response.status(Response.Status.BAD_REQUEST).entity("Invalid date format").build(); + } + } + else + { + return Response.ok().entity(SessionControllerGetter.getObservationBean().getBroadcastObservations(organizationId, season)).build(); + } } @GET