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 2009/11/17 17:07:03 UTC

svn commit: r881346 - in /myfaces/extensions/validator/branches/branch_for_jsf_1_1: core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/extractor/ validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/valid...

Author: gpetracek
Date: Tue Nov 17 16:07:02 2009
New Revision: 881346

URL: http://svn.apache.org/viewvc?rev=881346&view=rev
Log:
EXTVAL-68 and minor refactorings

Modified:
    myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/extractor/DefaultComponentMetaDataExtractor.java
    myfaces/extensions/validator/branches/branch_for_jsf_1_1/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/ExtValBeanValidationContext.java
    myfaces/extensions/validator/branches/branch_for_jsf_1_1/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/annotation/extractor/DefaultGroupControllerScanningExtractor.java
    myfaces/extensions/validator/branches/branch_for_jsf_1_1/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/startup/BeanValidationStartupListener.java
    myfaces/extensions/validator/branches/branch_for_jsf_1_1/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/util/BeanValidationUtils.java
    myfaces/extensions/validator/branches/branch_for_jsf_1_1/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/util/ExtValBeanValidationMetaDataInternals.java
    myfaces/extensions/validator/branches/branch_for_jsf_1_1/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/validation/ModelValidationPhaseListener.java
    myfaces/extensions/validator/branches/branch_for_jsf_1_1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/strategy/AbstractCompareStrategy.java

Modified: myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/extractor/DefaultComponentMetaDataExtractor.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/extractor/DefaultComponentMetaDataExtractor.java?rev=881346&r1=881345&r2=881346&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/extractor/DefaultComponentMetaDataExtractor.java (original)
+++ myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/extractor/DefaultComponentMetaDataExtractor.java Tue Nov 17 16:07:02 2009
@@ -139,7 +139,7 @@
         return ExtValUtils.getStorage(MetaDataStorage.class, MetaDataStorage.class.getName());
     }
 
-    private void extractAnnotations(
+    protected void extractAnnotations(
             PropertyInformation propertyInformation, PropertyDetails propertyDetails, Class entityClass)
     {
         while (!Object.class.getName().equals(entityClass.getName()))

Modified: myfaces/extensions/validator/branches/branch_for_jsf_1_1/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/ExtValBeanValidationContext.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/branch_for_jsf_1_1/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/ExtValBeanValidationContext.java?rev=881346&r1=881345&r2=881346&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/branch_for_jsf_1_1/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/ExtValBeanValidationContext.java (original)
+++ myfaces/extensions/validator/branches/branch_for_jsf_1_1/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/ExtValBeanValidationContext.java Tue Nov 17 16:07:02 2009
@@ -25,6 +25,7 @@
 import org.apache.myfaces.extensions.validator.beanval.storage.ModelValidationStorage;
 import org.apache.myfaces.extensions.validator.beanval.annotation.BeanValidation;
 import org.apache.myfaces.extensions.validator.beanval.annotation.ModelValidation;
+import org.apache.myfaces.extensions.validator.beanval.util.BeanValidationUtils;
 import org.apache.myfaces.extensions.validator.core.validation.message.resolver.MessageResolver;
 import org.apache.myfaces.extensions.validator.core.validation.strategy.ValidationStrategy;
 import org.apache.myfaces.extensions.validator.core.storage.GroupStorage;
@@ -37,7 +38,6 @@
 
 import javax.faces.context.FacesContext;
 import javax.validation.MessageInterpolator;
-import javax.validation.Validation;
 import javax.validation.ValidatorFactory;
 import java.util.Map;
 import java.util.List;
@@ -100,7 +100,7 @@
         {
             this.logger.warn("fallback to the default bv validator factory");
         }
-        return Validation.buildDefaultValidatorFactory();
+        return BeanValidationUtils.getDefaultValidatorFactory();
     }
 
     public MessageInterpolator getMessageInterpolator()
@@ -162,7 +162,7 @@
         else
         {
             this.defaultMessageInterpolator = new DefaultMessageInterpolator(
-                Validation.buildDefaultValidatorFactory().getMessageInterpolator());
+                BeanValidationUtils.getDefaultValidatorFactory().getMessageInterpolator());
         }
     }
 

Modified: myfaces/extensions/validator/branches/branch_for_jsf_1_1/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/annotation/extractor/DefaultGroupControllerScanningExtractor.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/branch_for_jsf_1_1/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/annotation/extractor/DefaultGroupControllerScanningExtractor.java?rev=881346&r1=881345&r2=881346&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/branch_for_jsf_1_1/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/annotation/extractor/DefaultGroupControllerScanningExtractor.java (original)
+++ myfaces/extensions/validator/branches/branch_for_jsf_1_1/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/annotation/extractor/DefaultGroupControllerScanningExtractor.java Tue Nov 17 16:07:02 2009
@@ -47,16 +47,8 @@
         PropertyInformation propertyInformation = new DefaultPropertyInformation();
         propertyInformation.setInformation(PropertyInformationKeys.PROPERTY_DETAILS, propertyDetails);
 
-        findAndAddAnnotations(propertyInformation, propertyDetails, entityClass);
+        extractAnnotations(propertyInformation, propertyDetails, entityClass);
 
         return propertyInformation;
     }
-
-    private void findAndAddAnnotations(PropertyInformation propertyInformation,
-                                       PropertyDetails propertyDetails,
-                                       Class entityClass)
-    {
-        addPropertyAccessAnnotations(entityClass, propertyDetails.getProperty(), propertyInformation);
-        addFieldAccessAnnotations(entityClass, propertyDetails.getProperty(), propertyInformation);
-    }
 }

Modified: myfaces/extensions/validator/branches/branch_for_jsf_1_1/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/startup/BeanValidationStartupListener.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/branch_for_jsf_1_1/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/startup/BeanValidationStartupListener.java?rev=881346&r1=881345&r2=881346&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/branch_for_jsf_1_1/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/startup/BeanValidationStartupListener.java (original)
+++ myfaces/extensions/validator/branches/branch_for_jsf_1_1/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/startup/BeanValidationStartupListener.java Tue Nov 17 16:07:02 2009
@@ -21,6 +21,7 @@
 import org.apache.myfaces.extensions.validator.beanval.BeanValidationInterceptor;
 import org.apache.myfaces.extensions.validator.beanval.HtmlCoreComponentsComponentInitializer;
 import org.apache.myfaces.extensions.validator.beanval.BeanAwareValidatorFactory;
+import org.apache.myfaces.extensions.validator.beanval.util.BeanValidationUtils;
 import org.apache.myfaces.extensions.validator.beanval.interceptor.ExtValBeanValidationMetaDataExtractionInterceptor;
 import org.apache.myfaces.extensions.validator.beanval.interceptor.BeanValidationExceptionInterceptor;
 import org.apache.myfaces.extensions.validator.beanval.validation.ModelValidationPhaseListener;
@@ -43,7 +44,6 @@
 import org.apache.myfaces.extensions.validator.util.JsfUtils;
 
 import javax.validation.ValidatorFactory;
-import javax.validation.Validation;
 
 /**
  * @author Gerhard Petracek
@@ -70,7 +70,7 @@
     protected void registerValidatorFactory()
     {
         ExtValContext.getContext().addGlobalProperty(ValidatorFactory.class.getName(),
-                new BeanAwareValidatorFactory(Validation.buildDefaultValidatorFactory()), false);
+                new BeanAwareValidatorFactory(BeanValidationUtils.getDefaultValidatorFactory()), false);
     }
 
     protected void registerBeanValidationInterceptor()

Modified: myfaces/extensions/validator/branches/branch_for_jsf_1_1/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/util/BeanValidationUtils.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/branch_for_jsf_1_1/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/util/BeanValidationUtils.java?rev=881346&r1=881345&r2=881346&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/branch_for_jsf_1_1/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/util/BeanValidationUtils.java (original)
+++ myfaces/extensions/validator/branches/branch_for_jsf_1_1/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/util/BeanValidationUtils.java Tue Nov 17 16:07:02 2009
@@ -32,9 +32,12 @@
 import javax.faces.context.FacesContext;
 import javax.faces.validator.ValidatorException;
 import javax.validation.ConstraintViolation;
+import javax.validation.ValidatorFactory;
+import javax.validation.Validation;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Set;
+import java.util.Map;
 
 /**
  * @author Gerhard Petracek
@@ -45,6 +48,7 @@
 {
     private static final Log LOG = LogFactory.getLog(BeanValidationUtils.class);
     private static ExtValBeanValidationMetaDataInternals bvmi = new ExtValBeanValidationMetaDataInternals(LOG);
+    private static final String VALIDATOR_FACTORY_KEY = "javax.faces.validator.beanValidator.ValidatorFactory";
 
     public static void addMetaDataToContext(
             UIComponent component, PropertyDetails propertyDetails, boolean processModelValidation)
@@ -144,4 +148,25 @@
         bvmi.addMessages(facesMessageListWithHighSeverity);
         bvmi.addMessages(facesMessageListWithLowSeverity);
     }
+
+    public static ValidatorFactory getDefaultValidatorFactory()
+    {
+        Map<String, Object> applicationMap = FacesContext.getCurrentInstance().getExternalContext().getApplicationMap();
+        ValidatorFactory validatorFactory = null;
+
+        if (applicationMap.containsKey(VALIDATOR_FACTORY_KEY))
+        {
+            if (applicationMap.get(VALIDATOR_FACTORY_KEY) instanceof ValidatorFactory)
+            {
+                validatorFactory = (ValidatorFactory) applicationMap.get(VALIDATOR_FACTORY_KEY);
+            }
+        }
+
+        if (validatorFactory == null)
+        {
+            validatorFactory = Validation.buildDefaultValidatorFactory();
+            applicationMap.put(VALIDATOR_FACTORY_KEY, validatorFactory);
+        }
+        return validatorFactory;
+    }
 }

Modified: myfaces/extensions/validator/branches/branch_for_jsf_1_1/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/util/ExtValBeanValidationMetaDataInternals.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/branch_for_jsf_1_1/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/util/ExtValBeanValidationMetaDataInternals.java?rev=881346&r1=881345&r2=881346&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/branch_for_jsf_1_1/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/util/ExtValBeanValidationMetaDataInternals.java (original)
+++ myfaces/extensions/validator/branches/branch_for_jsf_1_1/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/util/ExtValBeanValidationMetaDataInternals.java Tue Nov 17 16:07:02 2009
@@ -84,7 +84,8 @@
                 foundGroupsForPropertyValidation,
                 restrictedGroupsForPropertyValidation,
                 modelValidationEntryList,
-                restrictedGroupsForModelValidation);
+                restrictedGroupsForModelValidation,
+                key.length == 2);
 
         inspectBaseOfProperty(propertyDetails,
                 processModelValidation,
@@ -144,7 +145,8 @@
                                       List<Class> foundGroupsForPropertyValidation,
                                       List<Class> restrictedGroupsForPropertyValidation,
                                       List<ModelValidationEntry> modelValidationEntryList,
-                                      List<Class> restrictedGroupsForModelValidation)
+                                      List<Class> restrictedGroupsForModelValidation,
+                                      boolean isLastProperty)
     {
         processFieldsAndProperties(key[0] + "." + key[1],
                 firstBean,
@@ -153,7 +155,8 @@
                 restrictedGroupsForPropertyValidation,
                 modelValidationEntryList,
                 restrictedGroupsForModelValidation,
-                processModelValidation);
+                processModelValidation,
+                isLastProperty);
     }
 
     private void inspectBaseOfProperty(PropertyDetails propertyDetails,
@@ -186,7 +189,8 @@
                 restrictedGroupsForPropertyValidation,
                 modelValidationEntryList,
                 restrictedGroupsForModelValidation,
-                processModelValidation);
+                processModelValidation,
+                true);
     }
 
     private void processClass(Object objectToInspect,
@@ -224,7 +228,8 @@
                                             List<Class> restrictedGroupsForPropertyValidation,
                                             List<ModelValidationEntry> modelValidationEntryList,
                                             List<Class> restrictedGroupsForModelValidation,
-                                            boolean processModelValidation)
+                                            boolean processModelValidation,
+                                            boolean isLastProperty)
     {
         PropertyInformation propertyInformation = new DefaultGroupControllerScanningExtractor()
                 .extract(FacesContext.getCurrentInstance(), new PropertyDetails(key, base, property));
@@ -234,7 +239,7 @@
             if (metaDataEntry.getValue() instanceof BeanValidation)
             {
                 tryToProcessMetaData((BeanValidation) metaDataEntry.getValue(),
-                        tryToCreateNewTarget(base, property),
+                        tryToCreateNewTarget(base, property, isLastProperty),
                         foundGroupsForPropertyValidation,
                         restrictedGroupsForPropertyValidation,
                         modelValidationEntryList,
@@ -246,7 +251,7 @@
                 for (BeanValidation currentBeanValidation : ((BeanValidation.List) metaDataEntry.getValue()).value())
                 {
                     tryToProcessMetaData(currentBeanValidation,
-                            tryToCreateNewTarget(base, property),
+                            tryToCreateNewTarget(base, property, isLastProperty),
                             foundGroupsForPropertyValidation,
                             restrictedGroupsForPropertyValidation,
                             modelValidationEntryList,
@@ -257,8 +262,13 @@
         }
     }
 
-    private Object tryToCreateNewTarget(Object base, String property)
+    private Object tryToCreateNewTarget(Object base, String property, boolean isLastProperty)
     {
+        if(isLastProperty)
+        {
+            return base;
+        }
+
         Object result = getValueOfProperty(base, property);
 
         if (result == null)
@@ -645,4 +655,4 @@
                     facesMessageHolder.getClientId(), facesMessageHolder.getFacesMessage());
         }
     }
-}
+}
\ No newline at end of file

Modified: myfaces/extensions/validator/branches/branch_for_jsf_1_1/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/validation/ModelValidationPhaseListener.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/branch_for_jsf_1_1/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/validation/ModelValidationPhaseListener.java?rev=881346&r1=881345&r2=881346&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/branch_for_jsf_1_1/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/validation/ModelValidationPhaseListener.java (original)
+++ myfaces/extensions/validator/branches/branch_for_jsf_1_1/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/validation/ModelValidationPhaseListener.java Tue Nov 17 16:07:02 2009
@@ -111,8 +111,17 @@
                 continue;
             }
 
-            groupsToValidate = filterGroupsToValidate(
-                    modelValidationEntry, validationTarget, processedValidationTargets);
+            if(modelValidationEntry.isDisplayMessageInline())
+            {
+                groupsToValidate = modelValidationEntry.getGroups();
+            }
+            //if violation should displayed inline validation has to take place with all groups
+            //which means: global messages -> filter groups already used for the validation target
+            else
+            {
+                groupsToValidate = filterGroupsToValidate(
+                        modelValidationEntry, validationTarget, processedValidationTargets);
+            }
 
             if(!shouldContinueValidation(modelValidationEntry, groupsToValidate))
             {
@@ -216,6 +225,11 @@
 
     private Set<ConstraintViolation<Object>> validateTarget(Object validationTarget, Class[] groups)
     {
+        if(groups == null || groups.length == 0)
+        {
+            return null;
+        }
+
         return ExtValBeanValidationContext.getCurrentInstance()
                 .getValidatorFactory().usingContext()
                 .messageInterpolator(ExtValBeanValidationContext.getCurrentInstance().getMessageInterpolator())

Modified: myfaces/extensions/validator/branches/branch_for_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/branch_for_jsf_1_1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/strategy/AbstractCompareStrategy.java?rev=881346&r1=881345&r2=881346&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/branch_for_jsf_1_1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/strategy/AbstractCompareStrategy.java (original)
+++ myfaces/extensions/validator/branches/branch_for_jsf_1_1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/strategy/AbstractCompareStrategy.java Tue Nov 17 16:07:02 2009
@@ -158,6 +158,11 @@
         {
             ValidatorException validatorException = new ValidatorException(message);
 
+            if(entryOfTarget.getMetaDataEntry() == null)
+            {
+                entryOfTarget.setMetaDataEntry(entryOfSource.getMetaDataEntry());
+            }
+            
             if(ExtValUtils.executeAfterThrowingInterceptors(
                     entryOfTarget.getComponent(), entryOfTarget.getMetaDataEntry(),
                     entryOfTarget.getConvertedObject(), validatorException, this))
@@ -168,6 +173,7 @@
         }
     }
 
+    @SuppressWarnings({"ThrowableInstanceNeverThrown"})
     private void processTargetComponentAsSourceComponentAfterViolation(CrossValidationStorageEntry entryOfSource)
     {
         //get validation error messages for the current component
@@ -180,7 +186,14 @@
         if (message.getSummary() != null || message.getDetail() != null)
         {
             //TODO
-            ExtValUtils.tryToThrowValidatorExceptionForComponent(entryOfSource.getComponent(), message, null);
+            if(ExtValUtils.executeAfterThrowingInterceptors(entryOfSource.getComponent(),
+                    entryOfSource.getMetaDataEntry(),
+                    entryOfSource.getConvertedObject(),
+                    new ValidatorException(message),
+                    this))
+            {
+                ExtValUtils.tryToThrowValidatorExceptionForComponent(entryOfSource.getComponent(), message, null);
+            }
         }
         else
         {