Skip to content
Snippets Groups Projects
Commit 9441c79f authored by Lene Wasskog's avatar Lene Wasskog
Browse files

Merge branch 'develop' into feature/vipsutv-1047-timeseries

parents 860e6fc7 7708500e
No related branches found
No related tags found
1 merge request!206VIPSUTV-1047 Editing observations belonging to timeseries
This commit is part of merge request !206. Comments created here will be created in the context of that merge request.
/* /*
* Copyright (c) 2017 NIBIO <http://www.nibio.no/>. * Copyright (c) 2017 NIBIO <http://www.nibio.no/>.
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by * it under the terms of the GNU Affero General Public License as published by
...@@ -18,23 +18,6 @@ ...@@ -18,23 +18,6 @@
package no.nibio.vips.logic.controller.servlet; package no.nibio.vips.logic.controller.servlet;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TimeZone;
import java.util.stream.Collectors;
import org.apache.commons.fileupload2.core.DiskFileItemFactory;
import org.apache.commons.fileupload2.core.FileItem;
import org.apache.commons.fileupload2.core.FileUploadException;
import org.apache.commons.fileupload2.jakarta.servlet6.JakartaServletFileUpload;
import jakarta.ejb.EJB; import jakarta.ejb.EJB;
import jakarta.persistence.EntityManager; import jakarta.persistence.EntityManager;
import jakarta.persistence.PersistenceContext; import jakarta.persistence.PersistenceContext;
...@@ -46,15 +29,7 @@ import no.nibio.vips.logic.controller.session.ObservationBean; ...@@ -46,15 +29,7 @@ import no.nibio.vips.logic.controller.session.ObservationBean;
import no.nibio.vips.logic.controller.session.OrganismBean; import no.nibio.vips.logic.controller.session.OrganismBean;
import no.nibio.vips.logic.controller.session.PointOfInterestBean; import no.nibio.vips.logic.controller.session.PointOfInterestBean;
import no.nibio.vips.logic.controller.session.UserBean; import no.nibio.vips.logic.controller.session.UserBean;
import no.nibio.vips.logic.entity.Observation; import no.nibio.vips.logic.entity.*;
import no.nibio.vips.logic.entity.ObservationFormShortcut;
import no.nibio.vips.logic.entity.ObservationMethod;
import no.nibio.vips.logic.entity.Organism;
import no.nibio.vips.logic.entity.Organization;
import no.nibio.vips.logic.entity.OrganizationGroup;
import no.nibio.vips.logic.entity.PolygonService;
import no.nibio.vips.logic.entity.VipsLogicRole;
import no.nibio.vips.logic.entity.VipsLogicUser;
import no.nibio.vips.logic.i18n.SessionLocaleUtil; import no.nibio.vips.logic.i18n.SessionLocaleUtil;
import no.nibio.vips.logic.messaging.MessagingBean; import no.nibio.vips.logic.messaging.MessagingBean;
import no.nibio.vips.logic.util.Globals; import no.nibio.vips.logic.util.Globals;
...@@ -67,15 +42,25 @@ import no.nibio.web.forms.FormUtil; ...@@ -67,15 +42,25 @@ import no.nibio.web.forms.FormUtil;
import no.nibio.web.forms.FormValidation; import no.nibio.web.forms.FormValidation;
import no.nibio.web.forms.FormValidationException; import no.nibio.web.forms.FormValidationException;
import no.nibio.web.forms.FormValidator; import no.nibio.web.forms.FormValidator;
import org.apache.commons.fileupload2.core.DiskFileItemFactory;
import org.apache.commons.fileupload2.core.FileItem;
import org.apache.commons.fileupload2.core.FileUploadException;
import org.apache.commons.fileupload2.jakarta.servlet6.JakartaServletFileUpload;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
/** /**
* @copyright 2014-2022 <a href="http://www.nibio.no/">NIBIO</a>
* @author Tor-Einar Skog <tor-einar.skog@nibio.no> * @author Tor-Einar Skog <tor-einar.skog@nibio.no>
* @copyright 2014-2022 <a href="http://www.nibio.no/">NIBIO</a>
*/ */
public class ObservationController extends HttpServlet { public class ObservationController extends HttpServlet {
@PersistenceContext(unitName="VIPSLogic-PU") @PersistenceContext(unitName = "VIPSLogic-PU")
EntityManager em; EntityManager em;
@EJB @EJB
UserBean userBean; UserBean userBean;
@EJB @EJB
...@@ -86,45 +71,39 @@ public class ObservationController extends HttpServlet { ...@@ -86,45 +71,39 @@ public class ObservationController extends HttpServlet {
OrganismBean organismBean; OrganismBean organismBean;
@EJB @EJB
PointOfInterestBean pointOfInterestBean; PointOfInterestBean pointOfInterestBean;
/** /**
* Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods. * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
* @param request servlet request *
* @param request servlet request
* @param response servlet response * @param response servlet response
* @throws ServletException if a servlet-specific error occurs * @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs * @throws IOException if an I/O error occurs
*/ */
protected void processRequest(HttpServletRequest request, HttpServletResponse response) protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8"); response.setContentType("text/html;charset=UTF-8");
String action = request.getParameter("action"); String action = request.getParameter("action");
VipsLogicUser user = (VipsLogicUser) request.getSession().getAttribute("user"); VipsLogicUser user = (VipsLogicUser) request.getSession().getAttribute("user");
// Get the organization groups for the current user // Get the organization groups for the current user
List<OrganizationGroup> organizationGroups = null; List<OrganizationGroup> organizationGroups = null;
if(user.isSuperUser()) if (user.isSuperUser()) {
{ organizationGroups = userBean.getOrganizationGroups();
organizationGroups = userBean.getOrganizationGroups(); } else if (user.isOrganizationAdmin()) {
}
else if(user.isOrganizationAdmin())
{
organizationGroups = userBean.getOrganizationGroups(user.getOrganizationId()); organizationGroups = userBean.getOrganizationGroups(user.getOrganizationId());
} } else {
else
{
organizationGroups = userBean.getOrganizationGroups(user); organizationGroups = userBean.getOrganizationGroups(user);
} }
// Default: View observation list // Default: View observation list
// for everyone // for everyone
if(request.getServletPath().endsWith("/observation")) if (request.getServletPath().endsWith("/observation")) {
{ if (action == null) {
if(action == null)
{
List<Observation> observations; List<Observation> observations;
Integer statusTypeId; Integer statusTypeId;
Integer pestOrganismId; Integer pestOrganismId;
Set<Integer> organizationGroupId; Set<Integer> organizationGroupId;
Boolean viewOthersObservations; Boolean viewOthersObservations;
// Default period is current season // Default period is current season
Calendar cal = Calendar.getInstance(); Calendar cal = Calendar.getInstance();
cal.setTime(SystemTime.getSystemTime()); cal.setTime(SystemTime.getSystemTime());
...@@ -133,92 +112,80 @@ public class ObservationController extends HttpServlet { ...@@ -133,92 +112,80 @@ public class ObservationController extends HttpServlet {
Date timeOfObservationTo; Date timeOfObservationTo;
Boolean userDefinedFrom = false; Boolean userDefinedFrom = false;
Boolean userDefinedTo = false; Boolean userDefinedTo = false;
try try {
{
timeOfObservationFrom = format.parse(request.getParameter("timeOfObservationFrom")); timeOfObservationFrom = format.parse(request.getParameter("timeOfObservationFrom"));
userDefinedFrom = true; userDefinedFrom = true;
} } catch (NullPointerException | ParseException ex) {
catch(NullPointerException | ParseException ex)
{
cal.set(cal.get(Calendar.YEAR), Calendar.JANUARY, 1, 0, 0, 0); cal.set(cal.get(Calendar.YEAR), Calendar.JANUARY, 1, 0, 0, 0);
timeOfObservationFrom = cal.getTime(); timeOfObservationFrom = cal.getTime();
} }
try try {
{
timeOfObservationTo = format.parse(request.getParameter("timeOfObservationTo")); timeOfObservationTo = format.parse(request.getParameter("timeOfObservationTo"));
userDefinedTo = true; userDefinedTo = true;
} } catch (NullPointerException | ParseException ex) {
catch(NullPointerException | ParseException ex)
{
cal.set(cal.get(Calendar.YEAR), Calendar.DECEMBER, 31, 23, 59, 59); cal.set(cal.get(Calendar.YEAR), Calendar.DECEMBER, 31, 23, 59, 59);
timeOfObservationTo = cal.getTime(); timeOfObservationTo = cal.getTime();
} }
// If only one date is set, the unset date should not limit the data set // If only one date is set, the unset date should not limit the data set
if(!userDefinedFrom && userDefinedTo) if (!userDefinedFrom && userDefinedTo) {
{
cal.set(Calendar.YEAR, cal.get(Calendar.YEAR) - 100); cal.set(Calendar.YEAR, cal.get(Calendar.YEAR) - 100);
timeOfObservationFrom = cal.getTime(); timeOfObservationFrom = cal.getTime();
} }
if(userDefinedFrom && !userDefinedTo) if (userDefinedFrom && !userDefinedTo) {
{
cal.set(Calendar.YEAR, cal.get(Calendar.YEAR) + 100); cal.set(Calendar.YEAR, cal.get(Calendar.YEAR) + 100);
timeOfObservationTo = cal.getTime(); timeOfObservationTo = cal.getTime();
} }
try try {
{ statusTypeId = request.getParameter("statusTypeId") != null ?
statusTypeId = request.getParameter("statusTypeId") != null ? Integer.valueOf(request.getParameter("statusTypeId")) : -1; Integer.valueOf(request.getParameter("statusTypeId")) :
pestOrganismId = request.getParameter("pestOrganismId") != null ? Integer.valueOf(request.getParameter("pestOrganismId")) : -1; -1;
pestOrganismId = request.getParameter("pestOrganismId") != null ?
Integer.valueOf(request.getParameter("pestOrganismId")) :
-1;
viewOthersObservations = request.getParameter("viewOthersObservations") != null; viewOthersObservations = request.getParameter("viewOthersObservations") != null;
if(request.getParameterValues("organizationGroupId") != null && request.getParameterValues("organizationGroupId").length > 0) if (request.getParameterValues("organizationGroupId") != null && request.getParameterValues(
{ "organizationGroupId").length > 0) {
organizationGroupId = new HashSet<>(); organizationGroupId = new HashSet<>();
for(String id:request.getParameterValues("organizationGroupId")) for (String id : request.getParameterValues("organizationGroupId")) {
{
organizationGroupId.add(Integer.valueOf(id)); organizationGroupId.add(Integer.valueOf(id));
} }
} } else {
else
{
organizationGroupId = null; organizationGroupId = null;
} }
} } catch (NumberFormatException nfe) {
catch(NumberFormatException nfe) {
//nfe.printStackTrace(); //nfe.printStackTrace();
statusTypeId = -1; statusTypeId = -1;
pestOrganismId = -1; pestOrganismId = -1;
viewOthersObservations = false; viewOthersObservations = false;
organizationGroupId = null; organizationGroupId = null;
} }
// First: Get observations for organization or user // First: Get observations for organization or user
if(viewOthersObservations && userBean.authorizeUser(user, if (viewOthersObservations && userBean.authorizeUser(user,
VipsLogicRole.OBSERVATION_AUTHORITY, VipsLogicRole.OBSERVATION_AUTHORITY,
VipsLogicRole.ORGANIZATION_ADMINISTRATOR, VipsLogicRole.ORGANIZATION_ADMINISTRATOR,
VipsLogicRole.SUPERUSER)) VipsLogicRole.SUPERUSER)) {
{ observations = observationBean.getObservations(user.getOrganizationId().getOrganizationId(),
observations = observationBean.getObservations(user.getOrganizationId().getOrganizationId(), timeOfObservationFrom, timeOfObservationTo); timeOfObservationFrom, timeOfObservationTo);
} } else {
else observations =
{ observationBean.getObservationsForUser(user, timeOfObservationFrom, timeOfObservationTo);
observations = observationBean.getObservationsForUser(user, timeOfObservationFrom, timeOfObservationTo);
} }
// Then: Filter on other criteria // Then: Filter on other criteria
if(statusTypeId > 0) if (statusTypeId > 0) {
{
final Integer s = statusTypeId; // Local variables used in lambdas must be effectively final final Integer s = statusTypeId; // Local variables used in lambdas must be effectively final
observations = observations.stream(). observations = observations.stream().
filter(obs->obs.getStatusTypeId().equals(s)) filter(obs -> obs.getStatusTypeId().equals(s))
.collect(Collectors.toList()); .collect(Collectors.toList());
} }
if(pestOrganismId > 0) if (pestOrganismId > 0) {
{
final Integer p = pestOrganismId; final Integer p = pestOrganismId;
observations = observations.stream() observations = observations.stream()
.filter(obs->obs.getOrganismId().equals(p)) .filter(obs -> obs.getOrganismId().equals(p))
.collect(Collectors.toList()); .collect(Collectors.toList());
} }
// A bit hairy this one // A bit hairy this one
// If the user wants to filter on organization groups // If the user wants to filter on organization groups
...@@ -227,407 +194,396 @@ public class ObservationController extends HttpServlet { ...@@ -227,407 +194,396 @@ public class ObservationController extends HttpServlet {
// If the candiate obs has specified groups that intersect with filter, it's IN // If the candiate obs has specified groups that intersect with filter, it's IN
// Otherwise it's OUT // Otherwise it's OUT
// If the user has no filter for organization groups, all observations are kept // If the user has no filter for organization groups, all observations are kept
if(organizationGroupId != null) if (organizationGroupId != null) {
{
final Set<Integer> ogi = organizationGroupId; final Set<Integer> ogi = organizationGroupId;
observations = observations.stream() observations = observations.stream()
.filter((Observation obs) -> { .filter((Observation obs) -> {
List<Integer> availableOrganizationGroupIds = observationBean.getOrganizationGroupIds(obs); List<Integer> availableOrganizationGroupIds = observationBean.getOrganizationGroupIds(obs);
if(availableOrganizationGroupIds != null && ! availableOrganizationGroupIds.isEmpty()) if (availableOrganizationGroupIds != null && !availableOrganizationGroupIds.isEmpty()) {
{ if (availableOrganizationGroupIds.stream().anyMatch((gId) -> (ogi.contains(gId)))) {
if (availableOrganizationGroupIds.stream().anyMatch((gId) -> (ogi.contains(gId)))) { return true;
return true;
}
} }
return false; }
}) return false;
.collect(Collectors.toList()); })
.collect(Collectors.toList());
} }
// Check for form shortcuts // Check for form shortcuts
List<ObservationFormShortcut> shortcuts = observationBean.getObservationFormShortcuts(user.getOrganizationId()); List<ObservationFormShortcut> shortcuts =
observationBean.getObservationFormShortcuts(user.getOrganizationId());
Collections.sort(observations); Collections.sort(observations);
Collections.reverse(observations); Collections.reverse(observations);
//observations.forEach(o->System.out.println(o)); //observations.forEach(o->System.out.println(o));
List<Organism> allPests = em.createNamedQuery("Organism.findAllPests").getResultList(); List<Organism> allPests = em.createNamedQuery("Organism.findAllPests").getResultList();
request.setAttribute("shortcuts", shortcuts); request.setAttribute("shortcuts", shortcuts);
request.setAttribute("allPests", organismBean.sortOrganismsByLocalName(allPests, SessionLocaleUtil.getCurrentLocale(request).getLanguage())); request.setAttribute("allPests", organismBean.sortOrganismsByLocalName(allPests,
request.setAttribute("hierarchyCategories", organismBean.getHierarchyCategoryNames(SessionLocaleUtil.getCurrentLocale(request))); SessionLocaleUtil.getCurrentLocale(request).getLanguage()));
request.setAttribute("hierarchyCategories",
organismBean.getHierarchyCategoryNames(SessionLocaleUtil.getCurrentLocale(request)));
request.setAttribute("timeOfObservationFrom", userDefinedFrom ? timeOfObservationFrom : null); request.setAttribute("timeOfObservationFrom", userDefinedFrom ? timeOfObservationFrom : null);
request.setAttribute("timeOfObservationTo", userDefinedTo ? timeOfObservationTo : null); request.setAttribute("timeOfObservationTo", userDefinedTo ? timeOfObservationTo : null);
request.setAttribute("selectedPestOrganismId", pestOrganismId); request.setAttribute("selectedPestOrganismId", pestOrganismId);
request.setAttribute("selectedStatusTypeId", statusTypeId); request.setAttribute("selectedStatusTypeId", statusTypeId);
request.setAttribute("viewOthersObservations",viewOthersObservations); request.setAttribute("viewOthersObservations", viewOthersObservations);
request.setAttribute("organizationGroups", organizationGroups); request.setAttribute("organizationGroups", organizationGroups);
request.setAttribute("organizationGroupId", organizationGroupId); request.setAttribute("organizationGroupId", organizationGroupId);
request.setAttribute("observations", observations); request.setAttribute("observations", observations);
request.setAttribute("userHasObserverPrivilege", userBean.authorizeUser(user, VipsLogicRole.OBSERVER, VipsLogicRole.ORGANIZATION_ADMINISTRATOR, VipsLogicRole.SUPERUSER)); request.setAttribute("userHasObserverPrivilege",
request.setAttribute("userIsObservationAuthority", userBean.authorizeUser(user, VipsLogicRole.OBSERVATION_AUTHORITY, VipsLogicRole.ORGANIZATION_ADMINISTRATOR, VipsLogicRole.SUPERUSER)); userBean.authorizeUser(user, VipsLogicRole.OBSERVER, VipsLogicRole.ORGANIZATION_ADMINISTRATOR,
VipsLogicRole.SUPERUSER));
request.setAttribute("userIsObservationAuthority",
userBean.authorizeUser(user, VipsLogicRole.OBSERVATION_AUTHORITY,
VipsLogicRole.ORGANIZATION_ADMINISTRATOR, VipsLogicRole.SUPERUSER));
// If this is a redirect from a controller, with a message to be passed on // If this is a redirect from a controller, with a message to be passed on
request.setAttribute("messageKey", request.getParameter("messageKey")); request.setAttribute("messageKey", request.getParameter("messageKey"));
request.getRequestDispatcher("/observationList.ftl").forward(request, response); request.getRequestDispatcher("/observationList.ftl").forward(request, response);
} }
// Create a new observation // Create a new observation
// Authorization: ORGANIZATION ADMIN, OBSERVER or SUPERUSER // Authorization: ORGANIZATION ADMIN, OBSERVER or SUPERUSER
else if(action.equals("newObservationForm")) else if (action.equals("newObservationForm")) {
{ if (userBean.authorizeUser(user, VipsLogicRole.OBSERVER, VipsLogicRole.OBSERVATION_AUTHORITY,
if(userBean.authorizeUser(user, VipsLogicRole.OBSERVER, VipsLogicRole.OBSERVATION_AUTHORITY, VipsLogicRole.ORGANIZATION_ADMINISTRATOR, VipsLogicRole.SUPERUSER)) VipsLogicRole.ORGANIZATION_ADMINISTRATOR, VipsLogicRole.SUPERUSER)) {
{ try {
try
{
Observation observation = new Observation(); Observation observation = new Observation();
// See if there are presets on the URL string // See if there are presets on the URL string
if(request.getParameter("cropOrganismId") != null) if (request.getParameter("cropOrganismId") != null) {
{ observation.setCropOrganism(
observation.setCropOrganism(em.find(Organism.class, Integer.valueOf(request.getParameter("cropOrganismId")))); em.find(Organism.class, Integer.valueOf(request.getParameter("cropOrganismId"))));
} }
List<Organism> allCrops; List<Organism> allCrops;
if(request.getParameter("organismId") != null) if (request.getParameter("organismId") != null) {
{
Integer organismId = Integer.valueOf(request.getParameter("organismId")); Integer organismId = Integer.valueOf(request.getParameter("organismId"));
observation.setOrganism(em.find(Organism.class, organismId)); observation.setOrganism(em.find(Organism.class, organismId));
// If pest has been selected, include only associated crops // If pest has been selected, include only associated crops
allCrops = organismBean.getPestCrops(organismId); allCrops = organismBean.getPestCrops(organismId);
} } else {
else
{
allCrops = em.createNamedQuery("Organism.findAllCrops").getResultList(); allCrops = em.createNamedQuery("Organism.findAllCrops").getResultList();
} }
// Get the polygonServices // Get the polygonServices
List<PolygonService> polygonServices = observationBean.getPolygonServicesForOrganization(user.getOrganization_id()); List<PolygonService> polygonServices =
observationBean.getPolygonServicesForOrganization(user.getOrganization_id());
request.setAttribute("observation", observation); request.setAttribute("observation", observation);
request.setAttribute("polygonServices", polygonServices); request.setAttribute("polygonServices", polygonServices);
request.setAttribute("locationVisibilityFormValue", ObservationController.LOCATION_VISIBILITY_FORM_VALUE_PUBLIC); request.setAttribute("locationVisibilityFormValue",
ObservationController.LOCATION_VISIBILITY_FORM_VALUE_PUBLIC);
request.setAttribute("shortcut", request.getParameter("observationFormShortcutId") != null ? request.setAttribute("shortcut", request.getParameter("observationFormShortcutId") != null ?
em.find(ObservationFormShortcut.class, Integer.valueOf(request.getParameter("observationFormShortcutId"))) em.find(ObservationFormShortcut.class,
: null Integer.valueOf(request.getParameter("observationFormShortcutId")))
); : null
request.setAttribute("hideObservationFormMap", request.getParameter("hideObservationFormMap") != null ? request.getParameter("hideObservationFormMap").equals("true") : false); );
request.setAttribute("hideObservationFormMap",
request.getParameter("hideObservationFormMap") != null ?
request.getParameter("hideObservationFormMap").equals("true") :
false);
request.setAttribute("noBroadcast", request.getParameter("noBroadcast") != null); request.setAttribute("noBroadcast", request.getParameter("noBroadcast") != null);
request.setAttribute("mapLayers", userBean.getMapLayerJSONForUser(user)); request.setAttribute("mapLayers", userBean.getMapLayerJSONForUser(user));
request.setAttribute("defaultMapCenter",user.getOrganizationId().getDefaultMapCenter()); request.setAttribute("defaultMapCenter", user.getOrganizationId().getDefaultMapCenter());
request.setAttribute("defaultMapZoom", user.getOrganizationId().getDefaultMapZoom()); request.setAttribute("defaultMapZoom", user.getOrganizationId().getDefaultMapZoom());
request.setAttribute("locationPointOfInterests", pointOfInterestBean.getRelevantPointOfInterestsForUser(user)); request.setAttribute("locationPointOfInterests",
pointOfInterestBean.getRelevantPointOfInterestsForUser(user));
List<Organism> allPests = em.createNamedQuery("Organism.findAllPests").getResultList(); List<Organism> allPests = em.createNamedQuery("Organism.findAllPests").getResultList();
request.setAttribute("allPests", organismBean.sortOrganismsByLocalName(allPests, SessionLocaleUtil.getCurrentLocale(request).getLanguage())); request.setAttribute("allPests", organismBean.sortOrganismsByLocalName(allPests,
request.setAttribute("allCrops", organismBean.sortOrganismsByLocalName(allCrops, SessionLocaleUtil.getCurrentLocale(request).getLanguage())); SessionLocaleUtil.getCurrentLocale(request).getLanguage()));
request.setAttribute("allCrops", organismBean.sortOrganismsByLocalName(allCrops,
SessionLocaleUtil.getCurrentLocale(request).getLanguage()));
request.setAttribute("selectedOrganizationGroupIds", new ArrayList<>()); request.setAttribute("selectedOrganizationGroupIds", new ArrayList<>());
// Hierarchy categories // Hierarchy categories
request.setAttribute("hierarchyCategories", organismBean.getHierarchyCategoryNames(SessionLocaleUtil.getCurrentLocale(request))); request.setAttribute("hierarchyCategories",
request.setAttribute("observationMethods", em.createNamedQuery("ObservationMethod.findAll", ObservationMethod.class).getResultList()); organismBean.getHierarchyCategoryNames(SessionLocaleUtil.getCurrentLocale(request)));
request.setAttribute("observationMethods",
em.createNamedQuery("ObservationMethod.findAll", ObservationMethod.class).getResultList());
request.setAttribute("organizationGroups", organizationGroups); request.setAttribute("organizationGroups", organizationGroups);
request.setAttribute("editAccess", "W"); // User always has edit access to new observation request.setAttribute("editAccess", "W"); // User always has edit access to new observation
if(userBean.authorizeUser(user, VipsLogicRole.OBSERVATION_AUTHORITY, VipsLogicRole.ORGANIZATION_ADMINISTRATOR, VipsLogicRole.SUPERUSER)) if (userBean.authorizeUser(user, VipsLogicRole.OBSERVATION_AUTHORITY,
{ VipsLogicRole.ORGANIZATION_ADMINISTRATOR, VipsLogicRole.SUPERUSER)) {
request.setAttribute("statusTypeIds", em.createNamedQuery("ObservationStatusType.findAll").getResultList()); request.setAttribute("statusTypeIds",
em.createNamedQuery("ObservationStatusType.findAll").getResultList());
} }
request.getRequestDispatcher("/observationForm.ftl").forward(request, response); request.getRequestDispatcher("/observationForm.ftl").forward(request, response);
} } catch (NullPointerException | NumberFormatException ex) {
catch(NullPointerException | NumberFormatException ex)
{
response.sendError(500, ExceptionUtil.getStackTrace(ex)); response.sendError(500, ExceptionUtil.getStackTrace(ex));
} }
} } else {
else response.sendError(403, "Access not authorized"); // HTTP Forbidden
{
response.sendError(403,"Access not authorized"); // HTTP Forbidden
} }
} }
// Edit an existing observation // Edit an existing observation
// Authorization: ORGANIZATION ADMIN, OBSERVER or SUPERUSER // Authorization: ORGANIZATION ADMIN, OBSERVER or SUPERUSER
else if(action.equals("editObservationForm")) else if (action.equals("editObservationForm")) {
{ if (userBean.authorizeUser(user, VipsLogicRole.OBSERVER, VipsLogicRole.ORGANIZATION_ADMINISTRATOR,
if(userBean.authorizeUser(user, VipsLogicRole.OBSERVER, VipsLogicRole.ORGANIZATION_ADMINISTRATOR, VipsLogicRole.SUPERUSER)) VipsLogicRole.SUPERUSER)) {
{ try {
try
{
Integer observationId = Integer.valueOf(request.getParameter("observationId")); Integer observationId = Integer.valueOf(request.getParameter("observationId"));
Observation observation = observationBean.getObservation(observationId);//em.find(Observation.class, observationId); Observation observation =
List<PolygonService> polygonServices = observationBean.getPolygonServicesForOrganization(user.getOrganization_id()); observationBean.getObservation(observationId);//em.find(Observation.class, observationId);
request.setAttribute("locationVisibilityFormValue", this.getLocationVisibilityFormValue(observation)); List<PolygonService> polygonServices =
observationBean.getPolygonServicesForOrganization(user.getOrganization_id());
request.setAttribute("locationVisibilityFormValue",
this.getLocationVisibilityFormValue(observation));
request.setAttribute("observation", observation); request.setAttribute("observation", observation);
request.setAttribute("polygonServices", polygonServices); request.setAttribute("polygonServices", polygonServices);
request.setAttribute("noBroadcast", request.getParameter("noBroadcast") != null); request.setAttribute("noBroadcast", request.getParameter("noBroadcast") != null);
request.setAttribute("mapLayers", userBean.getMapLayerJSONForUser(user)); request.setAttribute("mapLayers", userBean.getMapLayerJSONForUser(user));
//System.out.println(observation.getGeoinfo()); //System.out.println(observation.getGeoinfo());
request.setAttribute("defaultMapCenter",user.getOrganizationId().getDefaultMapCenter()); request.setAttribute("defaultMapCenter", user.getOrganizationId().getDefaultMapCenter());
request.setAttribute("defaultMapZoom", user.getOrganizationId().getDefaultMapZoom()); request.setAttribute("defaultMapZoom", user.getOrganizationId().getDefaultMapZoom());
List<Organism> allPests = em.createNamedQuery("Organism.findAllPests").getResultList(); List<Organism> allPests = em.createNamedQuery("Organism.findAllPests").getResultList();
request.setAttribute("allPests", organismBean.sortOrganismsByLocalName(allPests, SessionLocaleUtil.getCurrentLocale(request).getLanguage())); request.setAttribute("allPests", organismBean.sortOrganismsByLocalName(allPests,
SessionLocaleUtil.getCurrentLocale(request).getLanguage()));
List<Organism> allCrops = em.createNamedQuery("Organism.findAllCrops").getResultList(); List<Organism> allCrops = em.createNamedQuery("Organism.findAllCrops").getResultList();
request.setAttribute("allCrops", organismBean.sortOrganismsByLocalName(allCrops, SessionLocaleUtil.getCurrentLocale(request).getLanguage())); request.setAttribute("allCrops", organismBean.sortOrganismsByLocalName(allCrops,
request.setAttribute("selectedOrganizationGroupIds", observationBean.getOrganizationGroupIds(observation)); SessionLocaleUtil.getCurrentLocale(request).getLanguage()));
request.setAttribute("selectedOrganizationGroupIds",
observationBean.getOrganizationGroupIds(observation));
// Hierarchy categories // Hierarchy categories
request.setAttribute("hierarchyCategories", organismBean.getHierarchyCategoryNames(SessionLocaleUtil.getCurrentLocale(request))); request.setAttribute("hierarchyCategories",
request.setAttribute("observationMethods", em.createNamedQuery("ObservationMethod.findAll", ObservationMethod.class).getResultList()); organismBean.getHierarchyCategoryNames(SessionLocaleUtil.getCurrentLocale(request)));
request.setAttribute("observationMethods",
em.createNamedQuery("ObservationMethod.findAll", ObservationMethod.class).getResultList());
request.setAttribute("organizationGroups", organizationGroups); request.setAttribute("organizationGroups", organizationGroups);
if(userBean.authorizeUser(user, VipsLogicRole.OBSERVATION_AUTHORITY, VipsLogicRole.ORGANIZATION_ADMINISTRATOR, VipsLogicRole.SUPERUSER)) if (userBean.authorizeUser(user, VipsLogicRole.OBSERVATION_AUTHORITY,
{ VipsLogicRole.ORGANIZATION_ADMINISTRATOR, VipsLogicRole.SUPERUSER)) {
request.setAttribute("statusTypeIds", em.createNamedQuery("ObservationStatusType.findAll").getResultList()); request.setAttribute("statusTypeIds",
em.createNamedQuery("ObservationStatusType.findAll").getResultList());
} }
if(request.getParameter("messageKey") != null) if (request.getParameter("messageKey") != null) {
{ request.setAttribute("messageKey", request.getParameter("messageKey"));
request.setAttribute("messageKey",request.getParameter("messageKey"));
} }
// Determine the edit access // Determine the edit access
String editAccess = "R"; // Read access only String editAccess = "R"; // Read access only
if(observation.getUserId().equals(user.getUserId()) || user.isSuperUser() || user.isOrganizationAdmin()) if (observation.getUserId()
{ .equals(user.getUserId()) || user.isSuperUser() || user.isOrganizationAdmin()) {
editAccess = "W"; editAccess = "W";
} } else if (user.isObservationAuthority()) {
else if(user.isObservationAuthority())
{
editAccess = "A"; // Approve editAccess = "A"; // Approve
} }
request.setAttribute("editAccess", editAccess); request.setAttribute("editAccess", editAccess);
request.getRequestDispatcher("/observationForm.ftl").forward(request, response); request.getRequestDispatcher("/observationForm.ftl").forward(request, response);
} } catch (NullPointerException | NumberFormatException ex) {
catch(NullPointerException | NumberFormatException ex)
{
response.sendError(500, ex.getMessage() + ": " + ExceptionUtil.getStackTrace(ex)); response.sendError(500, ex.getMessage() + ": " + ExceptionUtil.getStackTrace(ex));
} }
} } else {
else response.sendError(403, "Access not authorized"); // HTTP Forbidden
{
response.sendError(403,"Access not authorized"); // HTTP Forbidden
} }
} }
// Store an observation // Store an observation
// Authorization: ORGANIZATION ADMIN, OBSERVER or SUPERUSER // Authorization: ORGANIZATION ADMIN, OBSERVER or SUPERUSER
else if(action.equals("observationFormSubmit")) else if (action.equals("observationFormSubmit")) {
{ if (userBean.authorizeUser(user, VipsLogicRole.OBSERVER, VipsLogicRole.ORGANIZATION_ADMINISTRATOR,
if(userBean.authorizeUser(user, VipsLogicRole.OBSERVER, VipsLogicRole.ORGANIZATION_ADMINISTRATOR, VipsLogicRole.SUPERUSER)) VipsLogicRole.SUPERUSER)) {
{ try {
try Map<String, String[]> parameterMap;
{
Map<String,String[]> parameterMap;
List<FileItem> items = null; List<FileItem> items = null;
if(JakartaServletFileUpload.isMultipartContent(request)) if (JakartaServletFileUpload.isMultipartContent(request)) {
{
// Create a new file upload handler // Create a new file upload handler
DiskFileItemFactory dfif = DiskFileItemFactory.builder().get(); DiskFileItemFactory dfif = DiskFileItemFactory.builder().get();
JakartaServletFileUpload upload = new JakartaServletFileUpload(dfif); JakartaServletFileUpload upload = new JakartaServletFileUpload(dfif);
// Parse the request // Parse the request
items = upload.parseRequest(request); items = upload.parseRequest(request);
parameterMap = FormUtil.getParameterMap(items,"UTF-8"); parameterMap = FormUtil.getParameterMap(items, "UTF-8");
} } else {
else
{
parameterMap = request.getParameterMap(); parameterMap = request.getParameterMap();
} }
FormValidation formValidation = FormValidator.validateForm("observationForm", parameterMap, SessionLocaleUtil.getI18nBundle(request), getServletContext()); FormValidation formValidation = FormValidator.validateForm("observationForm", parameterMap,
SessionLocaleUtil.getI18nBundle(request), getServletContext());
Integer observationId = formValidation.getFormField("observationId").getValueAsInteger(); Integer observationId = formValidation.getFormField("observationId").getValueAsInteger();
Observation observation = observationId > 0 ? em.find(Observation.class, observationId) : new Observation(); Observation observation =
observationId > 0 ? em.find(Observation.class, observationId) : new Observation();
if(formValidation.isValid()) if (formValidation.isValid()) {
{
// Storing observation // Storing observation
// Only new observations can set the organism // Only new observations can set the organism
if(observationId <= 0 || user.isSuperUser() || user.isOrganizationAdmin()) if (observationId <= 0 || user.isSuperUser() || user.isOrganizationAdmin()) {
{ observation.setOrganism(em.find(Organism.class,
observation.setOrganism(em.find(Organism.class, formValidation.getFormField("organismId").getValueAsInteger())); formValidation.getFormField("organismId").getValueAsInteger()));
observation.setCropOrganism(em.find(Organism.class, formValidation.getFormField("cropOrganismId").getValueAsInteger())); observation.setCropOrganism(em.find(Organism.class,
formValidation.getFormField("cropOrganismId").getValueAsInteger()));
} }
observation.setTimeOfObservation(formValidation.getFormField("timeOfObservation").getValueAsTimestamp()); observation.setTimeOfObservation(
if(observationId <= 0) formValidation.getFormField("timeOfObservation").getValueAsTimestamp());
{ if (observationId <= 0) {
observation.setUserId(user.getUserId()); observation.setUserId(user.getUserId());
} } else {
else
{
observation.setLastEditedBy(user.getUserId()); observation.setLastEditedBy(user.getUserId());
} }
observation.setLastEditedTime(new Date()); observation.setLastEditedTime(new Date());
observation.setObservationHeading(formValidation.getFormField("observationHeading").getWebValue()); observation.setObservationHeading(
observation.setObservationText(formValidation.getFormField("observationText").getWebValue()); formValidation.getFormField("observationHeading").getWebValue());
observation.setObservationText(
formValidation.getFormField("observationText").getWebValue());
observation.setObservationData( observation.setObservationData(
formValidation.getFormField("observationData").getWebValue().isEmpty() ? formValidation.getFormField("observationData").getWebValue().isEmpty() ?
null null
: formValidation.getFormField("observationData").getWebValue() : formValidation.getFormField("observationData").getWebValue()
); );
observation.setIsPositive(formValidation.getFormField("isPositive").getWebValue() != null); observation.setIsPositive(formValidation.getFormField("isPositive").getWebValue() != null);
observation.setIsQuantified(formValidation.getFormField("isQuantified").getWebValue() != null); observation.setIsQuantified(
this.setObservationLocationVisibility(observation, formValidation.getFormField("locationVisibility").getWebValue()); formValidation.getFormField("isQuantified").getWebValue() != null);
observation.setBroadcastMessage(formValidation.getFormField("broadcastMessage").getWebValue() != null); this.setObservationLocationVisibility(observation,
formValidation.getFormField("locationVisibility").getWebValue());
observation.setBroadcastMessage(
formValidation.getFormField("broadcastMessage").getWebValue() != null);
boolean sendNotification = false; boolean sendNotification = false;
// Storing approval status // Storing approval status
if(userBean.authorizeUser(user, VipsLogicRole.OBSERVATION_AUTHORITY, VipsLogicRole.ORGANIZATION_ADMINISTRATOR, VipsLogicRole.SUPERUSER)) if (userBean.authorizeUser(user, VipsLogicRole.OBSERVATION_AUTHORITY,
{ VipsLogicRole.ORGANIZATION_ADMINISTRATOR, VipsLogicRole.SUPERUSER)) {
Integer statusTypeId = formValidation.getFormField("statusTypeId").getValueAsInteger(); Integer statusTypeId = formValidation.getFormField("statusTypeId").getValueAsInteger();
if( if (
observation.getStatusTypeId() == null observation.getStatusTypeId() == null
|| ! observation.getStatusTypeId().equals(statusTypeId) || !observation.getStatusTypeId().equals(statusTypeId)
) ) {
{
observation.setStatusChangedByUserId(user.getUserId()); observation.setStatusChangedByUserId(user.getUserId());
observation.setStatusChangedTime(SystemTime.getSystemTime()); observation.setStatusChangedTime(SystemTime.getSystemTime());
// Status changed to approved, sending notifications // Status changed to approved, sending notifications
if(statusTypeId.equals(Observation.STATUS_TYPE_ID_APPROVED) && observation.getBroadcastMessage()) if (statusTypeId.equals(
{ Observation.STATUS_TYPE_ID_APPROVED) && observation.getBroadcastMessage()) {
sendNotification = true; sendNotification = true;
} }
} }
observation.setStatusTypeId(statusTypeId); observation.setStatusTypeId(statusTypeId);
observation.setStatusRemarks(formValidation.getFormField("statusRemarks").getWebValue()); observation.setStatusRemarks(
} formValidation.getFormField("statusRemarks").getWebValue());
else if(observation.getStatusTypeId() == null) } else if (observation.getStatusTypeId() == null) {
{
observation.setStatusTypeId(Observation.STATUS_TYPE_ID_PENDING); observation.setStatusTypeId(Observation.STATUS_TYPE_ID_PENDING);
} }
//observation.setLocation(formValidation.getFormField("location").getValueAsPointWGS84()); //observation.setLocation(formValidation.getFormField("location").getValueAsPointWGS84());
//System.out.println(formValidation.getFormField("geoInfo").getWebValue()); //System.out.println(formValidation.getFormField("geoInfo").getWebValue());
observation.setLocationPointOfInterestId(formValidation.getFormField("locationPointOfInterestId").getValueAsInteger() > 0 ? observation.setLocationPointOfInterestId(
formValidation.getFormField("locationPointOfInterestId").getValueAsInteger() : null); formValidation.getFormField("locationPointOfInterestId").getValueAsInteger() > 0 ?
if(formValidation.getFormField("locationPointOfInterestId").getValueAsInteger() > 0) formValidation.getFormField("locationPointOfInterestId").getValueAsInteger() :
{ null);
observation.setLocationPointOfInterestId(formValidation.getFormField("locationPointOfInterestId").getValueAsInteger()); if (formValidation.getFormField("locationPointOfInterestId").getValueAsInteger() > 0) {
observation.setLocationPointOfInterestId(
formValidation.getFormField("locationPointOfInterestId").getValueAsInteger());
observation.setGeoinfo(null); observation.setGeoinfo(null);
} } else {
else
{
observation.setLocationPointOfInterestId(null); observation.setLocationPointOfInterestId(null);
observation.setGeoinfo(formValidation.getFormField("geoInfo").getWebValue()); observation.setGeoinfo(formValidation.getFormField("geoInfo").getWebValue());
} }
observation = observationBean.storeObservation(observation); observation = observationBean.storeObservation(observation);
// Image handling // Image handling
// Delete the current illustration // Delete the current illustration
String[] deleteIllustrations = parameterMap.get("deleteIllustration"); String[] deleteIllustrations = parameterMap.get("deleteIllustration");
if(deleteIllustrations != null && deleteIllustrations.length > 0) if (deleteIllustrations != null && deleteIllustrations.length > 0) {
{ observation =
observation = observationBean.deleteObservationIllustration(observation, deleteIllustrations); observationBean.deleteObservationIllustration(observation, deleteIllustrations);
} }
// Store the new illustration (replaces former illustration if not already deleted) // Store the new illustration (replaces former illustration if not already deleted)
if(items != null) if (items != null) {
{ for (FileItem item : items) {
for(FileItem item:items) if (!item.isFormField() && item.getSize() > 0) {
{
if(!item.isFormField() && item.getSize() > 0)
{
observation = observationBean.storeObservationIllustration(observation, item); observation = observationBean.storeObservationIllustration(observation, item);
} }
} }
} }
// Checking for organization groups // Checking for organization groups
observationBean.storeOrganizationGroupObservationIds(observation, formValidation.getFormField("organizationGroupId").getWebValues()); observationBean.storeOrganizationGroupObservationIds(observation,
formValidation.getFormField("organizationGroupId").getWebValues());
// All transactions finished, we can send notifications // All transactions finished, we can send notifications
// if conditions are met // if conditions are met
if(sendNotification && ! if (sendNotification && !
(System.getProperty("DISABLE_MESSAGING_SYSTEM") != null && System.getProperty("DISABLE_MESSAGING_SYSTEM").equals("true")) (System.getProperty("DISABLE_MESSAGING_SYSTEM") != null && System.getProperty(
) "DISABLE_MESSAGING_SYSTEM").equals("true"))
{ ) {
messagingBean.sendUniversalMessage(observation); messagingBean.sendUniversalMessage(observation);
} }
// Redirect to form // Redirect to form
response.sendRedirect(new StringBuilder(Globals.PROTOCOL + "://") response.sendRedirect(new StringBuilder(Globals.PROTOCOL + "://")
.append(ServletUtil.getServerName(request)) .append(ServletUtil.getServerName(request))
.append("/observation?action=editObservationForm&observationId=").append(observation.getObservationId()) .append("/observation?action=editObservationForm&observationId=")
.append("&messageKey=").append("observationStored").toString() .append(observation.getObservationId())
.append("&messageKey=").append("observationStored").toString()
); );
} } else {
else
{
// Redirect to form with error messages // Redirect to form with error messages
request.setAttribute("formValidation", formValidation); request.setAttribute("formValidation", formValidation);
request.setAttribute("observation", observation); request.setAttribute("observation", observation);
List<Organism> allOrganisms = em.createNamedQuery("Organism.findAll").getResultList(); List<Organism> allOrganisms = em.createNamedQuery("Organism.findAll").getResultList();
request.setAttribute("allOrganisms", allOrganisms); request.setAttribute("allOrganisms", allOrganisms);
// Hierarchy categories // Hierarchy categories
request.setAttribute("hierarchyCategories", organismBean.getHierarchyCategoryNames(SessionLocaleUtil.getCurrentLocale(request))); request.setAttribute("hierarchyCategories",
request.setAttribute("observationMethods", em.createNamedQuery("ObservationMethod.findAll", ObservationMethod.class).getResultList()); organismBean.getHierarchyCategoryNames(SessionLocaleUtil.getCurrentLocale(request)));
request.setAttribute("observationMethods",
em.createNamedQuery("ObservationMethod.findAll", ObservationMethod.class)
.getResultList());
request.getRequestDispatcher("/observationForm.ftl").forward(request, response); request.getRequestDispatcher("/observationForm.ftl").forward(request, response);
} }
} } catch (NullPointerException | NumberFormatException | FormValidationException |
catch(NullPointerException | NumberFormatException | FormValidationException | FileUploadException ex) FileUploadException ex) {
{
response.sendError(500, ExceptionUtil.getStackTrace(ex)); response.sendError(500, ExceptionUtil.getStackTrace(ex));
} } catch (Exception ex) {
catch(Exception ex)
{
ex.printStackTrace(); ex.printStackTrace();
response.sendError(500, ExceptionUtil.getStackTrace(ex)); response.sendError(500, ExceptionUtil.getStackTrace(ex));
} }
} } else {
else response.sendError(403, "Access not authorized"); // HTTP Forbidden
{
response.sendError(403,"Access not authorized"); // HTTP Forbidden
} }
} }
// Authorization: ORGANIZATION ADMIN, OBSERVER or SUPERUSER // Authorization: ORGANIZATION ADMIN, OBSERVER or SUPERUSER
else if(action.equals("deleteObservation")) else if (action.equals("deleteObservation")) {
{ if (userBean.authorizeUser(user, VipsLogicRole.OBSERVER, VipsLogicRole.ORGANIZATION_ADMINISTRATOR,
if(userBean.authorizeUser(user, VipsLogicRole.OBSERVER, VipsLogicRole.ORGANIZATION_ADMINISTRATOR, VipsLogicRole.SUPERUSER)) VipsLogicRole.SUPERUSER)) {
{ try {
try
{
Integer observationId = Integer.valueOf(request.getParameter("observationId")); Integer observationId = Integer.valueOf(request.getParameter("observationId"));
observationBean.deleteObservation(observationId); observationBean.deleteObservation(observationId);
// Redirect to list // Redirect to list
response.sendRedirect(new StringBuilder(Globals.PROTOCOL + "://") response.sendRedirect(new StringBuilder(Globals.PROTOCOL + "://")
.append(ServletUtil.getServerName(request)) .append(ServletUtil.getServerName(request))
.append("/observation") .append("/observation")
.append("?messageKey=").append("observationDeleted").toString() .append("?messageKey=").append("observationDeleted").toString()
); );
} } catch (NullPointerException | NumberFormatException ex) {
catch(NullPointerException | NumberFormatException ex)
{
response.sendError(500, ExceptionUtil.getStackTrace(ex)); response.sendError(500, ExceptionUtil.getStackTrace(ex));
} }
} } else {
else response.sendError(403, "Access not authorized"); // HTTP Forbidden
{
response.sendError(403,"Access not authorized"); // HTTP Forbidden
} }
} }
} } else if (request.getServletPath().endsWith("/map")) {
else if(request.getServletPath().endsWith("/map"))
{
// Only for superusers, organizationadmins and observation authorities // Only for superusers, organizationadmins and observation authorities
if(userBean.authorizeUser(user, if (userBean.authorizeUser(user,
VipsLogicRole.SUPERUSER, VipsLogicRole.ORGANIZATION_ADMINISTRATOR, VipsLogicRole.OBSERVATION_AUTHORITY) VipsLogicRole.SUPERUSER, VipsLogicRole.ORGANIZATION_ADMINISTRATOR, VipsLogicRole.OBSERVATION_AUTHORITY)
) ) {
{ try {
try FormValidation formValidation =
{ FormValidator.validateForm("observationMapForm", request, getServletContext());
FormValidation formValidation = FormValidator.validateForm("observationMapForm", request, getServletContext());
Organization organization = null; Organization organization = null;
if(user.isSuperUser()){ if (user.isSuperUser()) {
Integer organizationId = formValidation.getFormField("organizationId") != null ? Integer organizationId = formValidation.getFormField("organizationId") != null ?
formValidation.getFormField("organizationId").getValueAsInteger() formValidation.getFormField("organizationId").getValueAsInteger()
:user.getOrganizationId().getOrganizationId(); : user.getOrganizationId().getOrganizationId();
organization = em.find(Organization.class, organizationId); organization = em.find(Organization.class, organizationId);
request.setAttribute("organizations", userBean.getOrganizations()); request.setAttribute("organizations", userBean.getOrganizations());
request.setAttribute("organizationId", organizationId); request.setAttribute("organizationId", organizationId);
} } else {
else
{
organization = user.getOrganizationId(); organization = user.getOrganizationId();
request.setAttribute("organizationId", organization.getOrganizationId()); request.setAttribute("organizationId", organization.getOrganizationId());
} }
if(organization != null) if (organization != null) {
{ request.setAttribute("defaultMapCenter", organization.getDefaultMapCenter());
request.setAttribute("defaultMapCenter",organization.getDefaultMapCenter());
request.setAttribute("defaultMapZoom", organization.getDefaultMapZoom()); request.setAttribute("defaultMapZoom", organization.getDefaultMapZoom());
} }
...@@ -635,121 +591,115 @@ public class ObservationController extends HttpServlet { ...@@ -635,121 +591,115 @@ public class ObservationController extends HttpServlet {
// from: Default is start of year (jan 1st) // from: Default is start of year (jan 1st)
Date from; Date from;
Calendar cal = Calendar.getInstance(TimeZone.getDefault()); Calendar cal = Calendar.getInstance(TimeZone.getDefault());
if(!formValidation.getFormField("from").isEmpty()) if (!formValidation.getFormField("from").isEmpty()) {
{
from = formValidation.getFormField("from").getValueAsDate(); from = formValidation.getFormField("from").getValueAsDate();
} } else {
else
{
cal.setTime(SystemTime.getSystemTime()); cal.setTime(SystemTime.getSystemTime());
cal.set(cal.get(Calendar.YEAR), Calendar.JANUARY,1,0,0,0); cal.set(cal.get(Calendar.YEAR), Calendar.JANUARY, 1, 0, 0, 0);
from = cal.getTime(); from = cal.getTime();
} }
request.setAttribute("from", from); request.setAttribute("from", from);
// to // to
Date to; Date to;
if(!formValidation.getFormField("to").isEmpty()) if (!formValidation.getFormField("to").isEmpty()) {
{
to = formValidation.getFormField("to").getValueAsDate(); to = formValidation.getFormField("to").getValueAsDate();
} } else {
else
{
cal.setTime(SystemTime.getSystemTime()); cal.setTime(SystemTime.getSystemTime());
cal.set(cal.get(Calendar.YEAR), Calendar.DECEMBER,31,23,59,59); cal.set(cal.get(Calendar.YEAR), Calendar.DECEMBER, 31, 23, 59, 59);
to = cal.getTime(); to = cal.getTime();
} }
request.setAttribute("to", to); request.setAttribute("to", to);
request.setAttribute("periodDays", new DateUtil().getDaysBetween(from, to)); request.setAttribute("periodDays", new DateUtil().getDaysBetween(from, to));
// pestId // pestId
request.setAttribute("pestId", formValidation.getFormField("pestId").isEmpty() ? null : request.setAttribute("pestId", formValidation.getFormField("pestId").isEmpty() ? null :
formValidation.getFormField("pestId").getValueAsInteger() formValidation.getFormField("pestId").getValueAsInteger()
); );
// cropId // cropId
request.setAttribute("cropId", formValidation.getFormField("cropId").isEmpty() ? null : request.setAttribute("cropId", formValidation.getFormField("cropId").isEmpty() ? null :
formValidation.getFormField("cropId").getValueAsInteger() formValidation.getFormField("cropId").getValueAsInteger()
); );
// cropCategoryId // cropCategoryId
request.setAttribute("cropCategoryId", formValidation.getFormField("cropCategoryId").isEmpty() ? null : request.setAttribute("cropCategoryId",
formValidation.getFormField("cropCategoryId").isEmpty() ? null :
formValidation.getFormField("cropCategoryId").getValueAsInteger() formValidation.getFormField("cropCategoryId").getValueAsInteger()
); );
request.setAttribute("messageKey", request.getParameter("messageKey")); request.setAttribute("messageKey", request.getParameter("messageKey"));
request.getRequestDispatcher("/observationMap.ftl").forward(request, response); request.getRequestDispatcher("/observationMap.ftl").forward(request, response);
} } catch (FormValidationException | DateUtilException ex) {
catch(FormValidationException | DateUtilException ex)
{
response.sendError(500, ExceptionUtil.getStackTrace(ex)); response.sendError(500, ExceptionUtil.getStackTrace(ex));
} }
} } else {
else response.sendError(403, "Access not authorized"); // HTTP Forbidden
{
response.sendError(403,"Access not authorized"); // HTTP Forbidden
} }
} }
} }
public static final String LOCATION_VISIBILITY_FORM_VALUE_PRIVATE = "private"; public static final String LOCATION_VISIBILITY_FORM_VALUE_PRIVATE = "private";
public static final String LOCATION_VISIBILITY_FORM_VALUE_PUBLIC = "public"; public static final String LOCATION_VISIBILITY_FORM_VALUE_PUBLIC = "public";
public static final String LOCATION_VISIBILITY_FORM_VALUE_MASK_PREFIX = "mask_"; public static final String LOCATION_VISIBILITY_FORM_VALUE_MASK_PREFIX = "mask_";
private String getLocationVisibilityFormValue(Observation observation) private String getLocationVisibilityFormValue(Observation observation) {
{
// Private is private, no matter what // Private is private, no matter what
if(observation.getLocationIsPrivate()) if (observation.getLocationIsPrivate()) {
{
return ObservationController.LOCATION_VISIBILITY_FORM_VALUE_PRIVATE; return ObservationController.LOCATION_VISIBILITY_FORM_VALUE_PRIVATE;
} }
// Public can either be completely public or masked by a polygon layer // Public can either be completely public or masked by a polygon layer
// e.g. county borders // e.g. county borders
if(observation.getPolygonService() == null) if (observation.getPolygonService() == null) {
{
return ObservationController.LOCATION_VISIBILITY_FORM_VALUE_PUBLIC; return ObservationController.LOCATION_VISIBILITY_FORM_VALUE_PUBLIC;
} }
return ObservationController.LOCATION_VISIBILITY_FORM_VALUE_MASK_PREFIX + observation.getPolygonService().getPolygonServiceId(); return ObservationController.LOCATION_VISIBILITY_FORM_VALUE_MASK_PREFIX + observation.getPolygonService()
.getPolygonServiceId();
} }
private void setObservationLocationVisibility(Observation observation, String formValue) private void setObservationLocationVisibility(Observation observation, String formValue) {
{
// Private is private, no matter what // Private is private, no matter what
observation.setLocationIsPrivate(formValue.equals(ObservationController.LOCATION_VISIBILITY_FORM_VALUE_PRIVATE)); observation.setLocationIsPrivate(
formValue.equals(ObservationController.LOCATION_VISIBILITY_FORM_VALUE_PRIVATE));
observation.setPolygonService( observation.setPolygonService(
// If private or public, set no polygon service // If private or public, set no polygon service
formValue.equals(ObservationController.LOCATION_VISIBILITY_FORM_VALUE_PRIVATE) || formValue.equals(ObservationController.LOCATION_VISIBILITY_FORM_VALUE_PUBLIC) formValue.equals(ObservationController.LOCATION_VISIBILITY_FORM_VALUE_PRIVATE) || formValue.equals(
ObservationController.LOCATION_VISIBILITY_FORM_VALUE_PUBLIC)
? null ? null
// Otherwise, set selected polygon service // Otherwise, set selected polygon service
: em.find(PolygonService.class, Integer.valueOf(formValue.split("_")[1])) : em.find(PolygonService.class, Integer.valueOf(formValue.split("_")[1]))
); );
} }
// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code."> // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
/**
/**
* Handles the HTTP <code>GET</code> method. * Handles the HTTP <code>GET</code> method.
* @param request servlet request *
* @param request servlet request
* @param response servlet response * @param response servlet response
* @throws ServletException if a servlet-specific error occurs * @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs * @throws IOException if an I/O error occurs
*/ */
@Override @Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { throws ServletException, IOException {
processRequest(request, response); processRequest(request, response);
} }
/** /**
* Handles the HTTP <code>POST</code> method. * Handles the HTTP <code>POST</code> method.
* @param request servlet request *
* @param request servlet request
* @param response servlet response * @param response servlet response
* @throws ServletException if a servlet-specific error occurs * @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs * @throws IOException if an I/O error occurs
*/ */
@Override @Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { throws ServletException, IOException {
processRequest(request, response); processRequest(request, response);
} }
/** /**
* Returns a short description of the servlet. * Returns a short description of the servlet.
*
* @return a String containing servlet description * @return a String containing servlet description
*/ */
@Override @Override
......
This diff is collapsed.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment