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

Observation data system Beta 3

parent fb8522ac
No related branches found
No related tags found
No related merge requests found
Showing
with 168 additions and 5 deletions
......@@ -102,6 +102,8 @@ public class ObservationController extends HttpServlet {
request.setAttribute("defaultMapZoom", user.getOrganizationId().getDefaultMapZoom());
List<Organism> allPests = em.createNamedQuery("Organism.findAllPests").getResultList();
request.setAttribute("allPests", allPests);
List<Organism> allCrops = em.createNamedQuery("Organism.findAllCrops").getResultList();
request.setAttribute("allCrops", allCrops);
// Hierarchy categories
request.setAttribute("hierarchyCategories", SessionControllerGetter.getOrganismBean().getHierarchyCategoryNames(SessionLocaleUtil.getCurrentLocale(request)));
request.setAttribute("observationMethods", em.createNamedQuery("ObservationMethod.findAll", ObservationMethod.class).getResultList());
......@@ -138,6 +140,8 @@ public class ObservationController extends HttpServlet {
request.setAttribute("defaultMapZoom", user.getOrganizationId().getDefaultMapZoom());
List<Organism> allPests = em.createNamedQuery("Organism.findAllPests").getResultList();
request.setAttribute("allPests", allPests);
List<Organism> allCrops = em.createNamedQuery("Organism.findAllCrops").getResultList();
request.setAttribute("allCrops", allCrops);
// Hierarchy categories
request.setAttribute("hierarchyCategories", SessionControllerGetter.getOrganismBean().getHierarchyCategoryNames(SessionLocaleUtil.getCurrentLocale(request)));
request.setAttribute("observationMethods", em.createNamedQuery("ObservationMethod.findAll", ObservationMethod.class).getResultList());
......@@ -181,6 +185,7 @@ public class ObservationController extends HttpServlet {
{
observation.setOrganism(em.find(Organism.class, formValidation.getFormField("organismId").getValueAsInteger()));
observation.setCropOrganism(em.find(Organism.class, formValidation.getFormField("cropOrganismId").getValueAsInteger()));
}
//observation.setDenominator(formValidation.getFormField("denominator").getValueAsInteger());
//observation.setObservationMethodId(em.find(ObservationMethod.class, formValidation.getFormField("observationMethodId").getWebValue()));
......@@ -190,6 +195,8 @@ public class ObservationController extends HttpServlet {
observation.setObservationHeading(formValidation.getFormField("observationHeading").getWebValue());
observation.setObservationText(formValidation.getFormField("observationText").getWebValue());
observation.setObservationData(formValidation.getFormField("observationData").getWebValue());
observation.setIsQuantified(formValidation.getFormField("isQuantified").getWebValue() != null);
observation.setBroadcastMessage(formValidation.getFormField("broadcastMessage").getWebValue() != null);
// Storing approval status
if(SessionControllerGetter.getUserBean().authorizeUser(user, VipsLogicRole.OBSERVATION_AUTHORITY, VipsLogicRole.SUPERUSER))
......
......@@ -161,4 +161,18 @@ public class ObservationBean {
Observation observation = em.find(Observation.class, observationId);
em.remove(observation);
}
public Object getBroadcastObservations(Integer organizationId) {
Organization organization= em.find(Organization.class, organizationId);
/*List<VipsLogicUser> users = em.createNamedQuery("VipsLogicUser.findByOrganizationId", VipsLogicUser.class)
.setParameter("organizationId", organization)
.getResultList();*/
List<Observation> retVal = this.getObservationsWithGeoInfo(em.createNamedQuery("Observation.findByOrganizationIdAndStatusTypeIdAndBroadcastMessage")
.setParameter("organizationId", organization)
.setParameter("statusTypeId", Observation.STATUS_TYPE_ID_APPROVED)
.getResultList());
return retVal;
}
}
......@@ -96,7 +96,7 @@ public class OrganismBean {
*/
public List<Organism> getTopLevelOrganisms()
{
List<Organism> retVal = em.createNativeQuery("SELECT * FROM Organism o WHERE o.parent_organism_id IS NULL", Organism.class).getResultList();
List<Organism> retVal = em.createNativeQuery("SELECT * FROM Organism o WHERE o.parent_organism_id IS NULL AND o.organism_id > 0", Organism.class).getResultList();
for(Organism organism: retVal)
{
List<Organism> children = em.createNamedQuery("Organism.findByParentOrganismId").setParameter("parentOrganismId", organism.getOrganismId()).getResultList();
......
......@@ -58,6 +58,7 @@ import org.hibernate.annotations.TypeDefs;
@NamedQuery(name = "Observation.findByObservationId", query = "SELECT o FROM Observation o WHERE o.observationId = :observationId"),
@NamedQuery(name = "Observation.findByUserId", query = "SELECT o FROM Observation o WHERE o.userId IN(:userId)"),
@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.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")
})
......@@ -67,6 +68,7 @@ public class Observation implements Serializable, no.nibio.vips.observation.Obse
private Integer observationId;
private Date timeOfObservation;
private Organism organism;
private Organism cropOrganism;
private Integer userId;
private List<Gis> geoinfo;
//private Double observedValue;
......@@ -80,6 +82,7 @@ public class Observation implements Serializable, no.nibio.vips.observation.Obse
private String statusRemarks;
private String observationData;
private Boolean isQuantified;
private Boolean broadcastMessage;
private GISUtil GISUtil;
......@@ -249,7 +252,7 @@ public class Observation implements Serializable, no.nibio.vips.observation.Obse
*/
@JoinColumn(name = "organism_id", referencedColumnName = "organism_id")
@ManyToOne
@JsonIgnore
//@JsonIgnore
public Organism getOrganism() {
return organism;
}
......@@ -260,7 +263,7 @@ public class Observation implements Serializable, no.nibio.vips.observation.Obse
public void setOrganism(Organism organism) {
this.organism = organism;
}
/*
@Override
@Transient
......@@ -380,6 +383,7 @@ public class Observation implements Serializable, no.nibio.vips.observation.Obse
*/
@Type(type = "StringJsonObject")
@Column(name = "observation_data")
@Override
public String getObservationData() {
return observationData;
}
......@@ -406,4 +410,40 @@ public class Observation implements Serializable, no.nibio.vips.observation.Obse
this.isQuantified = isQuantified;
}
/**
* @return the cropOrganism
*/
@JoinColumn(name = "crop_organism_id", referencedColumnName = "organism_id")
@ManyToOne
public Organism getCropOrganism() {
return cropOrganism;
}
/**
* @param cropOrganism the cropOrganism to set
*/
public void setCropOrganism(Organism cropOrganism) {
this.cropOrganism = cropOrganism;
}
@Transient
public Integer getCropOrganismId() {
return this.getCropOrganism() != null ? this.getCropOrganism().getOrganismId() : null;
}
/**
* @return the broadcastMessage
*/
@Column(name = "broadcast_message")
public Boolean getBroadcastMessage() {
return broadcastMessage;
}
/**
* @param broadcastMessage the broadcastMessage to set
*/
public void setBroadcastMessage(Boolean broadcastMessage) {
this.broadcastMessage = broadcastMessage;
}
}
......@@ -491,6 +491,37 @@ public class LogicService {
return Response.ok().entity(observations).build();
}
@GET
@Path("observation/{observationId}")
@Produces("application/json;charset=UTF-8")
public Response getObservation(@PathParam("observationId") Integer observationId){
return Response.ok().entity(SessionControllerGetter.getObservationBean().getObservation(observationId)).build();
}
/**
* Publicly available observations per organization
* @param organizationId
* @return APPROVED observations
*/
@GET
@Path("observation/list/{organizationId}")
@Produces("application/json;charset=UTF-8")
public Response getObservations(@PathParam("organizationId") Integer organizationId){
return Response.ok().entity(SessionControllerGetter.getObservationBean().getObservations(organizationId, Observation.STATUS_TYPE_ID_APPROVED)).build();
}
/**
* Publicly available observations per organization
* @param organizationId
* @return APPROVED observations
*/
@GET
@Path("observation/broadcast/list/{organizationId}")
@Produces("application/json;charset=UTF-8")
public Response getBroadcastObservations(@PathParam("organizationId") Integer organizationId){
return Response.ok().entity(SessionControllerGetter.getObservationBean().getBroadcastObservations(organizationId)).build();
}
/**
* Service available locally for cron jobs. Most useful on test servers
* @return
......
......@@ -327,3 +327,6 @@ allCategories=All categories
pending=Pending
approved=Approved
rejected=Rejected
isQuantified=Is quantified
missingInDatabase=Missing in database
broadcastMessage=Broadcast the message
......@@ -327,3 +327,6 @@ allCategories=All categories
pending=Pending
approved=Approved
rejected=Rejected
isQuantified=Is quantified
missingInDatabase=Missing in database
broadcastMessage=Broadcast the message
......@@ -326,3 +326,6 @@ allCategories=All categories
pending=Pending
approved=Approved
rejected=Rejected
isQuantified=Is quantified
missingInDatabase=Missing in database
broadcastMessage=Broadcast the message
......@@ -327,3 +327,6 @@ allCategories=Alle kategorier
pending=Venter
approved=Godkjent
rejected=Avsl\u00e5tt
isQuantified=Er kvantifisert
missingInDatabase=Ikke funnet i databasen
broadcastMessage=Kringkast denne meldingen
......@@ -327,3 +327,6 @@ allCategories=All categories
pending=Pending
approved=Approved
rejected=Rejected
isQuantified=Is quantified
missingInDatabase=Missing in database
broadcastMessage=Broadcast the message
......@@ -30,6 +30,13 @@
"required" : true,
"nullValue" : "-1"
},
{
"name" : "cropOrganismId",
"dataType" : "INTEGER",
"fieldType" : "SELECT_SINGLE",
"required" : true,
"nullValue" : "-1"
},
{
"name" : "timeOfObservation",
"dataType" : "TIMESTAMP",
......@@ -44,6 +51,16 @@
"required" : true,
"nullValue" : "{\"type\":\"FeatureCollection\",\"features\":[]}"
},
{
"name" : "isQuantified",
"dataType" : "STRING",
"required" : false
},
{
"name" : "broadcastMessage",
"dataType" : "STRING",
"required" : false
},
{
"name" : "observationData",
"dataType" : "STRING",
......
......@@ -545,7 +545,14 @@ function validizeField(inputEl, theForm)
return;
}
styleValid(theForm[inputEl.name]);
getValidationOutputEl(inputEl, theForm).innerHTML = "";
try
{
getValidationOutputEl(inputEl, theForm).innerHTML = "";
}
catch(e)
{
console.log(e.message);
}
}
/**
......
......@@ -122,7 +122,7 @@
<div class="row">
<div class="col-md-6">
<#assign formId = "observationForm">
<form id="${formId}" role="form" action="/observation?action=observationFormSubmit" method="POST" onsubmit="this['geoInfo'].value=getFeatures();try{mw.save();console.log(this['observationData']);this['observationData'].value=JSON.stringify(mw.toInspect);return validateForm(this);}catch(e){console.log(e.message);console.log(e);return false;}">
<form id="${formId}" role="form" action="/observation?action=observationFormSubmit" method="POST" onsubmit="this['geoInfo'].value=getFeatures();try{mw.save();this['observationData'].value=JSON.stringify(mw.toInspect);return validateForm(this);}catch(e){console.log(e.message);console.log(e);return false;}">
<!--form id="${formId}" role="form" action="/observation?action=observationFormSubmit" method="POST" onsubmit="this['geoInfo'].value=getFeatures();mw.save();console.log(this['observationData']);this['observationData'].value=JSON.stringify(mw.toInspect);return validateForm(this);"-->
<!--form id="${formId}" role="form" action="/observation?action=observationFormSubmit" method="POST" onsubmit="this['geoInfo'].value=getFeatures();mw.save();console.log(this['observationData']);this['observationData'].value=JSON.stringify(mw.toInspect);validateForm(this);return false;"-->
<input type="hidden" name="geoInfo" value=""/>
......@@ -134,6 +134,7 @@
<select class="form-control" name="organismId" <#if observation.organism?has_content>readonly="readonly"<#else>onchange="initObservationData(this.options[this.options.selectedIndex].value,organizationId);" onblur="validateField(this);"</#if>>
<option value="-1">${i18nBundle.pleaseSelect} ${i18nBundle.organism?lower_case}</option>
<option value="-10"<#if (observation.organism?has_content && observation.organism.organismId == -10)>selected="selected"</#if>>${i18nBundle.missingInDatabase}</option>
<#list allPests?sort_by("latinName") as organism>
<option value="${organism.organismId}"
<#if (observation.organism?has_content && observation.organism.organismId == organism.organismId)>selected="selected"</#if>
......@@ -142,6 +143,21 @@
</select>
<span class="help-block" id="${formId}_organismId_validation"></span>
</div>
<div class="form-group">
<label for="cropOrganismId">${i18nBundle.cropOrganismId}</label>
<select class="form-control" name="cropOrganismId" <#if observation.organism?has_content>readonly="readonly"<#else>onblur="validateField(this);"</#if>>
<option value="-1">${i18nBundle.pleaseSelect} ${i18nBundle.cropOrganismId?lower_case}</option>
<option value="-10"<#if (observation.cropOrganism?has_content && observation.cropOrganism.organismId == -10)>selected="selected"</#if>>${i18nBundle.missingInDatabase}</option>
<#list allCrops?sort_by("latinName") as cropOrganism>
<option value="${cropOrganism.organismId}"
<#if (observation.cropOrganism?has_content && observation.cropOrganism.organismId == cropOrganism.organismId)>selected="selected"</#if>
>${cropOrganism.latinName!""}/${cropOrganism.getLocalName(currentLocale.language)!""} (${hierarchyCategories.getName(cropOrganism.hierarchyCategoryId)})</option>
</#list>
</select>
<span class="help-block" id="${formId}_cropOrganismId_validation"></span>
</div>
<!--div class="form-group">
<label for="location">${i18nBundle.location}</label>
......@@ -153,6 +169,14 @@
<input type="datetime" class="form-control" name="timeOfObservation" placeholder="${i18nBundle.timeOfObservation}" value="${(observation.timeOfObservation?string("yyyy-MM-dd HH:mmZ"))!.now?string("yyyy-MM-dd HH:mmZ")}" onblur="validateField(this);" />
<span class="help-block" id="${formId}_timeOfObservation_validation"></span>
</div>
<div class="form-group">
<div class="checkbox">
<label>
<input type="checkbox" name="isQuantified"<#if observation.isQuantified?has_content && observation.isQuantified == false><#else>checked="checked"</#if>/>
</label>
${i18nBundle.isQuantified}
</div>
</div>
<div class="form-group">
<fieldset>
<legend>Observation data</legend>
......@@ -180,6 +204,14 @@
</select>
<span class="help-block" id="${formId}_observationMethodId_validation"></span>
</div-->
<div class="form-group">
<div class="checkbox">
<label>
<input type="checkbox" name="broadcastMessage"<#if observation.broadcastMessage?has_content && observation.broadcastMessage == false><#else>checked="checked"</#if>/>
</label>
${i18nBundle.broadcastMessage}
</div>
</div>
<div class="form-group">
<label for="observationHeading">${i18nBundle.observationHeading}</label>
<input type="text" class="form-control" name="observationHeading" placeholder="" value="${observation.observationHeading!""}" onblur="validateField(this);"/>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment