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/10/08 11:13:03 UTC

svn commit: r702761 - 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/factory/ core/src/main/java/org/apache/myfaces/extensions/val...

Author: gpetracek
Date: Wed Oct  8 02:13:03 2008
New Revision: 702761

URL: http://svn.apache.org/viewvc?rev=702761&view=rev
Log:
api for static mappings

Added:
    myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/loader/
    myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/loader/StaticInMemoryMappingConfig.java
    myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/loader/StaticMappingConfigEntry.java
    myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/loader/StaticMappingConfigLoader.java
    myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/loader/StaticMappingConfigLoaderNames.java
    myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/loader/StaticResourceBundleLoader.java
Modified:
    myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/ExtValContext.java
    myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/factory/FactoryNames.java
    myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/transformer/DefaultMetaDataTransformerFactory.java
    myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/message/resolver/DefaultMessageResolverFactory.java
    myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/strategy/DefaultValidationStrategyFactory.java
    myfaces/extensions/validator/trunk/examples/feature-set_01/src/main/java/org/apache/myfaces/extensions/validator/demo/gui/beans/RegistrationPage.java
    myfaces/extensions/validator/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/PropertyValidationModuleStartupListener.java

Modified: myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/ExtValContext.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/ExtValContext.java?rev=702761&r1=702760&r2=702761&view=diff
==============================================================================
--- myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/ExtValContext.java (original)
+++ myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/ExtValContext.java Wed Oct  8 02:13:03 2008
@@ -24,6 +24,8 @@
 import org.apache.myfaces.extensions.validator.core.recorder.ProcessedInformationRecorder;
 import org.apache.myfaces.extensions.validator.core.factory.FactoryFinder;
 import org.apache.myfaces.extensions.validator.core.factory.DefaultFactoryFinder;
+import org.apache.myfaces.extensions.validator.core.loader.StaticMappingConfigLoader;
+import org.apache.myfaces.extensions.validator.core.loader.StaticMappingConfigLoaderNames;
 import org.apache.myfaces.extensions.validator.internal.UsageCategory;
 import org.apache.myfaces.extensions.validator.internal.UsageInformation;
 import org.apache.myfaces.extensions.validator.util.ClassUtils;
@@ -56,7 +58,9 @@
 
     private Map<String, Object> globalProperties = new HashMap<String, Object>();
 
-    private List<String> staticStrategyMappings = new ArrayList<String>();
+    private Map<StaticMappingConfigLoaderNames, List<StaticMappingConfigLoader<String, String>>>
+        staticMappingConfigLoaderMap
+        = new HashMap<StaticMappingConfigLoaderNames, List<StaticMappingConfigLoader<String, String>>>();
 
     public static ExtValContext getContext()
     {
@@ -185,16 +189,30 @@
         }
     }
 
-    public List<String> getStaticStrategyMappingSources()
+    public List<StaticMappingConfigLoader<String, String>> getStaticMappingConfigLoaders(
+        StaticMappingConfigLoaderNames name)
     {
-        return this.staticStrategyMappings;
+        if(!this.staticMappingConfigLoaderMap.containsKey(name))
+        {
+            List<StaticMappingConfigLoader<String, String>> staticMappingConfigLoaderList
+                = new ArrayList<StaticMappingConfigLoader<String, String>>();
+            this.staticMappingConfigLoaderMap.put(name, staticMappingConfigLoaderList);
+        }
+        return this.staticMappingConfigLoaderMap.get(name);
     }
 
-    public void addStaticStrategyMappingSource(String resourceBundleName)
+    public void addStaticMappingConfigLoader(StaticMappingConfigLoaderNames name, StaticMappingConfigLoader<String,
+                                             String> staticMappingConfigLoader)
     {
         synchronized (this)
         {
-            this.staticStrategyMappings.add(resourceBundleName);
+            List<StaticMappingConfigLoader<String, String>> staticMappingConfigLoaderList;
+            if(!this.staticMappingConfigLoaderMap.containsKey(name))
+            {
+                staticMappingConfigLoaderList = new ArrayList<StaticMappingConfigLoader<String, String>>();
+                this.staticMappingConfigLoaderMap.put(name, staticMappingConfigLoaderList);
+            }
+            this.staticMappingConfigLoaderMap.get(name).add(staticMappingConfigLoader);
         }
     }
 
@@ -225,4 +243,4 @@
     {
         return this.globalProperties.get(name);
     }
-}
\ No newline at end of file
+}

Modified: myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/factory/FactoryNames.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/factory/FactoryNames.java?rev=702761&r1=702760&r2=702761&view=diff
==============================================================================
--- myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/factory/FactoryNames.java (original)
+++ myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/factory/FactoryNames.java Wed Oct  8 02:13:03 2008
@@ -18,10 +18,14 @@
  */
 package org.apache.myfaces.extensions.validator.core.factory;
 
+import org.apache.myfaces.extensions.validator.internal.UsageInformation;
+import org.apache.myfaces.extensions.validator.internal.UsageCategory;
+
 /**
  * @author Gerhard Petracek
  * @since 1.x.1
  */
+@UsageInformation({UsageCategory.API})
 public enum FactoryNames
 {
     COMPONENT_ANNOTATION_EXTRACTOR_FACTORY,

Added: myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/loader/StaticInMemoryMappingConfig.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/loader/StaticInMemoryMappingConfig.java?rev=702761&view=auto
==============================================================================
--- myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/loader/StaticInMemoryMappingConfig.java (added)
+++ myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/loader/StaticInMemoryMappingConfig.java Wed Oct  8 02:13:03 2008
@@ -0,0 +1,53 @@
+/*
+ * 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.loader;
+
+import org.apache.myfaces.extensions.validator.internal.UsageInformation;
+import org.apache.myfaces.extensions.validator.internal.UsageCategory;
+
+import java.util.List;
+import java.util.ArrayList;
+
+/**
+ * @author Gerhard Petracek
+ * @since 1.x.1
+ */
+@UsageInformation({UsageCategory.INTERNAL, UsageCategory.REUSE})
+public class StaticInMemoryMappingConfig implements StaticMappingConfigLoader<String, String>
+{
+    private List<StaticMappingConfigEntry<String, String>> mappings
+        = new ArrayList<StaticMappingConfigEntry<String, String>>();;
+
+    public void setSourceOfMapping(String path)
+    {
+    }
+
+    public List<StaticMappingConfigEntry<String, String>> getMapping()
+    {
+        return mappings;
+    }
+
+    public void addMapping(String source, String target)
+    {
+        StaticMappingConfigEntry<String, String> entry = new StaticMappingConfigEntry<String, String>();
+        entry.setSource(source);
+        entry.setTarget(target);
+        this.mappings.add(entry);
+    }
+}
\ No newline at end of file

Added: myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/loader/StaticMappingConfigEntry.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/loader/StaticMappingConfigEntry.java?rev=702761&view=auto
==============================================================================
--- myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/loader/StaticMappingConfigEntry.java (added)
+++ myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/loader/StaticMappingConfigEntry.java Wed Oct  8 02:13:03 2008
@@ -0,0 +1,53 @@
+/*
+ * 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.loader;
+
+import org.apache.myfaces.extensions.validator.internal.UsageCategory;
+import org.apache.myfaces.extensions.validator.internal.UsageInformation;
+
+/**
+ * @author Gerhard Petracek
+ * @since 1.x.1
+ */
+@UsageInformation(UsageCategory.API)
+public class StaticMappingConfigEntry<T, R>
+{
+    private T source;
+    private R target;
+
+    public T getSource()
+    {
+        return source;
+    }
+
+    public void setSource(T source)
+    {
+        this.source = source;
+    }
+
+    public R getTarget()
+    {
+        return target;
+    }
+
+    public void setTarget(R target)
+    {
+        this.target = target;
+    }
+}
\ No newline at end of file

Added: myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/loader/StaticMappingConfigLoader.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/loader/StaticMappingConfigLoader.java?rev=702761&view=auto
==============================================================================
--- myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/loader/StaticMappingConfigLoader.java (added)
+++ myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/loader/StaticMappingConfigLoader.java Wed Oct  8 02:13:03 2008
@@ -0,0 +1,35 @@
+/*
+ * 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.loader;
+
+import org.apache.myfaces.extensions.validator.internal.UsageCategory;
+import org.apache.myfaces.extensions.validator.internal.UsageInformation;
+
+import java.util.List;
+
+/**
+ * @author Gerhard Petracek
+ * @since 1.x.1
+ */
+@UsageInformation(UsageCategory.API)
+public interface StaticMappingConfigLoader<T, R>
+{
+    void setSourceOfMapping(String path);
+    List<StaticMappingConfigEntry<T, R>> getMapping();
+}
\ No newline at end of file

Added: myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/loader/StaticMappingConfigLoaderNames.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/loader/StaticMappingConfigLoaderNames.java?rev=702761&view=auto
==============================================================================
--- myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/loader/StaticMappingConfigLoaderNames.java (added)
+++ myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/loader/StaticMappingConfigLoaderNames.java Wed Oct  8 02:13:03 2008
@@ -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.loader;
+
+import org.apache.myfaces.extensions.validator.internal.UsageInformation;
+import org.apache.myfaces.extensions.validator.internal.UsageCategory;
+
+/**
+ * @author Gerhard Petracek
+ * @since 1.x.1
+ */
+@UsageInformation({UsageCategory.API})
+public enum StaticMappingConfigLoaderNames
+{
+    ANNOTATION_TO_VALIDATION_STRATEGY_CONFIG_LOADER,
+    VALIDATION_STRATEGY_TO_MESSAGE_RESOLVER_CONFIG_LOADER,
+    VALIDATION_STRATEGY_TO_META_DATA_TRANSFORMER_CONFIG_LOADER
+}
\ No newline at end of file

Added: myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/loader/StaticResourceBundleLoader.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/loader/StaticResourceBundleLoader.java?rev=702761&view=auto
==============================================================================
--- myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/loader/StaticResourceBundleLoader.java (added)
+++ myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/loader/StaticResourceBundleLoader.java Wed Oct  8 02:13:03 2008
@@ -0,0 +1,85 @@
+/*
+ * 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.loader;
+
+import org.apache.myfaces.extensions.validator.internal.UsageInformation;
+import org.apache.myfaces.extensions.validator.internal.UsageCategory;
+
+import java.util.List;
+import java.util.ResourceBundle;
+import java.util.Enumeration;
+import java.util.ArrayList;
+
+/**
+ * @author Gerhard Petracek
+ * @since 1.x.1
+ */
+@UsageInformation({UsageCategory.INTERNAL, UsageCategory.REUSE})
+public class StaticResourceBundleLoader implements StaticMappingConfigLoader<String, String>
+{
+    private String path;
+    private List<StaticMappingConfigEntry<String, String>> mappings;
+
+    public void setSourceOfMapping(String path)
+    {
+        this.path = path;
+        //force reload
+        mappings = null;
+    }
+
+    public List<StaticMappingConfigEntry<String, String>> getMapping()
+    {
+        if(mappings != null)
+        {
+            return mappings;
+        }
+
+        mappings = new ArrayList<StaticMappingConfigEntry<String, String>>();
+
+        ResourceBundle mapping = ResourceBundle.getBundle(path);
+
+        if (mapping == null)
+        {
+            //logging
+            return new ArrayList<StaticMappingConfigEntry<String, String>>();
+        }
+
+        Enumeration keys = mapping.getKeys();
+
+        String annotationClassName;
+        String validationStrategyClassName;
+
+        while (keys.hasMoreElements())
+        {
+            annotationClassName = (String) keys.nextElement();
+            validationStrategyClassName = mapping.getString(annotationClassName);
+
+            addMapping(annotationClassName, validationStrategyClassName);
+        }
+        return mappings;
+    }
+
+    private void addMapping(String annotationClassName, String validationStrategyClassName)
+    {
+        StaticMappingConfigEntry<String, String> entry = new StaticMappingConfigEntry<String, String>();
+        entry.setSource(annotationClassName);
+        entry.setTarget(validationStrategyClassName);
+        this.mappings.add(entry);
+    }
+}

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=702761&r1=702760&r2=702761&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 Wed Oct  8 02:13:03 2008
@@ -32,6 +32,10 @@
 import org.apache.myfaces.extensions.validator.core.metadata.transformer.mapper
         .BeanValidationStrategyToMetaDataTransformerNameMapper;
 import org.apache.myfaces.extensions.validator.core.mapper.NameMapper;
+import org.apache.myfaces.extensions.validator.core.loader.StaticMappingConfigLoader;
+import org.apache.myfaces.extensions.validator.core.loader.StaticMappingConfigLoaderNames;
+import org.apache.myfaces.extensions.validator.core.loader.StaticMappingConfigEntry;
+import org.apache.myfaces.extensions.validator.core.ExtValContext;
 import org.apache.myfaces.extensions.validator.util.ClassUtils;
 import org.apache.myfaces.extensions.validator.internal.UsageInformation;
 import org.apache.myfaces.extensions.validator.internal.UsageCategory;
@@ -60,7 +64,7 @@
 {
     protected final Log logger = LogFactory.getLog(getClass());
 
-    private static Map<String, String> validationStrategyToMetaDataTransformerMapping = new HashMap<String, String>();
+    private static Map<String, String> validationStrategyToMetaDataTransformerMapping;
     private static List<NameMapper<ValidationStrategy>> nameMapperList
         = new ArrayList<NameMapper<ValidationStrategy>>();
 
@@ -102,6 +106,11 @@
                                         .getValidationStrategyClassName();
         }
 
+        if (validationStrategyToMetaDataTransformerMapping == null)
+        {
+            initStaticMappings();
+        }
+
         if (validationStrategyToMetaDataTransformerMapping.containsKey(validationStrategyName))
         {
             return (MetaDataTransformer)ClassUtils.tryToInstantiateClassForName(
@@ -126,12 +135,7 @@
             {
                 if(validationStrategyName != null)
                 {
-                    validationStrategyToMetaDataTransformerMapping.put(validationStrategyName, transformerName);
-
-                    if(logger.isTraceEnabled())
-                    {
-                        logger.trace(transformerName + " used for " + validationStrategyName);
-                    }
+                    addMapping(validationStrategyName, transformerName);
                 }
                 return metaDataTransformer;
             }
@@ -139,4 +143,42 @@
 
         return null;
     }
+
+    private void initStaticMappings()
+    {
+        synchronized (DefaultMetaDataTransformerFactory.class)
+        {
+            validationStrategyToMetaDataTransformerMapping = new HashMap<String, String>();
+
+            //setup internal static mappings
+            for (StaticMappingConfigLoader<String, String> staticMappingConfigLoader :
+                ExtValContext.getContext().getStaticMappingConfigLoaders(
+                    StaticMappingConfigLoaderNames.VALIDATION_STRATEGY_TO_META_DATA_TRANSFORMER_CONFIG_LOADER))
+            {
+                setupStrategyMappings(staticMappingConfigLoader.getMapping());
+            }
+        }
+    }
+
+    private void setupStrategyMappings(List<StaticMappingConfigEntry<String, String>> mappings)
+    {
+        for(StaticMappingConfigEntry<String, String> mapping : mappings)
+        {
+            addMapping(mapping.getSource(), mapping.getTarget());
+        }
+    }
+
+    private void addMapping(String validationStrategyName, String transformerName)
+    {
+        if(logger.isTraceEnabled())
+        {
+            logger.trace("adding validation strategy to meta-data transformer mapping: "
+                + validationStrategyName + " -> " + transformerName);
+        }
+
+        synchronized (DefaultMetaDataTransformerFactory.class)
+        {
+            validationStrategyToMetaDataTransformerMapping.put(validationStrategyName, transformerName);
+        }
+    }
 }
\ No newline at end of file

Modified: myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/message/resolver/DefaultMessageResolverFactory.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/message/resolver/DefaultMessageResolverFactory.java?rev=702761&r1=702760&r2=702761&view=diff
==============================================================================
--- myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/message/resolver/DefaultMessageResolverFactory.java (original)
+++ myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/message/resolver/DefaultMessageResolverFactory.java Wed Oct  8 02:13:03 2008
@@ -31,6 +31,10 @@
 import org.apache.myfaces.extensions.validator.core.validation.message.
         resolver.mapper.SimpleValidationStrategyToMsgResolverNameMapper;
 import org.apache.myfaces.extensions.validator.core.validation.strategy.ValidationStrategy;
+import org.apache.myfaces.extensions.validator.core.loader.StaticMappingConfigLoader;
+import org.apache.myfaces.extensions.validator.core.loader.StaticMappingConfigEntry;
+import org.apache.myfaces.extensions.validator.core.loader.StaticMappingConfigLoaderNames;
+import org.apache.myfaces.extensions.validator.core.ExtValContext;
 import org.apache.myfaces.extensions.validator.util.ClassUtils;
 import org.apache.myfaces.extensions.validator.internal.ToDo;
 import org.apache.myfaces.extensions.validator.internal.Priority;
@@ -57,8 +61,7 @@
 {
     protected final Log logger = LogFactory.getLog(getClass());
 
-    private static Map<String, String> strategyMessageResolverMapping =
-        new HashMap<String, String>();
+    private static Map<String, String> strategyMessageResolverMapping;
     private static List<NameMapper<ValidationStrategy>> nameMapperList =
         new ArrayList<NameMapper<ValidationStrategy>>();
 
@@ -88,6 +91,11 @@
     {
         String strategyName = validationStrategy.getClass().getName();
 
+        if (strategyMessageResolverMapping == null)
+        {
+            initStaticMappings();
+        }
+
         if (strategyMessageResolverMapping.containsKey(strategyName))
         {
             return (MessageResolver) ClassUtils
@@ -126,12 +134,42 @@
         return new DefaultValidationErrorMessageResolver();
     }
 
+    private void initStaticMappings()
+    {
+        synchronized (DefaultMessageResolverFactory.class)
+        {
+            strategyMessageResolverMapping = new HashMap<String, String>();
+
+            //setup internal static mappings
+            for (StaticMappingConfigLoader<String, String> staticMappingConfigLoader :
+                ExtValContext.getContext().getStaticMappingConfigLoaders(
+                    StaticMappingConfigLoaderNames.VALIDATION_STRATEGY_TO_MESSAGE_RESOLVER_CONFIG_LOADER))
+            {
+                setupStrategyMappings(staticMappingConfigLoader.getMapping());
+            }
+        }
+    }
+
+    private void setupStrategyMappings(List<StaticMappingConfigEntry<String,String>> mappings)
+    {
+        for(StaticMappingConfigEntry<String, String> mapping : mappings)
+        {
+            addMapping(mapping.getSource(), mapping.getTarget());
+        }
+    }
+
     @ToDo(value = Priority.MEDIUM, description = "logging")
-    private void addMapping(String strategyName, String messageResolverName)
+    private void addMapping(String validationStrategyName, String messageResolverName)
     {
+        if(logger.isTraceEnabled())
+        {
+            logger.trace("adding static validation strategy to message resolver mapping: "
+                + validationStrategyName + " -> " + messageResolverName);
+        }
+
         synchronized (DefaultMessageResolverFactory.class)
         {
-            strategyMessageResolverMapping.put(strategyName, messageResolverName);
+            strategyMessageResolverMapping.put(validationStrategyName, messageResolverName);
         }
     }
 }

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=702761&r1=702760&r2=702761&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 Wed Oct  8 02:13:03 2008
@@ -22,7 +22,11 @@
 import org.apache.myfaces.extensions.validator.core.WebXmlParameter;
 import org.apache.myfaces.extensions.validator.core.ExtValContext;
 import org.apache.myfaces.extensions.validator.core.CustomInfo;
+import org.apache.myfaces.extensions.validator.core.loader.StaticMappingConfigLoader;
 import org.apache.myfaces.extensions.validator.core.mapper.NameMapper;
+import org.apache.myfaces.extensions.validator.core.loader.StaticMappingConfigEntry;
+import org.apache.myfaces.extensions.validator.core.loader.StaticResourceBundleLoader;
+import org.apache.myfaces.extensions.validator.core.loader.StaticMappingConfigLoaderNames;
 import org.apache.myfaces.extensions.validator.core.validation.strategy.mapper
     .AnnotationToValidationStrategyBeanNameMapper;
 import org.apache.myfaces.extensions.validator.core.validation.strategy.mapper
@@ -44,12 +48,10 @@
 
 import java.lang.annotation.Annotation;
 import java.util.ArrayList;
-import java.util.Enumeration;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.MissingResourceException;
-import java.util.ResourceBundle;
 
 
 /**
@@ -102,7 +104,7 @@
     {
         if (annotationStrategyMapping == null)
         {
-            initStaticStrategyMappings();
+            initStaticMappings();
         }
 
         String annotationName = annotation.annotationType().getName();
@@ -153,33 +155,44 @@
     }
 
     @ToDo(value = Priority.MEDIUM, description = "logging")
-    private void addMapping(String annotationName, String strategyName)
+    private void addMapping(String annotationName, String validationStrategyName)
     {
+        if(logger.isTraceEnabled())
+        {
+            logger.trace("adding annotation to validation strategy mapping: "
+                + annotationName + " -> " + validationStrategyName);
+        }
+
         synchronized (DefaultValidationStrategyFactory.class)
         {
-            annotationStrategyMapping.put(annotationName, strategyName);
+            annotationStrategyMapping.put(annotationName, validationStrategyName);
         }
     }
 
     @ToDo(value = Priority.MEDIUM, description = "logging")
-    private void initStaticStrategyMappings()
+    private void initStaticMappings()
     {
         synchronized (DefaultValidationStrategyFactory.class)
         {
             annotationStrategyMapping = new HashMap<String, String>();
 
             //setup internal static mappings
-            for (String internalMappingSource : ExtValContext.getContext().getStaticStrategyMappingSources())
+            for (StaticMappingConfigLoader<String, String> staticMappingConfigLoader :
+                ExtValContext.getContext().getStaticMappingConfigLoaders(
+                    StaticMappingConfigLoaderNames.ANNOTATION_TO_VALIDATION_STRATEGY_CONFIG_LOADER))
             {
-                setupStrategyMappings(internalMappingSource);
+                setupStrategyMappings(staticMappingConfigLoader.getMapping());
             }
 
+            StaticMappingConfigLoader<String, String> staticMappingConfigLoader = new StaticResourceBundleLoader();
             //try to setup mapping with base name by convention - overrides default mapping
             try
             {
                 //build convention (strategy mapping)
-                setupStrategyMappings(ExtValContext.getContext().getInformationProviderBean()
+                staticMappingConfigLoader.setSourceOfMapping(ExtValContext.getContext().getInformationProviderBean()
                     .get(CustomInfo.STATIC_STRATEGY_MAPPING_SOURCE));
+
+                setupStrategyMappings(staticMappingConfigLoader.getMapping());
             }
             catch (Throwable t)
             {
@@ -192,7 +205,9 @@
             {
                 try
                 {
-                    setupStrategyMappings(customMappingBaseName);
+                    staticMappingConfigLoader = new StaticResourceBundleLoader();
+                    staticMappingConfigLoader.setSourceOfMapping(customMappingBaseName);
+                    setupStrategyMappings(staticMappingConfigLoader.getMapping());
                 }
                 catch (MissingResourceException e)
                 {
@@ -202,26 +217,11 @@
         }
     }
 
-    private void setupStrategyMappings(String bundle)
+    private void setupStrategyMappings(List<StaticMappingConfigEntry<String,String>> mappings)
     {
-        ResourceBundle strategyMapping = ResourceBundle.getBundle(bundle);
-
-        if (strategyMapping == null)
+        for(StaticMappingConfigEntry<String, String> mapping : mappings)
         {
-            return;
-        }
-
-        Enumeration keys = strategyMapping.getKeys();
-
-        String annotationClassName;
-        String validationStrategyClassName;
-
-        while (keys.hasMoreElements())
-        {
-            annotationClassName = (String) keys.nextElement();
-            validationStrategyClassName = strategyMapping.getString(annotationClassName);
-
-            addMapping(annotationClassName, validationStrategyClassName);
+            addMapping(mapping.getSource(), mapping.getTarget());
         }
     }
 }

Modified: myfaces/extensions/validator/trunk/examples/feature-set_01/src/main/java/org/apache/myfaces/extensions/validator/demo/gui/beans/RegistrationPage.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/examples/feature-set_01/src/main/java/org/apache/myfaces/extensions/validator/demo/gui/beans/RegistrationPage.java?rev=702761&r1=702760&r2=702761&view=diff
==============================================================================
--- myfaces/extensions/validator/trunk/examples/feature-set_01/src/main/java/org/apache/myfaces/extensions/validator/demo/gui/beans/RegistrationPage.java (original)
+++ myfaces/extensions/validator/trunk/examples/feature-set_01/src/main/java/org/apache/myfaces/extensions/validator/demo/gui/beans/RegistrationPage.java Wed Oct  8 02:13:03 2008
@@ -40,6 +40,7 @@
 
     @Required
     @Equals("passwordRepeated")
+    @JoinValidation(value = "#{registrationPage.person.password}")
     private String password;
 
     @Required(validationErrorMsgKey = "repeated_password_required")

Modified: myfaces/extensions/validator/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/PropertyValidationModuleStartupListener.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/PropertyValidationModuleStartupListener.java?rev=702761&r1=702760&r2=702761&view=diff
==============================================================================
--- myfaces/extensions/validator/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/PropertyValidationModuleStartupListener.java (original)
+++ myfaces/extensions/validator/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/PropertyValidationModuleStartupListener.java Wed Oct  8 02:13:03 2008
@@ -21,6 +21,9 @@
 import org.apache.myfaces.extensions.validator.baseval.WebXmlParameter;
 import org.apache.myfaces.extensions.validator.core.startup.AbstractStartupListener;
 import org.apache.myfaces.extensions.validator.core.ExtValContext;
+import org.apache.myfaces.extensions.validator.core.loader.StaticResourceBundleLoader;
+import org.apache.myfaces.extensions.validator.core.loader.StaticMappingConfigLoader;
+import org.apache.myfaces.extensions.validator.core.loader.StaticMappingConfigLoaderNames;
 import org.apache.myfaces.extensions.validator.internal.ToDo;
 import org.apache.myfaces.extensions.validator.internal.Priority;
 import org.apache.myfaces.extensions.validator.crossval.recorder.CrossValidationUserInputRecorder;
@@ -44,8 +47,12 @@
         if (jpaBasedValidation == null
                 || !jpaBasedValidation.equalsIgnoreCase("true"))
         {
-            ExtValContext.getContext().addStaticStrategyMappingSource(
-                            ExtValInformation.EXTENSIONS_VALIDATOR_BASE_PACKAGE_NAME + ".jpa_strategy_mappings");
+            StaticMappingConfigLoader<String, String> staticMappingConfigLoader = new StaticResourceBundleLoader();
+            staticMappingConfigLoader.setSourceOfMapping(
+                ExtValInformation.EXTENSIONS_VALIDATOR_BASE_PACKAGE_NAME +".jpa_strategy_mappings");
+
+            ExtValContext.getContext().addStaticMappingConfigLoader(
+             StaticMappingConfigLoaderNames.ANNOTATION_TO_VALIDATION_STRATEGY_CONFIG_LOADER, staticMappingConfigLoader);
         }
     }