You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by gp...@apache.org on 2008/09/23 03:19:37 UTC

svn commit: r698056 - in /myfaces/extensions/validator/trunk: core/src/main/java/org/apache/myfaces/extensions/validator/core/ core/src/main/java/org/apache/myfaces/extensions/validator/core/initializer/ core/src/main/java/org/apache/myfaces/extensions...

Author: gpetracek
Date: Mon Sep 22 18:19:36 2008
New Revision: 698056

URL: http://svn.apache.org/viewvc?rev=698056&view=rev
Log:
generic initialization of components

Added:
    myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/initializer/
    myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/initializer/component/
    myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/initializer/component/ComponentInitializer.java
    myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/initializer/component/DefaultComponentInitializer.java
    myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/initializer/component/DefaultComponentInitializerFactory.java
    myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/initializer/rendering/
    myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/initializer/rendering/DefaultRenderingContextInitializerFactory.java
    myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/initializer/rendering/RenderingContextInitializer.java
      - copied, changed from r697737, myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/RenderingContextInitializer.java
    myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/initializer/rendering/TrinidadRenderingContextInitializer.java
      - copied, changed from r697737, myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/TrinidadRenderingContextInitializer.java
    myfaces/extensions/validator/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/DefaultMyFacesComponentInitializer.java
    myfaces/extensions/validator/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/InitPropertyValidationModulePhaseListener.java
      - copied, changed from r697737, myfaces/extensions/validator/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/InitStaticStrategyMappingsPhaseListener.java
Removed:
    myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/RenderingContextInitializer.java
    myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/TrinidadRenderingContextInitializer.java
    myfaces/extensions/validator/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/InitStaticStrategyMappingsPhaseListener.java
Modified:
    myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/ExtValRenderKit.java
    myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/ExtValRendererWrapper.java
    myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/InformationProviderBean.java
    myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/WebXmlParameter.java
    myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/strategy/AbstractValidatorAdapter.java
    myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/strategy/DefaultValidationStrategyFactory.java
    myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/util/FactoryUtils.java
    myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/util/ReflectionUtils.java
    myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/util/ValidationUtils.java
    myfaces/extensions/validator/trunk/validation-modules/property-validation/src/main/config/faces-config.xml
    myfaces/extensions/validator/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/baseval/strategy/JpaValidationStrategy.java
    myfaces/extensions/validator/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/baseval/strategy/LengthStrategy.java

Modified: myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/ExtValRenderKit.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/ExtValRenderKit.java?rev=698056&r1=698055&r2=698056&view=diff
==============================================================================
--- myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/ExtValRenderKit.java (original)
+++ myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/ExtValRenderKit.java Mon Sep 22 18:19:36 2008
@@ -20,8 +20,7 @@
 
 import org.apache.myfaces.extensions.validator.internal.UsageCategory;
 import org.apache.myfaces.extensions.validator.internal.UsageInformation;
-import org.apache.myfaces.extensions.validator.util.ClassUtils;
-import org.apache.myfaces.extensions.validator.util.ExtValUtils;
+import org.apache.myfaces.extensions.validator.util.FactoryUtils;
 
 import javax.faces.context.ResponseStream;
 import javax.faces.context.ResponseWriter;
@@ -44,11 +43,7 @@
 
     public ExtValRenderKit(RenderKit wrapped)
     {
-        RenderingContextInitializer renderingContextInitializer =
-            (RenderingContextInitializer)ClassUtils.tryToInstantiateClassForName(
-                ExtValUtils.getInformationProviderBean().getRenderingContextInitializerName());
-
-        renderingContextInitializer.initContext();
+        FactoryUtils.getRenderingContextInitializerFactory().create(wrapped).initContext();
 
         this.wrapped = wrapped;
     }

Modified: myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/ExtValRendererWrapper.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/ExtValRendererWrapper.java?rev=698056&r1=698055&r2=698056&view=diff
==============================================================================
--- myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/ExtValRendererWrapper.java (original)
+++ myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/ExtValRendererWrapper.java Mon Sep 22 18:19:36 2008
@@ -18,19 +18,26 @@
  */
 package org.apache.myfaces.extensions.validator.core;
 
+import org.apache.myfaces.extensions.validator.core.annotation.AnnotationEntry;
+import org.apache.myfaces.extensions.validator.core.annotation.extractor.AnnotationExtractor;
+import org.apache.myfaces.extensions.validator.core.initializer.component.ComponentInitializer;
+import org.apache.myfaces.extensions.validator.core.validation.strategy.ValidationStrategy;
 import org.apache.myfaces.extensions.validator.internal.UsageCategory;
 import org.apache.myfaces.extensions.validator.internal.UsageInformation;
-import org.apache.myfaces.extensions.validator.util.ValidationUtils;
 import org.apache.myfaces.extensions.validator.util.ClassUtils;
+import org.apache.myfaces.extensions.validator.util.FactoryUtils;
 import org.apache.myfaces.extensions.validator.util.ReflectionUtils;
+import org.apache.myfaces.extensions.validator.util.ValidationUtils;
 
-import javax.faces.component.UIComponent;
 import javax.faces.component.EditableValueHolder;
+import javax.faces.component.UIComponent;
 import javax.faces.context.FacesContext;
 import javax.faces.convert.ConverterException;
 import javax.faces.render.Renderer;
 import java.io.IOException;
 import java.lang.reflect.Method;
+import java.util.Map;
+import java.util.HashMap;
 
 /**
  * Default approach to avoid proxies for converters and the adapter fallback.
@@ -64,12 +71,45 @@
     public void encodeBegin(FacesContext facesContext, UIComponent uiComponent)
         throws IOException
     {
-        if(ValidationUtils.isValueOfComponentRequired(facesContext, uiComponent))
+        initComponent(facesContext, uiComponent);
+        wrapped.encodeBegin(facesContext, uiComponent);
+    }
+
+    protected void initComponent(FacesContext facesContext, UIComponent uiComponent)
+    {
+        if(!(uiComponent instanceof EditableValueHolder))
         {
-            ((EditableValueHolder)uiComponent).setRequired(true);
+            return;
         }
 
-        wrapped.encodeBegin(facesContext, uiComponent);
+        ValidationStrategy validationStrategy;
+
+        AnnotationExtractor annotationExtractor = FactoryUtils.getAnnotationExtractorFactory().create();
+
+        Map<String, Object> metaData;
+        for (AnnotationEntry entry : annotationExtractor.extractAnnotations(facesContext, uiComponent))
+        {
+            validationStrategy = FactoryUtils.getValidationStrategyFactory().create(entry.getAnnotation());
+
+            if (validationStrategy != null && validationStrategy instanceof ComponentInitializer)
+            {
+                if(validationStrategy instanceof MetaDataExtractor)
+                {
+                    metaData = ((MetaDataExtractor)validationStrategy).extractMetaData(entry.getAnnotation());
+                }
+                else
+                {
+                    metaData = null;
+                }
+
+                if(metaData == null)
+                {
+                    metaData = new HashMap<String, Object>();
+                }
+
+                ((ComponentInitializer)validationStrategy).configureComponent(facesContext, uiComponent, metaData);
+            }
+        }
     }
 
     public void encodeChildren(FacesContext facesContext, UIComponent uiComponent)

Modified: myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/InformationProviderBean.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/InformationProviderBean.java?rev=698056&r1=698055&r2=698056&view=diff
==============================================================================
--- myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/InformationProviderBean.java (original)
+++ myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/InformationProviderBean.java Mon Sep 22 18:19:36 2008
@@ -19,11 +19,11 @@
 package org.apache.myfaces.extensions.validator.core;
 
 import org.apache.myfaces.extensions.validator.ExtValInformation;
-import org.apache.myfaces.extensions.validator.internal.ToDo;
+import org.apache.myfaces.extensions.validator.core.validation.strategy.ValidationStrategy;
 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.core.validation.strategy.ValidationStrategy;
+import org.apache.myfaces.extensions.validator.internal.UsageInformation;
 
 import java.lang.annotation.Annotation;
 import java.util.ArrayList;
@@ -103,6 +103,19 @@
     }
 
     /*
+     * initializer
+     */
+    public String getCustomRenderingContextInitializer()
+    {
+        return this.basePackage + "RenderingContextInitializer";
+    }
+
+    public String getCustomComponentInitializer()
+    {
+        return this.basePackage + "ComponentInitializer";
+    }
+
+    /*
      * factories
      */
     public String getCustomMessageResolverFactory()
@@ -115,6 +128,16 @@
         return this.basePackage + "ValidationStrategyFactory";
     }
 
+    public String getCustomRenderingContextInitializerFactory()
+    {
+        return this.basePackage + "RenderingContextInitializerFactory";
+    }
+
+    public String getCustomComponentInitializerFactory()
+    {
+        return this.basePackage + "ComponentInitializerFactory";
+    }
+
     /*
      * conventions (the rest of the conventions are built with the help of name mappers,...
      */
@@ -126,10 +149,6 @@
     /*
      * init hook for component libs which use a rendering context (e.g. Trinidad)
      */
-    public String getRenderingContextInitializerName()
-    {
-        return TrinidadRenderingContextInitializer.class.getName();
-    }
 
     /*
      * static strategy mappings (name of property files)

Modified: myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/WebXmlParameter.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/WebXmlParameter.java?rev=698056&r1=698055&r2=698056&view=diff
==============================================================================
--- myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/WebXmlParameter.java (original)
+++ myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/WebXmlParameter.java Mon Sep 22 18:19:36 2008
@@ -18,10 +18,10 @@
  */
 package org.apache.myfaces.extensions.validator.core;
 
+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.internal.ToDo;
-import org.apache.myfaces.extensions.validator.internal.Priority;
 import org.apache.myfaces.extensions.validator.util.WebXmlUtils;
 
 /**
@@ -62,6 +62,18 @@
     static final String CUSTOM_VALIDATIONSTRATEGY_MAPPING = WebXmlUtils
         .getInitParameter("CUSTOM_STATIC_VALIDATIONSTRATEGY_MAPPING");
 
+    static final String CUSTOM_RENDERING_CONTEXT_INITIALIZER_FACTORY = WebXmlUtils
+        .getInitParameter("CUSTOM_RENDERING_CONTEXT_INITIALIZER_FACTORY");
+
+    static final String CUSTOM_RENDERING_CONTEXT_INITIALIZER = WebXmlUtils
+        .getInitParameter("CUSTOM_RENDERING_CONTEXT_INITIALIZER");
+
+    static final String CUSTOM_COMPONENT_INITIALIZER_FACTORY = WebXmlUtils
+        .getInitParameter("CUSTOM_COMPONENT_INITIALIZER_FACTORY");
+
+    static final String CUSTOM_COMPONENT_INITIALIZER = WebXmlUtils
+        .getInitParameter("CUSTOM_COMPONENT_INITIALIZER");
+
     /*
      * deactivate
      */

Added: myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/initializer/component/ComponentInitializer.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/initializer/component/ComponentInitializer.java?rev=698056&view=auto
==============================================================================
--- myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/initializer/component/ComponentInitializer.java (added)
+++ myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/initializer/component/ComponentInitializer.java Mon Sep 22 18:19:36 2008
@@ -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.initializer.component;
+
+import org.apache.myfaces.extensions.validator.internal.UsageCategory;
+import org.apache.myfaces.extensions.validator.internal.UsageInformation;
+
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import java.util.Map;
+
+/**
+ * @author Gerhard Petracek
+ * @since 1.x.1
+ */
+@UsageInformation(UsageCategory.API)
+public interface ComponentInitializer
+{
+    void configureComponent(FacesContext facesContext, UIComponent uiComponent, Map<String, Object> metaData);
+}
\ No newline at end of file

Added: myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/initializer/component/DefaultComponentInitializer.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/initializer/component/DefaultComponentInitializer.java?rev=698056&view=auto
==============================================================================
--- myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/initializer/component/DefaultComponentInitializer.java (added)
+++ myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/initializer/component/DefaultComponentInitializer.java Mon Sep 22 18:19:36 2008
@@ -0,0 +1,50 @@
+/*
+ * 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.initializer.component;
+
+import org.apache.myfaces.extensions.validator.internal.UsageInformation;
+import org.apache.myfaces.extensions.validator.internal.UsageCategory;
+
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import java.util.Map;
+
+/**
+ * @author Gerhard Petracek
+ * @since 1.x.1
+ */
+@UsageInformation(UsageCategory.INTERNAL)
+public class DefaultComponentInitializer implements ComponentInitializer
+{
+    private static ComponentInitializer componentInitializer;
+
+    public void configureComponent(FacesContext facesContext, UIComponent uiComponent, Map<String, Object> metaData)
+    {
+        if(componentInitializer != null)
+        {
+            componentInitializer.configureComponent(facesContext, uiComponent, metaData);
+        }
+    }
+
+    @UsageInformation(UsageCategory.INTERNAL)
+    public static void setComponentInitializer(ComponentInitializer componentInitializer)
+    {
+        DefaultComponentInitializer.componentInitializer = componentInitializer;
+    }
+}

Added: myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/initializer/component/DefaultComponentInitializerFactory.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/initializer/component/DefaultComponentInitializerFactory.java?rev=698056&view=auto
==============================================================================
--- myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/initializer/component/DefaultComponentInitializerFactory.java (added)
+++ myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/initializer/component/DefaultComponentInitializerFactory.java Mon Sep 22 18:19:36 2008
@@ -0,0 +1,81 @@
+/*
+ * 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.initializer.component;
+
+import org.apache.myfaces.extensions.validator.core.ClassMappingFactory;
+import org.apache.myfaces.extensions.validator.core.WebXmlParameter;
+import org.apache.myfaces.extensions.validator.internal.UsageCategory;
+import org.apache.myfaces.extensions.validator.internal.UsageInformation;
+import org.apache.myfaces.extensions.validator.util.ClassUtils;
+import org.apache.myfaces.extensions.validator.util.ExtValUtils;
+
+import javax.faces.component.UIComponent;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author Gerhard Petracek
+ * @since 1.x.1
+ */
+@UsageInformation({UsageCategory.INTERNAL, UsageCategory.CUSTOMIZABLE})
+public class DefaultComponentInitializerFactory implements
+    ClassMappingFactory<UIComponent, ComponentInitializer>
+{
+    private static Map<String, ComponentInitializer> componentToComponentInitializerMapping
+        = new HashMap<String, ComponentInitializer>();
+    private static List<String> componentInitializerClassNames = new ArrayList<String>();
+
+    static
+    {
+        componentInitializerClassNames
+            .add(WebXmlParameter.CUSTOM_COMPONENT_INITIALIZER);
+        componentInitializerClassNames
+            .add(ExtValUtils.getInformationProviderBean().getCustomComponentInitializer());
+        componentInitializerClassNames
+            .add(DefaultComponentInitializer.class.getName());
+    }
+
+    public ComponentInitializer create(UIComponent uiComponent)
+    {
+        String componentKey = uiComponent.getClass().getName();
+
+        if (componentToComponentInitializerMapping.containsKey(componentKey))
+        {
+            return componentToComponentInitializerMapping.get(componentKey);
+        }
+
+        ComponentInitializer componentInitializer;
+
+        for (String componentInitializerName : componentInitializerClassNames)
+        {
+            componentInitializer =
+                (ComponentInitializer) ClassUtils.tryToInstantiateClassForName(componentInitializerName);
+
+            if (componentInitializer != null)
+            {
+                componentToComponentInitializerMapping.put(componentKey, componentInitializer);
+                return componentInitializer;
+            }
+        }
+
+        return null;
+    }
+}
\ No newline at end of file

Added: myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/initializer/rendering/DefaultRenderingContextInitializerFactory.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/initializer/rendering/DefaultRenderingContextInitializerFactory.java?rev=698056&view=auto
==============================================================================
--- myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/initializer/rendering/DefaultRenderingContextInitializerFactory.java (added)
+++ myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/initializer/rendering/DefaultRenderingContextInitializerFactory.java Mon Sep 22 18:19:36 2008
@@ -0,0 +1,81 @@
+/*
+ * 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.initializer.rendering;
+
+import org.apache.myfaces.extensions.validator.core.ClassMappingFactory;
+import org.apache.myfaces.extensions.validator.core.WebXmlParameter;
+import org.apache.myfaces.extensions.validator.internal.UsageCategory;
+import org.apache.myfaces.extensions.validator.internal.UsageInformation;
+import org.apache.myfaces.extensions.validator.util.ClassUtils;
+import org.apache.myfaces.extensions.validator.util.ExtValUtils;
+
+import javax.faces.render.RenderKit;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author Gerhard Petracek
+ * @since 1.x.1
+ */
+@UsageInformation({UsageCategory.INTERNAL, UsageCategory.CUSTOMIZABLE})
+public class DefaultRenderingContextInitializerFactory implements
+    ClassMappingFactory<RenderKit, RenderingContextInitializer>
+{
+    private static Map<String, RenderingContextInitializer> renderKitToRenderingContextInitializerMapping
+                                                        = new HashMap<String, RenderingContextInitializer>();
+    private static List<String> renderingContextClassNames = new ArrayList<String>();
+
+    static
+    {
+        renderingContextClassNames
+            .add(WebXmlParameter.CUSTOM_RENDERING_CONTEXT_INITIALIZER);
+        renderingContextClassNames
+            .add(ExtValUtils.getInformationProviderBean().getCustomRenderingContextInitializer());
+        renderingContextClassNames
+            .add(TrinidadRenderingContextInitializer.class.getName());
+    }
+
+    public RenderingContextInitializer create(RenderKit renderKit)
+    {
+        String renderKitKey = renderKit.getClass().getName();
+
+        if(renderKitToRenderingContextInitializerMapping.containsKey(renderKitKey))
+        {
+            return renderKitToRenderingContextInitializerMapping.get(renderKitKey);
+        }
+
+        RenderingContextInitializer renderingContextInitializer;
+
+        for (String renderingContextInitializerName : renderingContextClassNames)
+        {
+            renderingContextInitializer =
+                (RenderingContextInitializer)ClassUtils.tryToInstantiateClassForName(renderingContextInitializerName);
+
+            if(renderingContextInitializer != null)
+            {
+                renderKitToRenderingContextInitializerMapping.put(renderKitKey, renderingContextInitializer );
+                return renderingContextInitializer;
+            }
+        }
+
+        return null;
+    }
+}
\ No newline at end of file

Copied: myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/initializer/rendering/RenderingContextInitializer.java (from r697737, myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/RenderingContextInitializer.java)
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/initializer/rendering/RenderingContextInitializer.java?p2=myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/initializer/rendering/RenderingContextInitializer.java&p1=myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/RenderingContextInitializer.java&r1=697737&r2=698056&rev=698056&view=diff
==============================================================================
--- myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/RenderingContextInitializer.java (original)
+++ myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/initializer/rendering/RenderingContextInitializer.java Mon Sep 22 18:19:36 2008
@@ -16,10 +16,10 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.myfaces.extensions.validator.core;
+package org.apache.myfaces.extensions.validator.core.initializer.rendering;
 
-import org.apache.myfaces.extensions.validator.internal.UsageInformation;
 import org.apache.myfaces.extensions.validator.internal.UsageCategory;
+import org.apache.myfaces.extensions.validator.internal.UsageInformation;
 
 /**
  * @author Gerhard Petracek

Copied: myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/initializer/rendering/TrinidadRenderingContextInitializer.java (from r697737, myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/TrinidadRenderingContextInitializer.java)
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/initializer/rendering/TrinidadRenderingContextInitializer.java?p2=myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/initializer/rendering/TrinidadRenderingContextInitializer.java&p1=myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/TrinidadRenderingContextInitializer.java&r1=697737&r2=698056&rev=698056&view=diff
==============================================================================
--- myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/TrinidadRenderingContextInitializer.java (original)
+++ myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/initializer/rendering/TrinidadRenderingContextInitializer.java Mon Sep 22 18:19:36 2008
@@ -16,10 +16,10 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.myfaces.extensions.validator.core;
+package org.apache.myfaces.extensions.validator.core.initializer.rendering;
 
-import org.apache.myfaces.extensions.validator.internal.UsageInformation;
 import org.apache.myfaces.extensions.validator.internal.UsageCategory;
+import org.apache.myfaces.extensions.validator.internal.UsageInformation;
 import org.apache.myfaces.extensions.validator.util.ClassUtils;
 
 /**

Modified: myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/strategy/AbstractValidatorAdapter.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/strategy/AbstractValidatorAdapter.java?rev=698056&r1=698055&r2=698056&view=diff
==============================================================================
--- myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/strategy/AbstractValidatorAdapter.java (original)
+++ myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/strategy/AbstractValidatorAdapter.java Mon Sep 22 18:19:36 2008
@@ -21,13 +21,16 @@
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.myfaces.extensions.validator.core.annotation.AnnotationEntry;
-import org.apache.myfaces.extensions.validator.internal.UsageInformation;
+import org.apache.myfaces.extensions.validator.core.initializer.component.ComponentInitializer;
 import org.apache.myfaces.extensions.validator.internal.UsageCategory;
+import org.apache.myfaces.extensions.validator.internal.UsageInformation;
+import org.apache.myfaces.extensions.validator.util.FactoryUtils;
 
 import javax.faces.component.UIComponent;
 import javax.faces.context.FacesContext;
 import javax.faces.convert.ConverterException;
 import javax.faces.validator.ValidatorException;
+import java.util.Map;
 
 /**
  * Provides the ability to use ValidatorException (as expected by the user) instead of ConverterException.
@@ -39,7 +42,7 @@
  * @since 1.x.1
  */
 @UsageInformation({UsageCategory.INTERNAL, UsageCategory.REUSE})
-public abstract class AbstractValidatorAdapter implements ValidationStrategy
+public abstract class AbstractValidatorAdapter implements ValidationStrategy, ComponentInitializer
 {
     protected final Log logger = LogFactory.getLog(getClass());
 
@@ -79,6 +82,18 @@
         return true;
     }
 
+    public final void configureComponent(FacesContext facesContext,
+                                         UIComponent uiComponent,
+                                         Map<String, Object> metaData)
+    {
+        getComponentInitializer(uiComponent).configureComponent(facesContext, uiComponent, metaData);
+    }
+
+    protected ComponentInitializer getComponentInitializer(UIComponent uiComponent)
+    {
+        return FactoryUtils.getComponentInitializerFactory().create(uiComponent);
+    }
+
     protected abstract void processValidation(FacesContext facesContext,
                                               UIComponent uiComponent, AnnotationEntry annotationEntry,
                                               Object convertedObject) throws ValidatorException;

Modified: myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/strategy/DefaultValidationStrategyFactory.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/strategy/DefaultValidationStrategyFactory.java?rev=698056&r1=698055&r2=698056&view=diff
==============================================================================
--- myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/strategy/DefaultValidationStrategyFactory.java (original)
+++ myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/strategy/DefaultValidationStrategyFactory.java Mon Sep 22 18:19:36 2008
@@ -98,7 +98,7 @@
 
         if (annotationStrategyMapping.containsKey(annotationName))
         {
-            return (ValidationStrategy) getValidationStrategyInstance(annotationStrategyMapping
+            return getValidationStrategyInstance(annotationStrategyMapping
                 .get(annotationName));
         }
 

Modified: myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/util/FactoryUtils.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/util/FactoryUtils.java?rev=698056&r1=698055&r2=698056&view=diff
==============================================================================
--- myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/util/FactoryUtils.java (original)
+++ myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/util/FactoryUtils.java Mon Sep 22 18:19:36 2008
@@ -22,15 +22,21 @@
 import org.apache.myfaces.extensions.validator.core.WebXmlParameter;
 import org.apache.myfaces.extensions.validator.core.annotation.extractor.AnnotationExtractorFactory;
 import org.apache.myfaces.extensions.validator.core.annotation.extractor.DefaultComponentAnnotationExtractorFactory;
+import org.apache.myfaces.extensions.validator.core.initializer.component.ComponentInitializer;
+import org.apache.myfaces.extensions.validator.core.initializer.component.DefaultComponentInitializerFactory;
+import org.apache.myfaces.extensions.validator.core.initializer.rendering.DefaultRenderingContextInitializerFactory;
+import org.apache.myfaces.extensions.validator.core.initializer.rendering.RenderingContextInitializer;
 import org.apache.myfaces.extensions.validator.core.validation.message.resolver.DefaultMessageResolverFactory;
 import org.apache.myfaces.extensions.validator.core.validation.message.resolver.MessageResolver;
 import org.apache.myfaces.extensions.validator.core.validation.strategy.DefaultValidationStrategyFactory;
 import org.apache.myfaces.extensions.validator.core.validation.strategy.ValidationStrategy;
-import org.apache.myfaces.extensions.validator.internal.ToDo;
 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 javax.faces.component.UIComponent;
+import javax.faces.render.RenderKit;
 import java.lang.annotation.Annotation;
 import java.util.ArrayList;
 import java.util.List;
@@ -134,4 +140,67 @@
 
         return messageResolverFactory;
     }
+
+    private static ClassMappingFactory<RenderKit, RenderingContextInitializer> renderingContextInitializerFactory;
+
+    public static ClassMappingFactory<RenderKit, RenderingContextInitializer> getRenderingContextInitializerFactory()
+    {
+        if (renderingContextInitializerFactory == null)
+        {
+            List<String> renderingContextInitializerFactoryClassNames = new ArrayList<String>();
+
+            renderingContextInitializerFactoryClassNames
+                .add(WebXmlParameter.CUSTOM_RENDERING_CONTEXT_INITIALIZER_FACTORY);
+            renderingContextInitializerFactoryClassNames.add(ExtValUtils
+                .getInformationProviderBean()
+                .getCustomRenderingContextInitializerFactory());
+            renderingContextInitializerFactoryClassNames
+                .add(DefaultRenderingContextInitializerFactory.class.getName());
+
+            for (String className : renderingContextInitializerFactoryClassNames)
+            {
+                renderingContextInitializerFactory =
+                    (ClassMappingFactory<RenderKit, RenderingContextInitializer>) ClassUtils
+                        .tryToInstantiateClassForName(className);
+
+                if (renderingContextInitializerFactory != null)
+                {
+                    break;
+                }
+            }
+        }
+
+        return renderingContextInitializerFactory;
+    }
+
+    private static ClassMappingFactory<UIComponent, ComponentInitializer> componentInitializerFactory;
+
+    public static ClassMappingFactory<UIComponent, ComponentInitializer> getComponentInitializerFactory()
+    {
+        if (componentInitializerFactory == null)
+        {
+            List<String> componentInitializerFactoryClassNames = new ArrayList<String>();
+
+            componentInitializerFactoryClassNames
+                .add(WebXmlParameter.CUSTOM_COMPONENT_INITIALIZER_FACTORY);
+            componentInitializerFactoryClassNames.add(ExtValUtils
+                .getInformationProviderBean()
+                .getCustomComponentInitializerFactory());
+            componentInitializerFactoryClassNames
+                .add(DefaultComponentInitializerFactory.class.getName());
+
+            for (String className : componentInitializerFactoryClassNames)
+            {
+                componentInitializerFactory = (ClassMappingFactory<UIComponent, ComponentInitializer>) ClassUtils
+                    .tryToInstantiateClassForName(className);
+
+                if (componentInitializerFactory != null)
+                {
+                    break;
+                }
+            }
+        }
+
+        return componentInitializerFactory;
+    }
 }
\ No newline at end of file

Modified: myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/util/ReflectionUtils.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/util/ReflectionUtils.java?rev=698056&r1=698055&r2=698056&view=diff
==============================================================================
--- myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/util/ReflectionUtils.java (original)
+++ myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/util/ReflectionUtils.java Mon Sep 22 18:19:36 2008
@@ -18,8 +18,8 @@
  */
 package org.apache.myfaces.extensions.validator.util;
 
-import org.apache.myfaces.extensions.validator.internal.UsageInformation;
 import org.apache.myfaces.extensions.validator.internal.UsageCategory;
+import org.apache.myfaces.extensions.validator.internal.UsageInformation;
 
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
@@ -70,6 +70,36 @@
         return tryToInvokeMethodOfClass(target, method, null);
     }
 
+    public static Object tryToInvokeMethodOfClassAndMethodName(String className, String methodName)
+    {
+        return tryToInvokeMethodOfClassAndMethodName(className, methodName, null);
+    }
+
+    public static Object tryToInvokeMethodOfClassAndMethodName(String className, String methodName, Object[] args)
+    {
+        Class[] targetArgs = new Class[0];
+
+        if(args != null)
+        {
+            targetArgs = new Class[args.length];
+
+            for(int i = 0; i < args.length; i++)
+            {
+                targetArgs[i] = args[i].getClass();
+            }
+        }
+
+        return tryToInvokeMethodOfClassAndMethodName(className, methodName, args, targetArgs);
+    }
+
+    public static Object tryToInvokeMethodOfClassAndMethodName(String className, String methodName,
+                                                               Object[] args, Class[] argTypes)
+    {
+        Class targetClass = ClassUtils.tryToLoadClassForName(className);
+        Method targetMethod = tryToGetMethod(targetClass, methodName, argTypes);
+        return tryToInvokeMethodOfClass(targetClass, targetMethod, args);                     
+    }
+
     public static Object tryToInvokeMethodOfClass(Class target, Method method, Object[] args)
     {
         try

Modified: myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/util/ValidationUtils.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/util/ValidationUtils.java?rev=698056&r1=698055&r2=698056&view=diff
==============================================================================
--- myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/util/ValidationUtils.java (original)
+++ myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/util/ValidationUtils.java Mon Sep 22 18:19:36 2008
@@ -23,17 +23,16 @@
 import org.apache.myfaces.extensions.validator.core.annotation.AnnotationEntry;
 import org.apache.myfaces.extensions.validator.core.annotation.extractor.AnnotationExtractor;
 import org.apache.myfaces.extensions.validator.core.validation.strategy.ValidationStrategy;
-import org.apache.myfaces.extensions.validator.core.MetaDataExtractor;
-import org.apache.myfaces.extensions.validator.internal.UsageInformation;
 import org.apache.myfaces.extensions.validator.internal.UsageCategory;
+import org.apache.myfaces.extensions.validator.internal.UsageInformation;
 
 import javax.faces.component.EditableValueHolder;
 import javax.faces.component.UIComponent;
 import javax.faces.context.FacesContext;
-import java.util.Map;
 
 /**
  * @author Gerhard Petracek
+ * @since 1.x.1
  */
 @UsageInformation(UsageCategory.INTERNAL)
 public class ValidationUtils
@@ -71,36 +70,4 @@
             }
         }
     }
-
-    public static boolean isValueOfComponentRequired(FacesContext facesContext, UIComponent uiComponent)
-    {
-        if (!(uiComponent instanceof EditableValueHolder))
-        {
-            return false;
-        }
-
-        ValidationStrategy validationStrategy;
-
-        AnnotationExtractor annotationExtractor = FactoryUtils
-            .getAnnotationExtractorFactory().create();
-        for (AnnotationEntry entry : annotationExtractor
-            .extractAnnotations(facesContext, uiComponent))
-        {
-            validationStrategy = FactoryUtils
-                .getValidationStrategyFactory().create(
-                entry.getAnnotation());
-
-            if (validationStrategy != null && validationStrategy instanceof MetaDataExtractor)
-            {
-                Map<String, Object> metaData = ((MetaDataExtractor)validationStrategy)
-                                                    .extractMetaData(entry.getAnnotation());
-                if(metaData.containsKey("required"))
-                {
-                    return (Boolean)metaData.get("required");
-                }
-            }
-        }
-
-        return false;
-    }
 }

Modified: myfaces/extensions/validator/trunk/validation-modules/property-validation/src/main/config/faces-config.xml
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/validation-modules/property-validation/src/main/config/faces-config.xml?rev=698056&r1=698055&r2=698056&view=diff
==============================================================================
--- myfaces/extensions/validator/trunk/validation-modules/property-validation/src/main/config/faces-config.xml (original)
+++ myfaces/extensions/validator/trunk/validation-modules/property-validation/src/main/config/faces-config.xml Mon Sep 22 18:19:36 2008
@@ -21,7 +21,7 @@
               xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"
               version="1.2">
     <lifecycle>
-        <phase-listener>org.apache.myfaces.extensions.validator.InitStaticStrategyMappingsPhaseListener</phase-listener>
+        <phase-listener>org.apache.myfaces.extensions.validator.InitPropertyValidationModulePhaseListener</phase-listener>
     </lifecycle>
 
     <lifecycle>

Added: myfaces/extensions/validator/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/DefaultMyFacesComponentInitializer.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/DefaultMyFacesComponentInitializer.java?rev=698056&view=auto
==============================================================================
--- myfaces/extensions/validator/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/DefaultMyFacesComponentInitializer.java (added)
+++ myfaces/extensions/validator/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/DefaultMyFacesComponentInitializer.java Mon Sep 22 18:19:36 2008
@@ -0,0 +1,103 @@
+/*
+ * 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;
+
+import org.apache.myfaces.extensions.validator.util.ReflectionUtils;
+import org.apache.myfaces.extensions.validator.core.initializer.component.ComponentInitializer;
+
+import javax.faces.component.EditableValueHolder;
+import javax.faces.component.UIComponent;
+import javax.faces.component.html.HtmlInputText;
+import javax.faces.context.FacesContext;
+import java.util.Map;
+
+/**
+ * @author Gerhard Petracek
+ * @since 1.x.1
+ */
+public class DefaultMyFacesComponentInitializer implements ComponentInitializer
+{
+    private static final String TRINIDAD_CORE_INPUT_TEXT
+                                    = "org.apache.myfaces.trinidad.component.core.input.CoreInputText";
+
+    public void configureComponent(FacesContext facesContext, UIComponent uiComponent, Map<String, Object> metaData)
+    {
+        configureRequiredAttribute(facesContext, uiComponent, metaData);
+        configureMaxLengthAttribute(facesContext, uiComponent, metaData);
+    }
+
+    protected void configureRequiredAttribute(FacesContext facesContext,
+                                              UIComponent uiComponent,
+                                              Map<String, Object> metaData)
+    {
+        if(metaData.containsKey("required"))
+        {
+            if((Boolean)metaData.get("required") && isComponentRequired( uiComponent ))
+            {
+                ((EditableValueHolder)uiComponent).setRequired(true);
+            }
+        }
+    }
+
+    /**
+     * if there is no special attribute at the component which should overrule
+     * the annotated property return true!
+     *
+     * @param uiComponent component which implements the EditableValueHolder interface
+     * @return false to overrule the annotated property e.g. if component is readonly
+     */
+    protected boolean isComponentRequired(UIComponent uiComponent)
+    {
+        if(uiComponent instanceof HtmlInputText)
+        {
+            HtmlInputText htmlInputText = (HtmlInputText)uiComponent;
+            return !(htmlInputText.isDisabled() || htmlInputText.isReadonly());
+        }
+        else if(TRINIDAD_CORE_INPUT_TEXT.equals(uiComponent.getClass().getName()))
+        {
+            return !(Boolean) ReflectionUtils
+                .tryToInvokeMethodOfClassAndMethodName(TRINIDAD_CORE_INPUT_TEXT, "isReadOnly");
+        }
+
+        return true;
+    }
+
+    private void configureMaxLengthAttribute(FacesContext facesContext,
+                                             UIComponent uiComponent,
+                                             Map<String, Object> metaData)
+    {
+        if(metaData.containsKey("max_length"))
+        {
+            int maxLength = (Integer)metaData.get("max_length");
+
+            if(uiComponent instanceof HtmlInputText)
+            {
+                HtmlInputText htmlInputText = (HtmlInputText)uiComponent;
+                htmlInputText.setMaxlength(maxLength);
+            }
+            else if(TRINIDAD_CORE_INPUT_TEXT.equals(uiComponent.getClass().getName()))
+            {
+                ReflectionUtils
+                    .tryToInvokeMethodOfClassAndMethodName(TRINIDAD_CORE_INPUT_TEXT, "setMaximumLength",
+                        new Object[] {maxLength}, new Class[] {int.class});
+            }
+
+        }
+    }
+}

Copied: myfaces/extensions/validator/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/InitPropertyValidationModulePhaseListener.java (from r697737, myfaces/extensions/validator/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/InitStaticStrategyMappingsPhaseListener.java)
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/InitPropertyValidationModulePhaseListener.java?p2=myfaces/extensions/validator/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/InitPropertyValidationModulePhaseListener.java&p1=myfaces/extensions/validator/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/InitStaticStrategyMappingsPhaseListener.java&r1=697737&r2=698056&rev=698056&view=diff
==============================================================================
--- myfaces/extensions/validator/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/InitStaticStrategyMappingsPhaseListener.java (original)
+++ myfaces/extensions/validator/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/InitPropertyValidationModulePhaseListener.java Mon Sep 22 18:19:36 2008
@@ -20,17 +20,24 @@
 
 import org.apache.myfaces.extensions.validator.baseval.WebXmlParameter;
 import org.apache.myfaces.extensions.validator.core.AbstractStartupConfigListener;
+import org.apache.myfaces.extensions.validator.core.initializer.component.DefaultComponentInitializer;
 import org.apache.myfaces.extensions.validator.util.ExtValUtils;
 
 /**
  * @author Gerhard Petracek
  */
-public class InitStaticStrategyMappingsPhaseListener extends
+public class InitPropertyValidationModulePhaseListener extends
         AbstractStartupConfigListener
 {
 
     protected void init()
     {
+        initStaticStrategyMappings();
+        initDefaultComponentInitializerName();
+    }
+
+    private void initStaticStrategyMappings()
+    {
         String jpaBasedValidation = WebXmlParameter.DEACTIVATE_JPA_BASED_VALIDATION;
         if (jpaBasedValidation == null
                 || !jpaBasedValidation.equalsIgnoreCase("true"))
@@ -42,4 +49,9 @@
                                     + ".jpa_strategy_mappings");
         }
     }
+
+    private void initDefaultComponentInitializerName()
+    {
+        DefaultComponentInitializer.setComponentInitializer(new DefaultMyFacesComponentInitializer());
+    }
 }

Modified: myfaces/extensions/validator/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/baseval/strategy/JpaValidationStrategy.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/baseval/strategy/JpaValidationStrategy.java?rev=698056&r1=698055&r2=698056&view=diff
==============================================================================
--- myfaces/extensions/validator/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/baseval/strategy/JpaValidationStrategy.java (original)
+++ myfaces/extensions/validator/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/baseval/strategy/JpaValidationStrategy.java Mon Sep 22 18:19:36 2008
@@ -81,6 +81,8 @@
             {
                 results.put("required", true);
             }
+
+            results.put("max_length", ((Column) annotation).length());
         }
         else if(annotation instanceof Basic)
         {

Modified: myfaces/extensions/validator/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/baseval/strategy/LengthStrategy.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/baseval/strategy/LengthStrategy.java?rev=698056&r1=698055&r2=698056&view=diff
==============================================================================
--- myfaces/extensions/validator/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/baseval/strategy/LengthStrategy.java (original)
+++ myfaces/extensions/validator/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/baseval/strategy/LengthStrategy.java Mon Sep 22 18:19:36 2008
@@ -54,7 +54,8 @@
     {
         Map<String, Object> results = new HashMap<String, Object>();
         int minimum = ((Length)annotation).minimum();
-        results.put("length", minimum);
+        results.put("min_length", minimum);
+        results.put("max_length", ((Length)annotation).maximum());
 
         if(minimum > 0)
         {