You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by gp...@apache.org on 2009/11/13 03:48:58 UTC
svn commit: r835712 [6/19] - in
/myfaces/extensions/validator/branches/branch_for_jsf_2_0: ./ assembly/
assembly/src/ assembly/src/main/ assembly/src/main/assembly/
assembly/src/main/resources/ component-support/
component-support/generic-support/ comp...
Added: myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/extractor/DefaultComponentMetaDataExtractorFactory.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/extractor/DefaultComponentMetaDataExtractorFactory.java?rev=835712&view=auto
==============================================================================
--- myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/extractor/DefaultComponentMetaDataExtractorFactory.java (added)
+++ myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/extractor/DefaultComponentMetaDataExtractorFactory.java Fri Nov 13 02:48:45 2009
@@ -0,0 +1,102 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.myfaces.extensions.validator.core.metadata.extractor;
+
+import org.apache.myfaces.extensions.validator.core.WebXmlParameter;
+import org.apache.myfaces.extensions.validator.core.ExtValContext;
+import org.apache.myfaces.extensions.validator.core.CustomInformation;
+import org.apache.myfaces.extensions.validator.util.ClassUtils;
+import org.apache.myfaces.extensions.validator.util.ExtValUtils;
+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.UsageCategory;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * This factory creates a meta-data extractor which extracts the meta-data
+ * of the value binding of a component.
+ * <p/>
+ * order:<br/>
+ * <ol>
+ * <li>configured meta-data extractor (web.xml)</li>
+ * <li>configured meta-data extractor (information provider bean)</li>
+ * <li>default implementation</li>
+ * </ol>
+ *
+ * @author Gerhard Petracek
+ * @since 1.x.1
+ */
+@UsageInformation(UsageCategory.INTERNAL)
+public class DefaultComponentMetaDataExtractorFactory implements ComponentMetaDataExtractorFactory
+{
+ private final Log logger = LogFactory.getLog(getClass());
+
+ private static MetaDataExtractor metaDataExtractor = null;
+
+ public DefaultComponentMetaDataExtractorFactory()
+ {
+ if(logger.isDebugEnabled())
+ {
+ logger.debug(getClass().getName() + " instantiated");
+ }
+ }
+
+ @ToDo(value = Priority.MEDIUM, description = "logging")
+ public MetaDataExtractor create()
+ {
+ return createWith(null);
+ }
+
+ public MetaDataExtractor createWith(Map<String, Object> properties)
+ {
+ if (metaDataExtractor == null)
+ {
+ List<String> metaDataExtractorClassNames = new ArrayList<String>();
+
+ metaDataExtractorClassNames.add(WebXmlParameter.CUSTOM_COMPONENT_META_DATA_EXTRACTOR);
+ metaDataExtractorClassNames
+ .add(ExtValContext.getContext().getInformationProviderBean()
+ .get(CustomInformation.COMPONENT_META_DATA_EXTRACTOR));
+ metaDataExtractorClassNames.add(DefaultComponentMetaDataExtractor.class.getName());
+
+ for (String className : metaDataExtractorClassNames)
+ {
+ metaDataExtractor = (MetaDataExtractor) ClassUtils.tryToInstantiateClassForName(className);
+
+ if (metaDataExtractor != null)
+ {
+ break;
+ }
+ }
+ }
+
+ if(logger.isTraceEnabled())
+ {
+ logger.trace(metaDataExtractor.getClass().getName() + " created");
+ }
+
+ return ExtValUtils.createInterceptedMetaDataExtractorWith(metaDataExtractor, properties);
+ }
+}
Added: myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/extractor/MetaDataExtractor.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/extractor/MetaDataExtractor.java?rev=835712&view=auto
==============================================================================
--- myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/extractor/MetaDataExtractor.java (added)
+++ myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/extractor/MetaDataExtractor.java Fri Nov 13 02:48:45 2009
@@ -0,0 +1,38 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.myfaces.extensions.validator.core.metadata.extractor;
+
+import org.apache.myfaces.extensions.validator.core.property.PropertyInformation;
+import org.apache.myfaces.extensions.validator.internal.UsageCategory;
+import org.apache.myfaces.extensions.validator.internal.UsageInformation;
+
+import javax.faces.context.FacesContext;
+
+/**
+ * An meta-data extractor is responsible to analyze an object
+ * and returns all available meta-data information
+ *
+ * @author Gerhard Petracek
+ * @since 1.x.1
+ */
+@UsageInformation(UsageCategory.API)
+public interface MetaDataExtractor
+{
+ PropertyInformation extract(FacesContext facesContext, Object object);
+}
Added: myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/transformer/BeanMetaDataTransformerAdapter.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/transformer/BeanMetaDataTransformerAdapter.java?rev=835712&view=auto
==============================================================================
--- myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/transformer/BeanMetaDataTransformerAdapter.java (added)
+++ myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/transformer/BeanMetaDataTransformerAdapter.java Fri Nov 13 02:48:45 2009
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.myfaces.extensions.validator.core.metadata.transformer;
+
+import org.apache.myfaces.extensions.validator.internal.UsageCategory;
+import org.apache.myfaces.extensions.validator.internal.UsageInformation;
+
+/**
+ * it's just a helper for proxies - you just need it, if you define the equivalent validation strategy as bean and
+ * e.g. spring creates a proxy for it.
+ *
+ * if there is also a proxy for the extractor you can use the className property to manually repeat the
+ * full qualified class name.
+ *
+ * @see org.apache.myfaces.extensions.validator.core.validation.strategy.BeanValidationStrategyAdapter
+ *
+ * @author Gerhard Petracek
+ * @since 1.x.1
+ */
+@UsageInformation({UsageCategory.REUSE})
+public interface BeanMetaDataTransformerAdapter extends MetaDataTransformer
+{
+ String getMetaDataTransformerClassName();
+}
\ No newline at end of file
Added: myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/transformer/BeanMetaDataTransformerAdapterImpl.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/transformer/BeanMetaDataTransformerAdapterImpl.java?rev=835712&view=auto
==============================================================================
--- myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/transformer/BeanMetaDataTransformerAdapterImpl.java (added)
+++ myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/transformer/BeanMetaDataTransformerAdapterImpl.java Fri Nov 13 02:48:45 2009
@@ -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.metadata.transformer;
+
+import org.apache.myfaces.extensions.validator.internal.UsageCategory;
+import org.apache.myfaces.extensions.validator.internal.UsageInformation;
+import org.apache.myfaces.extensions.validator.core.metadata.MetaDataEntry;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.util.Map;
+
+/**
+ * it's just a helper for proxies - you just need it, if you define the equivalent validation strategy as bean and
+ * e.g. spring creates a proxy for it.
+ *
+ * if there is also a proxy for the transformer you can use the className property to manually repeat the
+ * full qualified class name.
+ *
+ * @see org.apache.myfaces.extensions.validator.core.validation.strategy.BeanValidationStrategyAdapter
+ *
+ * @author Gerhard Petracek
+ * @since 1.x.1
+ */
+@UsageInformation({UsageCategory.REUSE})
+public class BeanMetaDataTransformerAdapterImpl implements MetaDataTransformer, BeanMetaDataTransformerAdapter
+{
+ protected final Log logger = LogFactory.getLog(getClass());
+
+ private MetaDataTransformer metaDataTransformer;
+ private String metaDataTransformerClassName;
+
+ public Map<String, Object> convertMetaData(MetaDataEntry metaDataEntry)
+ {
+ return this.metaDataTransformer.convertMetaData(metaDataEntry);
+ }
+
+ public String getMetaDataTransformerClassName()
+ {
+ if(metaDataTransformerClassName != null)
+ {
+ return metaDataTransformerClassName;
+ }
+ if(metaDataTransformer.getClass().getPackage() != null)
+ {
+ metaDataTransformer.getClass();
+ }
+
+ return null;
+ }
+
+ /*
+ * generated
+ */
+ public void setMetaDataTransformerClassName(String metaDataTransformerClassName)
+ {
+ this.metaDataTransformerClassName = metaDataTransformerClassName;
+ }
+
+ public MetaDataTransformer getMetaDataTransformer()
+ {
+ return metaDataTransformer;
+ }
+
+ public void setMetaDataTransformer(MetaDataTransformer metaDataTransformer)
+ {
+ this.metaDataTransformer = metaDataTransformer;
+ }
+}
Added: myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/transformer/DefaultMetaDataTransformerFactory.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/transformer/DefaultMetaDataTransformerFactory.java?rev=835712&view=auto
==============================================================================
--- myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/transformer/DefaultMetaDataTransformerFactory.java (added)
+++ myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/transformer/DefaultMetaDataTransformerFactory.java Fri Nov 13 02:48:45 2009
@@ -0,0 +1,265 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.myfaces.extensions.validator.core.metadata.transformer;
+
+import org.apache.myfaces.extensions.validator.core.factory.ClassMappingFactory;
+import org.apache.myfaces.extensions.validator.core.factory.AbstractNameMapperAwareFactory;
+import org.apache.myfaces.extensions.validator.core.validation.strategy.ValidationStrategy;
+import org.apache.myfaces.extensions.validator.core.validation.strategy.BeanValidationStrategyAdapter;
+import org.apache.myfaces.extensions.validator.core.validation.strategy.IdentifiableValidationStrategy;
+import org.apache.myfaces.extensions.validator.core.mapper.NameMapper;
+import org.apache.myfaces.extensions.validator.core.mapper.SubMapperAwareNameMapper;
+import org.apache.myfaces.extensions.validator.core.Nested;
+import org.apache.myfaces.extensions.validator.core.initializer.configuration.StaticConfiguration;
+import org.apache.myfaces.extensions.validator.core.initializer.configuration.StaticConfigurationNames;
+import org.apache.myfaces.extensions.validator.core.initializer.configuration.StaticConfigurationEntry;
+import org.apache.myfaces.extensions.validator.core.ExtValContext;
+import org.apache.myfaces.extensions.validator.core.metadata.transformer.mapper.
+ ValidationStrategyToMetaDataTransformerSubMapperAwareNameMapper;
+import org.apache.myfaces.extensions.validator.util.ClassUtils;
+import org.apache.myfaces.extensions.validator.internal.UsageInformation;
+import org.apache.myfaces.extensions.validator.internal.UsageCategory;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+
+/**
+ * Factory which creates the MetaDataTransformer for a given ValidationStrategy
+ *
+ * @author Gerhard Petracek
+ * @since 1.x.1
+ */
+/*
+ * ValidationStrategy -> MetaDataTransformer instead of Meta-Data -> MetaDataTransformer
+ * to avoid a second static mapping e.g. for jpa annotations
+ */
+@UsageInformation({UsageCategory.INTERNAL, UsageCategory.CUSTOMIZABLE})
+public class DefaultMetaDataTransformerFactory extends AbstractNameMapperAwareFactory<ValidationStrategy>
+ implements ClassMappingFactory<ValidationStrategy, MetaDataTransformer>
+{
+ protected final Log logger = LogFactory.getLog(getClass());
+
+ private Map<String, String> validationStrategyToMetaDataTransformerMapping;
+ private List<NameMapper<ValidationStrategy>> nameMapperList = new ArrayList<NameMapper<ValidationStrategy>>();
+ private List<NameMapper<ValidationStrategy>> subNameMapperList =
+ new ArrayList<NameMapper<ValidationStrategy>>();
+
+ public DefaultMetaDataTransformerFactory()
+ {
+ if(logger.isDebugEnabled())
+ {
+ logger.debug(getClass().getName() + " instantiated");
+ }
+
+ //since there is no guarantee that the startup listener of the core gets executed first
+ register(new ValidationStrategyToMetaDataTransformerSubMapperAwareNameMapper());
+ }
+
+ public MetaDataTransformer create(ValidationStrategy validationStrategy)
+ {
+ String validationStrategyName = createValidationStrategyName(validationStrategy);
+
+ tryToInitStaticMappings();
+
+ MetaDataTransformer metaDataTransformer =
+ tryToResolveCachedMetaDataTransformer(validationStrategy, validationStrategyName);
+
+ if(metaDataTransformer != null)
+ {
+ return metaDataTransformer;
+ }
+
+ return createAndCacheMetaDataTransformer(validationStrategy, validationStrategyName);
+ }
+
+ private String createValidationStrategyName(ValidationStrategy validationStrategy)
+ {
+ boolean isProxyDetected = isProxy(validationStrategy);
+ //in case of a proxy and the usage of a BeanValidationStrategyAdapter
+ if (isProxyDetected && validationStrategy instanceof BeanValidationStrategyAdapter)
+ {
+ return ((BeanValidationStrategyAdapter)validationStrategy)
+ .getValidationStrategyClassName();
+ }
+
+ return !isProxyDetected ? validationStrategy.getClass().getName() : null;
+ }
+
+ private void tryToInitStaticMappings()
+ {
+ if (validationStrategyToMetaDataTransformerMapping == null)
+ {
+ initStaticMappings();
+ }
+ }
+
+ private boolean isProxy(ValidationStrategy validationStrategy)
+ {
+ return validationStrategy.getClass().getPackage() == null;
+ }
+
+ private MetaDataTransformer createAndCacheMetaDataTransformer(
+ ValidationStrategy validationStrategy, String validationStrategyName)
+ {
+ MetaDataTransformer metaDataTransformer;
+ String transformerName;
+ //null -> use name mappers
+ for (NameMapper<ValidationStrategy> nameMapper : nameMapperList)
+ {
+ transformerName = nameMapper.createName(validationStrategy);
+
+ if (transformerName == null)
+ {
+ continue;
+ }
+
+ metaDataTransformer = tryToCreateAndCacheMetaDataTransformer(
+ validationStrategy, validationStrategyName, transformerName);
+
+ if(metaDataTransformer != null)
+ {
+ return metaDataTransformer;
+ }
+ }
+
+ return null;
+ }
+
+ private MetaDataTransformer tryToResolveCachedMetaDataTransformer(
+ ValidationStrategy validationStrategy, String validationStrategyName)
+ {
+ if (validationStrategyToMetaDataTransformerMapping.containsKey(validationStrategyName))
+ {
+ return (MetaDataTransformer)ClassUtils.tryToInstantiateClassForName(
+ validationStrategyToMetaDataTransformerMapping.get(validationStrategyName));
+ }
+
+ if(validationStrategy instanceof IdentifiableValidationStrategy)
+ {
+ String newValidationStrategyName = validationStrategyName + IdentifiableValidationStrategy.ID_PREFIX +
+ ((IdentifiableValidationStrategy)validationStrategy).getId();
+
+ if (validationStrategyToMetaDataTransformerMapping.containsKey(newValidationStrategyName))
+ {
+ return (MetaDataTransformer)ClassUtils.tryToInstantiateClassForName(
+ validationStrategyToMetaDataTransformerMapping.get(newValidationStrategyName));
+ }
+ }
+
+ return null;
+ }
+
+ private MetaDataTransformer tryToCreateAndCacheMetaDataTransformer(
+ ValidationStrategy validationStrategy, String validationStrategyName, String transformerName)
+ {
+ MetaDataTransformer metaDataTransformer = (MetaDataTransformer)
+ ClassUtils.tryToInstantiateClassForName(transformerName);
+
+ if (metaDataTransformer != null)
+ {
+ if(validationStrategyName != null)
+ {
+ if(validationStrategy instanceof IdentifiableValidationStrategy)
+ {
+ validationStrategyName += IdentifiableValidationStrategy.ID_PREFIX +
+ ((IdentifiableValidationStrategy)validationStrategy).getId();
+ }
+ addMapping(validationStrategyName, transformerName);
+ }
+ return metaDataTransformer;
+ }
+
+ return null;
+ }
+
+ private synchronized void initStaticMappings()
+ {
+ validationStrategyToMetaDataTransformerMapping = new HashMap<String, String>();
+
+ //setup internal static mappings
+ for (StaticConfiguration<String, String> staticConfig :
+ ExtValContext.getContext().getStaticConfiguration(
+ StaticConfigurationNames.VALIDATION_STRATEGY_TO_META_DATA_TRANSFORMER_CONFIG))
+ {
+ setupStrategyMappings(staticConfig.getMapping());
+ }
+ }
+
+ private void setupStrategyMappings(List<StaticConfigurationEntry<String, String>> mappings)
+ {
+ for(StaticConfigurationEntry<String, String> mapping : mappings)
+ {
+ addMapping(mapping.getSource(), mapping.getTarget());
+ }
+ }
+
+ private synchronized void addMapping(String validationStrategyName, String transformerName)
+ {
+ if(logger.isTraceEnabled())
+ {
+ logger.trace("adding validation strategy to meta-data transformer mapping: "
+ + validationStrategyName + " -> " + transformerName);
+ }
+
+ validationStrategyToMetaDataTransformerMapping.put(validationStrategyName, transformerName);
+ }
+
+ protected List<NameMapper<ValidationStrategy>> getNameMapperList()
+ {
+ return new SortedNameMapperList<NameMapper<ValidationStrategy>>(this.nameMapperList, this.subNameMapperList);
+ }
+
+ @Override
+ public void register(NameMapper<ValidationStrategy> validationStrategyNameMapper)
+ {
+ tryToInitNameMapperWithExistingSubMappers(validationStrategyNameMapper);
+ super.register(validationStrategyNameMapper);
+ }
+
+ /**
+ * it's a very special case due to the missing order in the execution of startup-listeners (phase listeners)
+ * packaged in faces-config.xml files of jars
+ *
+ * normally the default SubMapperAwareNameMapper should be enough
+ * anyway, if a module adds a new SubMapperAwareNameMapper,
+ * all previous added SubNameMappers have to be added to avoid confusion in special cases.
+ * if a SubMapperAwareNameMapper should be considered as final extend the interface and filter it in addNameMapper
+ *
+ * @param validationStrategyNameMapper which has to be added
+ */
+ private void tryToInitNameMapperWithExistingSubMappers(NameMapper<ValidationStrategy> validationStrategyNameMapper)
+ {
+ if(validationStrategyNameMapper instanceof SubMapperAwareNameMapper)
+ {
+ for(NameMapper<ValidationStrategy> nameMapper : this.subNameMapperList)
+ {
+ if(nameMapper.getClass().isAnnotationPresent(Nested.class))
+ {
+ ((SubMapperAwareNameMapper<ValidationStrategy>)validationStrategyNameMapper)
+ .addNameMapper(nameMapper);
+ }
+ }
+ }
+ }
+}
Added: myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/transformer/MetaDataTransformer.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/transformer/MetaDataTransformer.java?rev=835712&view=auto
==============================================================================
--- myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/transformer/MetaDataTransformer.java (added)
+++ myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/transformer/MetaDataTransformer.java Fri Nov 13 02:48:45 2009
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.myfaces.extensions.validator.core.metadata.transformer;
+
+import org.apache.myfaces.extensions.validator.internal.UsageInformation;
+import org.apache.myfaces.extensions.validator.internal.UsageCategory;
+import org.apache.myfaces.extensions.validator.core.metadata.MetaDataEntry;
+
+import java.util.Map;
+
+/**
+ * Allows to transform concrete meta-data to a more abstract form.<br/>
+ * e.g.: @Required, @Column(nullable = false,...), @Length(minimum = 1), ... -> required = true
+ *
+ * @author Gerhard Petracek
+ * @since 1.x.1
+ */
+@UsageInformation(UsageCategory.API)
+//*Transformer instead of *Converter to avoid naming confusion
+public interface MetaDataTransformer
+{
+ Map<String, Object> convertMetaData(MetaDataEntry metaData);
+}
Added: myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/transformer/SortedNameMapperList.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/transformer/SortedNameMapperList.java?rev=835712&view=auto
==============================================================================
--- myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/transformer/SortedNameMapperList.java (added)
+++ myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/transformer/SortedNameMapperList.java Fri Nov 13 02:48:45 2009
@@ -0,0 +1,214 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.myfaces.extensions.validator.core.metadata.transformer;
+
+import org.apache.myfaces.extensions.validator.core.mapper.NameMapper;
+import org.apache.myfaces.extensions.validator.core.mapper.SubMapperAwareNameMapper;
+import org.apache.myfaces.extensions.validator.core.Nested;
+import org.apache.myfaces.extensions.validator.internal.UsageCategory;
+import org.apache.myfaces.extensions.validator.internal.UsageInformation;
+
+import java.util.List;
+import java.util.Collections;
+import java.util.Collection;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.ListIterator;
+
+
+/**
+ * @author Gerhard Petracek
+ * @since x.x.3
+ */
+@UsageInformation({UsageCategory.INTERNAL})
+class SortedNameMapperList<T extends NameMapper> implements List<T>
+{
+ private List<T> wrapped;
+ private List<T> globalSubNameMapperList;
+
+ SortedNameMapperList(List<T> wrapped, List<T> subNameMapperList)
+ {
+ this.wrapped = wrapped;
+ this.globalSubNameMapperList = subNameMapperList;
+ }
+
+ public boolean add(T t)
+ {
+ if (t != null && t.getClass().isAnnotationPresent(Nested.class))
+ {
+ return addSubNameMapper(t);
+ }
+ else
+ {
+ boolean result = wrapped.add(t);
+
+ Collections.sort(wrapped, new Comparator<T>()
+ {
+ public int compare(T nm1, T nm2)
+ {
+ if (nm1 instanceof SubMapperAwareNameMapper && nm2 instanceof SubMapperAwareNameMapper)
+ {
+ return 0;
+ }
+ return nm1 instanceof SubMapperAwareNameMapper ? 1 : -1;
+ }
+ });
+ return result;
+ }
+ }
+
+ @SuppressWarnings({"unchecked"})
+ private boolean addSubNameMapper(T subNameMapper)
+ {
+ boolean result = false;
+ for (NameMapper nameMapper : this.wrapped)
+ {
+ if (nameMapper instanceof SubMapperAwareNameMapper)
+ {
+ ((SubMapperAwareNameMapper) nameMapper).addNameMapper(subNameMapper);
+ result = true;
+ }
+ }
+
+ tryToAddMapperAsGlobalSubNameMapper(subNameMapper);
+ return result;
+ }
+
+ private void tryToAddMapperAsGlobalSubNameMapper(T subNameMapper)
+ {
+ if(!this.globalSubNameMapperList.contains(subNameMapper))
+ {
+ this.globalSubNameMapperList.add(subNameMapper);
+ }
+ }
+
+ /*
+ * generated
+ */
+ public int size()
+ {
+ return wrapped.size();
+ }
+
+ public boolean isEmpty()
+ {
+ return wrapped.isEmpty();
+ }
+
+ public boolean contains(Object o)
+ {
+ return wrapped.contains(o);
+ }
+
+ public Iterator<T> iterator()
+ {
+ return wrapped.iterator();
+ }
+
+ public Object[] toArray()
+ {
+ return wrapped.toArray();
+ }
+
+ @SuppressWarnings({"SuspiciousToArrayCall"})
+ public <T> T[] toArray(T[] a)
+ {
+ return wrapped.toArray(a);
+ }
+
+ public boolean remove(Object o)
+ {
+ return wrapped.remove(o);
+ }
+
+ public boolean containsAll(Collection<?> c)
+ {
+ return wrapped.containsAll(c);
+ }
+
+ public boolean addAll(Collection<? extends T> c)
+ {
+ return wrapped.addAll(c);
+ }
+
+ public boolean addAll(int index, Collection<? extends T> c)
+ {
+ return wrapped.addAll(index, c);
+ }
+
+ public boolean removeAll(Collection<?> c)
+ {
+ return wrapped.removeAll(c);
+ }
+
+ public boolean retainAll(Collection<?> c)
+ {
+ return wrapped.retainAll(c);
+ }
+
+ public void clear()
+ {
+ wrapped.clear();
+ }
+
+ public T get(int index)
+ {
+ return wrapped.get(index);
+ }
+
+ public T set(int index, T element)
+ {
+ return wrapped.set(index, element);
+ }
+
+ public void add(int index, T element)
+ {
+ wrapped.add(index, element);
+ }
+
+ public T remove(int index)
+ {
+ return wrapped.remove(index);
+ }
+
+ public int indexOf(Object o)
+ {
+ return wrapped.indexOf(o);
+ }
+
+ public int lastIndexOf(Object o)
+ {
+ return wrapped.lastIndexOf(o);
+ }
+
+ public ListIterator<T> listIterator()
+ {
+ return wrapped.listIterator();
+ }
+
+ public ListIterator<T> listIterator(int index)
+ {
+ return wrapped.listIterator(index);
+ }
+
+ public List<T> subList(int fromIndex, int toIndex)
+ {
+ return wrapped.subList(fromIndex, toIndex);
+ }
+}
\ No newline at end of file
Added: myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/transformer/mapper/AbstractValidationStrategyToMetaDataTransformerNameMapper.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/transformer/mapper/AbstractValidationStrategyToMetaDataTransformerNameMapper.java?rev=835712&view=auto
==============================================================================
--- myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/transformer/mapper/AbstractValidationStrategyToMetaDataTransformerNameMapper.java (added)
+++ myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/transformer/mapper/AbstractValidationStrategyToMetaDataTransformerNameMapper.java Fri Nov 13 02:48:45 2009
@@ -0,0 +1,45 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.myfaces.extensions.validator.core.metadata.transformer.mapper;
+
+import org.apache.myfaces.extensions.validator.core.mapper.NameMapper;
+import org.apache.myfaces.extensions.validator.core.validation.strategy.ValidationStrategy;
+import org.apache.myfaces.extensions.validator.internal.UsageInformation;
+import org.apache.myfaces.extensions.validator.internal.UsageCategory;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * @author Gerhard Petracek
+ * @since 1.x.1
+ */
+@UsageInformation({UsageCategory.INTERNAL})
+public abstract class AbstractValidationStrategyToMetaDataTransformerNameMapper
+ implements NameMapper<ValidationStrategy>
+{
+ protected final Log logger = LogFactory.getLog(getClass());
+
+ public AbstractValidationStrategyToMetaDataTransformerNameMapper()
+ {
+ if(logger.isDebugEnabled())
+ {
+ logger.debug(getClass().getName() + " instantiated");
+ }
+ }
+}
\ No newline at end of file
Added: myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/transformer/mapper/BeanValidationStrategyToMetaDataTransformerNameMapper.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/transformer/mapper/BeanValidationStrategyToMetaDataTransformerNameMapper.java?rev=835712&view=auto
==============================================================================
--- myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/transformer/mapper/BeanValidationStrategyToMetaDataTransformerNameMapper.java (added)
+++ myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/transformer/mapper/BeanValidationStrategyToMetaDataTransformerNameMapper.java Fri Nov 13 02:48:45 2009
@@ -0,0 +1,46 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.myfaces.extensions.validator.core.metadata.transformer.mapper;
+
+import org.apache.myfaces.extensions.validator.core.validation.strategy.ValidationStrategy;
+import org.apache.myfaces.extensions.validator.core.validation.strategy.BeanValidationStrategyAdapter;
+import org.apache.myfaces.extensions.validator.core.InvocationOrder;
+import org.apache.myfaces.extensions.validator.internal.UsageInformation;
+import org.apache.myfaces.extensions.validator.internal.UsageCategory;
+
+/**
+ * It's an alternative Mapper - if there is a proxy around the validation strategy.
+ *
+ * @author Gerhard Petracek
+ * @since 1.x.1
+ */
+@InvocationOrder(500)
+@UsageInformation({UsageCategory.INTERNAL})
+public class BeanValidationStrategyToMetaDataTransformerNameMapper extends
+ AbstractValidationStrategyToMetaDataTransformerNameMapper
+{
+ public String createName(ValidationStrategy validationStrategy)
+ {
+ if(validationStrategy instanceof BeanValidationStrategyAdapter)
+ {
+ return ((BeanValidationStrategyAdapter)validationStrategy).getMetaDataTransformerClassName();
+ }
+ return null;
+ }
+}
\ No newline at end of file
Added: myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/transformer/mapper/CustomConfiguredValidationStrategyToMetaDataTransformerNameMapper.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/transformer/mapper/CustomConfiguredValidationStrategyToMetaDataTransformerNameMapper.java?rev=835712&view=auto
==============================================================================
--- myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/transformer/mapper/CustomConfiguredValidationStrategyToMetaDataTransformerNameMapper.java (added)
+++ myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/transformer/mapper/CustomConfiguredValidationStrategyToMetaDataTransformerNameMapper.java Fri Nov 13 02:48:45 2009
@@ -0,0 +1,44 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.myfaces.extensions.validator.core.metadata.transformer.mapper;
+
+import org.apache.myfaces.extensions.validator.core.WebXmlParameter;
+import org.apache.myfaces.extensions.validator.core.InvocationOrder;
+import org.apache.myfaces.extensions.validator.core.validation.strategy.ValidationStrategy;
+import org.apache.myfaces.extensions.validator.core.mapper.AbstractCustomNameMapper;
+import org.apache.myfaces.extensions.validator.internal.UsageInformation;
+import org.apache.myfaces.extensions.validator.internal.UsageCategory;
+
+/**
+ * To provide a custom NameMapper to map ValidationStrategies to MetaDataTransformers.
+ * (configured via web.xml)
+ *
+ * @author Gerhard Petracek
+ * @since 1.x.1
+ */
+@InvocationOrder(100)
+@UsageInformation({UsageCategory.INTERNAL, UsageCategory.CUSTOMIZABLE})
+public class CustomConfiguredValidationStrategyToMetaDataTransformerNameMapper extends
+ AbstractCustomNameMapper<ValidationStrategy>
+{
+ protected String getCustomNameMapperClassName()
+ {
+ return WebXmlParameter.CUSTOM_VALIDATION_STRATEGY_TO_META_DATA_TRANSFORMER_NAME_MAPPER;
+ }
+}
\ No newline at end of file
Added: myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/transformer/mapper/CustomConventionValidationStrategyToMetaDataTransformerNameMapper.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/transformer/mapper/CustomConventionValidationStrategyToMetaDataTransformerNameMapper.java?rev=835712&view=auto
==============================================================================
--- myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/transformer/mapper/CustomConventionValidationStrategyToMetaDataTransformerNameMapper.java (added)
+++ myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/transformer/mapper/CustomConventionValidationStrategyToMetaDataTransformerNameMapper.java Fri Nov 13 02:48:45 2009
@@ -0,0 +1,48 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.myfaces.extensions.validator.core.metadata.transformer.mapper;
+
+import org.apache.myfaces.extensions.validator.core.mapper.AbstractCustomNameMapper;
+import org.apache.myfaces.extensions.validator.core.validation.strategy.ValidationStrategy;
+import org.apache.myfaces.extensions.validator.core.ExtValContext;
+import org.apache.myfaces.extensions.validator.core.CustomInformation;
+import org.apache.myfaces.extensions.validator.core.InvocationOrder;
+import org.apache.myfaces.extensions.validator.internal.UsageInformation;
+import org.apache.myfaces.extensions.validator.internal.UsageCategory;
+
+/**
+ * To provide a custom NameMapper to map ValidationStrategies to MetaDataTransformers.
+ * (configured via information provider bean)
+ * The bean provides the default name (convention).
+ * It's possible to provide a custom full qualified name. (= customizable convention)
+ *
+ * @author Gerhard Petracek
+ * @since 1.x.1
+ */
+@InvocationOrder(200)
+@UsageInformation({UsageCategory.INTERNAL, UsageCategory.CUSTOMIZABLE})
+public class CustomConventionValidationStrategyToMetaDataTransformerNameMapper extends
+ AbstractCustomNameMapper<ValidationStrategy>
+{
+ protected String getCustomNameMapperClassName()
+ {
+ return ExtValContext.getContext().getInformationProviderBean()
+ .get(CustomInformation.VALIDATION_STRATEGY_TO_META_DATA_TRANSFORMER_NAME_MAPPER);
+ }
+}
\ No newline at end of file
Added: myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/transformer/mapper/DefaultValidationStrategyToMetaDataTransformerNameMapper.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/transformer/mapper/DefaultValidationStrategyToMetaDataTransformerNameMapper.java?rev=835712&view=auto
==============================================================================
--- myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/transformer/mapper/DefaultValidationStrategyToMetaDataTransformerNameMapper.java (added)
+++ myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/transformer/mapper/DefaultValidationStrategyToMetaDataTransformerNameMapper.java Fri Nov 13 02:48:45 2009
@@ -0,0 +1,48 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.myfaces.extensions.validator.core.metadata.transformer.mapper;
+
+import org.apache.myfaces.extensions.validator.core.validation.strategy.ValidationStrategy;
+import org.apache.myfaces.extensions.validator.core.InternalConventionProvider;
+import org.apache.myfaces.extensions.validator.core.InvocationOrder;
+import org.apache.myfaces.extensions.validator.internal.UsageInformation;
+import org.apache.myfaces.extensions.validator.internal.UsageCategory;
+
+/**
+ * Default implementation which maps ExtVal ValidationStrategies to MetaDataTransformers.
+ *
+ * @author Gerhard Petracek
+ * @since 1.x.1
+ */
+@InvocationOrder(300)
+@UsageInformation(UsageCategory.INTERNAL)
+public class DefaultValidationStrategyToMetaDataTransformerNameMapper extends
+ AbstractValidationStrategyToMetaDataTransformerNameMapper
+{
+ public String createName(ValidationStrategy validationStrategy)
+ {
+ return InternalConventionProvider.getMetaDataTransformerClassName(
+ validationStrategy.getClass(), getClassName(validationStrategy.getClass().getSimpleName()));
+ }
+
+ protected String getClassName(String validationStrategyClassName)
+ {
+ return InternalConventionProvider.getMetaDataTransformerClassName(validationStrategyClassName);
+ }
+}
\ No newline at end of file
Added: myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/transformer/mapper/SimpleValidationStrategyToMetaDataTransformerNameMapper.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/transformer/mapper/SimpleValidationStrategyToMetaDataTransformerNameMapper.java?rev=835712&view=auto
==============================================================================
--- myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/transformer/mapper/SimpleValidationStrategyToMetaDataTransformerNameMapper.java (added)
+++ myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/transformer/mapper/SimpleValidationStrategyToMetaDataTransformerNameMapper.java Fri Nov 13 02:48:45 2009
@@ -0,0 +1,69 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.myfaces.extensions.validator.core.metadata.transformer.mapper;
+
+import org.apache.myfaces.extensions.validator.core.validation.strategy.ValidationStrategy;
+import org.apache.myfaces.extensions.validator.core.ExtValContext;
+import org.apache.myfaces.extensions.validator.core.CustomInformation;
+import org.apache.myfaces.extensions.validator.core.InvocationOrder;
+import org.apache.myfaces.extensions.validator.internal.UsageInformation;
+import org.apache.myfaces.extensions.validator.internal.UsageCategory;
+
+/**
+ * It's an alternative Mapper to place ValidationStrategies and MetaDataTransformers in the same package.
+ *
+ * @author Gerhard Petracek
+ * @since 1.x.1
+ */
+@InvocationOrder(400)
+@UsageInformation({UsageCategory.INTERNAL})
+public class SimpleValidationStrategyToMetaDataTransformerNameMapper extends
+ AbstractValidationStrategyToMetaDataTransformerNameMapper
+{
+ public String createName(ValidationStrategy validationStrategy)
+ {
+ if(validationStrategy.getClass().getPackage() == null)
+ {
+ return null;
+ }
+ return getSimpleMetaDataTransformerName(validationStrategy.getClass().getPackage().getName() + ".",
+ validationStrategy.getClass().getSimpleName());
+ }
+
+ public String getSimpleMetaDataTransformerName(String validationStrategyPackageName,
+ String validationStrategyClassName)
+ {
+ String postfix = ExtValContext.getContext().getInformationProviderBean()
+ .get(CustomInformation.META_DATA_TRANSFORMER_POSTFIX);
+
+ if(validationStrategyClassName.endsWith("ValidationStrategy") ||
+ validationStrategyClassName.endsWith("Strategy"))
+ {
+ return validationStrategyPackageName + validationStrategyClassName
+ .replace(ExtValContext.getContext().getInformationProviderBean()
+ .get(CustomInformation.VALIDATION_STRATEGY_POSTFIX) ,postfix)
+ .replace("ValidationStrategy", postfix)
+ .replace("Strategy", postfix);
+ }
+
+ //in case of a static validation strategy mapping
+ return validationStrategyPackageName + validationStrategyClassName + postfix;
+ }
+
+}
\ No newline at end of file
Added: myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/transformer/mapper/ValidationStrategyToMetaDataTransformerSubMapperAwareNameMapper.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/transformer/mapper/ValidationStrategyToMetaDataTransformerSubMapperAwareNameMapper.java?rev=835712&view=auto
==============================================================================
--- myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/transformer/mapper/ValidationStrategyToMetaDataTransformerSubMapperAwareNameMapper.java (added)
+++ myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/transformer/mapper/ValidationStrategyToMetaDataTransformerSubMapperAwareNameMapper.java Fri Nov 13 02:48:45 2009
@@ -0,0 +1,75 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.myfaces.extensions.validator.core.metadata.transformer.mapper;
+
+import org.apache.myfaces.extensions.validator.core.mapper.NameMapper;
+import org.apache.myfaces.extensions.validator.core.mapper.SubMapperAwareNameMapper;
+import org.apache.myfaces.extensions.validator.core.Nested;
+import org.apache.myfaces.extensions.validator.core.InvocationOrderComparator;
+import org.apache.myfaces.extensions.validator.core.InvocationOrder;
+import org.apache.myfaces.extensions.validator.core.validation.strategy.ValidationStrategy;
+import org.apache.myfaces.extensions.validator.internal.UsageInformation;
+import org.apache.myfaces.extensions.validator.internal.UsageCategory;
+
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Collections;
+
+/**
+ * @author Gerhard Petracek
+ * @since x.x.3
+ */
+@InvocationOrder(100)
+@UsageInformation({UsageCategory.INTERNAL})
+public class ValidationStrategyToMetaDataTransformerSubMapperAwareNameMapper
+ extends AbstractValidationStrategyToMetaDataTransformerNameMapper
+ implements SubMapperAwareNameMapper<ValidationStrategy>
+{
+ private List<NameMapper<ValidationStrategy>> subNameMappers = new ArrayList<NameMapper<ValidationStrategy>>();
+
+ public void addNameMapper(NameMapper<ValidationStrategy> nameMapper)
+ {
+ if(!this.subNameMappers.contains(nameMapper) && nameMapper.getClass().isAnnotationPresent(Nested.class))
+ {
+ this.subNameMappers.add(nameMapper);
+ sortSubNameMappers();
+ }
+ }
+
+ private void sortSubNameMappers()
+ {
+ Collections.sort(this.subNameMappers, new InvocationOrderComparator<NameMapper<ValidationStrategy>>());
+ }
+
+ public String createName(ValidationStrategy source)
+ {
+ String result = null;
+
+ for(NameMapper<ValidationStrategy> mapper : this.subNameMappers)
+ {
+ result = mapper.createName(source);
+
+ if(result != null)
+ {
+ return result;
+ }
+ }
+ return result;
+ }
+}
\ No newline at end of file
Added: myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/property/DefaultPropertyInformation.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/property/DefaultPropertyInformation.java?rev=835712&view=auto
==============================================================================
--- myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/property/DefaultPropertyInformation.java (added)
+++ myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/property/DefaultPropertyInformation.java Fri Nov 13 02:48:45 2009
@@ -0,0 +1,89 @@
+/*
+ * 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.property;
+
+import org.apache.myfaces.extensions.validator.internal.UsageCategory;
+import org.apache.myfaces.extensions.validator.internal.UsageInformation;
+import org.apache.myfaces.extensions.validator.core.metadata.MetaDataEntry;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Map;
+
+/**
+ * @author Gerhard Petracek
+ * @since 1.x.1
+ */
+@UsageInformation(UsageCategory.INTERNAL)
+public class DefaultPropertyInformation implements PropertyInformation
+{
+ protected final Log logger = LogFactory.getLog(getClass());
+
+ private Map<String, Object> informationMap = new HashMap<String, Object>();
+ private List<MetaDataEntry> metaDataList = new ArrayList<MetaDataEntry>();
+
+ public boolean containsInformation(String key)
+ {
+ return informationMap.containsKey(key);
+ }
+
+ public Object getInformation(String key)
+ {
+ return informationMap.get(key);
+ }
+
+ public <T> T getInformation(String key, Class<T> targetClass)
+ {
+ return (T) getInformation(key);
+ }
+
+ public void setInformation(String key, Object value)
+ {
+ if(this.logger.isTraceEnabled())
+ {
+ this.logger.trace("new information added key: " + key + " value: " + value);
+ }
+
+ informationMap.put(key, value);
+ }
+
+ public MetaDataEntry[] getMetaDataEntries()
+ {
+ return metaDataList.toArray(new MetaDataEntry[metaDataList.size()]);
+ }
+
+ public void addMetaDataEntry(MetaDataEntry metaDataEntry)
+ {
+ metaDataEntry.setProperties(this.informationMap);
+ this.metaDataList.add(metaDataEntry);
+ }
+
+ public void resetMetaDataEntries()
+ {
+ if(this.logger.isTraceEnabled())
+ {
+ this.logger.trace("resetting meta-data entries");
+ }
+
+ this.metaDataList.clear();
+ }
+}
Added: myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/property/PropertyDetails.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/property/PropertyDetails.java?rev=835712&view=auto
==============================================================================
--- myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/property/PropertyDetails.java (added)
+++ myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/property/PropertyDetails.java Fri Nov 13 02:48:45 2009
@@ -0,0 +1,68 @@
+/*
+ * 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.property;
+
+/**
+ * @author Gerhard Petracek
+ * @since 1.x.1
+ */
+public class PropertyDetails
+{
+ //forms the id for cross-validation within complex components
+ private String key;
+ private Object baseObject;
+ private String property;
+
+ public PropertyDetails(String key, Object baseObject, String property)
+ {
+ this.key = key;
+ this.baseObject = baseObject;
+ this.property = property;
+ }
+
+ public String getKey()
+ {
+ return key;
+ }
+
+ public void setKey(String key)
+ {
+ this.key = key;
+ }
+
+ public Object getBaseObject()
+ {
+ return baseObject;
+ }
+
+ public void setBaseObject(Object baseObject)
+ {
+ this.baseObject = baseObject;
+ }
+
+ public String getProperty()
+ {
+ return property;
+ }
+
+ public void setProperty(String property)
+ {
+ this.property = property;
+ }
+}
Added: myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/property/PropertyInformation.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/property/PropertyInformation.java?rev=835712&view=auto
==============================================================================
--- myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/property/PropertyInformation.java (added)
+++ myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/property/PropertyInformation.java Fri Nov 13 02:48:45 2009
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.myfaces.extensions.validator.core.property;
+
+import org.apache.myfaces.extensions.validator.internal.UsageCategory;
+import org.apache.myfaces.extensions.validator.internal.UsageInformation;
+import org.apache.myfaces.extensions.validator.core.metadata.MetaDataEntry;
+
+/**
+ * @author Gerhard Petracek
+ * @since 1.x.1
+ */
+@UsageInformation(UsageCategory.API)
+public interface PropertyInformation
+{
+ boolean containsInformation(String key);
+ Object getInformation(String key);
+ <T> T getInformation(String key, Class<T> targetClass);
+ void setInformation(String key, Object value);
+
+ MetaDataEntry[] getMetaDataEntries();
+ void addMetaDataEntry(MetaDataEntry metaDataEntry);
+ void resetMetaDataEntries();
+}
Added: myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/property/PropertyInformationKeys.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/property/PropertyInformationKeys.java?rev=835712&view=auto
==============================================================================
--- myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/property/PropertyInformationKeys.java (added)
+++ myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/property/PropertyInformationKeys.java Fri Nov 13 02:48:45 2009
@@ -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.property;
+
+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.INTERNAL)
+public interface PropertyInformationKeys
+{
+ static final String PROPERTY_DETAILS = "property_details";
+ static final String SKIP_VALIDATION = "skip_validation";
+ static final String LABEL = "label";
+ static final String CUSTOM_PROPERTIES = "custom_properties";
+}
Added: myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/recorder/ProcessedInformationRecorder.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/recorder/ProcessedInformationRecorder.java?rev=835712&view=auto
==============================================================================
--- myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/recorder/ProcessedInformationRecorder.java (added)
+++ myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/recorder/ProcessedInformationRecorder.java Fri Nov 13 02:48:45 2009
@@ -0,0 +1,36 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.myfaces.extensions.validator.core.recorder;
+
+import org.apache.myfaces.extensions.validator.internal.UsageInformation;
+import org.apache.myfaces.extensions.validator.internal.UsageCategory;
+
+import javax.faces.component.UIComponent;
+
+/**
+ * Allows to capture converted values.
+ *
+ * @author Gerhard Petracek
+ * @since 1.x.1
+ */
+@UsageInformation(UsageCategory.API)
+public interface ProcessedInformationRecorder
+{
+ void recordUserInput(UIComponent uiComponent, Object value);
+}
Added: myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/renderkit/AbstractRenderKitWrapperFactory.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/renderkit/AbstractRenderKitWrapperFactory.java?rev=835712&view=auto
==============================================================================
--- myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/renderkit/AbstractRenderKitWrapperFactory.java (added)
+++ myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/renderkit/AbstractRenderKitWrapperFactory.java Fri Nov 13 02:48:45 2009
@@ -0,0 +1,105 @@
+/*
+ * 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.renderkit;
+
+import org.apache.myfaces.extensions.validator.internal.UsageCategory;
+import org.apache.myfaces.extensions.validator.internal.UsageInformation;
+import org.apache.myfaces.extensions.validator.core.factory.ClassMappingFactory;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import javax.faces.render.RenderKit;
+
+/**
+ * Base for all RenderKitWrapperFactories to force a specific behaviour
+ *
+ * @author Gerhard Petracek
+ * @since 1.x.1
+ */
+@UsageInformation(UsageCategory.API)
+public abstract class AbstractRenderKitWrapperFactory implements ClassMappingFactory<RenderKit, RenderKit>
+{
+ protected final Log logger = LogFactory.getLog(getClass());
+
+ protected AbstractRenderKitWrapperFactory wrapped;
+ private boolean deactivated = false;
+
+ protected AbstractRenderKitWrapperFactory()
+ {
+ if(logger.isDebugEnabled())
+ {
+ logger.debug(getClass().getName() + " instantiated");
+ }
+ }
+
+ public void addRenderKitWrapperFactory(AbstractRenderKitWrapperFactory renderKitWrapperFactory)
+ {
+ if(logger.isTraceEnabled())
+ {
+ logger.trace(renderKitWrapperFactory.getClass().getName() + " added");
+ }
+
+ if(this.wrapped != null)
+ {
+ this.wrapped.addRenderKitWrapperFactory(renderKitWrapperFactory);
+ return;
+ }
+
+ this.wrapped = renderKitWrapperFactory;
+ }
+
+ public void deactivate()
+ {
+ if(logger.isTraceEnabled())
+ {
+ logger.trace(getClass().getName() + " deactivated");
+ }
+
+ this.deactivated = true;
+ }
+
+ public boolean isDeactivated()
+ {
+ return deactivated;
+ }
+
+ public final RenderKit create(RenderKit renderKit)
+ {
+ if(isDeactivated())
+ {
+ return null;
+ }
+
+ RenderKit result = null;
+
+ if(this.wrapped != null)
+ {
+ result = this.wrapped.create(renderKit);
+ }
+
+ if(result == null)
+ {
+ return createWrapper(renderKit);
+ }
+
+ return result;
+ }
+
+ protected abstract RenderKit createWrapper(RenderKit renderKit);
+}
Added: myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/renderkit/DefaultRenderKitWrapperFactory.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/renderkit/DefaultRenderKitWrapperFactory.java?rev=835712&view=auto
==============================================================================
--- myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/renderkit/DefaultRenderKitWrapperFactory.java (added)
+++ myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/renderkit/DefaultRenderKitWrapperFactory.java Fri Nov 13 02:48:45 2009
@@ -0,0 +1,66 @@
+/*
+ * 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.renderkit;
+
+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 javax.faces.render.RenderKit;
+
+/**
+ * @author Gerhard Petracek
+ * @since 1.x.1
+ */
+@UsageInformation(UsageCategory.INTERNAL)
+public class DefaultRenderKitWrapperFactory extends AbstractRenderKitWrapperFactory
+{
+ private RenderKit renderKit;
+ private static final String GENERIC_RENDER_KIT_WRAPPER_FACTORY =
+ "org.apache.myfaces.extensions.validator.generic.renderkit.GenericRenderKitWrapperFactory";
+ private static Boolean useGenericRenderKitWrapperFactory = null;
+
+ protected RenderKit createWrapper(RenderKit renderKit)
+ {
+ if(logger.isTraceEnabled())
+ {
+ logger.trace("extval renderkit wrapper created for " + renderKit.getClass().getName());
+ }
+
+ //workaround for mojarra (EXTVAL-38)
+ if(useGenericRenderKitWrapperFactory == null)
+ {
+ Class genericFactory = ClassUtils.tryToLoadClassForName(GENERIC_RENDER_KIT_WRAPPER_FACTORY);
+ useGenericRenderKitWrapperFactory = genericFactory != null;
+ }
+
+ if(useGenericRenderKitWrapperFactory)
+ {
+ AbstractRenderKitWrapperFactory renderKitWrapperFactory = (AbstractRenderKitWrapperFactory)ClassUtils
+ .tryToInstantiateClassForName(GENERIC_RENDER_KIT_WRAPPER_FACTORY);
+ return renderKitWrapperFactory.createWrapper(renderKit);
+ }
+
+ if(this.renderKit == null)
+ {
+ this.renderKit = new ExtValRenderKit(renderKit);
+ }
+ return this.renderKit;
+ }
+}
\ No newline at end of file
Added: myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/renderkit/ExtValLazyRendererProxy.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/renderkit/ExtValLazyRendererProxy.java?rev=835712&view=auto
==============================================================================
--- myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/renderkit/ExtValLazyRendererProxy.java (added)
+++ myfaces/extensions/validator/branches/branch_for_jsf_2_0/core/src/main/java/org/apache/myfaces/extensions/validator/core/renderkit/ExtValLazyRendererProxy.java Fri Nov 13 02:48:45 2009
@@ -0,0 +1,141 @@
+/*
+ * 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.renderkit;
+
+import org.apache.myfaces.extensions.validator.internal.UsageCategory;
+import org.apache.myfaces.extensions.validator.internal.UsageInformation;
+import org.apache.myfaces.extensions.validator.core.ExtValContext;
+import org.apache.myfaces.extensions.validator.util.ClassUtils;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import javax.faces.context.FacesContext;
+import javax.faces.render.Renderer;
+import javax.faces.component.UIComponent;
+import javax.faces.convert.ConverterException;
+import java.io.IOException;
+import java.lang.reflect.Constructor;
+
+/**
+ * to support a custom proxy
+ *
+ * @author Gerhard Petracek
+ * @since 1.x.1
+ */
+@UsageInformation(UsageCategory.INTERNAL)
+class ExtValLazyRendererProxy extends Renderer
+{
+ protected final Log logger = LogFactory.getLog(getClass());
+
+ private Renderer wrapped;
+
+ public ExtValLazyRendererProxy(Renderer renderer)
+ {
+ this.wrapped = renderer;
+
+ if(logger.isTraceEnabled())
+ {
+ logger.trace("simple proxy created for " + renderer.getClass().getName());
+ }
+ }
+
+ @Override
+ public void decode(FacesContext facesContext, UIComponent uiComponent)
+ {
+ getLazyRenderer().decode(facesContext, uiComponent);
+ }
+
+ @Override
+ public void encodeBegin(FacesContext facesContext, UIComponent uiComponent)
+ throws IOException
+ {
+ getLazyRenderer().encodeBegin(facesContext, uiComponent);
+ }
+
+ @Override
+ public void encodeChildren(FacesContext facesContext, UIComponent uiComponent)
+ throws IOException
+ {
+ getLazyRenderer().encodeChildren(facesContext, uiComponent);
+ }
+
+ @Override
+ public void encodeEnd(FacesContext facesContext, UIComponent uiComponent)
+ throws IOException
+ {
+ getLazyRenderer().encodeEnd(facesContext, uiComponent);
+ }
+
+ @Override
+ public String convertClientId(FacesContext facesContext, String s)
+ {
+ return getLazyRenderer().convertClientId(facesContext, s);
+ }
+
+ @Override
+ public boolean getRendersChildren()
+ {
+ return getLazyRenderer().getRendersChildren();
+ }
+
+ @Override
+ public Object getConvertedValue(FacesContext facesContext, UIComponent uiComponent, Object o)
+ throws ConverterException
+ {
+ return getLazyRenderer().getConvertedValue(facesContext, uiComponent, o);
+ }
+
+ private Renderer getLazyRenderer()
+ {
+ String proxyClassName = (String) ExtValContext.getContext().getGlobalProperty(ExtValRendererProxy.KEY);
+
+ if(proxyClassName != null && !proxyClassName.endsWith(getClass().getName()))
+ {
+ Class targetClass = ClassUtils.tryToLoadClassForName(proxyClassName);
+
+ if(targetClass == null)
+ {
+ throw new IllegalStateException("a custom invalid renderer proxy is configured: " + proxyClassName);
+ }
+
+ Class[] argClasses = new Class[1];
+ argClasses[0] = Renderer.class;
+
+ try
+ {
+ Constructor constructor = targetClass.getConstructor(argClasses);
+ return (Renderer)constructor.newInstance(this.wrapped);
+ }
+ catch (Throwable t)
+ {
+ if(logger.isWarnEnabled())
+ {
+ logger.warn("couldn't create: " + targetClass.getName());
+ }
+
+ return this.wrapped;
+ }
+ }
+ else
+ {
+ return this.wrapped;
+ }
+ }
+
+}
\ No newline at end of file