]> git.aero2k.de Git - tmp/jakarta-migration.git/commitdiff
CSPACE-3718,CSPACE-5119: PersonValidatorHandler now extends ValidatorHandlerImpl...
authorAron Roberts <aron@socrates.berkeley.edu>
Thu, 3 May 2012 21:58:45 +0000 (14:58 -0700)
committerAron Roberts <aron@socrates.berkeley.edu>
Thu, 3 May 2012 21:58:45 +0000 (14:58 -0700)
services/common/src/main/java/org/collectionspace/services/common/document/ValidatorHandlerImpl.java
services/person/service/src/main/java/org/collectionspace/services/person/nuxeo/PersonValidatorHandler.java

index 7be27b6187fe7562ee0be098b30db890671980d5..eff2255e585fbd58c436aedc0ab778df863bdfae 100644 (file)
@@ -1,6 +1,5 @@
 package org.collectionspace.services.common.document;\r
 \r
-\r
 import org.collectionspace.services.common.context.MultipartServiceContext;\r
 import org.collectionspace.services.common.context.ServiceContext;\r
 import org.collectionspace.services.common.document.DocumentHandler.Action;\r
@@ -12,140 +11,142 @@ import org.slf4j.LoggerFactory;
  * The Class ValidatorHandlerImpl.\r
  */\r
 public abstract class ValidatorHandlerImpl<IT, OT> implements ValidatorHandler<IT, OT> {\r
-       \r
-    /** The logger. */\r
+\r
+    /**\r
+     * The logger.\r
+     */\r
     private final Logger logger = LoggerFactory.getLogger(ValidatorHandlerImpl.class);\r
-    \r
     private ServiceContext<IT, OT> ctx;\r
-    \r
+\r
     protected ServiceContext<IT, OT> getServiceContext() {\r
-       return ctx;\r
+        return ctx;\r
     }\r
-    \r
     // gets reset by calls to setServiceContext() method\r
     protected boolean enforceAsserts = true;\r
-    \r
+\r
     public boolean getEnforceAsserts() {\r
-               return enforceAsserts;\r
-       }\r
-\r
-       public void setEnforceAsserts(ServiceContext<IT, OT> ctx) {\r
-               Boolean disableAssertsAttr = ctx.getServiceBinding().isDisableAsserts();\r
-               if (disableAssertsAttr == null) {\r
-                       enforceAsserts = true;\r
-               } else {\r
-                       enforceAsserts = !disableAssertsAttr.booleanValue();\r
-               }\r
-       }\r
-\r
-       protected void setServiceContext(ServiceContext<IT, OT> ctx) {\r
-       this.ctx = ctx;\r
-       \r
+        return enforceAsserts;\r
     }\r
-    \r
+\r
+    public void setEnforceAsserts(ServiceContext<IT, OT> ctx) {\r
+        Boolean disableAssertsAttr = ctx.getServiceBinding().isDisableAsserts();\r
+        if (disableAssertsAttr == null) {\r
+            enforceAsserts = true;\r
+        } else {\r
+            enforceAsserts = !disableAssertsAttr.booleanValue();\r
+        }\r
+    }\r
+\r
+    protected void setServiceContext(ServiceContext<IT, OT> ctx) {\r
+        this.ctx = ctx;\r
+\r
+    }\r
+\r
     protected void CS_ASSERT(boolean expression, String errorMsg) throws AssertionError {\r
-       if (expression != true) {\r
-               if (errorMsg == null) {\r
-                       errorMsg = "Validation exception occurred in: " +\r
-                                       this.getClass().getName();\r
-               }\r
-               throw new AssertionError(errorMsg);\r
-       }\r
+        if (expression != true) {\r
+            if (errorMsg == null) {\r
+                errorMsg = "Validation exception occurred in: "\r
+                        + this.getClass().getName();\r
+            }\r
+            throw new AssertionError(errorMsg);\r
+        }\r
     }\r
-    \r
+\r
     protected void CS_ASSERT(boolean expression) throws AssertionError {\r
-       CS_ASSERT(expression, null);\r
+        CS_ASSERT(expression, null);\r
     }\r
-       \r
+\r
     private void init(ServiceContext<IT, OT> ctx) {\r
-       setEnforceAsserts(ctx);\r
-               setServiceContext(ctx);\r
+        setEnforceAsserts(ctx);\r
+        setServiceContext(ctx);\r
     }\r
-    \r
-       /* (non-Javadoc)\r
-        * @see org.collectionspace.services.common.document.ValidatorHandler#validate(org.collectionspace.services.common.document.DocumentHandler.Action, org.collectionspace.services.common.context.ServiceContext)\r
-        */\r
-       @Override\r
+\r
+    /*\r
+     * (non-Javadoc) @see\r
+     * org.collectionspace.services.common.document.ValidatorHandler#validate(org.collectionspace.services.common.document.DocumentHandler.Action,\r
+     * org.collectionspace.services.common.context.ServiceContext)\r
+     */\r
+    @Override\r
     public void validate(Action action, ServiceContext<IT, OT> ctx)\r
-               throws InvalidDocumentException {\r
-               init(ctx);\r
-               \r
-               switch (action) {\r
-                       case CREATE:\r
-                               handleCreate();\r
-                               break;\r
-                       case GET:\r
-                               handleGet();\r
-                               break;\r
-                       case GET_ALL:\r
-                               handleGetAll();\r
-                               break;\r
-                       case UPDATE:\r
-                               handleUpdate();\r
-                               break;\r
-                       case DELETE:\r
-                               handleDelete();\r
-                               break;\r
-                       default:\r
-                               throw new UnsupportedOperationException("ValidatorHandlerImpl: Unknow action = " +\r
-                                               action);\r
-               }       \r
+            throws InvalidDocumentException {\r
+        init(ctx);\r
+\r
+        switch (action) {\r
+            case CREATE:\r
+                handleCreate();\r
+                break;\r
+            case GET:\r
+                handleGet();\r
+                break;\r
+            case GET_ALL:\r
+                handleGetAll();\r
+                break;\r
+            case UPDATE:\r
+                handleUpdate();\r
+                break;\r
+            case DELETE:\r
+                handleDelete();\r
+                break;\r
+            default:\r
+                throw new UnsupportedOperationException("ValidatorHandlerImpl: Unknown action = "\r
+                        + action);\r
+        }\r
+    }\r
+\r
+    protected boolean enforceAsserts() {\r
+        return !ctx.getServiceBinding().isDisableAsserts();\r
     }\r
-       \r
-       protected boolean enforceAsserts() {\r
-               return !ctx.getServiceBinding().isDisableAsserts();\r
-       }\r
-       \r
+\r
     protected Object getCommonPart() {\r
-       Object result = null;           \r
-\r
-       try {\r
-               MultipartServiceContext multiPartCtx = (MultipartServiceContext) getServiceContext();\r
-               result = multiPartCtx.getInputPart(ctx.getCommonPartLabel(),\r
-                               getCommonPartClass());\r
-       } catch (Exception e) {\r
-               if (logger.isDebugEnabled() == true) {\r
-                       logger.debug("Could not extract common part from multipart input.", e);\r
-               }\r
-       }\r
-       \r
-       return result;          \r
-    }  \r
-       \r
+        Object result = null;\r
+\r
+        try {\r
+            MultipartServiceContext multiPartCtx = (MultipartServiceContext) getServiceContext();\r
+            result = multiPartCtx.getInputPart(ctx.getCommonPartLabel(),\r
+                    getCommonPartClass());\r
+        } catch (Exception e) {\r
+            if (logger.isDebugEnabled() == true) {\r
+                logger.debug("Could not extract common part from multipart input.", e);\r
+            }\r
+        }\r
+\r
+        return result;\r
+    }\r
+\r
     abstract protected Class<?> getCommonPartClass();\r
-    \r
-       /**\r
-        * Handle create.\r
-        *\r
-        * @param ctx the ctx\r
-        */\r
-       abstract protected void handleCreate() throws InvalidDocumentException;\r
-       \r
-       /**\r
-        * Handle get.\r
-        *\r
-        * @param ctx the ctx\r
-        */\r
-       abstract protected void handleGet() throws InvalidDocumentException;\r
-       \r
-       /**\r
-        * Handle get all.\r
-        *\r
-        * @param ctx the ctx\r
-        */\r
-       abstract protected void handleGetAll() throws InvalidDocumentException;\r
-       \r
-       /**\r
-        * Handle update.\r
-        *\r
-        * @param ctx the ctx\r
-        */\r
-       abstract protected void handleUpdate() throws InvalidDocumentException;\r
-\r
-       /**\r
-        * Handle delete.\r
-        *\r
-        * @param ctx the ctx\r
-        */\r
-       abstract protected void handleDelete() throws InvalidDocumentException; \r
+\r
+    /**\r
+     * Handle create.\r
+     *\r
+     * @param ctx the ctx\r
+     */\r
+    abstract protected void handleCreate() throws InvalidDocumentException;\r
+\r
+    /**\r
+     * Handle get.\r
+     *\r
+     * @param ctx the ctx\r
+     */\r
+    abstract protected void handleGet() throws InvalidDocumentException;\r
+\r
+    /**\r
+     * Handle get all.\r
+     *\r
+     * @param ctx the ctx\r
+     */\r
+    abstract protected void handleGetAll() throws InvalidDocumentException;\r
+\r
+    /**\r
+     * Handle update.\r
+     *\r
+     * @param ctx the ctx\r
+     */\r
+    abstract protected void handleUpdate() throws InvalidDocumentException;\r
+\r
+    /**\r
+     * Handle delete.\r
+     *\r
+     * @param ctx the ctx\r
+     */\r
+    abstract protected void handleDelete() throws InvalidDocumentException;\r
 }
\ No newline at end of file
index 0bfb7897b50701e52696cad8602b8f4dacc62c7b..b088b4e900620c07537178660ce03304a2fb03bc 100644 (file)
@@ -25,14 +25,11 @@ package org.collectionspace.services.person.nuxeo;
 import java.util.List;
 import java.util.regex.Pattern;
 import org.collectionspace.services.common.api.Tools;
-import org.collectionspace.services.person.PersonsCommon;
-import org.collectionspace.services.common.context.MultipartServiceContext;
-import org.collectionspace.services.common.context.ServiceContext;
-import org.collectionspace.services.common.document.DocumentHandler.Action;
 import org.collectionspace.services.common.document.InvalidDocumentException;
-import org.collectionspace.services.common.document.ValidatorHandler;
+import org.collectionspace.services.common.document.ValidatorHandlerImpl;
 import org.collectionspace.services.person.PersonTermGroup;
 import org.collectionspace.services.person.PersonTermGroupList;
+import org.collectionspace.services.person.PersonsCommon;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -44,83 +41,87 @@ import org.slf4j.LoggerFactory;
  *
  * $LastChangedRevision: $ $LastChangedDate: $
  */
-public class PersonValidatorHandler implements ValidatorHandler {
+public class PersonValidatorHandler extends ValidatorHandlerImpl {
 
     final Logger logger = LoggerFactory.getLogger(PersonValidatorHandler.class);
-    private static final Pattern shortIdBadPattern = Pattern.compile("[\\W]"); //.matcher(input).matches()
+    // 'Bad pattern' for shortIdentifiers matches any non-word characters
+    private static final Pattern SHORT_ID_BAD_PATTERN = Pattern.compile("[\\W]"); //.matcher(input).matches()
+    private static final String VALIDATION_ERROR = "The record payload was invalid. See log file for more details.";
+    private static final String SHORT_ID_BAD_CHARS_MSG =
+            "shortIdentifier must only contain standard word characters";
+    private static final String HAS_NO_TERMS_MSG =
+            "Authority items must contain at least one term.";
+    private static final String HAS_AN_EMPTY_TERM_MSG =
+            "Each term group in an authority item must contain "
+            + "a non-empty term name or "
+            + "a non-empty term display name.";
+    boolean invalid = false;
+    String msg = "";
 
     @Override
-    public void validate(Action action, ServiceContext ctx)
-            throws InvalidDocumentException {
-        if (logger.isDebugEnabled()) {
-            logger.debug("validate() action=" + action.name());
-        }
-
-        // Bail out if the validation action is for delete.
-        if (action.equals(Action.DELETE)) {
-            return;
-        }
-
-        try {
-            MultipartServiceContext mctx = (MultipartServiceContext) ctx;
-            PersonsCommon person = (PersonsCommon) mctx.getInputPart(mctx.getCommonPartLabel(),
-                    PersonsCommon.class);
-            String msg = "";
-            boolean invalid = false;
-
-            if (person != null) {      // No guarantee that there is a common part in every post/update.
-
-                // Validation occurring on both creates and updates
-
-                /*
-                 * String displayName = person.getDisplayName(); if
-                 * (!person.isDisplayNameComputed() && ((displayName == null) ||
-                 * displayName.trim().isEmpty())) { invalid = true; msg +=
-                 * "displayName must be non-null and non-blank if
-                 * displayNameComputed is false!"; }
-                 *
-                 */
+    protected Class getCommonPartClass() {
+        return PersonsCommon.class;
+    }
 
-                if (!containsAtLeastOneTerm(person)) {
-                    invalid = true;
-                    msg += "Authority items must contain at least one term.";
+    @Override
+    protected void handleCreate() throws InvalidDocumentException {
+        PersonsCommon person = (PersonsCommon) getCommonPart();
+        // No guarantee that there is a common part in every post/update.
+        if (person != null) {
+            try {
+                String shortId = person.getShortIdentifier();
+                if (shortId != null) {
+                    CS_ASSERT(shortIdentifierContainsOnlyValidChars(shortId), SHORT_ID_BAD_CHARS_MSG);
                 }
-
-                if (!allTermsContainNameOrDisplayName(person)) {
-                    invalid = true;
-                    msg += "Each term group in an authority item must contain "
-                            + "a non-empty term name or "
-                            + "a non-empty term display name.";
+                CS_ASSERT(containsAtLeastOneTerm(person), HAS_NO_TERMS_MSG);
+                CS_ASSERT(allTermsContainNameOrDisplayName(person), HAS_AN_EMPTY_TERM_MSG);
+            } catch (AssertionError e) {
+                if (logger.isErrorEnabled()) {
+                    logger.error(e.getMessage(), e);
                 }
+                throw new InvalidDocumentException(VALIDATION_ERROR, e);
+            }
+        }
+    }
 
-                // Validation specific to creates or updates
-                if (action.equals(Action.CREATE)) {
-
-                    // shortIdentifier value must contain only word characters
-                    String shortId = person.getShortIdentifier();
-                    if ((shortId != null) && (shortIdBadPattern.matcher(shortId).find())) {
-                        invalid = true;
-                        msg += "shortIdentifier must only contain standard word characters";
-                    }
+    @Override
+    protected void handleGet() throws InvalidDocumentException {
+    }
 
-                    // Note: Per CSPACE-2215, shortIdentifier values that are null (missing)
-                    // or the empty string are now legally accepted in create payloads.
-                    // In either of those cases, a short identifier will be synthesized from
-                    // a display name or supplied in another manner.
+    @Override
+    protected void handleGetAll() throws InvalidDocumentException {
+    }
 
-                } else if (action.equals(Action.UPDATE)) {
+    @Override
+    protected void handleUpdate() throws InvalidDocumentException {
+        PersonsCommon person = (PersonsCommon) getCommonPart();
+        // No guarantee that there is a common part in every post/update.
+        if (person != null) {
+            try {
+                // shortIdentifier is among a set of fields that are
+                // prevented from being changed on an update, and thus
+                // we don't need to check its value here.
+                CS_ASSERT(containsAtLeastOneTerm(person), HAS_NO_TERMS_MSG);
+                CS_ASSERT(allTermsContainNameOrDisplayName(person), HAS_AN_EMPTY_TERM_MSG);
+            } catch (AssertionError e) {
+                if (logger.isErrorEnabled()) {
+                    logger.error(e.getMessage(), e);
                 }
+                throw new InvalidDocumentException(VALIDATION_ERROR, e);
             }
+        }
+    }
 
-            if (invalid) {
-                logger.error(msg);
-                throw new InvalidDocumentException(msg);
-            }
-        } catch (InvalidDocumentException ide) {
-            throw ide;
-        } catch (Exception e) {
-            throw new InvalidDocumentException(e);
+    @Override
+    protected void handleDelete() throws InvalidDocumentException {
+    }
+
+    private boolean shortIdentifierContainsOnlyValidChars(String shortId) {
+        // Check whether any characters match the 'bad' pattern
+        if (SHORT_ID_BAD_PATTERN.matcher(shortId).find()) {
+            return false;
         }
+        return true;
     }
 
     private boolean containsAtLeastOneTerm(PersonsCommon person) {
@@ -139,11 +140,10 @@ public class PersonValidatorHandler implements ValidatorHandler {
         PersonTermGroupList termGroupList = person.getPersonTermGroupList();
         List<PersonTermGroup> termGroups = termGroupList.getPersonTermGroup();
         for (PersonTermGroup termGroup : termGroups) {
-            if (Tools.isBlank(termGroup.getTermName()) || Tools.isBlank(termGroup.getTermDisplayName()) ){
+            if (Tools.isBlank(termGroup.getTermName()) || Tools.isBlank(termGroup.getTermDisplayName()){
                 return false;
             }
         }
         return true;
     }
-    
 }