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/09/20 17:54:22 UTC
svn commit: r817046 - in
/myfaces/extensions/validator/branches/branch_for_jsf_1_1:
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/...
Author: gpetracek
Date: Sun Sep 20 15:54:21 2009
New Revision: 817046
URL: http://svn.apache.org/viewvc?rev=817046&view=rev
Log:
EXTVAL-59 and EXTVAL-60
Added:
myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/MetaDataStorageFilter.java
myfaces/extensions/validator/branches/branch_for_jsf_1_1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/JoinValidationMetaDataStorageFilter.java
Modified:
myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/CustomInformation.java
myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/ExtValContext.java
myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/InformationProviderBean.java
myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/WebXmlParameter.java
myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/factory/DefaultFactoryFinder.java
myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/DefaultMetaDataStorage.java
myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/MetaDataStorage.java
myfaces/extensions/validator/branches/branch_for_jsf_1_1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/PropertyValidationModuleStartupListener.java
myfaces/extensions/validator/branches/branch_for_jsf_1_1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/baseval/metadata/transformer/JoinMetaDataTransformer.java
myfaces/extensions/validator/branches/branch_for_jsf_1_1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/baseval/strategy/JoinValidationStrategy.java
Modified: myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/CustomInformation.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/CustomInformation.java?rev=817046&r1=817045&r2=817046&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/CustomInformation.java (original)
+++ myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/CustomInformation.java Sun Sep 20 15:54:21 2009
@@ -54,7 +54,10 @@
VALIDATION_PARAMETER_EXTRACTOR_FACTORY,
META_DATA_TRANSFORMER_FACTORY,
FACES_MESSAGE_FACTORY,
+ STORAGE_MANAGER_FACTORY,
MESSAGE_BUNDLE_NAME,
- STATIC_STRATEGY_MAPPING_SOURCE
+ STATIC_STRATEGY_MAPPING_SOURCE,
+
+ META_DATA_STORAGE_FILTER
}
Modified: myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/ExtValContext.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/ExtValContext.java?rev=817046&r1=817045&r2=817046&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/ExtValContext.java (original)
+++ myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/ExtValContext.java Sun Sep 20 15:54:21 2009
@@ -350,10 +350,9 @@
return true;
}
- public void deregisterRendererInterceptor(Class rendererInterceptorClass)
+ public void deregisterRendererInterceptor(Class<? extends RendererInterceptor> rendererInterceptorClass)
{
- RendererInterceptor rendererInterceptor =
- (RendererInterceptor) ClassUtils.tryToInstantiateClass(rendererInterceptorClass);
+ RendererInterceptor rendererInterceptor = ClassUtils.tryToInstantiateClass(rendererInterceptorClass);
synchronized (ExtValContext.class)
{
@@ -362,14 +361,16 @@
}
//if an interceptor hasn't been registered so far, it should be denied at future registrations
- public void denyRendererInterceptor(Class rendererInterceptorClass)
+ public void denyRendererInterceptor(Class<? extends RendererInterceptor> rendererInterceptorClass)
{
- RendererInterceptor rendererInterceptor =
- (RendererInterceptor) ClassUtils.tryToInstantiateClass(rendererInterceptorClass);
+ RendererInterceptor rendererInterceptor = ClassUtils.tryToInstantiateClass(rendererInterceptorClass);
synchronized (ExtValContext.class)
{
- deniedInterceptors.add(rendererInterceptor.getInterceptorId());
+ if(!deniedInterceptors.contains(rendererInterceptor.getInterceptorId()))
+ {
+ deniedInterceptors.add(rendererInterceptor.getInterceptorId());
+ }
}
deregisterRendererInterceptor(rendererInterceptorClass);
}
Modified: myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/InformationProviderBean.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/InformationProviderBean.java?rev=817046&r1=817045&r2=817046&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/InformationProviderBean.java (original)
+++ myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/InformationProviderBean.java Sun Sep 20 15:54:21 2009
@@ -80,7 +80,7 @@
customizableInfos.put(CustomInformation.COMPONENT_META_DATA_EXTRACTOR,
"ComponentMetaDataExtractor");
customizableInfos.put(CustomInformation.VALIDATION_PARAMETER_EXTRACTOR,
- "VALIDATION_PARAMETER_EXTRACTOR");
+ "ValidationParameterExtractor");
customizableInfos.put(CustomInformation.VALIDATION_STRATEGY_POSTFIX,
"ValidationStrategy");
@@ -99,11 +99,11 @@
"MetaDataExtractionInterceptor");
customizableInfos.put(CustomInformation.VALIDATION_STRATEGY_TO_MSG_RESOLVER_NAME_MAPPER,
- "ValidationStrategyToMsgResolverNameMapper");
+ "ValidationStrategyToMsgResolverNameMapper");
customizableInfos.put(CustomInformation.META_DATA_TO_VALIDATION_STRATEGY_NAME_MAPPER,
- "MetaDataToValidationStrategyNameMapper");
+ "MetaDataToValidationStrategyNameMapper");
customizableInfos.put(CustomInformation.VALIDATION_STRATEGY_TO_META_DATA_TRANSFORMER_NAME_MAPPER,
- "ValidationStrategyToMetaDataTransformerNameMapper");
+ "ValidationStrategyToMetaDataTransformerNameMapper");
customizableInfos.put(CustomInformation.STARTUP_LISTENER,
"StartupListener");
@@ -115,11 +115,13 @@
customizableInfos.put(CustomInformation.COMPONENT_META_DATA_EXTRACTOR_FACTORY,
"ComponentMetaDataExtractorFactory");
customizableInfos.put(CustomInformation.VALIDATION_PARAMETER_EXTRACTOR_FACTORY,
- "VALIDATION_PARAMETER_EXTRACTOR_FACTORY");
+ "ValidationParameterExtractorFactory");
customizableInfos.put(CustomInformation.META_DATA_TRANSFORMER_FACTORY,
"MetaDataTransformerFactory");
customizableInfos.put(CustomInformation.FACES_MESSAGE_FACTORY,
"FacesMessageFactory");
+ customizableInfos.put(CustomInformation.STORAGE_MANAGER_FACTORY,
+ "StorageManagerFactory");
//conventions (the rest of the conventions are built with the help of name mappers,...
customizableInfos.put(CustomInformation.MESSAGE_BUNDLE_NAME,
@@ -127,6 +129,9 @@
//static strategy mappings (name of property files)
customizableInfos.put(CustomInformation.STATIC_STRATEGY_MAPPING_SOURCE,
"strategy_mappings");
+
+ customizableInfos.put(CustomInformation.META_DATA_STORAGE_FILTER,
+ "MetaDataStorageFilter");
}
@SuppressWarnings({"UnusedDeclaration"})
Modified: myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/WebXmlParameter.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/WebXmlParameter.java?rev=817046&r1=817045&r2=817046&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/WebXmlParameter.java (original)
+++ myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/WebXmlParameter.java Sun Sep 20 15:54:21 2009
@@ -77,6 +77,12 @@
.getInitParameter("CUSTOM_VALIDATION_STRATEGY_TO_META_DATA_TRANSFORMER_NAME_MAPPER");
/*
+ * filter
+ */
+ static final String CUSTOM_META_DATA_STORAGE_FILTER = WebXmlUtils
+ .getInitParameter("CUSTOM_META_DATA_STORAGE_FILTER");
+
+ /*
* factories
*/
static final String CUSTOM_VALIDATION_STRATEGY_FACTORY = WebXmlUtils
@@ -94,6 +100,9 @@
static final String CUSTOM_META_DATA_TRANSFORMER_FACTORY = WebXmlUtils
.getInitParameter("CUSTOM_META_DATA_TRANSFORMER_FACTORY");
+ static final String CUSTOM_STORAGE_MANAGER_FACTORY = WebXmlUtils
+ .getInitParameter("CUSTOM_STORAGE_MANAGER_FACTORY");
+
static final String CUSTOM_FACES_MESSAGE_FACTORY = WebXmlUtils
.getInitParameter("CUSTOM_FACES_MESSAGE_FACTORY");
Modified: myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/factory/DefaultFactoryFinder.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/factory/DefaultFactoryFinder.java?rev=817046&r1=817045&r2=817046&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/factory/DefaultFactoryFinder.java (original)
+++ myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/factory/DefaultFactoryFinder.java Sun Sep 20 15:54:21 2009
@@ -304,6 +304,26 @@
protected Object createStorageManagerFactory()
{
- return new DefaultStorageManagerFactory();
+ Object factory = null;
+
+ List<String> storageManagerFactoryClassNames = new ArrayList<String>();
+
+ storageManagerFactoryClassNames
+ .add(WebXmlParameter.CUSTOM_STORAGE_MANAGER_FACTORY);
+ storageManagerFactoryClassNames
+ .add(ExtValContext.getContext().getInformationProviderBean()
+ .get(CustomInformation.STORAGE_MANAGER_FACTORY));
+ storageManagerFactoryClassNames.add(DefaultStorageManagerFactory.class.getName());
+
+ for (String className : storageManagerFactoryClassNames)
+ {
+ factory = ClassUtils.tryToInstantiateClassForName(className);
+
+ if (factory != null)
+ {
+ break;
+ }
+ }
+ return factory;
}
}
Modified: myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/DefaultMetaDataStorage.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/DefaultMetaDataStorage.java?rev=817046&r1=817045&r2=817046&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/DefaultMetaDataStorage.java (original)
+++ myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/DefaultMetaDataStorage.java Sun Sep 20 15:54:21 2009
@@ -25,9 +25,17 @@
import org.apache.myfaces.extensions.validator.core.property.PropertyInformationKeys;
import org.apache.myfaces.extensions.validator.core.property.DefaultPropertyInformation;
import org.apache.myfaces.extensions.validator.core.metadata.MetaDataEntry;
+import org.apache.myfaces.extensions.validator.core.WebXmlParameter;
+import org.apache.myfaces.extensions.validator.core.CustomInformation;
+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 java.util.Map;
import java.util.HashMap;
+import java.util.List;
+import java.util.ArrayList;
/**
* @author Gerhard Petracek
@@ -36,10 +44,48 @@
@UsageInformation(INTERNAL)
public class DefaultMetaDataStorage implements MetaDataStorage
{
+ protected final Log logger = LogFactory.getLog(getClass());
+
private Map<String, PropertyInformation> cachedPropertyInformation = new HashMap<String, PropertyInformation>();
+ private List<MetaDataStorageFilter> metaDataStorageFilters = new ArrayList<MetaDataStorageFilter>();
+ private List<Class<? extends MetaDataStorageFilter>> deniedMetaDataFilters =
+ new ArrayList<Class<? extends MetaDataStorageFilter>>();
+
+ public DefaultMetaDataStorage()
+ {
+ initFilters();
+ }
+
+ private void initFilters()
+ {
+ List<String> metaDataStorageFilterClassNames = new ArrayList<String>();
+
+ metaDataStorageFilterClassNames
+ .add(WebXmlParameter.CUSTOM_META_DATA_STORAGE_FILTER);
+ metaDataStorageFilterClassNames
+ .add(ExtValContext.getContext().getInformationProviderBean().get(
+ CustomInformation.META_DATA_STORAGE_FILTER));
+
+ MetaDataStorageFilter metaDataStorageFilter;
+ for (String validationExceptionInterceptorName : metaDataStorageFilterClassNames)
+ {
+ metaDataStorageFilter =
+ (MetaDataStorageFilter)ClassUtils.tryToInstantiateClassForName(validationExceptionInterceptorName);
+
+ if (metaDataStorageFilter != null)
+ {
+ this.metaDataStorageFilters.add(metaDataStorageFilter);
+
+ logAddedFilter(metaDataStorageFilter.getClass());
+ }
+ }
+ }
+
public void storeMetaDataOf(PropertyInformation propertyInformation)
{
+ invokeFilters(propertyInformation);
+
PropertyInformation propertyInformationToStore = new DefaultPropertyInformation();
PropertyDetails propertyDetails = propertyInformation
@@ -52,6 +98,14 @@
propertyInformationToStore);
}
+ private void invokeFilters(PropertyInformation propertyInformation)
+ {
+ for(MetaDataStorageFilter filter : this.metaDataStorageFilters)
+ {
+ filter.filter(propertyInformation);
+ }
+ }
+
public MetaDataEntry[] getMetaData(Class targetClass, String targetProperty)
{
PropertyInformation propertyInformation = this.cachedPropertyInformation
@@ -68,6 +122,64 @@
return this.cachedPropertyInformation.containsKey(createKey(targetClass, targetProperty));
}
+ public void registerFilter(MetaDataStorageFilter storageFilter)
+ {
+ synchronized (this)
+ {
+ if(!isFilterDenied(storageFilter) && !isFilterAlreadyRegistered(storageFilter))
+ {
+ this.metaDataStorageFilters.add(storageFilter);
+ logAddedFilter(storageFilter.getClass());
+ }
+ }
+ }
+
+ private boolean isFilterDenied(MetaDataStorageFilter storageFilter)
+ {
+ return this.deniedMetaDataFilters.contains(storageFilter.getClass());
+ }
+
+ private boolean isFilterAlreadyRegistered(MetaDataStorageFilter storageFilter)
+ {
+ for(MetaDataStorageFilter filter : this.metaDataStorageFilters)
+ {
+ if(filter.getClass().equals(storageFilter.getClass()))
+ {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public void deregisterFilter(Class<? extends MetaDataStorageFilter> filterClass)
+ {
+ MetaDataStorageFilter storageFilter = ClassUtils.tryToInstantiateClass(filterClass);
+
+ synchronized (this)
+ {
+ this.metaDataStorageFilters.remove(storageFilter);
+ }
+
+ logRemovedFilter(storageFilter.getClass());
+ }
+
+ public void denyFilter(Class<? extends MetaDataStorageFilter> filterClass)
+ {
+ synchronized (this)
+ {
+ for(Class<? extends MetaDataStorageFilter> filterId : this.deniedMetaDataFilters)
+ {
+ if(filterId.equals(filterClass))
+ {
+ return;
+ }
+ }
+ this.deniedMetaDataFilters.add(filterClass);
+ }
+
+ deregisterFilter(filterClass);
+ }
+
private String createKey(Class targetClass, String targetProperty)
{
return targetClass.getName() + "#" + targetProperty;
@@ -85,4 +197,20 @@
target.addMetaDataEntry(newMetaDataEntry);
}
}
+
+ private void logAddedFilter(Class<? extends MetaDataStorageFilter> filterClass)
+ {
+ if(this.logger.isInfoEnabled())
+ {
+ this.logger.info(filterClass.getName() + " added");
+ }
+ }
+
+ private void logRemovedFilter(Class<? extends MetaDataStorageFilter> filterClass)
+ {
+ if(this.logger.isInfoEnabled())
+ {
+ this.logger.info(filterClass.getName() + " removed");
+ }
+ }
}
Modified: myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/MetaDataStorage.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/MetaDataStorage.java?rev=817046&r1=817045&r2=817046&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/MetaDataStorage.java (original)
+++ myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/MetaDataStorage.java Sun Sep 20 15:54:21 2009
@@ -35,4 +35,10 @@
MetaDataEntry[] getMetaData(Class targetClass, String targetProperty);
boolean containsMetaDataFor(Class targetClass, String targetProperty);
+
+ void registerFilter(MetaDataStorageFilter storageFilter);
+
+ void deregisterFilter(Class<? extends MetaDataStorageFilter> filterClass);
+
+ void denyFilter(Class<? extends MetaDataStorageFilter> filterClass);
}
Added: myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/MetaDataStorageFilter.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/MetaDataStorageFilter.java?rev=817046&view=auto
==============================================================================
--- myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/MetaDataStorageFilter.java (added)
+++ myfaces/extensions/validator/branches/branch_for_jsf_1_1/core/src/main/java/org/apache/myfaces/extensions/validator/core/storage/MetaDataStorageFilter.java Sun Sep 20 15:54:21 2009
@@ -0,0 +1,33 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.myfaces.extensions.validator.core.storage;
+
+import org.apache.myfaces.extensions.validator.internal.UsageInformation;
+import org.apache.myfaces.extensions.validator.internal.UsageCategory;
+import org.apache.myfaces.extensions.validator.core.property.PropertyInformation;
+
+/**
+ * @author Gerhard Petracek
+ * @since x.x.3
+ */
+@UsageInformation(UsageCategory.API)
+public interface MetaDataStorageFilter
+{
+ void filter(PropertyInformation propertyInformation);
+}
Added: myfaces/extensions/validator/branches/branch_for_jsf_1_1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/JoinValidationMetaDataStorageFilter.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/branch_for_jsf_1_1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/JoinValidationMetaDataStorageFilter.java?rev=817046&view=auto
==============================================================================
--- myfaces/extensions/validator/branches/branch_for_jsf_1_1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/JoinValidationMetaDataStorageFilter.java (added)
+++ myfaces/extensions/validator/branches/branch_for_jsf_1_1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/JoinValidationMetaDataStorageFilter.java Sun Sep 20 15:54:21 2009
@@ -0,0 +1,208 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.myfaces.extensions.validator;
+
+import org.apache.myfaces.extensions.validator.baseval.annotation.JoinValidation;
+import org.apache.myfaces.extensions.validator.core.metadata.MetaDataEntry;
+import org.apache.myfaces.extensions.validator.core.metadata.extractor.DefaultComponentMetaDataExtractor;
+import org.apache.myfaces.extensions.validator.core.property.DefaultPropertyInformation;
+import org.apache.myfaces.extensions.validator.core.property.PropertyDetails;
+import org.apache.myfaces.extensions.validator.core.property.PropertyInformation;
+import org.apache.myfaces.extensions.validator.core.property.PropertyInformationKeys;
+import org.apache.myfaces.extensions.validator.core.storage.MetaDataStorageFilter;
+import org.apache.myfaces.extensions.validator.util.ClassUtils;
+import org.apache.myfaces.extensions.validator.util.ExtValUtils;
+import org.apache.myfaces.extensions.validator.internal.UsageInformation;
+import org.apache.myfaces.extensions.validator.internal.UsageCategory;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * EXTVAL-59
+ *
+ * @author Gerhard Petracek
+ * @since x.x.3
+ */
+@UsageInformation(UsageCategory.INTERNAL)
+public class JoinValidationMetaDataStorageFilter implements MetaDataStorageFilter
+{
+ private static final String STATIC_SEPARATOR = ":";
+
+ public void filter(PropertyInformation propertyInformation)
+ {
+ if (propertyInformation != null)
+ {
+ List<MetaDataEntry> result = new ArrayList<MetaDataEntry>();
+
+ resolveJoinValidationMetaData(propertyInformation, result);
+
+ propertyInformation.resetMetaDataEntries();
+
+ setDefaultPropertyDetails(propertyInformation, result);
+
+ if (containsJoinValidationConstraint(result))
+ {
+ filter(propertyInformation);
+ }
+ }
+ }
+
+ private void resolveJoinValidationMetaData(PropertyInformation propertyInformation, List<MetaDataEntry> result)
+ {
+ for (MetaDataEntry metaDataEntry : propertyInformation.getMetaDataEntries())
+ {
+ result.addAll(tryToTransformEntry(metaDataEntry));
+ }
+ }
+
+ private void setDefaultPropertyDetails(PropertyInformation propertyInformation, List<MetaDataEntry> result)
+ {
+ for (MetaDataEntry metaDataEntry : result)
+ {
+ metaDataEntry.setProperty(PropertyInformationKeys.PROPERTY_DETAILS,
+ propertyInformation.getInformation(PropertyInformationKeys.PROPERTY_DETAILS));
+ propertyInformation.addMetaDataEntry(metaDataEntry);
+ }
+ }
+
+ private boolean containsJoinValidationConstraint(List<MetaDataEntry> result)
+ {
+ for (MetaDataEntry entry : result)
+ {
+ if (entry.getValue() instanceof JoinValidation)
+ {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ private List<MetaDataEntry> tryToTransformEntry(MetaDataEntry metaDataEntry)
+ {
+ List<MetaDataEntry> result = new ArrayList<MetaDataEntry>();
+
+ if (metaDataEntry.getValue() instanceof JoinValidation)
+ {
+ JoinValidation annotation = metaDataEntry.getValue(JoinValidation.class);
+
+ replaceMetaData(annotation, metaDataEntry, result);
+ }
+ else
+ {
+ result.add(metaDataEntry);
+ }
+
+ return result;
+ }
+
+ private void replaceMetaData(JoinValidation annotation, MetaDataEntry metaDataEntry, List<MetaDataEntry> result)
+ {
+ for (String target : annotation.value())
+ {
+ tryToReplaceMetaDataOfTarget(target, metaDataEntry, result);
+ }
+ }
+
+ private void tryToReplaceMetaDataOfTarget(String target, MetaDataEntry metaDataEntry, List<MetaDataEntry> result)
+ {
+ try
+ {
+ if (isStaticSyntax(target))
+ {
+ addMetaData(result, extractStaticMetaData(target));
+ }
+ else
+ {
+ addMetaData(result, extractDynamicMetaData(metaDataEntry, target));
+ }
+ }
+ catch (Throwable t)
+ {
+ //do nothing a different filter might introduce a new syntax which causes the exception
+ }
+ }
+
+ private void addMetaData(List<MetaDataEntry> result, MetaDataEntry[] metaDataEntries)
+ {
+ Collections.addAll(result, metaDataEntries);
+ }
+
+ private boolean isStaticSyntax(String target)
+ {
+ return target.contains(STATIC_SEPARATOR);
+ }
+
+ private MetaDataEntry[] extractStaticMetaData(String target)
+ {
+ int separatorIndex = target.lastIndexOf(STATIC_SEPARATOR);
+
+ Class targetClass = loadClass(target.substring(0, separatorIndex));
+ String propertyName = target.substring(separatorIndex + 1);
+
+ return new StaticSyntaxMetaDataExtractor().extract(targetClass, propertyName).getMetaDataEntries();
+ }
+
+ private Class loadClass(String className)
+ {
+ try
+ {
+ return ClassUtils.loadClassForName(className);
+ }
+ catch (ClassNotFoundException e)
+ {
+ throw new IllegalArgumentException(e);
+ }
+ }
+
+ private MetaDataEntry[] extractDynamicMetaData(MetaDataEntry metaDataEntry, String target)
+ {
+ PropertyDetails propertyDetails = ExtValUtils.createPropertyDetailsForNewTarget(metaDataEntry, target);
+
+ return new StaticSyntaxMetaDataExtractor().extract(
+ propertyDetails.getBaseObject().getClass(), propertyDetails.getProperty()).getMetaDataEntries();
+ }
+
+ private class StaticSyntaxMetaDataExtractor extends DefaultComponentMetaDataExtractor
+ {
+ public PropertyInformation extract(Class targetClass, String targetProperty)
+ {
+ PropertyInformation propertyInformation = new DefaultPropertyInformation();
+
+ addPropertyAccessAnnotations(targetClass, targetProperty, propertyInformation);
+ addFieldAccessAnnotations(targetClass, targetProperty, propertyInformation);
+
+ return propertyInformation;
+ }
+ }
+
+ @Override
+ public boolean equals(Object obj)
+ {
+ return obj != null && getClass().equals(obj.getClass());
+ }
+
+ @Override
+ public int hashCode()
+ {
+ return super.hashCode();
+ }
+}
Modified: myfaces/extensions/validator/branches/branch_for_jsf_1_1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/PropertyValidationModuleStartupListener.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/branch_for_jsf_1_1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/PropertyValidationModuleStartupListener.java?rev=817046&r1=817045&r2=817046&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/branch_for_jsf_1_1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/PropertyValidationModuleStartupListener.java (original)
+++ myfaces/extensions/validator/branches/branch_for_jsf_1_1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/PropertyValidationModuleStartupListener.java Sun Sep 20 15:54:21 2009
@@ -27,6 +27,7 @@
import org.apache.myfaces.extensions.validator.core.storage.StorageManagerHolder;
import org.apache.myfaces.extensions.validator.core.storage.StorageManager;
import org.apache.myfaces.extensions.validator.core.storage.GroupStorage;
+import org.apache.myfaces.extensions.validator.core.storage.MetaDataStorage;
import org.apache.myfaces.extensions.validator.core.metadata.CommonMetaDataKeys;
import org.apache.myfaces.extensions.validator.core.interceptor.ValidationInterceptor;
import org.apache.myfaces.extensions.validator.core.initializer.configuration.StaticResourceBundleConfiguration;
@@ -44,6 +45,7 @@
import org.apache.myfaces.extensions.validator.crossval.storage.ProcessedInformationStorage;
import org.apache.myfaces.extensions.validator.crossval.storage.mapper.CrossValidationStorageNameMapper;
import org.apache.myfaces.extensions.validator.crossval.storage.mapper.ProcessedInformationStorageNameMapper;
+import org.apache.myfaces.extensions.validator.util.ExtValUtils;
/**
* @author Gerhard Petracek
@@ -64,6 +66,7 @@
addSkipValidationSupport();
initStorageManagerAndNameMappers();
initSkipValidationEvaluator();
+ initMetaDataStorageFilters();
}
private void initStaticStrategyMappings()
@@ -148,4 +151,12 @@
{
ExtValContext.getContext().setSkipValidationEvaluator(new PropertyValidationSkipValidationEvaluator(), false);
}
+
+ private void initMetaDataStorageFilters()
+ {
+ MetaDataStorage metaDataStorage = ExtValUtils.getStorage(
+ MetaDataStorage.class, MetaDataStorage.class.getName());
+
+ metaDataStorage.registerFilter(new JoinValidationMetaDataStorageFilter());
+ }
}
Modified: myfaces/extensions/validator/branches/branch_for_jsf_1_1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/baseval/metadata/transformer/JoinMetaDataTransformer.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/branch_for_jsf_1_1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/baseval/metadata/transformer/JoinMetaDataTransformer.java?rev=817046&r1=817045&r2=817046&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/branch_for_jsf_1_1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/baseval/metadata/transformer/JoinMetaDataTransformer.java (original)
+++ myfaces/extensions/validator/branches/branch_for_jsf_1_1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/baseval/metadata/transformer/JoinMetaDataTransformer.java Sun Sep 20 15:54:21 2009
@@ -30,6 +30,8 @@
import org.apache.myfaces.extensions.validator.util.PropertyValidationUtils;
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 javax.faces.context.FacesContext;
import java.util.HashMap;
@@ -41,10 +43,31 @@
* @since 1.x.1
*/
@UsageInformation(UsageCategory.INTERNAL)
+@Deprecated
public class JoinMetaDataTransformer implements MetaDataTransformer
{
+ protected final Log logger = LogFactory.getLog(getClass());
+
public Map<String, Object> convertMetaData(MetaDataEntry metaDataEntry)
{
+ try
+ {
+ return convert(metaDataEntry);
+ }
+ catch (Throwable t)
+ {
+ if(this.logger.isWarnEnabled())
+ {
+ this.logger.warn("this class is replaced by a meta-data storage filter. " +
+ "if it gets invoked and an exception occurs, a custom syntax is used." +
+ "this class might be used by an old add-on. please check for a newer version.");
+ }
+ return new HashMap<String, Object>();
+ }
+ }
+
+ private Map<String, Object> convert(MetaDataEntry metaDataEntry)
+ {
MetaDataExtractor extractor = DefaultPropertyScanningMetaDataExtractor.getInstance();
String[] targetExpressions = metaDataEntry.getValue(JoinValidation.class).value();
Modified: myfaces/extensions/validator/branches/branch_for_jsf_1_1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/baseval/strategy/JoinValidationStrategy.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/branch_for_jsf_1_1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/baseval/strategy/JoinValidationStrategy.java?rev=817046&r1=817045&r2=817046&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/branch_for_jsf_1_1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/baseval/strategy/JoinValidationStrategy.java (original)
+++ myfaces/extensions/validator/branches/branch_for_jsf_1_1/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/baseval/strategy/JoinValidationStrategy.java Sun Sep 20 15:54:21 2009
@@ -32,17 +32,43 @@
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.validator.ValidatorException;
+import javax.faces.FacesException;
/**
* @author Gerhard Petracek
* @since 1.x.1
*/
@UsageInformation(UsageCategory.INTERNAL)
+@Deprecated
public class JoinValidationStrategy extends AbstractValidationStrategy
{
public void processValidation(FacesContext facesContext,
- UIComponent uiComponent, MetaDataEntry metaDataEntry,
- Object convertedObject) throws ValidatorException
+ UIComponent uiComponent, MetaDataEntry metaDataEntry,
+ Object convertedObject) throws ValidatorException
+ {
+ try
+ {
+ validateJoinValidation(facesContext, uiComponent, metaDataEntry, convertedObject);
+ }
+ catch (FacesException t)
+ {
+ throw t;
+ }
+ catch (Throwable t)
+ {
+ if(this.logger.isWarnEnabled())
+ {
+ this.logger.warn("this class is replaced by a meta-data storage filter. " +
+ "if it gets invoked and an exception occurs, a custom syntax is used." +
+ "this class might be used by an old add-on. please check for a newer version.");
+ }
+ }
+ }
+
+ private void validateJoinValidation(FacesContext facesContext,
+ UIComponent uiComponent,
+ MetaDataEntry metaDataEntry,
+ Object convertedObject)
{
MetaDataExtractor extractor = DefaultPropertyScanningMetaDataExtractor.getInstance();