You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by gp...@apache.org on 2008/08/14 00:43:59 UTC

svn commit: r685717 - in /myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval: referencing/strategy/ strategy/

Author: gpetracek
Date: Wed Aug 13 15:43:58 2008
New Revision: 685717

URL: http://svn.apache.org/viewvc?rev=685717&view=rev
Log:
minor fix and refactoring

Added:
    myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/referencing/strategy/AliasCompareStrategy.java
      - copied, changed from r677555, myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/referencing/strategy/AbstractAliasCompareStrategy.java
    myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/referencing/strategy/ELCompareStrategy.java
      - copied, changed from r677555, myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/referencing/strategy/AbstractELCompareStrategy.java
    myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/referencing/strategy/LocalCompareStrategy.java
      - copied, changed from r677555, myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/referencing/strategy/AbstractLocalCompareStrategy.java
Removed:
    myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/referencing/strategy/AbstractAliasCompareStrategy.java
    myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/referencing/strategy/AbstractELCompareStrategy.java
    myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/referencing/strategy/AbstractLocalCompareStrategy.java
Modified:
    myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/strategy/AbstractCompareStrategy.java

Copied: myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/referencing/strategy/AliasCompareStrategy.java (from r677555, myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/referencing/strategy/AbstractAliasCompareStrategy.java)
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/referencing/strategy/AliasCompareStrategy.java?p2=myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/referencing/strategy/AliasCompareStrategy.java&p1=myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/referencing/strategy/AbstractAliasCompareStrategy.java&r1=677555&r2=685717&rev=685717&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/referencing/strategy/AbstractAliasCompareStrategy.java (original)
+++ myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/referencing/strategy/AliasCompareStrategy.java Wed Aug 13 15:43:58 2008
@@ -40,7 +40,7 @@
  *
  * @author Gerhard Petracek
  */
-public class AbstractAliasCompareStrategy implements ReferencingStrategy {
+public class AliasCompareStrategy implements ReferencingStrategy {
     protected final Log logger = LogFactory.getLog(getClass());
 
     public boolean evalReferenceAndValidate(CrossValidationStorageEntry crossValidationStorageEntry, CrossValidationStorage crossValidationStorage, String validationTarget, AbstractCompareStrategy compareStrategy) {
@@ -182,7 +182,8 @@
         boolean violationFound = false;
 
         if (compareStrategy.isViolation(crossValidationStorageEntry.getConvertedObject(), validationTargetObject, crossValidationStorageEntry.getAnnotationEntry().getAnnotation())) {
-            compareStrategy.handleTargetViolation(crossValidationStorageEntry, null);
+            //TODO use compareStrategy#useTargetComponentToDisplayErrorMsg
+            compareStrategy.processTargetComponentAfterViolation(crossValidationStorageEntry, null);
 
             violationFound = true;
         }
@@ -210,7 +211,7 @@
             if (compareStrategy.isViolation(crossValidationStorageEntry.getConvertedObject(), validationTargetObject, crossValidationStorageEntry.getAnnotationEntry().getAnnotation())) {
                 violationFound = true;
 
-                compareStrategy.handleTargetViolation(crossValidationStorageEntry, entry);
+                compareStrategy.processTargetComponentAfterViolation(crossValidationStorageEntry, entry);
             }
             validationExecuted = true;
         }

Copied: myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/referencing/strategy/ELCompareStrategy.java (from r677555, myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/referencing/strategy/AbstractELCompareStrategy.java)
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/referencing/strategy/ELCompareStrategy.java?p2=myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/referencing/strategy/ELCompareStrategy.java&p1=myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/referencing/strategy/AbstractELCompareStrategy.java&r1=677555&r2=685717&rev=685717&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/referencing/strategy/AbstractELCompareStrategy.java (original)
+++ myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/referencing/strategy/ELCompareStrategy.java Wed Aug 13 15:43:58 2008
@@ -36,7 +36,7 @@
  *
  * @author Gerhard Petracek
  */
-public class AbstractELCompareStrategy implements ReferencingStrategy {
+public class ELCompareStrategy implements ReferencingStrategy {
     protected final Log logger = LogFactory.getLog(getClass());
 
     public boolean evalReferenceAndValidate(CrossValidationStorageEntry crossValidationStorageEntry, CrossValidationStorage crossValidationStorage, String validationTarget, AbstractCompareStrategy compareStrategy) {
@@ -67,12 +67,17 @@
 
             if (validationTargetEntry != null) {
                 tmpCrossValidationStorageEntry = new CrossValidationStorageEntry();
-                tmpCrossValidationStorageEntry.setComponent(validationTargetEntry.getComponent());
+                //TODO test
+                if (compareStrategy.useTargetComponentToDisplayErrorMsg(crossValidationStorageEntry)) {
+                    tmpCrossValidationStorageEntry.setComponent(validationTargetEntry.getComponent());
+                } else {
+                    tmpCrossValidationStorageEntry.setComponent(crossValidationStorageEntry.getComponent());
+                }
                 tmpCrossValidationStorageEntry.setConvertedObject(validationTargetEntry.getConvertedValue());
                 tmpCrossValidationStorageEntry.setValidationStrategy(compareStrategy);
             }
 
-            compareStrategy.handleTargetViolation(crossValidationStorageEntry, tmpCrossValidationStorageEntry);
+            compareStrategy.processTargetComponentAfterViolation(crossValidationStorageEntry, tmpCrossValidationStorageEntry);
 
             violationFound = true;
         }

Copied: myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/referencing/strategy/LocalCompareStrategy.java (from r677555, myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/referencing/strategy/AbstractLocalCompareStrategy.java)
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/referencing/strategy/LocalCompareStrategy.java?p2=myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/referencing/strategy/LocalCompareStrategy.java&p1=myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/referencing/strategy/AbstractLocalCompareStrategy.java&r1=677555&r2=685717&rev=685717&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/referencing/strategy/AbstractLocalCompareStrategy.java (original)
+++ myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/referencing/strategy/LocalCompareStrategy.java Wed Aug 13 15:43:58 2008
@@ -35,7 +35,7 @@
  *
  * @author Gerhard Petracek
  */
-public class AbstractLocalCompareStrategy implements ReferencingStrategy {
+public class LocalCompareStrategy implements ReferencingStrategy {
     protected final Log logger = LogFactory.getLog(getClass());
 
     public boolean evalReferenceAndValidate(CrossValidationStorageEntry crossValidationStorageEntry, CrossValidationStorage crossValidationStorage, String validationTarget, AbstractCompareStrategy compareStrategy) {
@@ -85,7 +85,7 @@
             tmpCrossValidationStorageEntry.setConvertedObject(validationTargetEntry.getConvertedValue());
             tmpCrossValidationStorageEntry.setValidationStrategy(compareStrategy);
 
-            compareStrategy.handleTargetViolation(crossValidationStorageEntry, tmpCrossValidationStorageEntry);
+            compareStrategy.processTargetComponentAfterViolation(crossValidationStorageEntry, tmpCrossValidationStorageEntry);
 
             violationFound = true;
         }

Modified: myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/strategy/AbstractCompareStrategy.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/strategy/AbstractCompareStrategy.java?rev=685717&r1=685716&r2=685717&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/strategy/AbstractCompareStrategy.java (original)
+++ myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/strategy/AbstractCompareStrategy.java Wed Aug 13 15:43:58 2008
@@ -21,9 +21,9 @@
 import org.apache.myfaces.extensions.validator.core.ProcessedInformationEntry;
 import org.apache.myfaces.extensions.validator.crossval.CrossValidationStorage;
 import org.apache.myfaces.extensions.validator.crossval.CrossValidationStorageEntry;
-import org.apache.myfaces.extensions.validator.crossval.referencing.strategy.AbstractAliasCompareStrategy;
-import org.apache.myfaces.extensions.validator.crossval.referencing.strategy.AbstractELCompareStrategy;
-import org.apache.myfaces.extensions.validator.crossval.referencing.strategy.AbstractLocalCompareStrategy;
+import org.apache.myfaces.extensions.validator.crossval.referencing.strategy.AliasCompareStrategy;
+import org.apache.myfaces.extensions.validator.crossval.referencing.strategy.ELCompareStrategy;
+import org.apache.myfaces.extensions.validator.crossval.referencing.strategy.LocalCompareStrategy;
 import org.apache.myfaces.extensions.validator.crossval.referencing.strategy.ReferencingStrategy;
 import org.apache.myfaces.extensions.validator.util.ClassUtils;
 import org.apache.myfaces.extensions.validator.util.ExtValUtils;
@@ -56,14 +56,15 @@
                 referencingStrategies.add(customReferencingStrategy);
             }
 
-            referencingStrategies.add(new AbstractELCompareStrategy());
-            referencingStrategies.add(new AbstractAliasCompareStrategy());
-            referencingStrategies.add(new AbstractLocalCompareStrategy());
+            referencingStrategies.add(new ELCompareStrategy());
+            referencingStrategies.add(new AliasCompareStrategy());
+            referencingStrategies.add(new LocalCompareStrategy());
         }
     }
 
     public void processCrossValidation(CrossValidationStorageEntry crossValidationStorageEntry, CrossValidationStorage crossValidationStorage) throws ValidatorException {
 
+        initValidation(crossValidationStorageEntry);
         String[] validationTargets = getValidationTargets(crossValidationStorageEntry.getAnnotationEntry().getAnnotation());
 
         for (String validationTarget : validationTargets) {
@@ -84,41 +85,49 @@
         return false;
     }
 
+    //TODO
     //has to be public for custom referencing strategies!!!
-    public void handleTargetViolation(CrossValidationStorageEntry crossValidationStorageEntry, CrossValidationStorageEntry entry) {
+    public final void processTargetComponentAfterViolation(CrossValidationStorageEntry entryOfSource, CrossValidationStorageEntry entryOfTarget) {
+        if(!handleTargetViolation(entryOfSource, entryOfTarget)) {
+            return;
+        }
+
         FacesContext facesContext = FacesContext.getCurrentInstance();
 
         //get validation error messages for the target component
-        String summary = getErrorMessageSummary(crossValidationStorageEntry.getAnnotationEntry().getAnnotation(), true);
-        String details = getErrorMessageDetails(crossValidationStorageEntry.getAnnotationEntry().getAnnotation(), true);
+        String summary = getErrorMessageSummary(entryOfSource.getAnnotationEntry().getAnnotation(), true);
+        String details = getErrorMessageDetails(entryOfSource.getAnnotationEntry().getAnnotation(), true);
 
         //validation target isn't bound to a component withing the current page (see validateFoundEntry, tryToValidateLocally and tryToValidateBindingOnly)
-        if (entry == null) {
-            entry = crossValidationStorageEntry;
+        if (entryOfTarget == null) {
+            entryOfTarget = entryOfSource;
         }
 
         FacesMessage message;
-        if (entry.getAnnotationEntry() != null) {
-            message = getTargetComponentErrorMessage(entry.getAnnotationEntry().getAnnotation(), summary, details);
+        if (entryOfTarget.getAnnotationEntry() != null) {
+            message = getTargetComponentErrorMessage(entryOfTarget.getAnnotationEntry().getAnnotation(), summary, details);
         } else {
             //TODO document possible side effects
             //due to a missing target annotation (see: tryToValidateLocally)
-            message = getTargetComponentErrorMessage(crossValidationStorageEntry.getAnnotationEntry().getAnnotation(), summary, details);
+            message = getTargetComponentErrorMessage(entryOfSource.getAnnotationEntry().getAnnotation(), summary, details);
         }
 
         if (message.getSummary() != null || message.getDetail() != null) {
-            facesContext.addMessage(entry.getComponent().getClientId(facesContext), message);
+            facesContext.addMessage(entryOfTarget.getComponent().getClientId(facesContext), message);
         }
     }
 
     //has to be public for custom referencing strategies!!!
-    public void processSourceComponentAfterViolation(CrossValidationStorageEntry crossValidationStorageEntry) {
+    public final void processSourceComponentAfterViolation(CrossValidationStorageEntry entryOfSource) {
+        if(!handleSourceViolation(entryOfSource)) {
+            return;
+        }
 
         //get validation error messages for the current component
-        String summary = getErrorMessageSummary(crossValidationStorageEntry.getAnnotationEntry().getAnnotation(), false);
-        String details = getErrorMessageDetails(crossValidationStorageEntry.getAnnotationEntry().getAnnotation(), false);
+        String summary = getErrorMessageSummary(entryOfSource.getAnnotationEntry().getAnnotation(), false);
+        String details = getErrorMessageDetails(entryOfSource.getAnnotationEntry().getAnnotation(), false);
 
-        FacesMessage message = getSourceComponentErrorMessage(crossValidationStorageEntry.getAnnotationEntry().getAnnotation(), summary, details);
+        FacesMessage message = getSourceComponentErrorMessage(entryOfSource.getAnnotationEntry().getAnnotation(), summary, details);
 
         if (message.getSummary() != null || message.getDetail() != null) {
             //TODO
@@ -193,8 +202,26 @@
     }
 
     /*
-     * recommended methods to override - have to be public for custom referencing strategies!!!
+     * optional methods - recommended to override - have to be public for custom referencing strategies!!!
      */
+    /**
+     * the usage of this method requires a new instance
+     * -> in case of validation strategy beans application/singleton isn't allowed
+     */
+    protected void initValidation(CrossValidationStorageEntry crossValidationStorageEntry) {
+    }
+
+    protected boolean handleTargetViolation(CrossValidationStorageEntry entryOfSource, CrossValidationStorageEntry entryOfTarget) {
+        return true;
+    }
+
+    protected boolean handleSourceViolation(CrossValidationStorageEntry entryOfSource) {
+        return true;
+    }
+
+    public boolean useTargetComponentToDisplayErrorMsg(CrossValidationStorageEntry crossValidationStorageEntry) {
+        return handleTargetViolation(crossValidationStorageEntry, null);
+    }
 
     /*
      * abstract methods
@@ -202,8 +229,6 @@
 
     protected abstract String getValidationErrorMsgKey(Annotation annotation, boolean isTargetComponent);
 
-    public abstract boolean useTargetComponentToDisplayErrorMsg(CrossValidationStorageEntry crossValidationStorageEntry);
-
     /*
      * implements the specific validation logic
      */