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 @@
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;
}
}
......@@ -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;
}
......
......@@ -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)
{
......
......@@ -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")
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment