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

Added crop category selection in organismForm

parent fed7cf3c
Branches
Tags
No related merge requests found
/*
* Copyright (c) 2014 NIBIO <http://www.nibio.no/>.
* Copyright (c) 2016 NIBIO <http://www.nibio.no/>.
*
* This file is part of VIPSLogic.
* VIPSLogic is free software: you can redistribute it and/or modify
......@@ -20,8 +20,11 @@
package no.nibio.vips.logic.controller.servlet;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.servlet.ServletException;
......@@ -32,6 +35,7 @@ import no.nibio.vips.logic.entity.CropPest;
import no.nibio.vips.logic.entity.Organism;
import no.nibio.vips.logic.entity.OrganismExternalResource;
import no.nibio.vips.logic.entity.OrganismExternalResourcePK;
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.util.ExceptionUtil;
......@@ -43,7 +47,7 @@ import no.nibio.web.forms.FormValidationException;
import no.nibio.web.forms.FormValidator;
/**
* @copyright 2014 <a href="http://www.nibio.no/">NIBIO</a>
* @copyright 2016 <a href="http://www.nibio.no/">NIBIO</a>
* @author Tor-Einar Skog <tor-einar.skog@nibio.no>
*/
public class OrganismController extends HttpServlet {
......@@ -62,7 +66,7 @@ public class OrganismController extends HttpServlet {
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
String action = request.getParameter("action");
VipsLogicUser user = (VipsLogicUser) request.getSession().getAttribute("user");
// Default: View top organisms
// for everyone
if(action == null || action.equals("listChildOrganisms"))
......@@ -137,10 +141,10 @@ public class OrganismController extends HttpServlet {
{
try
{
Integer organismId = Integer.valueOf(request.getParameter("organismId"));
Organism organism = em.find(Organism.class, organismId);
request.setAttribute("organism", organism);
// Hierarchy categories
request.setAttribute("hierarchyCategories", SessionControllerGetter.getOrganismBean().getHierarchyCategoryNames(SessionLocaleUtil.getCurrentLocale(request)));
request.setAttribute("parentOrganism", organism.getParentOrganismId() != null ? em.find(Organism.class, organism.getParentOrganismId()) : null);
......@@ -166,6 +170,10 @@ public class OrganismController extends HttpServlet {
Integer organismId = Integer.valueOf(request.getParameter("organismId"));
Organism organism = em.find(Organism.class, organismId);
request.setAttribute("organism", organism);
if(organism.getIsCrop())
{
request.setAttribute("cropCategories", SessionControllerGetter.getOrganismBean().getCropCategories(user.getOrganizationId().getOrganizationId()));
}
// All organisms used for parent organism list
List<Organism> allOrganisms = em.createNamedQuery("Organism.findAll").getResultList();
request.setAttribute("allOrganisms", allOrganisms);
......@@ -228,6 +236,17 @@ public class OrganismController extends HttpServlet {
SessionLocaleUtil.getCurrentLocale(request)
);
Set<Integer> cropCategoryIds = null;
if(formValidation.getFormField("cropCategoryIds").getWebValues() != null)
{
cropCategoryIds = new HashSet<>();
for(String idStr:formValidation.getFormField("cropCategoryIds").getWebValues())
{
cropCategoryIds.add(Integer.valueOf(idStr));
}
}
SessionControllerGetter.getOrganismBean().storeOrganismCropCategories(user.getOrganizationId().getOrganizationId(), organism, cropCategoryIds);
//System.out.println(formValidation.getFormFields().toString());
Map<String, FormField> externalResourceIdentifiers = formValidation.getMultipleMapFormFields().get("externalResourceIdentifier");
for(String key:externalResourceIdentifiers.keySet())
......@@ -247,6 +266,10 @@ public class OrganismController extends HttpServlet {
// Need to refresh organism after storing the external resources
Organism refreshedOrganism = em.find(Organism.class, organism.getOrganismId());
request.setAttribute("organism", refreshedOrganism);
if(refreshedOrganism.getIsCrop())
{
request.setAttribute("cropCategories", SessionControllerGetter.getOrganismBean().getCropCategories(user.getOrganizationId().getOrganizationId()));
}
request.setAttribute("allOrganisms", em.createNamedQuery("Organism.findAll").getResultList());
// Hierarchy categories
request.setAttribute("hierarchyCategories", SessionControllerGetter.getOrganismBean().getHierarchyCategoryNames(SessionLocaleUtil.getCurrentLocale(request)));
......
......@@ -25,8 +25,10 @@ import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
......@@ -370,4 +372,23 @@ public class OrganismBean {
);
return cropCategories;
}
public void storeOrganismCropCategories(Integer organizationId, Organism organism, Set<Integer> cropCategoryIds) {
List<CropCategory> cropCategories = this.getCropCategories(organizationId);
if(cropCategoryIds == null)
{
cropCategoryIds = new HashSet<>();
}
for(CropCategory cropCategory : cropCategories)
{
if(cropCategoryIds.contains(cropCategory.getCropCategoryId()))
{
cropCategory.addCropOrganismId(organism.getOrganismId());
}
else
{
cropCategory.removeCropOrganismId(organism.getOrganismId());
}
}
}
}
......@@ -21,6 +21,8 @@ package no.nibio.vips.logic.entity;
import com.fasterxml.jackson.annotation.JsonIgnore;
import java.io.Serializable;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
......@@ -174,4 +176,44 @@ public class CropCategory implements Serializable {
}
return null;
}
@JsonIgnore
public boolean containsCropOrganismId(Integer organismId)
{
if(this.getCropOrganismIds() == null)
{
return false;
}
for(Integer oId:this.getCropOrganismIds())
{
if(oId.equals(organismId))
{
return true;
}
}
return false;
}
public void addCropOrganismId(Integer organismId) {
Set<Integer> cropSet;
if(this.getCropOrganismIds() == null)
{
cropSet = new HashSet<>();
}
else
{
cropSet = new HashSet<>(Arrays.asList(this.getCropOrganismIds()));
}
cropSet.add(organismId);
this.setCropOrganismIds(cropSet.toArray(new Integer[cropSet.size()]));
}
public void removeCropOrganismId(Integer organismId) {
if(this.getCropOrganismIds() != null)
{
Set<Integer> cropSet = new HashSet<>(Arrays.asList(this.getCropOrganismIds()));
cropSet.remove(organismId);
this.setCropOrganismIds(cropSet.toArray(new Integer[cropSet.size()]));
}
}
}
......@@ -40,6 +40,12 @@
"dataType" : "STRING",
"required" : false
},
{
"name" : "cropCategoryIds",
"dataType" : "INTEGER",
"fieldType" : "SELECT_MULTIPLE",
"required" : false
},
{
"name" : "hierarchyCategoryId",
"dataType" : "INTEGER",
......
......@@ -24,14 +24,23 @@
</#if>
</#macro>
<#macro custom_js>
<script src="http://code.jquery.com/ui/1.10.3/jquery-ui.min.js"></script>
<script type="text/javascript" src="/js/3rdparty/chosen.jquery.min.js"></script>
<script src="/js/resourcebundle.js"></script>
<script src="/js/validateForm.js"></script>
<script type="text/javascript">
// Load main form definition (for validation)
loadFormDefinition("organismForm");
$(document).ready( function() {
// Activating chosen plugin
$(".chosen-select").chosen();
});
</script>
</#macro>
<#macro custom_css>
<link href="/css/3rdparty/chosen.min.css" rel="stylesheet" />
</#macro>
<#macro page_contents>
<div class="singleBlockContainer">
<#if organism.organismId?has_content>
......@@ -112,6 +121,18 @@
</label>
</div>
</div>
<#if (organism.isCrop?has_content && organism.isCrop == true)>
<div class="form-group">
<label for="cropCategoryIds">${i18nBundle.cropCategoryIds}</label>
<select class="form-control chosen-select" name="cropCategoryIds" onblur="validateField(this);" multiple="multiple">
<#if cropCategories?has_content >
<#list cropCategories as cropCategory>
<option value="${cropCategory.cropCategoryId}" <#if cropCategory.containsCropOrganismId(organism.organismId)>selected="selected"</#if>>${(cropCategory.getLocalName(currentLocale))!cropCategory.defaultName}</option>
</#list>
</#if>
</select>
</div>
</#if>
<fieldset>
<h3>${i18nBundle.externalResources}</h3>
<#if organism.organismExternalResourceSet?has_content>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment