NIHVIVO-3428 removed sort fields from object property editing form

This commit is contained in:
brianjlowe 2011-12-05 16:38:53 +00:00
parent 45d217e579
commit 654f5b6efb
2 changed files with 232 additions and 230 deletions

View file

@ -45,16 +45,16 @@ import edu.cornell.mannlib.vitro.webapp.dao.OntologyDao;
import edu.cornell.mannlib.vitro.webapp.dao.VClassDao;
public class PropertyRetryController extends BaseEditController {
private static final Log log = LogFactory.getLog(PropertyRetryController.class.getName());
private static final Log log = LogFactory.getLog(PropertyRetryController.class.getName());
@Override
public void doPost (HttpServletRequest req, HttpServletResponse response) {
public void doPost (HttpServletRequest req, HttpServletResponse response) {
if (!isAuthorizedToDisplayPage(req, response, new Actions(new EditOntology()))) {
return;
return;
}
VitroRequest request = new VitroRequest(req);
VitroRequest request = new VitroRequest(req);
//create an EditProcessObject for this and put it in the session
EditProcessObject epo = super.createEpo(request);
@ -140,53 +140,15 @@ public class PropertyRetryController extends BaseEditController {
log.error("PropertyRetryController could not find the getPropertyByURI method in the PropertyWebappDao");
}
FormObject foo = new FormObject();
foo.setErrorMap(epo.getErrMsgMap());
foo.setErrorMap(epo.getErrMsgMap());
HashMap<String, List<Option>> optionMap = new HashMap<String, List<Option>>();
try {
List<Option> namespaceIdList = FormUtils.makeOptionListFromBeans(ontDao.getAllOntologies(),"URI","Name", ((propertyForEditing.getNamespace()==null) ? "" : propertyForEditing.getNamespace()), null, (propertyForEditing.getNamespace()!=null));
namespaceIdList.add(0, new Option(request.getFullWebappDaoFactory().getDefaultNamespace(),"default"));
optionMap.put("Namespace", namespaceIdList);
List<Option> namespaceIdInverseList = FormUtils.makeOptionListFromBeans(ontDao.getAllOntologies(),"URI","Name", ((propertyForEditing.getNamespaceInverse()==null) ? "" : propertyForEditing.getNamespaceInverse()), null, (propertyForEditing.getNamespaceInverse()!=null));
namespaceIdInverseList.add(new Option(request.getFullWebappDaoFactory().getDefaultNamespace(),"default"));
optionMap.put("NamespaceInverse", namespaceIdInverseList);
List<ObjectProperty> objPropList = propDao.getAllObjectProperties();
Collections.sort(objPropList);
List<Option> parentIdList = FormUtils.makeOptionListFromBeans(objPropList,"URI","PickListName",propertyForEditing.getParentURI(),null);
HashMap<String,Option> hashMap = new HashMap<String,Option>();
parentIdList = getSortedList(hashMap,parentIdList);
parentIdList.add(0,new Option("-1","none (root property)", false));
optionMap.put("ParentURI", parentIdList);
List<DataProperty> dpList = dpDao.getAllDataProperties();
Collections.sort(dpList);
List<Option> objectIndividualSortPropertyList = FormUtils.makeOptionListFromBeans(dpList,"URI","Name",propertyForEditing.getObjectIndividualSortPropertyURI(),null);
objectIndividualSortPropertyList.add(0,new Option("","- select data property -"));
optionMap.put("ObjectIndividualSortPropertyURI",objectIndividualSortPropertyList);
List<Option> domainOptionList = FormUtils.makeVClassOptionList(request.getFullWebappDaoFactory(), propertyForEditing.getDomainVClassURI());
if (propertyForEditing.getDomainVClass() != null
&& propertyForEditing.getDomainVClass().isAnonymous()) {
domainOptionList.add(0, new Option(
propertyForEditing.getDomainVClass().getURI(),
propertyForEditing.getDomainVClass().getName(),
true));
}
domainOptionList.add(0, new Option("","(none specified)"));
optionMap.put("DomainVClassURI", domainOptionList);
List<Option> rangeOptionList = FormUtils.makeVClassOptionList(request.getFullWebappDaoFactory(), propertyForEditing.getRangeVClassURI());
if (propertyForEditing.getRangeVClass() != null
&& propertyForEditing.getRangeVClass().isAnonymous()) {
rangeOptionList.add(0, new Option(
propertyForEditing.getRangeVClass().getURI(),
propertyForEditing.getRangeVClass().getName(),
true));
}
rangeOptionList.add(0, new Option("","(none specified)"));
optionMap.put("RangeVClassURI", rangeOptionList);
populateOptionMap(optionMap, propertyForEditing, request, ontDao, propDao);
} catch (Exception e) {
e.printStackTrace();
log.error(e, e);
throw new RuntimeException(e);
}
optionMap.put("HiddenFromDisplayBelowRoleLevelUsingRoleUri",RoleLevelOptionsSetup.getDisplayOptionsList(propertyForEditing));
@ -211,14 +173,14 @@ public class PropertyRetryController extends BaseEditController {
//checkboxes are pretty annoying : we don't know if someone *unchecked* a box, so we have to default to false on updates.
if (propertyForEditing.getURI() != null) {
propertyForEditing.setTransitive(false);
propertyForEditing.setSymmetric(false);
propertyForEditing.setFunctional(false);
propertyForEditing.setInverseFunctional(false);
propertyForEditing.setSelectFromExisting(false);
propertyForEditing.setOfferCreateNewOption(false);
propertyForEditing.setStubObjectRelation(false);
propertyForEditing.setCollateBySubclass(false);
propertyForEditing.setTransitive(false);
propertyForEditing.setSymmetric(false);
propertyForEditing.setFunctional(false);
propertyForEditing.setInverseFunctional(false);
propertyForEditing.setSelectFromExisting(false);
propertyForEditing.setOfferCreateNewOption(false);
propertyForEditing.setStubObjectRelation(false);
propertyForEditing.setCollateBySubclass(false);
}
epo.setFormObject(foo);
@ -227,7 +189,7 @@ public class PropertyRetryController extends BaseEditController {
RequestDispatcher rd = request.getRequestDispatcher(Controllers.BASIC_JSP);
request.setAttribute("bodyJsp","/templates/edit/formBasic.jsp");
request.setAttribute("colspan","5");
request.setAttribute("colspan","4");
request.setAttribute("formJsp","/templates/edit/specific/property_retry.jsp");
request.setAttribute("scripts","/templates/edit/formBasic.js");
request.setAttribute("title","Property Editing Form");
@ -247,15 +209,89 @@ public class PropertyRetryController extends BaseEditController {
public void doGet (HttpServletRequest request, HttpServletResponse response) {
doPost(request, response);
}
private void populateOptionMap(HashMap<String, List<Option>> optionMap,
ObjectProperty propertyForEditing,
VitroRequest request,
OntologyDao ontDao,
ObjectPropertyDao propDao) {
List<Option> namespaceIdList = FormUtils.makeOptionListFromBeans(
ontDao.getAllOntologies(), "URI", "Name",
((propertyForEditing.getNamespace() == null)
? ""
: propertyForEditing.getNamespace()),
null, (propertyForEditing.getNamespace() != null));
namespaceIdList.add(0, new Option(
request.getFullWebappDaoFactory().getDefaultNamespace(), "default"));
optionMap.put("Namespace", namespaceIdList);
List<Option> namespaceIdInverseList = FormUtils.makeOptionListFromBeans(
ontDao.getAllOntologies(), "URI", "Name",
((propertyForEditing.getNamespaceInverse() == null)
? ""
: propertyForEditing.getNamespaceInverse()),
null, (propertyForEditing.getNamespaceInverse() != null));
namespaceIdInverseList.add(0, new Option(
request.getFullWebappDaoFactory().getDefaultNamespace(),"default"));
optionMap.put("NamespaceInverse", namespaceIdInverseList);
List<ObjectProperty> objPropList = propDao.getAllObjectProperties();
Collections.sort(objPropList);
List<Option> parentIdList = FormUtils.makeOptionListFromBeans(
objPropList,"URI","PickListName",propertyForEditing.getParentURI(),null);
HashMap<String,Option> hashMap = new HashMap<String,Option>();
parentIdList = getSortedList(hashMap,parentIdList);
parentIdList.add(0,new Option("-1","none (root property)", false));
optionMap.put("ParentURI", parentIdList);
// List<DataProperty> dpList = dpDao.getAllDataProperties();
// Collections.sort(dpList);
// List<Option> objectIndividualSortPropertyList =
// FormUtils.makeOptionListFromBeans(
// dpList, "URI", "Name",
// propertyForEditing.getObjectIndividualSortPropertyURI(),
// null);
// objectIndividualSortPropertyList.add(0, new Option(
// "","- select data property -"));
// optionMap.put("ObjectIndividualSortPropertyURI",
// objectIndividualSortPropertyList);
List<Option> domainOptionList = FormUtils.makeVClassOptionList(
request.getFullWebappDaoFactory(),
propertyForEditing.getDomainVClassURI());
if (propertyForEditing.getDomainVClass() != null
&& propertyForEditing.getDomainVClass().isAnonymous()) {
domainOptionList.add(0, new Option(
propertyForEditing.getDomainVClass().getURI(),
propertyForEditing.getDomainVClass().getName(),
true));
}
domainOptionList.add(0, new Option("","(none specified)"));
optionMap.put("DomainVClassURI", domainOptionList);
List<Option> rangeOptionList = FormUtils.makeVClassOptionList(
request.getFullWebappDaoFactory(),
propertyForEditing.getRangeVClassURI());
if (propertyForEditing.getRangeVClass() != null
&& propertyForEditing.getRangeVClass().isAnonymous()) {
rangeOptionList.add(0, new Option(
propertyForEditing.getRangeVClass().getURI(),
propertyForEditing.getRangeVClass().getName(),
true));
}
rangeOptionList.add(0, new Option("","(none specified)"));
optionMap.put("RangeVClassURI", rangeOptionList);
}
private List<VClass> makeVClassListForOptions(String VClassURI, List<VClass> allClassBeanList, VClassDao vclassDao) {
List<VClass> currentClassList = new ArrayList<VClass>();
VClass currentVClass = vclassDao.getVClassByURI(VClassURI);
if (currentVClass != null && currentVClass.isAnonymous()) {
currentClassList.addAll(allClassBeanList);
currentClassList.add(0,currentVClass);
currentClassList.addAll(allClassBeanList);
currentClassList.add(0,currentVClass);
} else {
currentClassList = allClassBeanList;
currentClassList = allClassBeanList;
}
return currentClassList;
}
@ -279,23 +315,23 @@ public class PropertyRetryController extends BaseEditController {
}
public List<Option> getSortedList(HashMap<String,Option> hashMap, List<Option> optionList){
class ListComparator implements Comparator<String>{
@Override
public int compare(String str1, String str2) {
// TODO Auto-generated method stub
Collator collator = Collator.getInstance();
return collator.compare(str1, str2);
}
class ListComparator implements Comparator<String>{
@Override
public int compare(String str1, String str2) {
// TODO Auto-generated method stub
Collator collator = Collator.getInstance();
return collator.compare(str1, str2);
}
}
List<String> bodyVal = new ArrayList<String>();
List<Option> options = new ArrayList<Option>();
Iterator<Option> itr = optionList.iterator();
while(itr.hasNext()){
Option option = itr.next();
hashMap.put(option.getBody(),option);
List<String> bodyVal = new ArrayList<String>();
List<Option> options = new ArrayList<Option>();
Iterator<Option> itr = optionList.iterator();
while(itr.hasNext()){
Option option = itr.next();
hashMap.put(option.getBody(),option);
bodyVal.add(option.getBody());
}
@ -303,7 +339,7 @@ public class PropertyRetryController extends BaseEditController {
Collections.sort(bodyVal, new ListComparator());
ListIterator<String> itrStr = bodyVal.listIterator();
while(itrStr.hasNext()){
options.add(hashMap.get(itrStr.next()));
options.add(hashMap.get(itrStr.next()));
}
return options;
}

View file

@ -3,9 +3,9 @@
<%@ taglib prefix="form" uri="http://vitro.mannlib.cornell.edu/edit/tags" %>
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
<%-- colspan set to 5 in PropertyRetryController.java --%>
<%-- colspan set to 4 in PropertyRetryController.java --%>
<tr class="editformcell">
<td valign="top" colspan="2">
<td valign="top" colspan="1">
<b>Parent property</b><br/><br/>
<select name="ParentURI"><form:option name="ParentURI"/></select>
</td>
@ -36,7 +36,7 @@
</c:otherwise>
</c:choose>
</td>
<td style="vertical-align:bottom;" valign="bottom" colspan="2">
<td style="vertical-align:bottom;" valign="bottom" colspan="1">
<b>Local name for property*</b>
<c:choose>
<c:when test="${_action eq 'update'}">
@ -75,7 +75,7 @@
</c:otherwise>
</c:choose>
</td>
<td style="vertical-align:bottom;" valign="bottom" colspan="2">
<td style="vertical-align:bottom;" valign="bottom" colspan="1">
<b>Optional: Inverse property local name</b>
<c:choose>
<c:when test="${_action eq 'update'}">
@ -106,14 +106,14 @@
<b>Domain class</b><br />
<select name="DomainVClassURI"><form:option name="DomainVClassURI"/></select>
</td>
<td valign="top" colspan="3">
<td valign="top" colspan="2">
<b>Range class</b><br />
<select name="RangeVClassURI" ><form:option name="RangeVClassURI"/></select>
</td>
</tr>
<tr class="editformcell">
<td valign="top" colspan="5">
<td valign="top" colspan="4">
<b>Public Description</b> for front-end users, as it will appear on editing forms<br/>
<textarea name="PublicDescription"><form:value name="PublicDescription"/></textarea>
<c:set var="PublicDescriptionError"><form:error name="PublicDescription"/></c:set>
@ -123,7 +123,49 @@
</td>
</tr>
<tr class="editformcell">
<td valign="bottom" colspan="2">
<td valign="bottom" colspan="1">
<c:choose>
<c:when test="${transitive}">
<input name="Transitive" type="checkbox" value="TRUE" checked="checked"/>transitive
</c:when>
<c:otherwise>
<input name="Transitive" type="checkbox" value="TRUE"/>transitive
</c:otherwise>
</c:choose>
</td>
<td valign="bottom" colspan="1">
<c:choose>
<c:when test="${symmetric}">
<input name="Symmetric" type="checkbox" value="TRUE" checked="checked"/> symmetric
</c:when>
<c:otherwise>
<input name="Symmetric" type="checkbox" value="TRUE"/> symmetric
</c:otherwise>
</c:choose>
</td>
<td valign="bottom" colspan="1">
<c:choose>
<c:when test="${functional}">
<input name="Functional" type="checkbox" value="TRUE" checked="checked"/> functional
</c:when>
<c:otherwise>
<input name="Functional" type="checkbox" value="TRUE"/> functional
</c:otherwise>
</c:choose>
</td>
<td valign="bottom" colspan="1">
<c:choose>
<c:when test="${inverseFunctional}">
<input name="InverseFunctional" type="checkbox" value="TRUE" checked="checked"/> inverse functional
</c:when>
<c:otherwise>
<input name="InverseFunctional" type="checkbox" value="TRUE"/> inverse functional
</c:otherwise>
</c:choose>
</td>
</tr>
<tr class="editformcell">
<td valign="bottom" colspan="1">
<em>Optional: display tier for this property<br />
(<strong>lower</strong> numbers display first)</em><br/>
<input name="DomainDisplayTier" value="<form:value name="DomainDisplayTier"/>" style="width:15%;" />
@ -141,7 +183,7 @@
<span class="notice"><c:out value="${RangeDisplayTierError}"/></span>
</c:if>
</td>
<td valign="bottom" colspan="2">
<td valign="bottom" colspan="1">
<em>Related <strong>object individuals</strong> to display without collapsing<br />
(<strong>lower</strong> numbers display first)</em><br/>
<input name="DomainDisplayLimit" value="<form:value name="DomainDisplayLimit"/>" style="width:15%;" />
@ -150,165 +192,89 @@
<span class="notice"><c:out value="${DomainDisplayLimitError}"/></span>
</c:if>
</td>
</tr>
<tr class="editformcell">
<td valign="bottom" colspan="2">
&nbsp;</td>
<td valign="bottom" colspan="1">
<em>Optional: <strong>sort direction</strong><br />
(blank for ascending, &quot;desc&quot; for descending)</em><br/>
<input name="DomainEntitySortDirection" value="<form:value name="DomainEntitySortDirection"/>" />
<c:set var="DomainEntitySortDirectionError"><form:error name="DomainEntitySortDirection"/></c:set>
<c:if test="${!empty DomainEntitySortDirectionError}">
<span class="notice"><c:out value="${DomainEntitySortDirectionError}"/></span>
<em>Related <strong>object individuals of inverse property</strong> to display without collapsing</em><br />
(<strong>lower</strong> numbers display first)<br/>
<input name="RangeDisplayLimit" value="<form:value name="RangeDisplayLimit"/>" style="width:15%;" />
<c:set var="RangeDisplayLimitError"><form:error name="RangeDisplayLimit"/></c:set>
<c:if test="${!empty RangeDisplayLimitError}">
<span class="notice"><c:out value="${RangeDisplayLimitError}"/></span>
</c:if>
</td>
<td valign="bottom" colspan="2">
<em>Optional: <strong>data property</strong> by which to sort related individuals</em><br />
<select name="ObjectIndividualSortPropertyURI"><form:option name="ObjectIndividualSortPropertyURI"/></select>
</td>
</tr>
<tr class="editformcell">
<td valign="bottom" colspan="5">
<tr class="editformcell">
<td valign="bottom" colspan="1">
<c:choose>
<c:when test="${collateBySubclass}">
<input name="CollateBySubclass" type="checkbox" value="TRUE" checked="checked"/>collate by subclass
<input name="CollateBySubclass" type="checkbox" value="TRUE" checked="checked"/>collate by subclass
</c:when>
<c:otherwise>
<input name="CollateBySubclass" type="checkbox" value="TRUE"/>collate by subclass
</c:otherwise>
</c:choose>
</td>
</td>
<td valign="bottom" colspan="1">
<em><strong>Caution:</strong>delete object when statement deleted?</em><br />
<c:choose>
<c:when test="${stubObjectRelation}">
<input name="StubObjectRelation" type="checkbox" value="TRUE" checked="checked"/>stub object relation with force delete
</c:when>
<c:otherwise>
<input name="StubObjectRelation" type="checkbox" value="TRUE"/>stub object relation with force delete
</c:otherwise>
</c:choose>
</td>
<td valign="bottom" colspan="1">
<em>select from existing choices when adding statements?</em><br />
<c:choose>
<c:when test="${selectFromExisting}">
<input name="SelectFromExisting" type="checkbox" value="TRUE" checked="checked"/>provide selection
</c:when>
<c:otherwise>
<input name="SelectFromExisting" type="checkbox" value="TRUE"/>provide selection
</c:otherwise>
</c:choose>
</td>
<td valign="bottom" colspan="1">
<em>when adding a new statement, also offer option to create new individual?</em><br />
<c:choose>
<c:when test="${offerCreateNewOption}">
<input name="OfferCreateNewOption" type="checkbox" value="TRUE" checked="checked"/>offer create option
</c:when>
<c:otherwise>
<input name="OfferCreateNewOption" type="checkbox" value="TRUE"/>offer create option
</c:otherwise>
</c:choose>
</td>
</tr>
<tr class="editformcell">
<td valign="bottom" colspan="4">
<em>custom entry form</em><br />
<input name="CustomEntryForm" size="30" value="<form:value name="CustomEntryForm"/>" />
<c:set var="CustomEntryFormError"><form:error name="CustomEntryForm"/></c:set>
<c:if test="${!empty CustomEntryFormError}">
<span class="notice"><c:out value="${CustomEntryFormError}"/></span>
</c:if>
</td>
</tr>
<tr class="editformcell">
<td valign="bottom" colspan="1">
<c:choose>
<c:when test="${transitive}">
<input name="Transitive" type="checkbox" value="TRUE" checked="checked"/>transitive
</c:when>
<c:otherwise>
<input name="Transitive" type="checkbox" value="TRUE"/>transitive
</c:otherwise>
</c:choose>
</td>
<td valign="bottom" colspan="2">
<c:choose>
<c:when test="${symmetric}">
<input name="Symmetric" type="checkbox" value="TRUE" checked="checked"/> symmetric
</c:when>
<c:otherwise>
<input name="Symmetric" type="checkbox" value="TRUE"/> symmetric
</c:otherwise>
</c:choose>
</td>
<td valign="bottom" colspan="1">
<c:choose>
<c:when test="${functional}">
<input name="Functional" type="checkbox" value="TRUE" checked="checked"/> functional
</c:when>
<c:otherwise>
<input name="Functional" type="checkbox" value="TRUE"/> functional
</c:otherwise>
</c:choose>
</td>
<td valign="bottom" colspan="1">
<c:choose>
<c:when test="${inverseFunctional}">
<input name="InverseFunctional" type="checkbox" value="TRUE" checked="checked"/> inverse functional
</c:when>
<c:otherwise>
<input name="InverseFunctional" type="checkbox" value="TRUE"/> inverse functional
</c:otherwise>
</c:choose>
<td valign="bottom" colspan="4">
<b>Example</b><br />
<input name="Example" style="width:90%;" value="<form:value name="Example"/>" />
<c:set var="ExampleError"><form:error name="Example"/></c:set>
<c:if test="${!empty ExampleError}">
<span class="notice"><c:out value="${ExampleError}"/></span>
</c:if>
</td>
</tr>
<tr class="editformcell">
<td valign="bottom" colspan="2">
<em>custom entry form</em><br />
<input name="CustomEntryForm" size="30" value="<form:value name="CustomEntryForm"/>" />
<c:set var="CustomEntryFormError"><form:error name="CustomEntryForm"/></c:set>
<c:if test="${!empty CustomEntryFormError}">
<span class="notice"><c:out value="${CustomEntryFormError}"/></span>
</c:if>
</td>
<td valign="bottom" colspan="1">
<em><strong>Caution:</strong>delete object when statement deleted?</em><br />
<c:choose>
<c:when test="${stubObjectRelation}">
<input name="StubObjectRelation" type="checkbox" value="TRUE" checked="checked"/>stub object relation with force delete
</c:when>
<c:otherwise>
<input name="StubObjectRelation" type="checkbox" value="TRUE"/>stub object relation with force delete
</c:otherwise>
</c:choose>
</td>
<td valign="bottom" colspan="1">
<em>select from existing choices when adding statements?</em><br />
<c:choose>
<c:when test="${selectFromExisting}">
<input name="SelectFromExisting" type="checkbox" value="TRUE" checked="checked"/>provide selection
</c:when>
<c:otherwise>
<input name="SelectFromExisting" type="checkbox" value="TRUE"/>provide selection
</c:otherwise>
</c:choose>
</td>
<td valign="bottom" colspan="1">
<em>when adding a new statement, also offer option to create new individual?</em><br />
<c:choose>
<c:when test="${offerCreateNewOption}">
<input name="OfferCreateNewOption" type="checkbox" value="TRUE" checked="checked"/>offer create option
</c:when>
<c:otherwise>
<input name="OfferCreateNewOption" type="checkbox" value="TRUE"/>offer create option
</c:otherwise>
</c:choose>
</td>
</tr>
<tr class="editformcell">
<td valign="bottom" colspan="2">
&nbsp;
</td>
<td valign="bottom" colspan="1">
<em>Optional: <strong>inverse sort direction</strong><br />
(blank for ascending, &quot;desc&quot; for descending)</em><br/>
<input name="RangeEntitySortDirection" value="<form:value name="RangeEntitySortDirection"/>" />
<c:set var="RangeEntitySortDirectionError"><form:error name="RangeEntitySortDirection"/></c:set>
<c:if test="${!empty RangeEntitySortDirectionError}">
<span class="notice"><c:out value="${RangeEntitySortDirectionError}"/></span>
</c:if>
</td>
<td valign="bottom" colspan="2">
<em>Related <strong>object individuals of non-inverse property</strong> to display without collapsing</em><br />
(<strong>lower</strong> numbers display first)<br/>
<input name="RangeDisplayLimit" value="<form:value name="RangeDisplayLimit"/>" style="width:15%;" />
<c:set var="RangeDisplayLimitError"><form:error name="RangeDisplayLimit"/></c:set>
<c:if test="${!empty RangeDisplayLimitError}">
<span class="notice"><c:out value="${RangeDisplayLimitError}"/></span>
</c:if>
</td>
</tr>
<tr class="editformcell">
<td valign="bottom" colspan="5">
<b>Example</b><br />
<input name="Example" style="width:90%;" value="<form:value name="Example"/>" />
<c:set var="ExampleError"><form:error name="Example"/></c:set>
<c:if test="${!empty ExampleError}">
<span class="notice"><c:out value="${ExampleError}"/></span>
</c:if>
</td>
</tr>
<tr class="editformcell">
<td valign="bottom" colspan="5">
<b>Description</b> for ontology editors<br />
<textarea name="Description" style="width:90%;"><form:value name="Description"/></textarea>
<c:set var="DescriptionError"><form:error name="Description"/></c:set>
<c:if test="${!empty DescriptionError}">
<span class="notice"><c:out value="${DescriptionError}"/></span>
</c:if>
</td>
</tr>
<td valign="bottom" colspan="4">
<b>Description</b> for ontology editors<br />
<textarea name="Description" style="width:90%;"><form:value name="Description"/></textarea>
<c:set var="DescriptionError"><form:error name="Description"/></c:set>
<c:if test="${!empty DescriptionError}">
<span class="notice"><c:out value="${DescriptionError}"/></span>
</c:if>
</td>
</tr>