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