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/28 20:14:56 UTC

svn commit: r885131 - in /myfaces/extensions/validator/branches/branch_for_jsf_2_0: 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/apa...

Author: gpetracek
Date: Sat Nov 28 19:14:56 2009
New Revision: 885131

URL: http://svn.apache.org/viewvc?rev=885131&view=rev
Log:
cleanup and refactorings

Added:
    myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/DefaultPropertyStorage.java
    myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/DefaultPropertyStorageManager.java
    myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/PropertyStorage.java
    myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/mapper/DefaultPropertyStorageNameMapper.java
Modified:
    myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/WebXmlParameter.java
    myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/interceptor/AbstractValidationInterceptor.java
    myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/interceptor/HtmlCoreComponentsValidationExceptionInterceptor.java
    myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/extractor/DefaultComponentMetaDataExtractor.java
    myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/DefaultStorageManagerFactory.java
    myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/parameter/ViolationSeverityInterpreter.java
    myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/strategy/mapper/AnnotationToValidationStrategyBeanNameMapper.java
    myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/util/ExtValUtils.java
    myfaces/extensions/validator/branches/branch_for_jsf_2_0/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/BeanAwareConstraintValidatorFactory.java
    myfaces/extensions/validator/branches/branch_for_jsf_2_0/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/BeanValidationInterceptor.java
    myfaces/extensions/validator/branches/branch_for_jsf_2_0/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/annotation/extractor/DefaultGroupControllerScanningExtractor.java
    myfaces/extensions/validator/branches/branch_for_jsf_2_0/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/baseval/annotation/extractor/DefaultPropertyScanningMetaDataExtractor.java

Modified: myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/WebXmlParameter.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/WebXmlParameter.java?rev=885131&r1=885130&r2=885131&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/WebXmlParameter.java (original)
+++ myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/WebXmlParameter.java Sat Nov 28 19:14:56 2009
@@ -126,6 +126,9 @@
     static final String DEACTIVATE_COMPONENT_INITIALIZATION = WebXmlUtils
         .getInitParameter("DEACTIVATE_COMPONENT_INITIALIZATION");
 
+    static final String DEACTIVATE_VALIDATION_PARAMETERS = WebXmlUtils
+        .getInitParameter("DEACTIVATE_VALIDATION_PARAMETERS");
+
     //there is nothing like DEACTIVATE_DEFAULT_VALIDATION_INTERCEPTOR
     //use ExtValContext.getContext().denyRendererInterceptor(...) within an extval-StartupListener
 

Modified: myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/interceptor/AbstractValidationInterceptor.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/interceptor/AbstractValidationInterceptor.java?rev=885131&r1=885130&r2=885131&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/interceptor/AbstractValidationInterceptor.java (original)
+++ myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/interceptor/AbstractValidationInterceptor.java Sat Nov 28 19:14:56 2009
@@ -20,8 +20,6 @@
 
 import org.apache.myfaces.extensions.validator.internal.UsageCategory;
 import org.apache.myfaces.extensions.validator.internal.UsageInformation;
-import org.apache.myfaces.extensions.validator.internal.ToDo;
-import org.apache.myfaces.extensions.validator.internal.Priority;
 import org.apache.myfaces.extensions.validator.core.ExtValContext;
 import org.apache.myfaces.extensions.validator.core.WebXmlParameter;
 import org.apache.myfaces.extensions.validator.core.renderkit.exception.SkipBeforeInterceptorsException;
@@ -46,7 +44,6 @@
 public abstract class AbstractValidationInterceptor extends AbstractRendererInterceptor
 {
     @Override
-    @ToDo(value = Priority.MEDIUM, description = "add web.xml context param to deactivate component initialization")
     public void beforeEncodeBegin(FacesContext facesContext, UIComponent uiComponent, Renderer wrapped)
             throws IOException, SkipBeforeInterceptorsException, SkipRendererDelegationException
     {

Modified: myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/interceptor/HtmlCoreComponentsValidationExceptionInterceptor.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/interceptor/HtmlCoreComponentsValidationExceptionInterceptor.java?rev=885131&r1=885130&r2=885131&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/interceptor/HtmlCoreComponentsValidationExceptionInterceptor.java (original)
+++ myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/interceptor/HtmlCoreComponentsValidationExceptionInterceptor.java Sat Nov 28 19:14:56 2009
@@ -55,7 +55,6 @@
  */
 @InvocationOrder(100)
 @UsageInformation(UsageCategory.INTERNAL)
-@ToDo(value = Priority.HIGH, description = "check compatibility with bv-integration")
 public class HtmlCoreComponentsValidationExceptionInterceptor implements ValidationExceptionInterceptor
 {
     protected final Log logger = LogFactory.getLog(getClass());

Modified: myfaces/extensions/validator/branches/branch_for_jsf_2_0/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_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/extractor/DefaultComponentMetaDataExtractor.java?rev=885131&r1=885130&r2=885131&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/extractor/DefaultComponentMetaDataExtractor.java (original)
+++ myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/extractor/DefaultComponentMetaDataExtractor.java Sat Nov 28 19:14:56 2009
@@ -18,22 +18,28 @@
  */
 package org.apache.myfaces.extensions.validator.core.metadata.extractor;
 
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.myfaces.extensions.validator.core.ExtValContext;
+import org.apache.myfaces.extensions.validator.core.metadata.MetaDataEntry;
+import org.apache.myfaces.extensions.validator.core.property.DefaultPropertyInformation;
 import org.apache.myfaces.extensions.validator.core.property.PropertyDetails;
 import org.apache.myfaces.extensions.validator.core.property.PropertyInformation;
-import org.apache.myfaces.extensions.validator.core.property.DefaultPropertyInformation;
-import org.apache.myfaces.extensions.validator.core.metadata.MetaDataEntry;
 import org.apache.myfaces.extensions.validator.core.property.PropertyInformationKeys;
 import org.apache.myfaces.extensions.validator.core.storage.MetaDataStorage;
-import org.apache.myfaces.extensions.validator.internal.ToDo;
+import org.apache.myfaces.extensions.validator.core.storage.PropertyStorage;
 import org.apache.myfaces.extensions.validator.internal.Priority;
-import org.apache.myfaces.extensions.validator.internal.UsageInformation;
+import org.apache.myfaces.extensions.validator.internal.ToDo;
 import org.apache.myfaces.extensions.validator.internal.UsageCategory;
+import org.apache.myfaces.extensions.validator.internal.UsageInformation;
 import org.apache.myfaces.extensions.validator.util.ExtValUtils;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
 
 import javax.faces.component.UIComponent;
 import javax.faces.context.FacesContext;
+import java.beans.BeanInfo;
+import java.beans.IntrospectionException;
+import java.beans.Introspector;
+import java.beans.PropertyDescriptor;
 import java.lang.annotation.Annotation;
 import java.lang.reflect.Field;
 import java.lang.reflect.Method;
@@ -55,7 +61,7 @@
 
     public DefaultComponentMetaDataExtractor()
     {
-        if(logger.isDebugEnabled())
+        if (logger.isDebugEnabled())
         {
             logger.debug(getClass().getName() + " instantiated");
         }
@@ -69,7 +75,7 @@
         //should never occur
         if (!(object instanceof UIComponent))
         {
-            if(this.logger.isWarnEnabled() && object != null)
+            if (this.logger.isWarnEnabled() && object != null)
             {
                 this.logger.warn(object.getClass() + " is no valid component");
             }
@@ -78,7 +84,7 @@
 
         UIComponent uiComponent = (UIComponent) object;
 
-        if(logger.isTraceEnabled())
+        if (logger.isTraceEnabled())
         {
             logger.trace("start extracting meta-data of " + uiComponent.getClass().getName());
         }
@@ -98,9 +104,9 @@
         //create
         propertyInformation.setInformation(PropertyInformationKeys.PROPERTY_DETAILS, propertyDetails);
 
-        if(isCached(entityClass, propertyDetails.getProperty()))
+        if (isCached(entityClass, propertyDetails.getProperty()))
         {
-            for(MetaDataEntry metaDataEntry : getCachedMetaData(entityClass, propertyDetails.getProperty()))
+            for (MetaDataEntry metaDataEntry : getCachedMetaData(entityClass, propertyDetails.getProperty()))
             {
                 propertyInformation.addMetaDataEntry(metaDataEntry);
             }
@@ -111,7 +117,7 @@
             cacheMetaData(propertyInformation);
         }
 
-        if(logger.isTraceEnabled())
+        if (logger.isTraceEnabled())
         {
             logger.trace("extract finished");
         }
@@ -139,6 +145,49 @@
         return ExtValUtils.getStorage(MetaDataStorage.class, MetaDataStorage.class.getName());
     }
 
+    private boolean isCachedField(Class entity, String property)
+    {
+        return getPropertyStorage().containsField(entity, property);
+    }
+
+    private void tryToCachedField(Class entity, String property, Field field)
+    {
+        PropertyStorage propertyStorage = getPropertyStorage();
+        if (!propertyStorage.containsField(entity, property))
+        {
+            propertyStorage.storeField(entity, property, field);
+        }
+    }
+
+    private Field getCachedField(Class entity, String property)
+    {
+        return getPropertyStorage().getField(entity, property);
+    }
+
+    private boolean isCachedMethod(Class entity, String property)
+    {
+        return getPropertyStorage().containsMethod(entity, property);
+    }
+
+    private void tryToCachedMethod(Class entity, String property, Method method)
+    {
+        PropertyStorage propertyStorage = getPropertyStorage();
+        if (!propertyStorage.containsMethod(entity, property))
+        {
+            propertyStorage.storeMethod(entity, property, method);
+        }
+    }
+
+    private Method getCachedMethod(Class entity, String property)
+    {
+        return getPropertyStorage().getMethod(entity, property);
+    }
+
+    private PropertyStorage getPropertyStorage()
+    {
+        return ExtValUtils.getStorage(PropertyStorage.class, PropertyStorage.class.getName());
+    }
+
     protected void extractAnnotations(
             PropertyInformation propertyInformation, PropertyDetails propertyDetails, Class entityClass)
     {
@@ -167,33 +216,79 @@
     protected void addPropertyAccessAnnotations(Class entity, String property,
                                                 PropertyInformation propertyInformation)
     {
-        property = property.substring(0, 1).toUpperCase() + property.substring(1);
+        Method method = tryToGetReadMethod(entity, property);
 
-        Method method;
+        if (method == null)
+        {
+            method = tryToGetReadMethodManually(entity, property);
+        }
+
+        if (method != null)
+        {
+            tryToCachedMethod(entity, property, method);
+            addAnnotationToAnnotationEntries(Arrays.asList(method.getAnnotations()), propertyInformation);
+        }
+    }
+
+    private Method tryToGetReadMethod(Class entity, String property)
+    {
+        if (isCachedMethod(entity, property))
+        {
+            return getCachedMethod(entity, property);
+        }
+
+        if (useBeanInfo())
+        {
+            try
+            {
+                BeanInfo beanInfo = Introspector.getBeanInfo(entity);
+                for (PropertyDescriptor propertyDescriptor : beanInfo.getPropertyDescriptors())
+                {
+                    if (property.equals(propertyDescriptor.getName()) && propertyDescriptor.getReadMethod() != null)
+                    {
+                        return propertyDescriptor.getReadMethod();
+                    }
+                }
+            }
+            catch (IntrospectionException e)
+            {
+                //do nothing
+            }
+        }
+        return null;
+    }
+
+    private boolean useBeanInfo()
+    {
+        return Boolean.TRUE.equals(ExtValContext.getContext().getGlobalProperty(BeanInfo.class.getName()));
+    }
+
+    private Method tryToGetReadMethodManually(Class entity, String property)
+    {
+        property = property.substring(0, 1).toUpperCase() + property.substring(1);
 
         try
         {
-            method = entity.getDeclaredMethod("get" + property);
+            //changed to official bean spec. due to caching there is no performance issue any more
+            return entity.getDeclaredMethod("is" + property);
         }
         catch (NoSuchMethodException e)
         {
             try
             {
-                method = entity.getDeclaredMethod("is" + property);
+                return entity.getDeclaredMethod("get" + property);
             }
             catch (NoSuchMethodException e1)
             {
-                if(logger.isTraceEnabled())
+                if (logger.isTraceEnabled())
                 {
                     logger.trace("method not found - class: " + entity.getName()
-                        + " - methods: " + "get" + property + " " + "is" + property);
+                            + " - methods: " + "get" + property + " " + "is" + property);
                 }
 
-                return;
+                return null;
             }
         }
-
-        addAnnotationToAnnotationEntries(Arrays.asList(method.getAnnotations()), propertyInformation);
     }
 
     protected void addFieldAccessAnnotations(Class entity, String property,
@@ -203,7 +298,7 @@
 
         try
         {
-            field = entity.getDeclaredField(property);
+            field = getDeclaredField(entity, property);
         }
         catch (Exception e)
         {
@@ -211,24 +306,26 @@
             {
                 try
                 {
-                    if(property.length() > 1 &&
-                            Character.isUpperCase(property.charAt(0)) && Character.isUpperCase(property.charAt(1)))
+                    field = entity.getDeclaredField("_" + property);
+                }
+                catch (Exception e1)
+                {
+                    if (property.length() > 1 &&
+                            Character.isUpperCase(property.charAt(0)) &&
+                            Character.isUpperCase(property.charAt(1)))
                     {
+                        //don't use Introspector#decapitalize here
                         field = entity.getDeclaredField(property.substring(0, 1).toLowerCase() + property.substring(1));
                     }
                     else
                     {
-                        field = entity.getDeclaredField("_" + property);
+                        field = entity.getDeclaredField(Introspector.decapitalize(property));
                     }
                 }
-                catch (Exception e1)
-                {
-                    field = entity.getDeclaredField("_" + property);
-                }
             }
             catch (NoSuchFieldException e1)
             {
-                if(logger.isTraceEnabled())
+                if (logger.isTraceEnabled())
                 {
                     logger.trace("field " + property + " or _" + property + " not found", e1);
                 }
@@ -237,17 +334,31 @@
             }
         }
 
-        addAnnotationToAnnotationEntries(Arrays.asList(field.getAnnotations()), propertyInformation);
+        if (field != null)
+        {
+            tryToCachedField(entity, property, field);
+            addAnnotationToAnnotationEntries(Arrays.asList(field.getAnnotations()), propertyInformation);
+        }
+    }
+
+    private Field getDeclaredField(Class entity, String property) throws NoSuchFieldException
+    {
+        if (isCachedField(entity, property))
+        {
+            return getCachedField(entity, property);
+        }
+
+        return entity.getDeclaredField(property);
     }
 
     protected void addAnnotationToAnnotationEntries(
-        List<Annotation> annotations, PropertyInformation propertyInformation)
+            List<Annotation> annotations, PropertyInformation propertyInformation)
     {
         for (Annotation annotation : annotations)
         {
             propertyInformation.addMetaDataEntry(createMetaDataEntryForAnnotation(annotation));
 
-            if(logger.isTraceEnabled())
+            if (logger.isTraceEnabled())
             {
                 logger.trace(annotation.getClass().getName() + " found");
             }

Added: myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/DefaultPropertyStorage.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/DefaultPropertyStorage.java?rev=885131&view=auto
==============================================================================
--- myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/DefaultPropertyStorage.java (added)
+++ myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/DefaultPropertyStorage.java Sat Nov 28 19:14:56 2009
@@ -0,0 +1,77 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.myfaces.extensions.validator.core.storage;
+
+import static org.apache.myfaces.extensions.validator.internal.UsageCategory.INTERNAL;
+import org.apache.myfaces.extensions.validator.internal.UsageInformation;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.util.Map;
+import java.util.HashMap;
+
+/**
+ * @author Gerhard Petracek
+ * @since x.x.3
+ */
+@UsageInformation(INTERNAL)
+public class DefaultPropertyStorage implements PropertyStorage
+{
+    protected final Log logger = LogFactory.getLog(getClass());
+
+    private Map<String, Field> fieldMap = new HashMap<String, Field>();
+    private Map<String, Method> methodMap = new HashMap<String, Method>();
+
+    public void storeField(Class targetClass, String property, Field field)
+    {
+        this.fieldMap.put(createKey(targetClass, property), field);
+    }
+
+    public void storeMethod(Class targetClass, String property, Method method)
+    {
+        this.methodMap.put(createKey(targetClass, property), method);
+    }
+
+    public Field getField(Class targetClass, String property)
+    {
+        return this.fieldMap.get(createKey(targetClass, property));
+    }
+
+    public Method getMethod(Class targetClass, String property)
+    {
+        return this.methodMap.get(createKey(targetClass, property));
+    }
+
+    public boolean containsField(Class targetClass, String property)
+    {
+        return this.fieldMap.containsKey(createKey(targetClass, property));
+    }
+
+    public boolean containsMethod(Class targetClass, String property)
+    {
+        return this.methodMap.containsKey(createKey(targetClass, property));
+    }
+
+    private String createKey(Class targetClass, String property)
+    {
+        return targetClass + "#" + property;
+    }
+}

Added: myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/DefaultPropertyStorageManager.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/DefaultPropertyStorageManager.java?rev=885131&view=auto
==============================================================================
--- myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/DefaultPropertyStorageManager.java (added)
+++ myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/DefaultPropertyStorageManager.java Sat Nov 28 19:14:56 2009
@@ -0,0 +1,43 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.myfaces.extensions.validator.core.storage;
+
+import org.apache.myfaces.extensions.validator.internal.UsageInformation;
+import static org.apache.myfaces.extensions.validator.internal.UsageCategory.INTERNAL;
+import org.apache.myfaces.extensions.validator.core.storage.mapper.DefaultPropertyStorageNameMapper;
+
+/**
+ * default storage-manager for groups
+ *
+ * @author Gerhard Petracek
+ * @since x.x.3
+ */
+@UsageInformation(INTERNAL)
+class DefaultPropertyStorageManager extends AbstractApplicationScopeAwareStorageManager<PropertyStorage>
+{
+    DefaultPropertyStorageManager()
+    {
+        register(new DefaultPropertyStorageNameMapper());
+    }
+
+    public String getStorageManagerKey()
+    {
+        return StorageManager.class.getName() + "_FOR_PROPERTY:KEY";
+    }
+}

Modified: myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/DefaultStorageManagerFactory.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/DefaultStorageManagerFactory.java?rev=885131&r1=885130&r2=885131&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/DefaultStorageManagerFactory.java (original)
+++ myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/DefaultStorageManagerFactory.java Sat Nov 28 19:14:56 2009
@@ -63,6 +63,7 @@
         setStorageManager(GroupStorage.class, new DefaultGroupStorageManager(), false);
         setStorageManager(MetaDataStorage.class, new DefaultMetaDataStorageManager(), false);
         setStorageManager(FacesMessageStorage.class, new DefaultFacesMessageStorageManager(), false);
+        setStorageManager(PropertyStorage.class, new DefaultPropertyStorageManager(), false);
 
         setStorageManager(
                 FacesInformationStorage.class, new DefaultFacesInformationStorageManager(), false);

Added: myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/PropertyStorage.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/PropertyStorage.java?rev=885131&view=auto
==============================================================================
--- myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/PropertyStorage.java (added)
+++ myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/PropertyStorage.java Sat Nov 28 19:14:56 2009
@@ -0,0 +1,45 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.myfaces.extensions.validator.core.storage;
+
+import org.apache.myfaces.extensions.validator.internal.UsageInformation;
+import org.apache.myfaces.extensions.validator.internal.UsageCategory;
+
+import java.lang.reflect.Method;
+import java.lang.reflect.Field;
+
+/**
+ * @author Gerhard Petracek
+ * @since x.x.3
+ */
+@UsageInformation(UsageCategory.API)
+public interface PropertyStorage
+{
+    void storeField(Class targetClass, String property, Field field);
+
+    void storeMethod(Class targetClass, String property, Method method);
+
+    Field getField(Class targetClass, String property);
+
+    Method getMethod(Class targetClass, String property);
+
+    boolean containsField(Class targetClass, String property);
+
+    boolean containsMethod(Class targetClass, String property);
+}

Added: myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/mapper/DefaultPropertyStorageNameMapper.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/mapper/DefaultPropertyStorageNameMapper.java?rev=885131&view=auto
==============================================================================
--- myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/mapper/DefaultPropertyStorageNameMapper.java (added)
+++ myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/mapper/DefaultPropertyStorageNameMapper.java Sat Nov 28 19:14:56 2009
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.myfaces.extensions.validator.core.storage.mapper;
+
+import org.apache.myfaces.extensions.validator.core.mapper.NameMapper;
+import org.apache.myfaces.extensions.validator.core.storage.DefaultPropertyStorage;
+import org.apache.myfaces.extensions.validator.core.storage.PropertyStorage;
+import org.apache.myfaces.extensions.validator.core.InvocationOrder;
+
+/**
+ * use a public class to allow optional deregistration
+ *
+ * @author Gerhard Petracek
+ * @since x.x.3
+ */
+@InvocationOrder(100)
+public class DefaultPropertyStorageNameMapper implements NameMapper<String>
+{
+    public String createName(String source)
+    {
+        return (PropertyStorage.class.getName().equals(source)) ?
+                DefaultPropertyStorage.class.getName() : null;
+    }
+}

Modified: myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/parameter/ViolationSeverityInterpreter.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/parameter/ViolationSeverityInterpreter.java?rev=885131&r1=885130&r2=885131&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/parameter/ViolationSeverityInterpreter.java (original)
+++ myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/parameter/ViolationSeverityInterpreter.java Sat Nov 28 19:14:56 2009
@@ -20,8 +20,6 @@
 
 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 javax.faces.context.FacesContext;
 import javax.faces.component.UIComponent;
@@ -78,7 +76,7 @@
             FacesContext facesContext, UIComponent uiComponent, FacesMessage.Severity severity);
 
     /**
-     * available for add-ons not used internally due to performance reasons
+     * available for add-ons - not used internally due to performance reasons
      *
      * @param facesContext current faces context
      * @param uiComponent current component
@@ -86,7 +84,6 @@
      * @return true if the constraint with the given severity
      * should cause e.g. a required marker independent of client-side validation (if supported)
      */
-    @ToDo(Priority.HIGH)
     boolean severityShowsIndication(
             FacesContext facesContext, UIComponent uiComponent, FacesMessage.Severity severity);
 }

Modified: myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/strategy/mapper/AnnotationToValidationStrategyBeanNameMapper.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/strategy/mapper/AnnotationToValidationStrategyBeanNameMapper.java?rev=885131&r1=885130&r2=885131&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/strategy/mapper/AnnotationToValidationStrategyBeanNameMapper.java (original)
+++ myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/strategy/mapper/AnnotationToValidationStrategyBeanNameMapper.java Sat Nov 28 19:14:56 2009
@@ -23,6 +23,8 @@
 import org.apache.myfaces.extensions.validator.internal.UsageInformation;
 import org.apache.myfaces.extensions.validator.internal.UsageCategory;
 
+import java.beans.Introspector;
+
 /**
  * Name Mapper which delegates the name mapping, extract the name and convert it to a bean name + prefix
  * target: configure a validation strategy via a managed bean facility -> allows to inject other beans
@@ -58,6 +60,6 @@
         }
 
         name = name.substring(name.lastIndexOf(".") + 1);
-        return PREFIX_FOR_BEAN_MAPPING + name.substring(0, 1).toLowerCase() + name.substring(1);
+        return PREFIX_FOR_BEAN_MAPPING + Introspector.decapitalize(name);
     }
 }

Modified: myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/util/ExtValUtils.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/util/ExtValUtils.java?rev=885131&r1=885130&r2=885131&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/util/ExtValUtils.java (original)
+++ myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/util/ExtValUtils.java Sat Nov 28 19:14:56 2009
@@ -507,11 +507,41 @@
 
     public static ValidationParameterExtractor getValidationParameterExtractor()
     {
+        if(isValidationParameterExtractionDeactivated())
+        {
+            return new ValidationParameterExtractor() {
+
+                public Map<Object, List<Object>> extract(Annotation annotation)
+                {
+                    return new HashMap<Object, List<Object>>();
+                }
+
+                public List<Object> extract(Annotation annotation, Object key)
+                {
+                    return new ArrayList<Object>();
+                }
+
+                public <T> List<T> extract(Annotation annotation, Object key, Class<T> valueType)
+                {
+                    return new ArrayList<T>();
+                }
+
+                public <T> T extract(Annotation annotation, Object key, Class<T> valueType, Class valueId)
+                {
+                    return null;
+                }
+            };
+        }
         return ExtValContext.getContext().getFactoryFinder().getFactory(
                 FactoryNames.VALIDATION_PARAMETER_EXTRACTOR_FACTORY, ValidationParameterExtractorFactory.class)
                 .create();
     }
 
+    private static boolean isValidationParameterExtractionDeactivated()
+    {
+        return "true".equalsIgnoreCase(WebXmlParameter.DEACTIVATE_VALIDATION_PARAMETERS);
+    }
+
     public static boolean executeLocalBeforeValidationInterceptors(FacesContext facesContext,
                                                                    UIComponent uiComponent,
                                                                    Object convertedObject,
@@ -874,7 +904,7 @@
         return interpreter.severityBlocksSubmit(facesContext, targetComponent, facesMessage.getSeverity());
     }
 
-    //available for add-ons not used internally due to performance reasons
+    //available for add-ons - not used internally due to performance reasons
     public static boolean severityShowsIndicationForComponentId(String clientId, FacesMessage facesMessage)
     {
         ViolationSeverityInterpreter interpreter =

Modified: myfaces/extensions/validator/branches/branch_for_jsf_2_0/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/BeanAwareConstraintValidatorFactory.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/branch_for_jsf_2_0/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/BeanAwareConstraintValidatorFactory.java?rev=885131&r1=885130&r2=885131&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/branch_for_jsf_2_0/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/BeanAwareConstraintValidatorFactory.java (original)
+++ myfaces/extensions/validator/branches/branch_for_jsf_2_0/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/BeanAwareConstraintValidatorFactory.java Sat Nov 28 19:14:56 2009
@@ -26,6 +26,7 @@
 
 import javax.validation.ConstraintValidatorFactory;
 import javax.validation.ConstraintValidator;
+import java.beans.Introspector;
 
 /**
  * @author Gerhard Petracek
@@ -66,6 +67,6 @@
 
     private String createBeanName(String validatorClassName)
     {
-        return validatorClassName.substring(0, 1).toLowerCase() + validatorClassName.substring(1);
+        return Introspector.decapitalize(validatorClassName);
     }
-}
+}
\ No newline at end of file

Modified: myfaces/extensions/validator/branches/branch_for_jsf_2_0/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/BeanValidationInterceptor.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/branch_for_jsf_2_0/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/BeanValidationInterceptor.java?rev=885131&r1=885130&r2=885131&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/branch_for_jsf_2_0/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/BeanValidationInterceptor.java (original)
+++ myfaces/extensions/validator/branches/branch_for_jsf_2_0/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/BeanValidationInterceptor.java Sat Nov 28 19:14:56 2009
@@ -24,8 +24,6 @@
 import org.apache.myfaces.extensions.validator.core.property.PropertyInformation;
 import org.apache.myfaces.extensions.validator.core.renderkit.exception.SkipBeforeInterceptorsException;
 import org.apache.myfaces.extensions.validator.core.renderkit.exception.SkipRendererDelegationException;
-import org.apache.myfaces.extensions.validator.internal.Priority;
-import org.apache.myfaces.extensions.validator.internal.ToDo;
 import org.apache.myfaces.extensions.validator.internal.UsageCategory;
 import org.apache.myfaces.extensions.validator.internal.UsageInformation;
 import org.apache.myfaces.extensions.validator.util.ExtValUtils;
@@ -42,7 +40,6 @@
  * @author Gerhard Petracek
  * @since x.x.3
  */
-@ToDo(value = Priority.HIGH, description = "sync jsf 2.0 specific changes with bv-branch")
 @UsageInformation(UsageCategory.INTERNAL)
 public class BeanValidationInterceptor extends AbstractValidationInterceptor
 {

Modified: myfaces/extensions/validator/branches/branch_for_jsf_2_0/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_2_0/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/annotation/extractor/DefaultGroupControllerScanningExtractor.java?rev=885131&r1=885130&r2=885131&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/branch_for_jsf_2_0/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_2_0/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/annotation/extractor/DefaultGroupControllerScanningExtractor.java Sat Nov 28 19:14:56 2009
@@ -23,6 +23,8 @@
 import org.apache.myfaces.extensions.validator.core.property.DefaultPropertyInformation;
 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.ToDo;
+import org.apache.myfaces.extensions.validator.internal.Priority;
 
 import javax.faces.context.FacesContext;
 
@@ -30,6 +32,7 @@
  * @author Gerhard Petracek
  * @since x.x.3
  */
+@ToDo(value = Priority.MEDIUM, description = "use meta-data storage - but a special impl.")
 public class DefaultGroupControllerScanningExtractor extends DefaultComponentMetaDataExtractor
 {
     @Override

Modified: myfaces/extensions/validator/branches/branch_for_jsf_2_0/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/baseval/annotation/extractor/DefaultPropertyScanningMetaDataExtractor.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/branch_for_jsf_2_0/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/baseval/annotation/extractor/DefaultPropertyScanningMetaDataExtractor.java?rev=885131&r1=885130&r2=885131&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/branch_for_jsf_2_0/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/baseval/annotation/extractor/DefaultPropertyScanningMetaDataExtractor.java (original)
+++ myfaces/extensions/validator/branches/branch_for_jsf_2_0/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/baseval/annotation/extractor/DefaultPropertyScanningMetaDataExtractor.java Sat Nov 28 19:14:56 2009
@@ -37,6 +37,7 @@
  * @author Gerhard Petracek
  * @since 1.x.1
  */
+@Deprecated
 @UsageInformation(UsageCategory.INTERNAL)
 public class DefaultPropertyScanningMetaDataExtractor extends DefaultComponentMetaDataExtractor
 {