From 8822dc51ff46ef61918d86526095eb51cc2c5e76 Mon Sep 17 00:00:00 2001 From: brianjlowe Date: Wed, 23 Nov 2011 17:11:27 +0000 Subject: [PATCH] NIHVIVO-3352 improvements to validation in backend editing forms --- .../vedit/controller/EditFrontController.java | 103 ++++++++++-------- .../vedit/controller/OperationController.java | 1 + .../cornell/mannlib/vedit/util/FormUtils.java | 67 ------------ .../vedit/validator/impl/IntValidator.java | 4 +- .../edit/ClassgroupRetryController.java | 11 +- .../edit/DatapropRetryController.java | 2 +- .../edit/OntologyRetryController.java | 9 ++ .../edit/PropertyGroupRetryController.java | 9 ++ .../edit/PropertyRetryController.java | 7 +- .../controller/edit/VclassEditController.java | 2 +- .../edit/VclassRetryController.java | 6 +- .../AllClassGroupsListingController.java | 2 +- webapp/web/templates/edit/formBasic.jsp | 4 +- .../edit/specific/applicationBean_retry.jsp | 22 +++- .../edit/specific/classgroup_retry.jsp | 18 ++- .../edit/specific/dataprop_retry.jsp | 50 ++++++--- .../edit/specific/entity_retry_init.jsp | 7 +- .../edit/specific/externalIds_retry.jsp | 7 +- .../edit/specific/namespace_retry.jsp | 27 ----- .../edit/specific/ontology_retry.jsp | 14 ++- .../edit/specific/propertyGroup_retry.jsp | 9 +- .../edit/specific/property_retry.jsp | 100 +++++++++++------ .../templates/edit/specific/vclass_retry.jsp | 53 ++++++--- 23 files changed, 298 insertions(+), 236 deletions(-) delete mode 100644 webapp/web/templates/edit/specific/namespace_retry.jsp diff --git a/webapp/src/edu/cornell/mannlib/vedit/controller/EditFrontController.java b/webapp/src/edu/cornell/mannlib/vedit/controller/EditFrontController.java index 1efcd4595..f055a7b9a 100644 --- a/webapp/src/edu/cornell/mannlib/vedit/controller/EditFrontController.java +++ b/webapp/src/edu/cornell/mannlib/vedit/controller/EditFrontController.java @@ -16,7 +16,8 @@ import java.lang.reflect.InvocationTargetException; import java.io.IOException; /** - * This controller exists only so we can request different edit form controllers without having to have entries in web.xml for each. + * This controller exists only so we can request different edit form controllers + * without having to have entries in web.xml for each. * @author bjl23 * */ @@ -24,54 +25,62 @@ public class EditFrontController extends VitroHttpServlet { private static final Log log = LogFactory.getLog(EditFrontController.class.getName()); private static final String CONTROLLER_PKG = "edu.cornell.mannlib.vitro.webapp.controller.edit"; - public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { - try { - - String controllerName = request.getParameter("controller")+"RetryController"; - if (controllerName==null || controllerName.length()==0) { - log.error("doPost() found no controller parameter"); - } - Class controller = null; - Object controllerInstance = null; - try { - controller = Class.forName(CONTROLLER_PKG+"."+controllerName); - try { - controllerInstance = controller.getConstructor((Class[]) null).newInstance((Object[]) null); - ((HttpServlet)controllerInstance).init(getServletConfig()); - } catch (Exception e) { - log.error("doPost() could not instantiate specific controller "+controllerName); - } - } catch (ClassNotFoundException e){ - log.error("doPost() could not find controller "+CONTROLLER_PKG+"."+controllerName); - } - Class[] args = new Class[2]; - args[0] = HttpServletRequest.class; - args[1] = HttpServletResponse.class; - try { - Method meth = controller.getDeclaredMethod("doGet",args); - Object[] methArgs = new Object[2]; - methArgs[0] = request; - methArgs[1] = response; - try { - meth.invoke(controllerInstance,methArgs); - } catch (IllegalAccessException e) { - log.error("doPost() encountered IllegalAccessException on invoking "+controllerName); - } catch (InvocationTargetException e) { - log.error("doPost() encountered InvocationTargetException on invoking "+controllerName); - log.debug(e.getTargetException().getMessage()); - e.printStackTrace(); - } - - } catch (NoSuchMethodException e){ - log.error("could not find doPost() method in "+controllerName); - } - - } catch (Exception e) { - e.printStackTrace(); - } + public void doPost(HttpServletRequest request, + HttpServletResponse response) throws IOException, ServletException { + String controllerName = request.getParameter("controller")+"RetryController"; + if (controllerName==null || controllerName.length()==0) { + log.error("doPost() found no controller parameter"); + } + Class controller = null; + Object controllerInstance = null; + try { + controller = Class.forName(CONTROLLER_PKG+"."+controllerName); + try { + controllerInstance = controller.getConstructor( + (Class[]) null).newInstance((Object[]) null); + ((HttpServlet)controllerInstance).init(getServletConfig()); + } catch (Exception e) { + String errMsg = "doPost() could not instantiate specific " + + "controller " + controllerName; + log.error(errMsg, e); + throw new RuntimeException(errMsg, e); + } + } catch (ClassNotFoundException e){ + String errMsg = "doPost() could not find controller " + + CONTROLLER_PKG + "." + controllerName; + log.error(errMsg); + throw new RuntimeException(errMsg); + } + Class[] args = new Class[2]; + args[0] = HttpServletRequest.class; + args[1] = HttpServletResponse.class; + try { + Method meth = controller.getDeclaredMethod("doGet",args); + Object[] methArgs = new Object[2]; + methArgs[0] = request; + methArgs[1] = response; + try { + meth.invoke(controllerInstance,methArgs); + } catch (IllegalAccessException e) { + String errMsg = "doPost() encountered IllegalAccessException " + + "while invoking " + controllerName; + log.error(errMsg, e); + throw new RuntimeException(errMsg, e); + } catch (InvocationTargetException e) { + String errMsg = "doPost() encountered InvocationTargetException " + + "while invoking " + controllerName; + log.error(errMsg, e); + throw new RuntimeException(errMsg, e); + } + } catch (NoSuchMethodException e){ + log.error("could not find doPost() method in " + controllerName); + throw new RuntimeException("could not find doPost() method in " + + controllerName); + } } - public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { + public void doGet(HttpServletRequest request, + HttpServletResponse response) throws IOException, ServletException { doPost(request,response); } diff --git a/webapp/src/edu/cornell/mannlib/vedit/controller/OperationController.java b/webapp/src/edu/cornell/mannlib/vedit/controller/OperationController.java index 69a711856..29096400f 100644 --- a/webapp/src/edu/cornell/mannlib/vedit/controller/OperationController.java +++ b/webapp/src/edu/cornell/mannlib/vedit/controller/OperationController.java @@ -108,6 +108,7 @@ public class OperationController extends BaseEditController { //if validation failed, go back to the form controller if (!valid){ + epo.setAttribute("globalErrorMsg", "Please correct errors highlighted below."); retry(request, response, epo); return; } diff --git a/webapp/src/edu/cornell/mannlib/vedit/util/FormUtils.java b/webapp/src/edu/cornell/mannlib/vedit/util/FormUtils.java index 7a7607b34..4fcd84147 100644 --- a/webapp/src/edu/cornell/mannlib/vedit/util/FormUtils.java +++ b/webapp/src/edu/cornell/mannlib/vedit/util/FormUtils.java @@ -349,73 +349,6 @@ public class FormUtils { } } return null; - } - - /** - * Takes a bean and uses all of its setter methods to set null values - * @return - */ - public static Object nullBean(Object bean){ - Class cls = bean.getClass(); - Method[] meths = cls.getMethods(); - for (int i=0; i validatorList = new ArrayList(); + validatorList.add(new RequiredFieldValidator()); + epo.getValidatorMap().put("PublicName", validatorList); //make a postinsert pageforwarder that will send us to a new class's fetch screen epo.setPostInsertPageForwarder(new VclassGroupInsertPageForwarder()); diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/edit/DatapropRetryController.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/edit/DatapropRetryController.java index 6e766c945..a04658bb1 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/edit/DatapropRetryController.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/edit/DatapropRetryController.java @@ -143,7 +143,7 @@ public class DatapropRetryController extends BaseEditController { if (objectForEditing.getDomainClassURI() != null) { VClass domain = vreq.getWebappDaoFactory().getVClassDao() .getVClassByURI(objectForEditing.getDomainClassURI()); - if (domain.isAnonymous()) { + if (domain != null && domain.isAnonymous()) { domainOptionList.add(0, new Option( domain.getURI(), domain.getName(), diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/edit/OntologyRetryController.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/edit/OntologyRetryController.java index a814dda62..464777d6c 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/edit/OntologyRetryController.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/edit/OntologyRetryController.java @@ -4,6 +4,8 @@ package edu.cornell.mannlib.vitro.webapp.controller.edit; import java.io.IOException; import java.net.URLEncoder; +import java.util.ArrayList; +import java.util.List; import javax.servlet.RequestDispatcher; import javax.servlet.http.HttpServletRequest; @@ -18,6 +20,8 @@ import edu.cornell.mannlib.vedit.controller.BaseEditController; import edu.cornell.mannlib.vedit.forwarder.PageForwarder; import edu.cornell.mannlib.vedit.forwarder.impl.UrlForwarder; import edu.cornell.mannlib.vedit.util.FormUtils; +import edu.cornell.mannlib.vedit.validator.Validator; +import edu.cornell.mannlib.vedit.validator.impl.RequiredFieldValidator; import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.Actions; import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.usepages.EditOntology; import edu.cornell.mannlib.vitro.webapp.beans.Ontology; @@ -67,6 +71,11 @@ public class OntologyRetryController extends BaseEditController { action = "update"; log.error("using newBean"); } + + //validators + List validatorList = new ArrayList(); + validatorList.add(new RequiredFieldValidator()); + epo.getValidatorMap().put("URI", validatorList); //make a simple mask for the class's id Object[] simpleMaskPair = new Object[2]; diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/edit/PropertyGroupRetryController.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/edit/PropertyGroupRetryController.java index ee19b1c6e..4d4931e0d 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/edit/PropertyGroupRetryController.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/edit/PropertyGroupRetryController.java @@ -3,6 +3,8 @@ package edu.cornell.mannlib.vitro.webapp.controller.edit; import java.io.IOException; +import java.util.ArrayList; +import java.util.List; import javax.servlet.RequestDispatcher; import javax.servlet.http.HttpServletRequest; @@ -17,6 +19,8 @@ import edu.cornell.mannlib.vedit.controller.BaseEditController; import edu.cornell.mannlib.vedit.forwarder.PageForwarder; import edu.cornell.mannlib.vedit.forwarder.impl.UrlForwarder; import edu.cornell.mannlib.vedit.util.FormUtils; +import edu.cornell.mannlib.vedit.validator.Validator; +import edu.cornell.mannlib.vedit.validator.impl.RequiredFieldValidator; import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.Actions; import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.usepages.UseMiscellaneousAdminPages; import edu.cornell.mannlib.vitro.webapp.beans.PropertyGroup; @@ -75,6 +79,11 @@ public class PropertyGroupRetryController extends BaseEditController { } else { propertyGroupForEditing = (PropertyGroup) epo.getNewBean(); } + + //validators + List validatorList = new ArrayList(); + validatorList.add(new RequiredFieldValidator()); + epo.getValidatorMap().put("Name", validatorList); //make a postinsert pageforwarder that will send us to a new class's fetch screen epo.setPostInsertPageForwarder(new PropertyGroupInsertPageForwarder()); diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/edit/PropertyRetryController.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/edit/PropertyRetryController.java index 6ab953daa..52b8c8f8b 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/edit/PropertyRetryController.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/edit/PropertyRetryController.java @@ -27,6 +27,8 @@ import edu.cornell.mannlib.vedit.controller.BaseEditController; import edu.cornell.mannlib.vedit.forwarder.PageForwarder; import edu.cornell.mannlib.vedit.forwarder.impl.UrlForwarder; import edu.cornell.mannlib.vedit.util.FormUtils; +import edu.cornell.mannlib.vedit.validator.Validator; +import edu.cornell.mannlib.vedit.validator.impl.IntValidator; import edu.cornell.mannlib.vedit.validator.impl.XMLNameValidator; import edu.cornell.mannlib.vitro.webapp.auth.policy.bean.PropertyRestrictionListener; import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.Actions; @@ -114,7 +116,10 @@ public class PropertyRetryController extends BaseEditController { List localNameInverseValidatorList = new ArrayList(); localNameInverseValidatorList.add(new XMLNameValidator(true)); epo.getValidatorMap().put("LocalName", localNameValidatorList); - epo.getValidatorMap().put("LocalNameInverse", localNameInverseValidatorList); + epo.getValidatorMap().put("LocalNameInverse", localNameInverseValidatorList); + List displayRankValidatorList = new ArrayList(); + displayRankValidatorList.add(new IntValidator()); + epo.getValidatorMap().put("DisplayRank", displayRankValidatorList); //set up any listeners List changeListenerList = new ArrayList(); diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/edit/VclassEditController.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/edit/VclassEditController.java index fb3803888..9534a1a97 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/edit/VclassEditController.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/edit/VclassEditController.java @@ -215,7 +215,7 @@ public class VclassEditController extends BaseEditController { request.setAttribute("instantiable", instantiable); request.setAttribute("bodyJsp","/templates/edit/specific/classes_edit.jsp"); request.setAttribute("title","Class Control Panel"); - request.setAttribute("css", ""); + //request.setAttribute("css", ""); try { rd.forward(request, response); diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/edit/VclassRetryController.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/edit/VclassRetryController.java index eac004cdd..af086f830 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/edit/VclassRetryController.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/edit/VclassRetryController.java @@ -10,6 +10,7 @@ import java.util.LinkedList; import java.util.List; import javax.servlet.RequestDispatcher; +import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -176,9 +177,8 @@ public class VclassRetryController extends BaseEditController { try { rd.forward(request, response); } catch (Exception e) { - log.error("VclassRetryController could not forward to view."); - log.error(e.getMessage()); - log.error(e.getStackTrace()); + log.error("VclassRetryController could not forward to view.", e); + throw new RuntimeException(e); } } diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/edit/listing/AllClassGroupsListingController.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/edit/listing/AllClassGroupsListingController.java index 03e384c06..d430a9fa4 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/edit/listing/AllClassGroupsListingController.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/edit/listing/AllClassGroupsListingController.java @@ -43,7 +43,7 @@ public class AllClassGroupsListingController extends BaseEditController { results.add("XX"); results.add("Group"); results.add("display rank"); - results.add("XX"); + results.add(""); results.add("XX"); if (groups != null) { diff --git a/webapp/web/templates/edit/formBasic.jsp b/webapp/web/templates/edit/formBasic.jsp index 35b046464..672ba723c 100644 --- a/webapp/web/templates/edit/formBasic.jsp +++ b/webapp/web/templates/edit/formBasic.jsp @@ -35,7 +35,9 @@ - ${globalErrorMsg} + + ${globalErrorMsg} + diff --git a/webapp/web/templates/edit/specific/applicationBean_retry.jsp b/webapp/web/templates/edit/specific/applicationBean_retry.jsp index db545a2c7..f3af1cad1 100644 --- a/webapp/web/templates/edit/specific/applicationBean_retry.jsp +++ b/webapp/web/templates/edit/specific/applicationBean_retry.jsp @@ -13,7 +13,10 @@ " ${longField} maxlength="50" /> - + + + +