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 0dd526fecccc7521f3358f8a9d217bfb0ee92934..a9bf20bd46ed7937141b55920256cc261e78ef4d 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 @@ -19,7 +19,9 @@ package no.nibio.vips.logic.controller.session; +import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.node.ObjectNode; import java.io.File; import java.io.IOException; import java.util.ArrayList; @@ -28,8 +30,11 @@ import java.util.Calendar; import java.util.Date; import java.util.HashMap; import java.util.HashSet; +import java.util.Iterator; import java.util.List; import java.util.Map; +import java.util.Map.Entry; +import java.util.ResourceBundle; import java.util.Set; import java.util.stream.Collectors; import javax.ejb.Stateless; @@ -37,6 +42,7 @@ import javax.persistence.EntityManager; import javax.persistence.NoResultException; import javax.persistence.PersistenceContext; import javax.persistence.Query; +import javax.servlet.http.HttpServletRequest; import no.nibio.vips.logic.entity.CropCategory; import no.nibio.vips.logic.entity.Gis; import no.nibio.vips.logic.entity.Observation; @@ -49,8 +55,11 @@ import no.nibio.vips.logic.entity.Organization; import no.nibio.vips.logic.entity.PointOfInterest; import no.nibio.vips.logic.entity.PolygonService; import no.nibio.vips.logic.entity.VipsLogicUser; +import no.nibio.vips.logic.i18n.SessionLocaleUtil; import no.nibio.vips.logic.util.SessionControllerGetter; import no.nibio.vips.logic.util.SystemTime; +import no.nibio.vips.observationdata.ObservationDataSchema; +import no.nibio.vips.observationdata.ObservationDataSchemaPK; import org.apache.commons.fileupload.FileItem; import org.apache.commons.io.FilenameUtils; import org.wololo.geojson.Feature; @@ -180,7 +189,6 @@ public class ObservationBean { { retVal.setLastEditedByUser(em.find(VipsLogicUser.class, retVal.getLastEditedBy())); } - //ObservationDataSchema schema = } return retVal; } @@ -763,5 +771,55 @@ public class ObservationBean { .getResultList().stream() .forEach(obs -> em.remove(obs)); } + + /** + * Returns the appropriate observation data schema + * If no existing schema, returns the standard (Requring just a number) + * @param organizationId + * @param organismId + * @param httpServletRequest + * @return + */ + public ObservationDataSchema getObservationDataSchema(Integer organizationId, Integer organismId, HttpServletRequest httpServletRequest) + { + try + { + return em.createNamedQuery("ObservationDataSchema.findByPK", ObservationDataSchema.class) + .setParameter("organizationId", organizationId) + .setParameter("organismId", organismId) + .getSingleResult(); + + + } + catch(NoResultException ex) + { + System.out.println("Could not find schema for orgId " + organizationId + " and organismId " + organismId); + return this.getStandardSchema(organizationId); + } + } + + /** + * + * @param organizationId + * @return + */ + private ObservationDataSchema getStandardSchema(Integer organizationId){ + ObservationDataSchema retVal = new ObservationDataSchema(); + retVal.setDataSchema("{" + + "\"number\":{\"title\":\"Number\"}," + + "\"unit\":{\"title\":\"Unit\"}" + + "}"); + retVal.setDataModel("{" + + "\"number\":0," + + "\"unit\":\"Number\"" + + "}"); + ObservationDataSchemaPK pk = new ObservationDataSchemaPK(); + pk.setOrganismId(-1); + pk.setOrganizationId(organizationId); + retVal.setObservationDataSchemaPK(pk); + return retVal; + } + + } 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 e87c5a595f6cddb3a059223a273b70eb6480108b..a259508d363e7ad2880d85421e7dccd33cde6c1d 100755 --- a/src/main/java/no/nibio/vips/logic/entity/Observation.java +++ b/src/main/java/no/nibio/vips/logic/entity/Observation.java @@ -50,6 +50,7 @@ import no.nibio.vips.logic.util.GISEntityUtil; import no.nibio.vips.gis.GISUtil; import no.nibio.vips.logic.entity.rest.ObservationListItem; import no.nibio.vips.logic.util.StringJsonUserType; +import no.nibio.vips.observationdata.ObservationDataSchema; import org.hibernate.annotations.Type; import org.hibernate.annotations.TypeDef; import org.hibernate.annotations.TypeDefs; @@ -107,7 +108,7 @@ public class Observation implements Serializable, no.nibio.vips.observation.Obse private Boolean locationIsPrivate; private PolygonService polygonService; - private String observationDataSchema; + private ObservationDataSchema observationDataSchema; private VipsLogicUser user; // Transient private VipsLogicUser lastEditedByUser; // @@ -451,12 +452,12 @@ public class Observation implements Serializable, no.nibio.vips.observation.Obse } @Transient - public String getObservationDataSchema() + public ObservationDataSchema getObservationDataSchema() { - return this.observationDataSchema != null ? this.observationDataSchema : ""; + return this.observationDataSchema != null ? this.observationDataSchema : null; } - public void setObservationDataSchema(String observationDataSchema) + public void setObservationDataSchema(ObservationDataSchema observationDataSchema) { this.observationDataSchema = observationDataSchema; } 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 03b34a0fd35421f1616c4e45cc354bc45e00ba42..e8f504e4ca5921de6974c92358329ef129767d6f 100755 --- a/src/main/java/no/nibio/vips/logic/service/ObservationService.java +++ b/src/main/java/no/nibio/vips/logic/service/ObservationService.java @@ -360,6 +360,14 @@ public class ObservationService { ){ // Observation needs to be masked here as well, or does it create trouble for VIPSLogic observation admin? Observation o = SessionControllerGetter.getObservationBean().getObservation(observationId); + if(o == null) + { + return Response.status(Status.NOT_FOUND).build(); + } + // Which organization does this observation belong to? + VipsLogicUser observer = SessionControllerGetter.getUserBean().getVipsLogicUser(o.getUserId()); + o.setObservationDataSchema(SessionControllerGetter.getObservationBean().getObservationDataSchema(observer.getOrganizationId().getOrganizationId(), o.getOrganismId(), httpServletRequest)); + VipsLogicUser user = (VipsLogicUser) httpServletRequest.getSession().getAttribute("user"); if(user == null && userUUID != null) { diff --git a/src/main/java/no/nibio/vips/observationdata/ObservationDataService.java b/src/main/java/no/nibio/vips/observationdata/ObservationDataService.java index 137936753347fca97cc9d732fb3910c93875ef5b..37e72c293862242a343ec2c9b99fbbbcf92d62c5 100755 --- a/src/main/java/no/nibio/vips/observationdata/ObservationDataService.java +++ b/src/main/java/no/nibio/vips/observationdata/ObservationDataService.java @@ -55,6 +55,12 @@ public class ObservationDataService { + /** + * TODO Integrate with ObservationBean.getObservationDataSchema(...) + * @param organizationId + * @param organismId + * @return + */ @GET @Path("schema/{organizationId}/{organismId}") @Produces("application/json;charset=UTF-8")