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/11/28 13:29:13 UTC

svn commit: r721452 - in /myfaces/extensions/validator/branches/jsf_1.1: core/src/main/java/org/apache/myfaces/extensions/validator/core/ core/src/main/java/org/apache/myfaces/extensions/validator/core/interceptor/ core/src/main/java/org/apache/myfaces...

Author: gpetracek
Date: Fri Nov 28 04:29:12 2008
New Revision: 721452

URL: http://svn.apache.org/viewvc?rev=721452&view=rev
Log:
refactoring cross validation

Modified:
    myfaces/extensions/validator/branches/jsf_1.1/core/src/main/java/org/apache/myfaces/extensions/validator/core/ExtValContext.java
    myfaces/extensions/validator/branches/jsf_1.1/core/src/main/java/org/apache/myfaces/extensions/validator/core/interceptor/DefaultValidationExceptionInterceptor.java
    myfaces/extensions/validator/branches/jsf_1.1/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/strategy/AbstractAnnotationValidationStrategy.java
    myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/baseval/strategy/JpaValidationStrategy.java
    myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/baseval/strategy/PatternStrategy.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
    myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/referencing/strategy/LocalCompareStrategy.java
    myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/strategy/AbstractCompareStrategy.java
    myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/strategy/AbstractCrossValidationStrategy.java
    myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/strategy/DateIsStrategy.java
    myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/util/CrossValidationUtils.java

Modified: myfaces/extensions/validator/branches/jsf_1.1/core/src/main/java/org/apache/myfaces/extensions/validator/core/ExtValContext.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/jsf_1.1/core/src/main/java/org/apache/myfaces/extensions/validator/core/ExtValContext.java?rev=721452&r1=721451&r2=721452&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/jsf_1.1/core/src/main/java/org/apache/myfaces/extensions/validator/core/ExtValContext.java (original)
+++ myfaces/extensions/validator/branches/jsf_1.1/core/src/main/java/org/apache/myfaces/extensions/validator/core/ExtValContext.java Fri Nov 28 04:29:12 2008
@@ -131,7 +131,7 @@
 
     public void addValidationExceptionInterceptor(ValidationExceptionInterceptor validationExceptionInterceptor)
     {
-        DefaultValidationExceptionInterceptor.addComponentInitializer(validationExceptionInterceptor);
+        DefaultValidationExceptionInterceptor.addValidationExceptionInterceptor(validationExceptionInterceptor);
     }
 
     public List<ProcessedInformationRecorder> getProcessedInformationRecorders()

Modified: myfaces/extensions/validator/branches/jsf_1.1/core/src/main/java/org/apache/myfaces/extensions/validator/core/interceptor/DefaultValidationExceptionInterceptor.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/jsf_1.1/core/src/main/java/org/apache/myfaces/extensions/validator/core/interceptor/DefaultValidationExceptionInterceptor.java?rev=721452&r1=721451&r2=721452&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/jsf_1.1/core/src/main/java/org/apache/myfaces/extensions/validator/core/interceptor/DefaultValidationExceptionInterceptor.java (original)
+++ myfaces/extensions/validator/branches/jsf_1.1/core/src/main/java/org/apache/myfaces/extensions/validator/core/interceptor/DefaultValidationExceptionInterceptor.java Fri Nov 28 04:29:12 2008
@@ -66,7 +66,7 @@
             if(logger.isTraceEnabled())
             {
                 logger.trace(
-                        "configureComponent of " + validationExceptionInterceptor.getClass().getName() + " called");
+                        "afterThrowing of " + validationExceptionInterceptor.getClass().getName() + " called");
             }
         }
 
@@ -74,7 +74,7 @@
     }
 
     @UsageInformation(UsageCategory.INTERNAL)
-    public static void addComponentInitializer(ValidationExceptionInterceptor validationExceptionInterceptor)
+    public static void addValidationExceptionInterceptor(ValidationExceptionInterceptor validationExceptionInterceptor)
     {
         synchronized (DefaultValidationExceptionInterceptor.class)
         {

Modified: myfaces/extensions/validator/branches/jsf_1.1/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/strategy/AbstractAnnotationValidationStrategy.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/jsf_1.1/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/strategy/AbstractAnnotationValidationStrategy.java?rev=721452&r1=721451&r2=721452&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/jsf_1.1/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/strategy/AbstractAnnotationValidationStrategy.java (original)
+++ myfaces/extensions/validator/branches/jsf_1.1/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/strategy/AbstractAnnotationValidationStrategy.java Fri Nov 28 04:29:12 2008
@@ -43,6 +43,7 @@
 public abstract class AbstractAnnotationValidationStrategy extends AbstractValidatorAdapter
 {
     protected static final String DETAIL_MESSAGE_KEY_POSTFIX = "_detail";
+    //e.g. for injecting a message resolver via spring
     private MessageResolver messageResolver;
 
     protected String resolveMessage(String key)
@@ -58,7 +59,7 @@
         return resolveMessage(getValidationErrorMsgKey(annotation));
     }
 
-    protected String getErrorMessageDetails(Annotation annotation)
+    protected String getErrorMessageDetail(Annotation annotation)
     {
         try
         {
@@ -79,7 +80,7 @@
     protected FacesMessage getValidationErrorFacesMassage(Annotation annotation)
     {
         return new FacesMessage(FacesMessage.SEVERITY_ERROR,
-            getErrorMessageSummary(annotation), getErrorMessageDetails(annotation));
+            getErrorMessageSummary(annotation), getErrorMessageDetail(annotation));
     }
 
     protected abstract String getValidationErrorMsgKey(Annotation annotation);

Modified: myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/baseval/strategy/JpaValidationStrategy.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/baseval/strategy/JpaValidationStrategy.java?rev=721452&r1=721451&r2=721452&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/baseval/strategy/JpaValidationStrategy.java (original)
+++ myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/baseval/strategy/JpaValidationStrategy.java Fri Nov 28 04:29:12 2008
@@ -147,9 +147,9 @@
         }
     }
 
-    protected String getErrorMessageDetails(Annotation annotation)
+    protected String getErrorMessageDetail(Annotation annotation)
     {
-        String message = super.getErrorMessageDetails(annotation);
+        String message = super.getErrorMessageDetail(annotation);
 
         if (VALIDATE_LENGTH.equals(this.violation))
         {

Modified: myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/baseval/strategy/PatternStrategy.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/baseval/strategy/PatternStrategy.java?rev=721452&r1=721451&r2=721452&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/baseval/strategy/PatternStrategy.java (original)
+++ myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/baseval/strategy/PatternStrategy.java Fri Nov 28 04:29:12 2008
@@ -55,7 +55,7 @@
                 throw new ValidatorException(new FacesMessage(
                         FacesMessage.SEVERITY_ERROR,
                         getErrorMessageSummary(annotation),
-                        getErrorMessageDetails(annotation).replace("{0}",
+                        getErrorMessageDetail(annotation).replace("{0}",
                                 expression)));
             }
         }

Modified: myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/referencing/strategy/ELCompareStrategy.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?rev=721452&r1=721451&r2=721452&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/referencing/strategy/ELCompareStrategy.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 Fri Nov 28 04:29:12 2008
@@ -29,10 +29,13 @@
 import org.apache.myfaces.extensions.validator.internal.UsageInformation;
 import org.apache.myfaces.extensions.validator.internal.UsageCategory;
 import org.apache.myfaces.extensions.validator.core.el.ValueBindingExpression;
+import org.apache.myfaces.extensions.validator.core.property.PropertyDetails;
+import org.apache.myfaces.extensions.validator.core.property.PropertyInformationKeys;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
 
 import javax.faces.context.FacesContext;
 import java.util.Map;
-import java.lang.annotation.Annotation;
 
 /**
  * referencing validation targets - possible formats:
@@ -44,6 +47,8 @@
 @UsageInformation(UsageCategory.INTERNAL)
 public class ELCompareStrategy implements ReferencingStrategy
 {
+    protected final Log logger = LogFactory.getLog(getClass());
+
     public boolean evalReferenceAndValidate(
             CrossValidationStorageEntry crossValidationStorageEntry,
             CrossValidationStorage crossValidationStorage,
@@ -66,60 +71,27 @@
             CrossValidationStorage crossValidationStorage,
             AbstractCompareStrategy compareStrategy)
     {
-        boolean violationFound = false;
+        Map<String, ProcessedInformationEntry> keyConvertedValueMapping = CrossValidationUtils
+                .getOrInitKeyToConvertedValueMapping();
 
-        FacesContext facesContext = FacesContext.getCurrentInstance();
+        ProcessedInformationEntry validationTargetEntry = CrossValidationUtils.resolveValidationTargetEntry(
+                keyConvertedValueMapping,
+                CrossValidationUtils.convertValueBindingExpressionToProcessedInformationKey(validationTarget),
+                crossValidationStorageEntry);
 
-        if (compareStrategy.isViolation(crossValidationStorageEntry
-                .getConvertedObject(), ExtValUtils.getELHelper().getValueOfExpression(
-                facesContext, validationTarget), crossValidationStorageEntry
-                .getMetaDataEntry().getValue(Annotation.class)))
+        if(validationTargetEntry != null)
         {
-
-            ProcessedInformationEntry validationTargetEntry;
-            Map<String, ProcessedInformationEntry> valueBindingConvertedValueMapping = CrossValidationUtils
-                    .getOrInitKeyToConvertedValueMapping();
-
-            validationTargetEntry = valueBindingConvertedValueMapping
-                    .get(validationTarget);
-
-            CrossValidationStorageEntry tmpCrossValidationStorageEntry = null;
-
-            if (validationTargetEntry != null)
-            {
-                tmpCrossValidationStorageEntry = new CrossValidationStorageEntry();
-                //TODO test
-                if (compareStrategy
-                        .useTargetComponentToDisplayErrorMsg(crossValidationStorageEntry))
-                {
-                    tmpCrossValidationStorageEntry
-                            .setComponent(validationTargetEntry.getComponent());
-                }
-                else
-                {
-                    tmpCrossValidationStorageEntry
-                            .setComponent(crossValidationStorageEntry
-                                    .getComponent());
-                }
-                tmpCrossValidationStorageEntry
-                        .setConvertedObject(validationTargetEntry
-                                .getConvertedValue());
-                tmpCrossValidationStorageEntry
-                        .setValidationStrategy(compareStrategy);
-            }
-
-            compareStrategy
-                    .processTargetComponentAfterViolation(
-                            crossValidationStorageEntry,
-                            tmpCrossValidationStorageEntry);
-
-            violationFound = true;
+            CrossValidationUtils
+                    .crossValidateCompareStrategy(compareStrategy, crossValidationStorageEntry, validationTargetEntry);
         }
-
-        if (violationFound)
+        else
         {
-            compareStrategy
-                    .processSourceComponentAfterViolation(crossValidationStorageEntry);
+            if(logger.isWarnEnabled())
+            {
+                PropertyDetails propertyDetails = crossValidationStorageEntry.getMetaDataEntry()
+                        .getProperty(PropertyInformationKeys.PROPERTY_DETAILS, PropertyDetails.class);
+                logger.warn("couldn't find converted object for " + propertyDetails.getKey());
+            }
         }
 
         return true;

Modified: myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/referencing/strategy/LocalCompareStrategy.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?rev=721452&r1=721451&r2=721452&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/referencing/strategy/LocalCompareStrategy.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 Fri Nov 28 04:29:12 2008
@@ -32,7 +32,6 @@
 import org.apache.commons.logging.LogFactory;
 
 import java.util.Map;
-import java.lang.annotation.Annotation;
 
 /**
  * "[property_name]" ... local validation -> cross-component, but no cross-entity validation
@@ -65,10 +64,6 @@
     {
         Map<String, ProcessedInformationEntry> keyConvertedValueMapping = CrossValidationUtils
                 .getOrInitKeyToConvertedValueMapping();
-        ProcessedInformationEntry validationTargetEntry;
-
-        PropertyDetails propertyDetails = crossValidationStorageEntry.getMetaDataEntry()
-                .getProperty(PropertyInformationKeys.PROPERTY_DETAILS, PropertyDetails.class);
 
         String newKey = createTargetKey(crossValidationStorageEntry, targetKey);
         if (!keyConvertedValueMapping.containsKey(newKey))
@@ -76,6 +71,9 @@
             return false;
         }
 
+        PropertyDetails propertyDetails = crossValidationStorageEntry.getMetaDataEntry()
+                .getProperty(PropertyInformationKeys.PROPERTY_DETAILS, PropertyDetails.class);
+
         String sourceKey = propertyDetails.getKey();
 
         if(!sourceKey.contains("."))
@@ -85,25 +83,23 @@
 
         targetKey = sourceKey.substring(0, sourceKey.lastIndexOf(".") + 1) + targetKey;
 
-        validationTargetEntry = compareStrategy.resolveValidationTargetEntry(
+        ProcessedInformationEntry validationTargetEntry = CrossValidationUtils.resolveValidationTargetEntry(
                 keyConvertedValueMapping, targetKey, crossValidationStorageEntry);
 
-        if (validationTargetEntry == null)
+        if (validationTargetEntry != null)
+        {
+            CrossValidationUtils
+                    .crossValidateCompareStrategy(compareStrategy, crossValidationStorageEntry, validationTargetEntry);
+        }
+        else
         {
             if(logger.isWarnEnabled())
             {
                 logger.warn("couldn't find converted object for " + propertyDetails.getKey());
             }
-
-            return false;
         }
 
-        return tryToValidateLocally(
-            crossValidationStorageEntry,
-            crossValidationStorage,
-            targetKey,
-            compareStrategy,
-            validationTargetEntry);
+        return true;
     }
 
     protected String createTargetKey(CrossValidationStorageEntry crossValidationStorageEntry, String targetKey)
@@ -120,46 +116,4 @@
             .getExpressionString();
         return result.substring(2, result.length() -1);
     }
-
-    protected boolean tryToValidateLocally(CrossValidationStorageEntry crossValidationStorageEntry,
-            CrossValidationStorage crossValidationStorage,
-            String targetKey,
-            AbstractCompareStrategy compareStrategy,
-            ProcessedInformationEntry validationTargetEntry)
-    {
-        boolean violationFound = false;
-
-        if (compareStrategy.isViolation(crossValidationStorageEntry
-                .getConvertedObject(), validationTargetEntry
-                .getConvertedValue(), crossValidationStorageEntry
-                .getMetaDataEntry().getValue(Annotation.class)))
-        {
-
-            CrossValidationStorageEntry tmpCrossValidationStorageEntry = new CrossValidationStorageEntry();
-            if (compareStrategy.useTargetComponentToDisplayErrorMsg(crossValidationStorageEntry))
-            {
-                tmpCrossValidationStorageEntry.setComponent(validationTargetEntry.getComponent());
-                tmpCrossValidationStorageEntry.setClientId(validationTargetEntry.getClientId());
-            }
-            else
-            {
-                tmpCrossValidationStorageEntry.setComponent(crossValidationStorageEntry.getComponent());
-                tmpCrossValidationStorageEntry.setClientId(crossValidationStorageEntry.getClientId());
-            }
-            tmpCrossValidationStorageEntry.setConvertedObject(validationTargetEntry.getConvertedValue());
-            tmpCrossValidationStorageEntry.setValidationStrategy(compareStrategy);
-
-            compareStrategy
-                    .processTargetComponentAfterViolation(crossValidationStorageEntry, tmpCrossValidationStorageEntry);
-
-            violationFound = true;
-        }
-
-        if (violationFound)
-        {
-            compareStrategy.processSourceComponentAfterViolation(crossValidationStorageEntry);
-        }
-
-        return 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=721452&r1=721451&r2=721452&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 Fri Nov 28 04:29:12 2008
@@ -29,7 +29,6 @@
 import javax.faces.context.FacesContext;
 import javax.faces.validator.ValidatorException;
 
-import org.apache.myfaces.extensions.validator.crossval.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.ELCompareStrategy;
@@ -39,8 +38,6 @@
 import org.apache.myfaces.extensions.validator.util.ClassUtils;
 import org.apache.myfaces.extensions.validator.core.ExtValContext;
 import org.apache.myfaces.extensions.validator.core.CustomInfo;
-import org.apache.myfaces.extensions.validator.core.property.PropertyDetails;
-import org.apache.myfaces.extensions.validator.core.property.PropertyInformationKeys;
 import org.apache.myfaces.extensions.validator.internal.UsageInformation;
 import org.apache.myfaces.extensions.validator.internal.UsageCategory;
 
@@ -132,7 +129,7 @@
 
         //get validation error messages for the target component
         String summary = getErrorMessageSummary(entryOfSource.getMetaDataEntry().getValue(Annotation.class), true);
-        String details = getErrorMessageDetails(entryOfSource.getMetaDataEntry().getValue(Annotation.class), true);
+        String details = getErrorMessageDetail(entryOfSource.getMetaDataEntry().getValue(Annotation.class), true);
 
         //validation target isn't bound to a component withing the current page 
         //(see validateFoundEntry, tryToValidateLocally and tryToValidateBindingOnly)
@@ -172,7 +169,7 @@
 
         //get validation error messages for the current component
         String summary = getErrorMessageSummary(entryOfSource.getMetaDataEntry().getValue(Annotation.class), false);
-        String details = getErrorMessageDetails(entryOfSource.getMetaDataEntry().getValue(Annotation.class), false);
+        String details = getErrorMessageDetail(entryOfSource.getMetaDataEntry().getValue(Annotation.class), false);
 
         FacesMessage message = getSourceComponentErrorMessage(
             entryOfSource.getMetaDataEntry().getValue(Annotation.class), summary, details);
@@ -188,73 +185,34 @@
         }
     }
 
-    //has to be public for custom referencing strategies!!!
-    public FacesMessage getSourceComponentErrorMessage(Annotation annotation, String summary, String details)
+    protected FacesMessage getSourceComponentErrorMessage(Annotation annotation, String summary, String detail)
     {
         FacesMessage message = new FacesMessage();
 
         message.setSeverity(FacesMessage.SEVERITY_ERROR);
         message.setSummary(summary);
-        message.setDetail(details);
+        message.setDetail(detail);
 
         return message;
     }
 
-    //has to be public for custom referencing strategies!!!
-    public FacesMessage getTargetComponentErrorMessage(Annotation foundAnnotation, String summary, String details)
+    protected FacesMessage getTargetComponentErrorMessage(Annotation foundAnnotation, String summary, String detail)
     {
         FacesMessage message = new FacesMessage();
 
         message.setSeverity(FacesMessage.SEVERITY_ERROR);
         message.setSummary(summary);
-        message.setDetail(details);
+        message.setDetail(detail);
 
         return message;
     }
 
-    //has to be public for custom referencing strategies!!!
-    public ProcessedInformationEntry resolveValidationTargetEntry(
-            Map<String, ProcessedInformationEntry> pathToConvertedValueMapping,
-            String targetKey, CrossValidationStorageEntry crossValidationStorageEntry)
-    {
-        ProcessedInformationEntry processedInformationEntry =
-            pathToConvertedValueMapping.get(targetKey);
-
-        //simple case
-        if (processedInformationEntry.getFurtherEntries() == null)
-        {
-            return processedInformationEntry;
-        }
-
-        PropertyDetails propertyDetails = crossValidationStorageEntry.getMetaDataEntry()
-                .getProperty(PropertyInformationKeys.PROPERTY_DETAILS, PropertyDetails.class);
-
-        Object targetBean = propertyDetails.getBaseObject();
-
-        //process complex component entries (e.g. a table)
-        //supported: cross-component but no cross-entity validation (= locale validation)
-        if (processedInformationEntry.getBean().equals(targetBean))
-        {
-            return processedInformationEntry;
-        }
-
-        for (ProcessedInformationEntry entry : processedInformationEntry.getFurtherEntries())
-        {
-            if (entry.getBean().equals(targetBean))
-            {
-                return entry;
-            }
-        }
-
-        return null;
-    }
-
     protected String getErrorMessageSummary(Annotation annotation, boolean isTargetComponent)
     {
         return resolveMessage(getValidationErrorMsgKey(annotation, isTargetComponent));
     }
 
-    protected String getErrorMessageDetails(Annotation annotation, boolean isTargetComponent)
+    protected String getErrorMessageDetail(Annotation annotation, boolean isTargetComponent)
     {
         try
         {
@@ -277,9 +235,6 @@
         return getValidationErrorMsgKey(annotation, false);
     }
 
-    /*
-     * 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

Modified: myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/strategy/AbstractCrossValidationStrategy.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/AbstractCrossValidationStrategy.java?rev=721452&r1=721451&r2=721452&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/strategy/AbstractCrossValidationStrategy.java (original)
+++ myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/strategy/AbstractCrossValidationStrategy.java Fri Nov 28 04:29:12 2008
@@ -70,13 +70,13 @@
                                                            Object convertedObject,
                                                            ValidatorException validatorException)
     {
-        throw new IllegalStateException("not available for cross validation");
+        throw new IllegalStateException("not available for cross validation - use processAfterCrossValidatorException");
     }
 
     @Override
     protected final String getLabel(FacesContext facesContext, UIComponent uiComponent, MetaDataEntry metaDataEntry)
     {
-        throw new IllegalStateException("not available for cross validation - use processAfterCrossValidatorException");
+        throw new IllegalStateException("not available for cross validation");
     }
 
     @Override

Modified: myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/strategy/DateIsStrategy.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/DateIsStrategy.java?rev=721452&r1=721451&r2=721452&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/strategy/DateIsStrategy.java (original)
+++ myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/strategy/DateIsStrategy.java Fri Nov 28 04:29:12 2008
@@ -135,11 +135,11 @@
     }
 
     @Override
-    protected String getErrorMessageDetails(Annotation annotation, boolean isTargetComponent)
+    protected String getErrorMessageDetail(Annotation annotation, boolean isTargetComponent)
     {
         if (!isTargetComponent)
         {
-            return super.getErrorMessageDetails(annotation, isTargetComponent);
+            return super.getErrorMessageDetail(annotation, isTargetComponent);
         }
 
         try

Modified: myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/util/CrossValidationUtils.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/util/CrossValidationUtils.java?rev=721452&r1=721451&r2=721452&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/util/CrossValidationUtils.java (original)
+++ myfaces/extensions/validator/branches/jsf_1.1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/util/CrossValidationUtils.java Fri Nov 28 04:29:12 2008
@@ -20,12 +20,20 @@
 
 import org.apache.myfaces.extensions.validator.crossval.CrossValidationStorage;
 import org.apache.myfaces.extensions.validator.crossval.ProcessedInformationEntry;
+import org.apache.myfaces.extensions.validator.crossval.CrossValidationStorageEntry;
+import org.apache.myfaces.extensions.validator.crossval.strategy.AbstractCompareStrategy;
 import org.apache.myfaces.extensions.validator.internal.UsageInformation;
 import org.apache.myfaces.extensions.validator.internal.UsageCategory;
+import org.apache.myfaces.extensions.validator.internal.ToDo;
+import org.apache.myfaces.extensions.validator.internal.Priority;
+import org.apache.myfaces.extensions.validator.core.property.PropertyDetails;
+import org.apache.myfaces.extensions.validator.core.property.PropertyInformationKeys;
+import org.apache.myfaces.extensions.validator.core.el.ValueBindingExpression;
 
 import javax.faces.context.FacesContext;
 import java.util.Map;
 import java.util.HashMap;
+import java.lang.annotation.Annotation;
 
 /**
  * @author Gerhard Petracek
@@ -76,4 +84,84 @@
         FacesContext.getCurrentInstance().getExternalContext().getRequestMap()
             .put(KEY_TO_CONVERTED_VALUE_MAPPING_KEY, new HashMap<String, ProcessedInformationEntry>());
     }
+
+    public static ProcessedInformationEntry resolveValidationTargetEntry(
+            Map<String, ProcessedInformationEntry> keyToConvertedValueMapping,
+            String targetKey, CrossValidationStorageEntry crossValidationStorageEntry)
+    {
+        ProcessedInformationEntry processedInformationEntry =
+            keyToConvertedValueMapping.get(targetKey);
+
+        //simple case
+        if (processedInformationEntry.getFurtherEntries() == null)
+        {
+            return processedInformationEntry;
+        }
+
+        PropertyDetails propertyDetails = crossValidationStorageEntry.getMetaDataEntry()
+                .getProperty(PropertyInformationKeys.PROPERTY_DETAILS, PropertyDetails.class);
+
+        Object targetBean = propertyDetails.getBaseObject();
+
+        //process complex component entries (e.g. a table)
+        //supported: cross-component but no cross-entity validation (= locale validation)
+        if (processedInformationEntry.getBean().equals(targetBean))
+        {
+            return processedInformationEntry;
+        }
+
+        for (ProcessedInformationEntry entry : processedInformationEntry.getFurtherEntries())
+        {
+            if (entry.getBean().equals(targetBean))
+            {
+                return entry;
+            }
+        }
+
+        return null;
+    }
+
+    @ToDo(value = Priority.MEDIUM, description = "support for map syntax")
+    public static String convertValueBindingExpressionToProcessedInformationKey(ValueBindingExpression vbe)
+    {
+        return vbe.getExpressionString().replace("#{", "").replace("}", "");
+    }
+
+    public static void crossValidateCompareStrategy(AbstractCompareStrategy compareStrategy,
+            CrossValidationStorageEntry crossValidationStorageEntry,
+            ProcessedInformationEntry validationTargetEntry)
+    {
+        boolean violationFound = false;
+
+        if (compareStrategy.isViolation(
+                crossValidationStorageEntry.getConvertedObject(),
+                validationTargetEntry.getConvertedValue(),
+                crossValidationStorageEntry.getMetaDataEntry().getValue(Annotation.class)))
+        {
+
+            CrossValidationStorageEntry tmpCrossValidationStorageEntry = new CrossValidationStorageEntry();
+            if (compareStrategy.useTargetComponentToDisplayErrorMsg(crossValidationStorageEntry))
+            {
+                tmpCrossValidationStorageEntry.setComponent(validationTargetEntry.getComponent());
+                tmpCrossValidationStorageEntry.setClientId(validationTargetEntry.getClientId());
+            }
+            else
+            {
+                tmpCrossValidationStorageEntry.setComponent(crossValidationStorageEntry.getComponent());
+                tmpCrossValidationStorageEntry.setClientId(crossValidationStorageEntry.getClientId());
+            }
+            tmpCrossValidationStorageEntry.setConvertedObject(validationTargetEntry.getConvertedValue());
+            tmpCrossValidationStorageEntry.setValidationStrategy(compareStrategy);
+
+            compareStrategy
+                    .processTargetComponentAfterViolation(crossValidationStorageEntry, tmpCrossValidationStorageEntry);
+
+            violationFound = true;
+        }
+
+        if (violationFound)
+        {
+            compareStrategy.processSourceComponentAfterViolation(crossValidationStorageEntry);
+        }
+    }
 }