Skip to content
Snippets Groups Projects
Commit c327f243 authored by Tor-Einar Skog's avatar Tor-Einar Skog
Browse files

Adding observationdataschema to observation entity (Transient)

parent 7964ce90
No related branches found
No related tags found
No related merge requests found
...@@ -19,7 +19,9 @@ ...@@ -19,7 +19,9 @@
package no.nibio.vips.logic.controller.session; package no.nibio.vips.logic.controller.session;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
...@@ -28,8 +30,11 @@ import java.util.Calendar; ...@@ -28,8 +30,11 @@ import java.util.Calendar;
import java.util.Date; import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Map.Entry;
import java.util.ResourceBundle;
import java.util.Set; import java.util.Set;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import javax.ejb.Stateless; import javax.ejb.Stateless;
...@@ -37,6 +42,7 @@ import javax.persistence.EntityManager; ...@@ -37,6 +42,7 @@ import javax.persistence.EntityManager;
import javax.persistence.NoResultException; import javax.persistence.NoResultException;
import javax.persistence.PersistenceContext; import javax.persistence.PersistenceContext;
import javax.persistence.Query; import javax.persistence.Query;
import javax.servlet.http.HttpServletRequest;
import no.nibio.vips.logic.entity.CropCategory; import no.nibio.vips.logic.entity.CropCategory;
import no.nibio.vips.logic.entity.Gis; import no.nibio.vips.logic.entity.Gis;
import no.nibio.vips.logic.entity.Observation; import no.nibio.vips.logic.entity.Observation;
...@@ -49,8 +55,11 @@ import no.nibio.vips.logic.entity.Organization; ...@@ -49,8 +55,11 @@ import no.nibio.vips.logic.entity.Organization;
import no.nibio.vips.logic.entity.PointOfInterest; import no.nibio.vips.logic.entity.PointOfInterest;
import no.nibio.vips.logic.entity.PolygonService; import no.nibio.vips.logic.entity.PolygonService;
import no.nibio.vips.logic.entity.VipsLogicUser; 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.SessionControllerGetter;
import no.nibio.vips.logic.util.SystemTime; 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.fileupload.FileItem;
import org.apache.commons.io.FilenameUtils; import org.apache.commons.io.FilenameUtils;
import org.wololo.geojson.Feature; import org.wololo.geojson.Feature;
...@@ -180,7 +189,6 @@ public class ObservationBean { ...@@ -180,7 +189,6 @@ public class ObservationBean {
{ {
retVal.setLastEditedByUser(em.find(VipsLogicUser.class, retVal.getLastEditedBy())); retVal.setLastEditedByUser(em.find(VipsLogicUser.class, retVal.getLastEditedBy()));
} }
//ObservationDataSchema schema =
} }
return retVal; return retVal;
} }
...@@ -763,5 +771,55 @@ public class ObservationBean { ...@@ -763,5 +771,55 @@ public class ObservationBean {
.getResultList().stream() .getResultList().stream()
.forEach(obs -> em.remove(obs)); .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;
}
} }
...@@ -50,6 +50,7 @@ import no.nibio.vips.logic.util.GISEntityUtil; ...@@ -50,6 +50,7 @@ import no.nibio.vips.logic.util.GISEntityUtil;
import no.nibio.vips.gis.GISUtil; import no.nibio.vips.gis.GISUtil;
import no.nibio.vips.logic.entity.rest.ObservationListItem; import no.nibio.vips.logic.entity.rest.ObservationListItem;
import no.nibio.vips.logic.util.StringJsonUserType; import no.nibio.vips.logic.util.StringJsonUserType;
import no.nibio.vips.observationdata.ObservationDataSchema;
import org.hibernate.annotations.Type; import org.hibernate.annotations.Type;
import org.hibernate.annotations.TypeDef; import org.hibernate.annotations.TypeDef;
import org.hibernate.annotations.TypeDefs; import org.hibernate.annotations.TypeDefs;
...@@ -107,7 +108,7 @@ public class Observation implements Serializable, no.nibio.vips.observation.Obse ...@@ -107,7 +108,7 @@ public class Observation implements Serializable, no.nibio.vips.observation.Obse
private Boolean locationIsPrivate; private Boolean locationIsPrivate;
private PolygonService polygonService; private PolygonService polygonService;
private String observationDataSchema; private ObservationDataSchema observationDataSchema;
private VipsLogicUser user; // Transient private VipsLogicUser user; // Transient
private VipsLogicUser lastEditedByUser; // private VipsLogicUser lastEditedByUser; //
...@@ -451,12 +452,12 @@ public class Observation implements Serializable, no.nibio.vips.observation.Obse ...@@ -451,12 +452,12 @@ public class Observation implements Serializable, no.nibio.vips.observation.Obse
} }
@Transient @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; this.observationDataSchema = observationDataSchema;
} }
......
...@@ -360,6 +360,14 @@ public class ObservationService { ...@@ -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 needs to be masked here as well, or does it create trouble for VIPSLogic observation admin?
Observation o = SessionControllerGetter.getObservationBean().getObservation(observationId); 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"); VipsLogicUser user = (VipsLogicUser) httpServletRequest.getSession().getAttribute("user");
if(user == null && userUUID != null) if(user == null && userUUID != null)
{ {
......
...@@ -55,6 +55,12 @@ public class ObservationDataService { ...@@ -55,6 +55,12 @@ public class ObservationDataService {
/**
* TODO Integrate with ObservationBean.getObservationDataSchema(...)
* @param organizationId
* @param organismId
* @return
*/
@GET @GET
@Path("schema/{organizationId}/{organismId}") @Path("schema/{organizationId}/{organismId}")
@Produces("application/json;charset=UTF-8") @Produces("application/json;charset=UTF-8")
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment