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/10/12 17:09:13 UTC

svn commit: r824374 - in /myfaces/extensions/validator/trunk: core/src/main/java/org/apache/myfaces/extensions/validator/core/mapper/ core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/transformer/ core/src/main/java/org/apache/my...

Author: gpetracek
Date: Mon Oct 12 15:09:13 2009
New Revision: 824374

URL: http://svn.apache.org/viewvc?rev=824374&view=rev
Log:
EXTVAL-64 first draft

Added:
    myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/mapper/SubMapperAwareNameMapper.java
    myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/mapper/SubNameMapper.java
    myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/transformer/SortedNameMapperList.java
    myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/transformer/mapper/ValidationStrategyToMetaDataTransformerSubMapperAwareNameMapper.java
      - copied, changed from r823312, myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/transformer/mapper/AbstractValidationStrategyToMetaDataTransformerNameMapper.java
    myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/strategy/AbstractVirtualValidationStrategy.java
    myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/strategy/IdentifiableValidationStrategy.java
    myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/metadata/transformer/StringSizeMetaDataTransformer.java
      - copied, changed from r823638, myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/metadata/transformer/BeanValidationMetaDataTransformer.java
    myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/metadata/transformer/mapper/SizeNameMapper.java
      - copied, changed from r823638, myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/metadata/transformer/mapper/DefaultBeanValidationStrategyToMetaDataTransformerNameMapper.java
    myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/validation/strategy/BeanValidationVirtualValidationStrategy.java
      - copied, changed from r823312, myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/validation/strategy/BeanValidationStrategyAdapter.java
Removed:
    myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/metadata/transformer/BeanValidationMetaDataTransformer.java
    myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/metadata/transformer/mapper/DefaultBeanValidationStrategyToMetaDataTransformerNameMapper.java
    myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/validation/strategy/BeanValidationStrategyAdapter.java
Modified:
    myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/transformer/DefaultMetaDataTransformerFactory.java
    myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/BeanValidationInterceptorUtils.java
    myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/ExtValBeanValidationContext.java
    myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/startup/BeanValidationStartupListener.java

Added: myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/mapper/SubMapperAwareNameMapper.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/mapper/SubMapperAwareNameMapper.java?rev=824374&view=auto
==============================================================================
--- myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/mapper/SubMapperAwareNameMapper.java (added)
+++ myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/mapper/SubMapperAwareNameMapper.java Mon Oct 12 15:09:13 2009
@@ -0,0 +1,34 @@
+/*
+ * 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.mapper;
+
+import org.apache.myfaces.extensions.validator.internal.UsageCategory;
+import org.apache.myfaces.extensions.validator.internal.UsageInformation;
+
+/**
+ * interface for name-mappers which have to delegate to other (sub-)name-mappers
+ *
+ * @author Gerhard Petracek
+ * @since x.x.3
+ */
+@UsageInformation(UsageCategory.API)
+public interface SubMapperAwareNameMapper<T> extends NameMapper<T>
+{
+    void addNameMapper(SubNameMapper<T> nameMapper);
+}
\ No newline at end of file

Added: myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/mapper/SubNameMapper.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/mapper/SubNameMapper.java?rev=824374&view=auto
==============================================================================
--- myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/mapper/SubNameMapper.java (added)
+++ myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/mapper/SubNameMapper.java Mon Oct 12 15:09:13 2009
@@ -0,0 +1,33 @@
+/*
+ * 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.mapper;
+
+import org.apache.myfaces.extensions.validator.internal.UsageCategory;
+import org.apache.myfaces.extensions.validator.internal.UsageInformation;
+
+/**
+ * marker interface
+ * 
+ * @author Gerhard Petracek
+ * @since x.x.3
+ */
+@UsageInformation(UsageCategory.API)
+public interface SubNameMapper<T> extends NameMapper<T>
+{
+}
\ No newline at end of file

Modified: myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/transformer/DefaultMetaDataTransformerFactory.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/transformer/DefaultMetaDataTransformerFactory.java?rev=824374&r1=824373&r2=824374&view=diff
==============================================================================
--- myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/transformer/DefaultMetaDataTransformerFactory.java (original)
+++ myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/transformer/DefaultMetaDataTransformerFactory.java Mon Oct 12 15:09:13 2009
@@ -22,11 +22,16 @@
 import org.apache.myfaces.extensions.validator.core.factory.AbstractNameMapperAwareFactory;
 import org.apache.myfaces.extensions.validator.core.validation.strategy.ValidationStrategy;
 import org.apache.myfaces.extensions.validator.core.validation.strategy.BeanValidationStrategyAdapter;
+import org.apache.myfaces.extensions.validator.core.validation.strategy.IdentifiableValidationStrategy;
 import org.apache.myfaces.extensions.validator.core.mapper.NameMapper;
+import org.apache.myfaces.extensions.validator.core.mapper.SubMapperAwareNameMapper;
+import org.apache.myfaces.extensions.validator.core.mapper.SubNameMapper;
 import org.apache.myfaces.extensions.validator.core.initializer.configuration.StaticConfiguration;
 import org.apache.myfaces.extensions.validator.core.initializer.configuration.StaticConfigurationNames;
 import org.apache.myfaces.extensions.validator.core.initializer.configuration.StaticConfigurationEntry;
 import org.apache.myfaces.extensions.validator.core.ExtValContext;
+import org.apache.myfaces.extensions.validator.core.metadata.transformer.mapper.
+        ValidationStrategyToMetaDataTransformerSubMapperAwareNameMapper;
 import org.apache.myfaces.extensions.validator.util.ClassUtils;
 import org.apache.myfaces.extensions.validator.internal.UsageInformation;
 import org.apache.myfaces.extensions.validator.internal.UsageCategory;
@@ -57,6 +62,8 @@
 
     private Map<String, String> validationStrategyToMetaDataTransformerMapping;
     private List<NameMapper<ValidationStrategy>> nameMapperList = new ArrayList<NameMapper<ValidationStrategy>>();
+    private List<SubNameMapper<ValidationStrategy>> subNameMapperList =
+            new ArrayList<SubNameMapper<ValidationStrategy>>();
 
     public DefaultMetaDataTransformerFactory()
     {
@@ -64,35 +71,57 @@
         {
             logger.debug(getClass().getName() + " instantiated");
         }
+
+        //since there is no guarantee that the startup listener of the core gets executed first
+        register(new ValidationStrategyToMetaDataTransformerSubMapperAwareNameMapper());
     }
 
     public MetaDataTransformer create(ValidationStrategy validationStrategy)
     {
-        String validationStrategyName = null;
+        String validationStrategyName = createValidationStrategyName(validationStrategy);
+
+        tryToInitStaticMappings();
 
-        //proxy check
-        if(validationStrategy.getClass().getPackage() != null)
+        MetaDataTransformer metaDataTransformer =
+                tryToResolveCachedMetaDataTransformer(validationStrategy, validationStrategyName);
+
+        if(metaDataTransformer != null)
         {
-            validationStrategyName = validationStrategy.getClass().getName();
+            return metaDataTransformer;
         }
+
+        return createAndCacheMetaDataTransformer(validationStrategy, validationStrategyName);
+    }
+
+    private String createValidationStrategyName(ValidationStrategy validationStrategy)
+    {
+        boolean isProxyDetected = isProxy(validationStrategy);
         //in case of a proxy and the usage of a BeanValidationStrategyAdapter
-        else if (validationStrategy instanceof BeanValidationStrategyAdapter)
+        if (isProxyDetected && validationStrategy instanceof BeanValidationStrategyAdapter)
         {
-            validationStrategyName = ((BeanValidationStrategyAdapter)validationStrategy)
+            return ((BeanValidationStrategyAdapter)validationStrategy)
                                         .getValidationStrategyClassName();
         }
 
+        return !isProxyDetected ? validationStrategy.getClass().getName() : null;
+    }
+
+    private void tryToInitStaticMappings()
+    {
         if (validationStrategyToMetaDataTransformerMapping == null)
         {
             initStaticMappings();
         }
+    }
 
-        if (validationStrategyToMetaDataTransformerMapping.containsKey(validationStrategyName))
-        {
-            return (MetaDataTransformer)ClassUtils.tryToInstantiateClassForName(
-                validationStrategyToMetaDataTransformerMapping.get(validationStrategyName));
-        }
+    private boolean isProxy(ValidationStrategy validationStrategy)
+    {
+        return validationStrategy.getClass().getPackage() == null;
+    }
 
+    private MetaDataTransformer createAndCacheMetaDataTransformer(
+            ValidationStrategy validationStrategy, String validationStrategyName)
+    {
         MetaDataTransformer metaDataTransformer;
         String transformerName;
         //null -> use name mappers
@@ -105,16 +134,60 @@
                 continue;
             }
 
-            metaDataTransformer = (MetaDataTransformer)ClassUtils.tryToInstantiateClassForName(transformerName);
+            metaDataTransformer = tryToCreateAndCacheMetaDataTransformer(
+                    validationStrategy, validationStrategyName, transformerName);
 
-            if (metaDataTransformer != null)
+            if(metaDataTransformer != null)
             {
-                if(validationStrategyName != null)
+                return metaDataTransformer;
+            }
+        }
+
+        return null;
+    }
+
+    private MetaDataTransformer tryToResolveCachedMetaDataTransformer(
+            ValidationStrategy validationStrategy, String validationStrategyName)
+    {
+        if (validationStrategyToMetaDataTransformerMapping.containsKey(validationStrategyName))
+        {
+            return (MetaDataTransformer)ClassUtils.tryToInstantiateClassForName(
+                validationStrategyToMetaDataTransformerMapping.get(validationStrategyName));
+        }
+
+        if(validationStrategy instanceof IdentifiableValidationStrategy)
+        {
+            String newValidationStrategyName = validationStrategyName + IdentifiableValidationStrategy.ID_PREFIX +
+                    ((IdentifiableValidationStrategy)validationStrategy).getId();
+
+            if (validationStrategyToMetaDataTransformerMapping.containsKey(newValidationStrategyName))
+            {
+                return (MetaDataTransformer)ClassUtils.tryToInstantiateClassForName(
+                    validationStrategyToMetaDataTransformerMapping.get(newValidationStrategyName));
+            }
+        }
+
+        return null;
+    }
+
+    private MetaDataTransformer tryToCreateAndCacheMetaDataTransformer(
+            ValidationStrategy validationStrategy, String validationStrategyName, String transformerName)
+    {
+        MetaDataTransformer metaDataTransformer = (MetaDataTransformer)
+                ClassUtils.tryToInstantiateClassForName(transformerName);
+
+        if (metaDataTransformer != null)
+        {
+            if(validationStrategyName != null)
+            {
+                if(validationStrategy instanceof IdentifiableValidationStrategy)
                 {
-                    addMapping(validationStrategyName, transformerName);
+                    validationStrategyName += IdentifiableValidationStrategy.ID_PREFIX +
+                            ((IdentifiableValidationStrategy)validationStrategy).getId();
                 }
-                return metaDataTransformer;
+                addMapping(validationStrategyName, transformerName);
             }
+            return metaDataTransformer;
         }
 
         return null;
@@ -154,6 +227,36 @@
 
     protected List<NameMapper<ValidationStrategy>> getNameMapperList()
     {
-        return nameMapperList;
+        return new SortedNameMapperList<NameMapper<ValidationStrategy>, SubNameMapper<ValidationStrategy>>(
+                this.nameMapperList, this.subNameMapperList);
+    }
+
+    @Override
+    public void register(NameMapper<ValidationStrategy> validationStrategyNameMapper)
+    {
+        tryToInitNameMapperWithExistingSubMappers(validationStrategyNameMapper);
+        super.register(validationStrategyNameMapper);
+    }
+
+    /**
+     * it's a very special case due to the missing order in the execution of startup-listeners (phase listeners)
+     * packaged in faces-config.xml files of jars
+     *
+     * normally the default SubMapperAwareNameMapper should be enough
+     * anyway, if a module adds a new SubMapperAwareNameMapper,
+     * all previous added SubNameMappers have to be added to avoid confusion in special cases.
+     * if a SubMapperAwareNameMapper should be considered as final extend the interface and filter it in addNameMapper
+     * 
+     * @param validationStrategyNameMapper which has to be added
+     */
+    private void tryToInitNameMapperWithExistingSubMappers(NameMapper<ValidationStrategy> validationStrategyNameMapper)
+    {
+        if(validationStrategyNameMapper instanceof SubMapperAwareNameMapper)
+        {
+            for(SubNameMapper<ValidationStrategy> nameMapper : this.subNameMapperList)
+            {
+                ((SubMapperAwareNameMapper<ValidationStrategy>)validationStrategyNameMapper).addNameMapper(nameMapper);
+            }
+        }
     }
 }

Added: myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/transformer/SortedNameMapperList.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/transformer/SortedNameMapperList.java?rev=824374&view=auto
==============================================================================
--- myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/transformer/SortedNameMapperList.java (added)
+++ myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/transformer/SortedNameMapperList.java Mon Oct 12 15:09:13 2009
@@ -0,0 +1,214 @@
+/*
+ * 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.metadata.transformer;
+
+import org.apache.myfaces.extensions.validator.core.mapper.NameMapper;
+import org.apache.myfaces.extensions.validator.core.mapper.SubMapperAwareNameMapper;
+import org.apache.myfaces.extensions.validator.core.mapper.SubNameMapper;
+import org.apache.myfaces.extensions.validator.internal.UsageCategory;
+import org.apache.myfaces.extensions.validator.internal.UsageInformation;
+
+import java.util.List;
+import java.util.Collections;
+import java.util.Collection;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.ListIterator;
+
+
+/**
+ * @author Gerhard Petracek
+ * @since x.x.3
+ */
+@UsageInformation({UsageCategory.INTERNAL})
+class SortedNameMapperList<T extends NameMapper, S extends SubNameMapper> implements List<T>
+{
+    private List<T> wrapped;
+    private List<S> globalSubNameMapperList;
+
+    SortedNameMapperList(List<T> wrapped, List<S> subNameMapperList)
+    {
+        this.wrapped = wrapped;
+        this.globalSubNameMapperList = subNameMapperList;
+    }
+
+    public boolean add(T t)
+    {
+        if (t instanceof SubNameMapper /*due to a restriction in java*/)
+        {
+            return addSubNameMapper((S) t);
+        }
+        else
+        {
+            boolean result = wrapped.add(t);
+
+            Collections.sort(wrapped, new Comparator<T>()
+            {
+                public int compare(T nm1, T nm2)
+                {
+                    if (nm1 instanceof SubMapperAwareNameMapper && nm2 instanceof SubMapperAwareNameMapper)
+                    {
+                        return 0;
+                    }
+                    return nm1 instanceof SubMapperAwareNameMapper ? 1 : -1;
+                }
+            });
+            return result;
+        }
+    }
+
+    @SuppressWarnings({"unchecked"})
+    private boolean addSubNameMapper(S subNameMapper)
+    {
+        boolean result = false;
+        for (NameMapper nameMapper : this.wrapped)
+        {
+            if (nameMapper instanceof SubMapperAwareNameMapper)
+            {
+                ((SubMapperAwareNameMapper) nameMapper).addNameMapper(subNameMapper);
+                result = true;
+            }
+        }
+
+        tryToAddMapperAsGlobalSubNameMapper(subNameMapper);
+        return result;
+    }
+
+    private void tryToAddMapperAsGlobalSubNameMapper(S subNameMapper)
+    {
+        if(!this.globalSubNameMapperList.contains(subNameMapper))
+        {
+            this.globalSubNameMapperList.add(subNameMapper);
+        }
+    }
+
+    /*
+     * generated
+     */
+    public int size()
+    {
+        return wrapped.size();
+    }
+
+    public boolean isEmpty()
+    {
+        return wrapped.isEmpty();
+    }
+
+    public boolean contains(Object o)
+    {
+        return wrapped.contains(o);
+    }
+
+    public Iterator<T> iterator()
+    {
+        return wrapped.iterator();
+    }
+
+    public Object[] toArray()
+    {
+        return wrapped.toArray();
+    }
+
+    @SuppressWarnings({"SuspiciousToArrayCall"})
+    public <T> T[] toArray(T[] a)
+    {
+        return wrapped.toArray(a);
+    }
+
+    public boolean remove(Object o)
+    {
+        return wrapped.remove(o);
+    }
+
+    public boolean containsAll(Collection<?> c)
+    {
+        return wrapped.containsAll(c);
+    }
+
+    public boolean addAll(Collection<? extends T> c)
+    {
+        return wrapped.addAll(c);
+    }
+
+    public boolean addAll(int index, Collection<? extends T> c)
+    {
+        return wrapped.addAll(index, c);
+    }
+
+    public boolean removeAll(Collection<?> c)
+    {
+        return wrapped.removeAll(c);
+    }
+
+    public boolean retainAll(Collection<?> c)
+    {
+        return wrapped.retainAll(c);
+    }
+
+    public void clear()
+    {
+        wrapped.clear();
+    }
+
+    public T get(int index)
+    {
+        return wrapped.get(index);
+    }
+
+    public T set(int index, T element)
+    {
+        return wrapped.set(index, element);
+    }
+
+    public void add(int index, T element)
+    {
+        wrapped.add(index, element);
+    }
+
+    public T remove(int index)
+    {
+        return wrapped.remove(index);
+    }
+
+    public int indexOf(Object o)
+    {
+        return wrapped.indexOf(o);
+    }
+
+    public int lastIndexOf(Object o)
+    {
+        return wrapped.lastIndexOf(o);
+    }
+
+    public ListIterator<T> listIterator()
+    {
+        return wrapped.listIterator();
+    }
+
+    public ListIterator<T> listIterator(int index)
+    {
+        return wrapped.listIterator(index);
+    }
+
+    public List<T> subList(int fromIndex, int toIndex)
+    {
+        return wrapped.subList(fromIndex, toIndex);
+    }
+}
\ No newline at end of file

Copied: myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/transformer/mapper/ValidationStrategyToMetaDataTransformerSubMapperAwareNameMapper.java (from r823312, myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/transformer/mapper/AbstractValidationStrategyToMetaDataTransformerNameMapper.java)
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/transformer/mapper/ValidationStrategyToMetaDataTransformerSubMapperAwareNameMapper.java?p2=myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/transformer/mapper/ValidationStrategyToMetaDataTransformerSubMapperAwareNameMapper.java&p1=myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/transformer/mapper/AbstractValidationStrategyToMetaDataTransformerNameMapper.java&r1=823312&r2=824374&rev=824374&view=diff
==============================================================================
--- myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/transformer/mapper/AbstractValidationStrategyToMetaDataTransformerNameMapper.java (original)
+++ myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/transformer/mapper/ValidationStrategyToMetaDataTransformerSubMapperAwareNameMapper.java Mon Oct 12 15:09:13 2009
@@ -19,27 +19,47 @@
 package org.apache.myfaces.extensions.validator.core.metadata.transformer.mapper;
 
 import org.apache.myfaces.extensions.validator.core.mapper.NameMapper;
+import org.apache.myfaces.extensions.validator.core.mapper.SubMapperAwareNameMapper;
+import org.apache.myfaces.extensions.validator.core.mapper.SubNameMapper;
 import org.apache.myfaces.extensions.validator.core.validation.strategy.ValidationStrategy;
 import org.apache.myfaces.extensions.validator.internal.UsageInformation;
 import org.apache.myfaces.extensions.validator.internal.UsageCategory;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+
+import java.util.List;
+import java.util.ArrayList;
 
 /**
  * @author Gerhard Petracek
- * @since 1.x.1
+ * @since x.x.3
  */
 @UsageInformation({UsageCategory.INTERNAL})
-public abstract class AbstractValidationStrategyToMetaDataTransformerNameMapper
-    implements NameMapper<ValidationStrategy>
+public class ValidationStrategyToMetaDataTransformerSubMapperAwareNameMapper
+    extends AbstractValidationStrategyToMetaDataTransformerNameMapper
+    implements SubMapperAwareNameMapper<ValidationStrategy>
 {
-    protected final Log logger = LogFactory.getLog(getClass());
+    private List<NameMapper<ValidationStrategy>> subNameMappers = new ArrayList<NameMapper<ValidationStrategy>>();
+
+    public void addNameMapper(SubNameMapper<ValidationStrategy> nameMapper)
+    {
+        if(!this.subNameMappers.contains(nameMapper))
+        {
+            this.subNameMappers.add(nameMapper);
+        }
+    }
 
-    public AbstractValidationStrategyToMetaDataTransformerNameMapper()
+    public String createName(ValidationStrategy source)
     {
-        if(logger.isDebugEnabled())
+        String result = null;
+
+        for(NameMapper<ValidationStrategy> mapper : this.subNameMappers)
         {
-            logger.debug(getClass().getName() + " instantiated");
+            result = mapper.createName(source);
+
+            if(result != null)
+            {
+                return result;
+            }
         }
+        return result;
     }
 }
\ No newline at end of file

Added: myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/strategy/AbstractVirtualValidationStrategy.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/strategy/AbstractVirtualValidationStrategy.java?rev=824374&view=auto
==============================================================================
--- myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/strategy/AbstractVirtualValidationStrategy.java (added)
+++ myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/strategy/AbstractVirtualValidationStrategy.java Mon Oct 12 15:09:13 2009
@@ -0,0 +1,42 @@
+/*
+ * 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.validation.strategy;
+
+import org.apache.myfaces.extensions.validator.internal.UsageCategory;
+import org.apache.myfaces.extensions.validator.internal.UsageInformation;
+import org.apache.myfaces.extensions.validator.core.metadata.MetaDataEntry;
+
+import javax.faces.context.FacesContext;
+import javax.faces.component.UIComponent;
+
+/**
+ * to map constraints directly to a meta-data transformer if there is no validation strategy (required by jsr 303)
+ *
+ * @author Gerhard Petracek
+ * @since x.x.3
+ */
+@UsageInformation(UsageCategory.REUSE)
+public abstract class AbstractVirtualValidationStrategy implements IdentifiableValidationStrategy
+{
+    public final void validate(
+            FacesContext facesContext, UIComponent uiComponent, MetaDataEntry metaDataEntry, Object convertedObject)
+    {
+        throw new UnsupportedOperationException("this is just an adapter e.g. for component initialization");
+    }
+}
\ No newline at end of file

Added: myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/strategy/IdentifiableValidationStrategy.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/strategy/IdentifiableValidationStrategy.java?rev=824374&view=auto
==============================================================================
--- myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/strategy/IdentifiableValidationStrategy.java (added)
+++ myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/strategy/IdentifiableValidationStrategy.java Mon Oct 12 15:09:13 2009
@@ -0,0 +1,36 @@
+/*
+ * 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.validation.strategy;
+
+import org.apache.myfaces.extensions.validator.internal.UsageCategory;
+import org.apache.myfaces.extensions.validator.internal.UsageInformation;
+
+/**
+ * if an adapter is used for several constraints, this interface allows to identify instances
+ *
+ * @author Gerhard Petracek
+ * @since x.x.3
+ */
+@UsageInformation(UsageCategory.REUSE)
+public interface IdentifiableValidationStrategy extends ValidationStrategy
+{
+    String ID_PREFIX = ":";
+
+    String getId();
+}
\ No newline at end of file

Modified: myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/BeanValidationInterceptorUtils.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/BeanValidationInterceptorUtils.java?rev=824374&r1=824373&r2=824374&view=diff
==============================================================================
--- myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/BeanValidationInterceptorUtils.java (original)
+++ myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/BeanValidationInterceptorUtils.java Mon Oct 12 15:09:13 2009
@@ -19,7 +19,7 @@
 package org.apache.myfaces.extensions.validator.beanval;
 
 import org.apache.commons.logging.Log;
-import org.apache.myfaces.extensions.validator.beanval.validation.strategy.BeanValidationStrategyAdapter;
+import org.apache.myfaces.extensions.validator.beanval.validation.strategy.BeanValidationVirtualValidationStrategy;
 import org.apache.myfaces.extensions.validator.core.metadata.MetaDataEntry;
 import org.apache.myfaces.extensions.validator.core.metadata.transformer.MetaDataTransformer;
 import org.apache.myfaces.extensions.validator.core.property.PropertyDetails;
@@ -95,7 +95,8 @@
         for (ConstraintDescriptor<?> constraintDescriptor :
                 elementDescriptor.findConstraints().unorderedAndMatchingGroups(foundGroups).getConstraintDescriptors())
         {
-            metaData = transformConstraintDescriptorToMetaData(constraintDescriptor);
+            metaData = transformConstraintDescriptorToMetaData(
+                    constraintDescriptor, elementDescriptor.getElementClass());
 
             if (metaData != null && !metaData.isEmpty())
             {
@@ -105,21 +106,21 @@
     }
 
     @ToDo(Priority.HIGH)
-    private Map<String, Object> transformConstraintDescriptorToMetaData(ConstraintDescriptor<?> constraintDescriptor)
+    private Map<String, Object> transformConstraintDescriptorToMetaData(
+            ConstraintDescriptor<?> constraintDescriptor, Class elementClass)
     {
         Map<String, Object> result = null;
         MetaDataTransformer metaDataTransformer;
         MetaDataEntry entry;
         /*
         * per default
-        * org.apache.myfaces.extensions.validator.beanval.metadata.transformer.BeanValidationMetaDataTransformer
-        * is bound to BeanValidationStrategyAdapter
+        * org.apache.myfaces.extensions.validator.beanval.metadata.transformer.*
+        * is bound to BeanValidationVirtualValidationStrategy
         * don't use it directly - it's possible to deactivate
-        * org.apache.myfaces.extensions.validator.beanval.metadata.transformer.mapper
-        *  .DefaultBeanValidationStrategyToMetaDataTransformerNameMapper
+        * org.apache.myfaces.extensions.validator.beanval.metadata.transformer.mapper.*
         */
         metaDataTransformer = ExtValUtils.getMetaDataTransformerForValidationStrategy(
-                new BeanValidationStrategyAdapter(constraintDescriptor));
+                new BeanValidationVirtualValidationStrategy(constraintDescriptor, elementClass));
 
         if (metaDataTransformer != null)
         {

Modified: myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/ExtValBeanValidationContext.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/ExtValBeanValidationContext.java?rev=824374&r1=824373&r2=824374&view=diff
==============================================================================
--- myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/ExtValBeanValidationContext.java (original)
+++ myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/ExtValBeanValidationContext.java Mon Oct 12 15:09:13 2009
@@ -20,7 +20,7 @@
 
 import org.apache.myfaces.extensions.validator.beanval.validation.message.interpolator.DefaultMessageInterpolator;
 import org.apache.myfaces.extensions.validator.beanval.validation.message.interpolator.ExtValMessageInterpolatorAdapter;
-import org.apache.myfaces.extensions.validator.beanval.validation.strategy.BeanValidationStrategyAdapter;
+import org.apache.myfaces.extensions.validator.beanval.validation.strategy.BeanValidationVirtualValidationStrategy;
 import org.apache.myfaces.extensions.validator.beanval.storage.ModelValidationEntry;
 import org.apache.myfaces.extensions.validator.beanval.storage.ModelValidationStorage;
 import org.apache.myfaces.extensions.validator.beanval.annotation.BeanValidation;
@@ -171,6 +171,6 @@
 
     private ValidationStrategy getBeanValidationStrategy()
     {
-        return new BeanValidationStrategyAdapter(null);
+        return new BeanValidationVirtualValidationStrategy(null, null);
     }
 }

Copied: myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/metadata/transformer/StringSizeMetaDataTransformer.java (from r823638, myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/metadata/transformer/BeanValidationMetaDataTransformer.java)
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/metadata/transformer/StringSizeMetaDataTransformer.java?p2=myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/metadata/transformer/StringSizeMetaDataTransformer.java&p1=myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/metadata/transformer/BeanValidationMetaDataTransformer.java&r1=823638&r2=824374&rev=824374&view=diff
==============================================================================
--- myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/metadata/transformer/BeanValidationMetaDataTransformer.java (original)
+++ myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/metadata/transformer/StringSizeMetaDataTransformer.java Mon Oct 12 15:09:13 2009
@@ -20,46 +20,46 @@
 
 import org.apache.myfaces.extensions.validator.core.metadata.transformer.MetaDataTransformer;
 import org.apache.myfaces.extensions.validator.core.metadata.MetaDataEntry;
-import org.apache.myfaces.extensions.validator.internal.ToDo;
-import org.apache.myfaces.extensions.validator.internal.Priority;
+import org.apache.myfaces.extensions.validator.core.metadata.CommonMetaDataKeys;
 
-import javax.validation.metadata.ConstraintDescriptor;
-import javax.validation.constraints.NotNull;
-import javax.validation.constraints.Pattern;
 import javax.validation.constraints.Size;
+import javax.validation.metadata.ConstraintDescriptor;
 import java.util.Map;
+import java.util.HashMap;
 
 /**
  * @author Gerhard Petracek
  * @since x.x.3
  */
-@ToDo(value = Priority.HIGH, description = "select final transformer")
-public class BeanValidationMetaDataTransformer implements MetaDataTransformer
+public class StringSizeMetaDataTransformer implements MetaDataTransformer
 {
-    public Map<String, Object> convertMetaData(MetaDataEntry metaData)
+    public Map<String, Object> convertMetaData(MetaDataEntry metaDataEntry)
     {
-        if(isSupportedConstraint(metaData.getValue(ConstraintDescriptor.class)))
-        {
-            
-            //TODO
-        }
+        Map<String, Object> results = new HashMap<String, Object>();
+        Size annotation = (Size)metaDataEntry.getValue(ConstraintDescriptor.class).getAnnotation();
 
-        //TODO
-        return null;
-    }
+        int minimum = annotation.min();
 
-    protected boolean isSupportedConstraint(ConstraintDescriptor constraintDescriptor)
-    {
-        if(!constraintDescriptor.getAnnotation().annotationType().getName().startsWith("javax.validation.constraints"))
+        if(minimum != 0)
         {
-            return false;
+            results.put(CommonMetaDataKeys.MIN_LENGTH, minimum);
+            results.put(CommonMetaDataKeys.WEAK_REQUIRED, true);
+        }
+        else
+        {
+            results.put(CommonMetaDataKeys.MIN_LENGTH_DEFAULT, minimum);
         }
 
-        String name = constraintDescriptor.getAnnotation().annotationType().getName();
+        int maximum = annotation.max();
+        if(maximum != Integer.MAX_VALUE)
+        {
+            results.put(CommonMetaDataKeys.MAX_LENGTH, maximum);
+        }
+        else
+        {
+            results.put(CommonMetaDataKeys.MAX_LENGTH_DEFAULT, maximum);
+        }
 
-        return NotNull.class.getName().equals(name) ||
-                Size.class.getName().equals(name) ||
-                Pattern.class.getName().equals(name);
+        return results;
     }
-
 }

Copied: myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/metadata/transformer/mapper/SizeNameMapper.java (from r823638, myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/metadata/transformer/mapper/DefaultBeanValidationStrategyToMetaDataTransformerNameMapper.java)
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/metadata/transformer/mapper/SizeNameMapper.java?p2=myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/metadata/transformer/mapper/SizeNameMapper.java&p1=myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/metadata/transformer/mapper/DefaultBeanValidationStrategyToMetaDataTransformerNameMapper.java&r1=823638&r2=824374&rev=824374&view=diff
==============================================================================
--- myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/metadata/transformer/mapper/DefaultBeanValidationStrategyToMetaDataTransformerNameMapper.java (original)
+++ myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/metadata/transformer/mapper/SizeNameMapper.java Mon Oct 12 15:09:13 2009
@@ -18,27 +18,37 @@
  */
 package org.apache.myfaces.extensions.validator.beanval.metadata.transformer.mapper;
 
-import org.apache.myfaces.extensions.validator.core.metadata.transformer.mapper
-        .AbstractValidationStrategyToMetaDataTransformerNameMapper;
 import org.apache.myfaces.extensions.validator.core.validation.strategy.ValidationStrategy;
+import org.apache.myfaces.extensions.validator.core.mapper.SubNameMapper;
 import org.apache.myfaces.extensions.validator.internal.UsageInformation;
 import org.apache.myfaces.extensions.validator.internal.UsageCategory;
-import org.apache.myfaces.extensions.validator.beanval.validation.strategy.BeanValidationStrategyAdapter;
-import org.apache.myfaces.extensions.validator.beanval.metadata.transformer.BeanValidationMetaDataTransformer;
+import org.apache.myfaces.extensions.validator.beanval.validation.strategy.BeanValidationVirtualValidationStrategy;
+import org.apache.myfaces.extensions.validator.beanval.metadata.transformer.StringSizeMetaDataTransformer;
+
+import javax.validation.metadata.ConstraintDescriptor;
+import javax.validation.constraints.Size;
 
 /**
  * @author Gerhard Petracek
  * @since x.x.3
  */
 @UsageInformation({UsageCategory.INTERNAL})
-public class DefaultBeanValidationStrategyToMetaDataTransformerNameMapper
-        extends AbstractValidationStrategyToMetaDataTransformerNameMapper
+public class SizeNameMapper implements SubNameMapper<ValidationStrategy>
 {
-    public String createName(ValidationStrategy validationStrategy)
+    public String createName(ValidationStrategy source)
     {
-        if(validationStrategy instanceof BeanValidationStrategyAdapter)
+        if(source instanceof BeanValidationVirtualValidationStrategy)
         {
-            return BeanValidationMetaDataTransformer.class.getName();
+            BeanValidationVirtualValidationStrategy beanValidationAdapter =
+                    (BeanValidationVirtualValidationStrategy)source;
+
+            ConstraintDescriptor descriptor = beanValidationAdapter.getConstraintDescriptor();
+
+            if(Size.class.getName().equals(descriptor.getAnnotation().annotationType().getName()) &&
+                    String.class.getName().equals(beanValidationAdapter.getElementClass().getName()))
+            {
+                return StringSizeMetaDataTransformer.class.getName();
+            }
         }
         return null;
     }

Modified: myfaces/extensions/validator/trunk/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/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/startup/BeanValidationStartupListener.java?rev=824374&r1=824373&r2=824374&view=diff
==============================================================================
--- myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/startup/BeanValidationStartupListener.java (original)
+++ myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/startup/BeanValidationStartupListener.java Mon Oct 12 15:09:13 2009
@@ -21,8 +21,7 @@
 import org.apache.myfaces.extensions.validator.beanval.BeanValidationInterceptor;
 import org.apache.myfaces.extensions.validator.beanval.validation.ModelValidationPhaseListener;
 import org.apache.myfaces.extensions.validator.beanval.interceptor.PropertyValidationGroupProvider;
-import org.apache.myfaces.extensions.validator.beanval.metadata.transformer.mapper
-        .DefaultBeanValidationStrategyToMetaDataTransformerNameMapper;
+import org.apache.myfaces.extensions.validator.beanval.metadata.transformer.mapper.SizeNameMapper;
 import org.apache.myfaces.extensions.validator.beanval.storage.DefaultModelValidationStorageManager;
 import org.apache.myfaces.extensions.validator.beanval.storage.ModelValidationStorage;
 import org.apache.myfaces.extensions.validator.beanval.storage.mapper.BeanValidationGroupStorageNameMapper;
@@ -36,6 +35,8 @@
 import org.apache.myfaces.extensions.validator.core.storage.StorageManagerHolder;
 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.util.ExtValUtils;
 import org.apache.myfaces.extensions.validator.util.JsfUtils;
 
@@ -78,10 +79,10 @@
         ExtValContext.getContext().addPropertyValidationInterceptor(new PropertyValidationGroupProvider());
     }
 
+    @ToDo(Priority.HIGH)
     protected void registerMetaDataTransformerNameMapper()
     {
-        ExtValUtils.registerValidationStrategyToMetaDataTransformerNameMapper(
-                new DefaultBeanValidationStrategyToMetaDataTransformerNameMapper());
+        ExtValUtils.registerValidationStrategyToMetaDataTransformerNameMapper(new SizeNameMapper());
     }
 
     @SuppressWarnings({"unchecked"})

Copied: myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/validation/strategy/BeanValidationVirtualValidationStrategy.java (from r823312, myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/validation/strategy/BeanValidationStrategyAdapter.java)
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/validation/strategy/BeanValidationVirtualValidationStrategy.java?p2=myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/validation/strategy/BeanValidationVirtualValidationStrategy.java&p1=myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/validation/strategy/BeanValidationStrategyAdapter.java&r1=823312&r2=824374&rev=824374&view=diff
==============================================================================
--- myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/validation/strategy/BeanValidationStrategyAdapter.java (original)
+++ myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/validation/strategy/BeanValidationVirtualValidationStrategy.java Mon Oct 12 15:09:13 2009
@@ -18,34 +18,37 @@
  */
 package org.apache.myfaces.extensions.validator.beanval.validation.strategy;
 
-import org.apache.myfaces.extensions.validator.core.validation.strategy.ValidationStrategy;
-import org.apache.myfaces.extensions.validator.core.metadata.MetaDataEntry;
+import org.apache.myfaces.extensions.validator.core.validation.strategy.AbstractVirtualValidationStrategy;
 
-import javax.faces.context.FacesContext;
-import javax.faces.component.UIComponent;
 import javax.validation.metadata.ConstraintDescriptor;
 
 /**
  * @author Gerhard Petracek
  * @since x.x.3
  */
-public class BeanValidationStrategyAdapter implements ValidationStrategy
+public class BeanValidationVirtualValidationStrategy extends AbstractVirtualValidationStrategy
 {
     private ConstraintDescriptor constraintDescriptor;
+    private Class elementClass; //property type
 
-    public BeanValidationStrategyAdapter(ConstraintDescriptor constraintDescriptor)
+    public BeanValidationVirtualValidationStrategy(ConstraintDescriptor constraintDescriptor, Class elementClass)
     {
         this.constraintDescriptor = constraintDescriptor;
+        this.elementClass = elementClass;
     }
 
-    public void validate(
-            FacesContext facesContext, UIComponent uiComponent, MetaDataEntry metaDataEntry, Object convertedObject)
+    public ConstraintDescriptor getConstraintDescriptor()
     {
-        throw new UnsupportedOperationException("this is just an adapter for component initialization");
+        return constraintDescriptor;
     }
 
-    public ConstraintDescriptor getConstraintDescriptor()
+    public Class getElementClass()
     {
-        return constraintDescriptor;
+        return elementClass;
+    }
+
+    public String getId()
+    {
+        return this.constraintDescriptor.getAnnotation().annotationType().getName();
     }
 }