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/06/07 20:43:45 UTC
svn commit: r782423 - in /myfaces/extensions/validator/trunk:
core/src/main/java/org/apache/myfaces/extensions/validator/core/
core/src/main/java/org/apache/myfaces/extensions/validator/core/interceptor/
core/src/main/java/org/apache/myfaces/extensions...
Author: gpetracek
Date: Sun Jun 7 18:43:45 2009
New Revision: 782423
URL: http://svn.apache.org/viewvc?rev=782423&view=rev
Log:
EXTVAL-42 global and local interception
Added:
myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/interceptor/PropertyValidationInterceptor.java
Modified:
myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/CustomInformation.java
myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/ExtValContext.java
myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/InformationProviderBean.java
myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/WebXmlParameter.java
myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/interceptor/ValidationInterceptor.java
myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/parameter/DefaultValidationParameterExtractor.java
myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/util/ExtValUtils.java
myfaces/extensions/validator/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/CrossValidationPhaseListener.java
Modified: myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/CustomInformation.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/CustomInformation.java?rev=782423&r1=782422&r2=782423&view=diff
==============================================================================
--- myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/CustomInformation.java (original)
+++ myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/CustomInformation.java Sun Jun 7 18:43:45 2009
@@ -43,6 +43,7 @@
STARTUP_LISTENER,
COMPONENT_INITIALIZER,
VALIDATION_EXCEPTION_INTERCEPTOR,
+ PROPERTY_VALIDATION_INTERCEPTOR,
META_DATA_EXTRACTION_INTERCEPTOR,
MESSAGE_RESOLVER_FACTORY,
Modified: myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/ExtValContext.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/ExtValContext.java?rev=782423&r1=782422&r2=782423&view=diff
==============================================================================
--- myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/ExtValContext.java (original)
+++ myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/ExtValContext.java Sun Jun 7 18:43:45 2009
@@ -23,6 +23,7 @@
import org.apache.myfaces.extensions.validator.core.interceptor.RendererInterceptor;
import org.apache.myfaces.extensions.validator.core.interceptor.ValidationExceptionInterceptor;
import org.apache.myfaces.extensions.validator.core.interceptor.MetaDataExtractionInterceptor;
+import org.apache.myfaces.extensions.validator.core.interceptor.PropertyValidationInterceptor;
import org.apache.myfaces.extensions.validator.core.recorder.ProcessedInformationRecorder;
import org.apache.myfaces.extensions.validator.core.factory.FactoryFinder;
import org.apache.myfaces.extensions.validator.core.factory.DefaultFactoryFinder;
@@ -59,6 +60,7 @@
private List<ComponentInitializer> componentInitializers;
private List<ValidationExceptionInterceptor> validationExceptionInterceptors;
+ private List<PropertyValidationInterceptor> propertyValidationInterceptors;
private List<MetaDataExtractionInterceptor> metaDataExtractionInterceptors;
private Map<String, Object> globalProperties = new HashMap<String, Object>();
@@ -134,6 +136,41 @@
}
}
+ private void lazyInitPropertyValidationInterceptors()
+ {
+ if(this.propertyValidationInterceptors != null)
+ {
+ return;
+ }
+
+ this.propertyValidationInterceptors = new ArrayList<PropertyValidationInterceptor>();
+ List<String> validationInterceptorClassNames = new ArrayList<String>();
+
+ validationInterceptorClassNames
+ .add(WebXmlParameter.CUSTOM_PROPERTY_VALIDATION_INTERCEPTOR);
+ validationInterceptorClassNames
+ .add(ExtValContext.getContext().getInformationProviderBean().get(
+ CustomInformation.PROPERTY_VALIDATION_INTERCEPTOR));
+
+ PropertyValidationInterceptor propertyValidationInterceptor;
+ for (String validationInterceptorName : validationInterceptorClassNames)
+ {
+ propertyValidationInterceptor =
+ (PropertyValidationInterceptor)
+ ClassUtils.tryToInstantiateClassForName(validationInterceptorName);
+
+ if (propertyValidationInterceptor != null)
+ {
+ propertyValidationInterceptors.add(propertyValidationInterceptor);
+
+ if(logger.isTraceEnabled())
+ {
+ logger.trace(propertyValidationInterceptor.getClass().getName() + " added");
+ }
+ }
+ }
+ }
+
private void lazyInitMetaDataExtractionInterceptors()
{
if(this.metaDataExtractionInterceptors != null)
@@ -252,7 +289,19 @@
public List<ValidationExceptionInterceptor> getValidationExceptionInterceptors()
{
lazyInitValidationExceptionInterceptors();
- return validationExceptionInterceptors;
+ return this.validationExceptionInterceptors;
+ }
+
+ public void addPropertyValidationInterceptor(PropertyValidationInterceptor propertyValidationInterceptor)
+ {
+ lazyInitPropertyValidationInterceptors();
+ this.propertyValidationInterceptors.add(propertyValidationInterceptor);
+ }
+
+ public List<PropertyValidationInterceptor> getPropertyValidationInterceptors()
+ {
+ lazyInitPropertyValidationInterceptors();
+ return this.propertyValidationInterceptors;
}
public void addMetaDataExtractionInterceptor(MetaDataExtractionInterceptor metaDataExtractionInterceptor)
@@ -289,6 +338,7 @@
return bean;
}
+ @SuppressWarnings({"unchecked"})
private InformationProviderBean initInformationProviderBean(Map applicationMap)
{
List<String> informationProviderBeanClassNames = new ArrayList<String>();
@@ -317,6 +367,7 @@
return new InformationProviderBean();
}
+ @SuppressWarnings({"unchecked"})
private void tryToInitCustomConfiguredInformationProviderBeanClassName(Map applicationMap)
{
InformationProviderBean bean = (InformationProviderBean) ExtValUtils.getELHelper()
@@ -366,12 +417,10 @@
{
return false;
}
- else
+
+ if(this.logger.isInfoEnabled())
{
- if(this.logger.isInfoEnabled())
- {
- logger.info("override global property '" + name + "'");
- }
+ logger.info("override global property '" + name + "'");
}
}
Modified: myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/InformationProviderBean.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/InformationProviderBean.java?rev=782423&r1=782422&r2=782423&view=diff
==============================================================================
--- myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/InformationProviderBean.java (original)
+++ myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/InformationProviderBean.java Sun Jun 7 18:43:45 2009
@@ -92,6 +92,8 @@
"ComponentInitializer");
customizableInfos.put(CustomInformation.VALIDATION_EXCEPTION_INTERCEPTOR,
"ValidationExceptionInterceptor");
+ customizableInfos.put(CustomInformation.PROPERTY_VALIDATION_INTERCEPTOR,
+ "PropertyValidationInterceptor");
customizableInfos.put(CustomInformation.META_DATA_EXTRACTION_INTERCEPTOR,
"MetaDataExtractionInterceptor");
@@ -126,6 +128,7 @@
"strategy_mappings");
}
+ @SuppressWarnings({"UnusedDeclaration"})
protected void applyCustomValues(Map<CustomInformation, String> map)
{
//override to customize information
Modified: myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/WebXmlParameter.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/WebXmlParameter.java?rev=782423&r1=782422&r2=782423&view=diff
==============================================================================
--- myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/WebXmlParameter.java (original)
+++ myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/WebXmlParameter.java Sun Jun 7 18:43:45 2009
@@ -58,6 +58,9 @@
static final String CUSTOM_VALIDATION_EXCEPTION_INTERCEPTOR = WebXmlUtils
.getInitParameter("CUSTOM_VALIDATION_EXCEPTION_INTERCEPTOR");
+ static final String CUSTOM_PROPERTY_VALIDATION_INTERCEPTOR = WebXmlUtils
+ .getInitParameter("CUSTOM_PROPERTY_VALIDATION_INTERCEPTOR");
+
static final String CUSTOM_META_DATA_EXTRACTION_INTERCEPTOR = WebXmlUtils
.getInitParameter("CUSTOM_META_DATA_EXTRACTION_INTERCEPTOR");
Added: myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/interceptor/PropertyValidationInterceptor.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/interceptor/PropertyValidationInterceptor.java?rev=782423&view=auto
==============================================================================
--- myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/interceptor/PropertyValidationInterceptor.java (added)
+++ myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/interceptor/PropertyValidationInterceptor.java Sun Jun 7 18:43:45 2009
@@ -0,0 +1,52 @@
+/*
+ * 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.interceptor;
+
+import org.apache.myfaces.extensions.validator.internal.UsageInformation;
+import org.apache.myfaces.extensions.validator.internal.UsageCategory;
+import org.apache.myfaces.extensions.validator.core.validation.parameter.ValidationParameter;
+
+import javax.faces.context.FacesContext;
+import javax.faces.component.UIComponent;
+import java.util.Map;
+
+/**
+ * @author Gerhard Petracek
+ * @since x.x.3
+ */
+@UsageInformation(UsageCategory.API)
+public interface PropertyValidationInterceptor extends ValidationParameter
+{
+ /**
+ * @return false if the validation process should be bypassed
+ */
+ boolean beforeValidation(FacesContext facesContext,
+ UIComponent uiComponent,
+ Object convertedObject,
+ Map<String, Object> properties);
+
+ /**
+ * processed if validation was executed
+ * in contrast to ValidationExceptionInterceptor it gets executed in any case
+ */
+ void afterValidation(FacesContext facesContext,
+ UIComponent uiComponent,
+ Object convertedObject,
+ Map<String, Object> properties);
+}
Modified: myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/interceptor/ValidationInterceptor.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/interceptor/ValidationInterceptor.java?rev=782423&r1=782422&r2=782423&view=diff
==============================================================================
--- myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/interceptor/ValidationInterceptor.java (original)
+++ myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/interceptor/ValidationInterceptor.java Sun Jun 7 18:43:45 2009
@@ -26,6 +26,7 @@
import org.apache.myfaces.extensions.validator.core.metadata.MetaDataEntry;
import org.apache.myfaces.extensions.validator.core.metadata.CommonMetaDataKeys;
import org.apache.myfaces.extensions.validator.core.property.PropertyInformationKeys;
+import org.apache.myfaces.extensions.validator.core.property.PropertyInformation;
import org.apache.myfaces.extensions.validator.core.ExtValContext;
import org.apache.myfaces.extensions.validator.core.renderkit.exception.SkipBeforeInterceptorsException;
import org.apache.myfaces.extensions.validator.core.renderkit.exception.SkipRendererDelegationException;
@@ -41,6 +42,7 @@
import java.io.IOException;
import java.util.Map;
import java.util.HashMap;
+import java.lang.annotation.Annotation;
/**
* @author Gerhard Petracek
@@ -159,16 +161,44 @@
return;
}
- if(logger.isTraceEnabled())
+ MetaDataExtractor metaDataExtractor = ExtValUtils.getComponentMetaDataExtractor();
+
+ PropertyInformation propertyInformation = metaDataExtractor.extract(facesContext, uiComponent);
+
+ if(!ExtValUtils.executeGlobalBeforeValidationInterceptors(facesContext, uiComponent, convertedObject,
+ PropertyInformation.class.getName() ,propertyInformation))
{
- logger.trace("start validation");
+ return;
}
- ValidationStrategy validationStrategy;
+ try
+ {
+ if(logger.isTraceEnabled())
+ {
+ logger.trace("start validation");
+ }
- MetaDataExtractor metaDataExtractor = ExtValUtils.getComponentMetaDataExtractor();
+ processFieldValidation(facesContext, uiComponent, convertedObject, propertyInformation);
+ }
+ finally
+ {
+ if(logger.isTraceEnabled())
+ {
+ logger.trace("validation finished");
+ }
- for (MetaDataEntry entry : metaDataExtractor.extract(facesContext, uiComponent).getMetaDataEntries())
+ ExtValUtils.executeGlobalAfterValidationInterceptors(facesContext, uiComponent, convertedObject,
+ PropertyInformation.class.getName(), propertyInformation);
+ }
+ }
+
+ protected void processFieldValidation(FacesContext facesContext,
+ UIComponent uiComponent,
+ Object convertedObject,
+ PropertyInformation propertyInformation)
+ {
+ ValidationStrategy validationStrategy;
+ for (MetaDataEntry entry : propertyInformation.getMetaDataEntries())
{
validationStrategy = ExtValUtils.getValidationStrategyForMetaData(entry.getKey());
@@ -184,26 +214,46 @@
if(logger.isTraceEnabled())
{
- logger.trace("validate " + entry.getValue() + " with " +
- validationStrategy.getClass().getName());
+ logger.trace("validate " + entry.getValue() + " with " + validationStrategy.getClass().getName());
}
- validationStrategy.validate(facesContext, uiComponent, entry, convertedObject);
+ try
+ {
+ if(entry.getValue() instanceof Annotation)
+ {
+ if(!ExtValUtils.executeLocalBeforeValidationInterceptors(
+ facesContext, uiComponent, convertedObject,
+ PropertyInformation.class.getName(), propertyInformation,
+ entry.getValue(Annotation.class)))
+ {
+ continue;
+ }
+ }
+
+ /*
+ * validation
+ */
+ validationStrategy.validate(facesContext, uiComponent, entry, convertedObject);
+ }
+ finally
+ {
+ if(entry.getValue() instanceof Annotation)
+ {
+ ExtValUtils.executeLocalAfterValidationInterceptors(
+ facesContext, uiComponent, convertedObject,
+ PropertyInformation.class.getName(), propertyInformation,
+ entry.getValue(Annotation.class));
+ }
+ }
}
else
{
if(logger.isTraceEnabled())
{
- logger.trace("no validation strategy found for "
- + entry.getValue());
+ logger.trace("no validation strategy found for " + entry.getValue());
}
}
}
-
- if(logger.isTraceEnabled())
- {
- logger.trace("validation finished");
- }
}
protected boolean skipValidation(FacesContext facesContext,
Modified: myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/parameter/DefaultValidationParameterExtractor.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/parameter/DefaultValidationParameterExtractor.java?rev=782423&r1=782422&r2=782423&view=diff
==============================================================================
--- myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/parameter/DefaultValidationParameterExtractor.java (original)
+++ myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/parameter/DefaultValidationParameterExtractor.java Sun Jun 7 18:43:45 2009
@@ -20,6 +20,8 @@
import org.apache.myfaces.extensions.validator.internal.UsageInformation;
import org.apache.myfaces.extensions.validator.internal.UsageCategory;
+import org.apache.myfaces.extensions.validator.internal.ToDo;
+import org.apache.myfaces.extensions.validator.internal.Priority;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -99,6 +101,7 @@
return new ArrayList<Object>();
}
+ @ToDo(value = Priority.MEDIUM, description = "add web.xml parameter for performance tuning to deactivate the scan")
public Map<Object, List<Object>> extractById(Annotation annotation, Class valueId)
{
Map<Object, List<Object>> result = new HashMap<Object, List<Object>>();
@@ -177,12 +180,32 @@
key = processFoundField(annotation, currentField, parameterValues, key, valueId);
}
}
+
+ //inspect the other methods of the implementing class
+ for(Method currentMethod : paramClass.getDeclaredMethods())
+ {
+ processFoundMethod(paramClass, currentMethod, parameterValues, key, valueId);
+ }
}
+ key = createDefaultKey(key, paramClass);
+
+ if(result.containsKey(key))
+ {
+ result.get(key).addAll(parameterValues);
+ }
+ else
+ {
+ result.put(key, parameterValues);
+ }
+ }
+
+ private Object createDefaultKey(Object key, Class currentClass)
+ {
if(key == null)
{
//check for super-interface (exclude ValidationParameter itself)
- for(Class interfaceClass : paramClass.getInterfaces())
+ for(Class interfaceClass : currentClass.getInterfaces())
{
if(ValidationParameter.class.isAssignableFrom(interfaceClass) &&
(!interfaceClass.getName().equals(ValidationParameter.class.getName())))
@@ -195,28 +218,21 @@
if(key == null)
{
- key = paramClass;
+ key = currentClass;
}
- if(result.containsKey(key))
- {
- result.get(key).addAll(parameterValues);
- }
- else
- {
- result.put(key, parameterValues);
- }
+ return key;
}
private Object processFoundField(
- Annotation annotation, Field currentField, List<Object> paramValues, Object key, Class valueId)
+ Object instance, Field currentField, List<Object> paramValues, Object key, Class valueId)
{
Object newKey = null;
if(key == null && currentField.isAnnotationPresent(ParameterKey.class))
{
try
{
- newKey = currentField.get(annotation);
+ newKey = currentField.get(instance);
}
catch (Throwable e)
{
@@ -234,7 +250,7 @@
currentField.setAccessible(true);
try
{
- paramValues.add(currentField.get(annotation));
+ paramValues.add(currentField.get(instance));
}
catch (Throwable e)
{
Modified: myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/util/ExtValUtils.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/util/ExtValUtils.java?rev=782423&r1=782422&r2=782423&view=diff
==============================================================================
--- myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/util/ExtValUtils.java (original)
+++ myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/util/ExtValUtils.java Sun Jun 7 18:43:45 2009
@@ -29,6 +29,7 @@
import org.apache.myfaces.extensions.validator.core.mapper.NameMapper;
import org.apache.myfaces.extensions.validator.core.interceptor.ValidationExceptionInterceptor;
import org.apache.myfaces.extensions.validator.core.interceptor.MetaDataExtractionInterceptor;
+import org.apache.myfaces.extensions.validator.core.interceptor.PropertyValidationInterceptor;
import org.apache.myfaces.extensions.validator.core.property.PropertyInformationKeys;
import org.apache.myfaces.extensions.validator.core.property.PropertyDetails;
import org.apache.myfaces.extensions.validator.core.property.PropertyInformation;
@@ -54,9 +55,11 @@
import javax.faces.validator.ValidatorException;
import javax.faces.application.FacesMessage;
import java.util.Map;
+import java.util.HashMap;
import java.util.MissingResourceException;
import java.util.List;
import java.util.ArrayList;
+import java.lang.annotation.Annotation;
/**
* @author Gerhard Petracek
@@ -402,6 +405,7 @@
return markerList;
}
+ @SuppressWarnings({"unchecked"})
public static boolean isSkipValidationSupported(Class currentClass, Class targetClass)
{
if(currentClass.isAnnotation())
@@ -428,4 +432,104 @@
.getFactory(FactoryNames.VALIDATION_PARAMETER_EXTRACTOR_FACTORY, ValidationParameterExtractorFactory.class)
.create();
}
+
+ public static boolean executeLocalBeforeValidationInterceptors(FacesContext facesContext,
+ UIComponent uiComponent,
+ Object convertedObject,
+ String propertyKey,
+ Object properties,
+ Annotation annotation)
+ {
+ Map<String, Object> propertyMap = new HashMap<String, Object>();
+ List<PropertyValidationInterceptor> propertyValidationInterceptors = getValidationParameterExtractor().extract(
+ annotation, PropertyValidationInterceptor.class, PropertyValidationInterceptor.class);
+ boolean result = true;
+
+ if(properties != null)
+ {
+ propertyMap.put(propertyKey, properties);
+ }
+
+ for(PropertyValidationInterceptor propertyValidationInterceptor : propertyValidationInterceptors)
+ {
+ if(!propertyValidationInterceptor.beforeValidation(facesContext, uiComponent, convertedObject, propertyMap))
+ {
+ result = false;
+ }
+ }
+
+ return result;
+ }
+
+ public static void executeLocalAfterValidationInterceptors(FacesContext facesContext,
+ UIComponent uiComponent,
+ Object convertedObject,
+ String propertyKey,
+ Object properties,
+ Annotation annotation)
+ {
+ Map<String, Object> propertyMap = new HashMap<String, Object>();
+ List<PropertyValidationInterceptor> propertyValidationInterceptors = getValidationParameterExtractor().extract(
+ annotation, PropertyValidationInterceptor.class, PropertyValidationInterceptor.class);
+
+ if(properties != null)
+ {
+ propertyMap.put(propertyKey, properties);
+ }
+
+ for(PropertyValidationInterceptor propertyValidationInterceptor : propertyValidationInterceptors)
+ {
+ propertyValidationInterceptor.afterValidation(facesContext, uiComponent, convertedObject, propertyMap);
+ }
+ }
+
+ public static boolean executeGlobalBeforeValidationInterceptors(FacesContext facesContext,
+ UIComponent uiComponent,
+ Object convertedObject,
+ String propertyKey,
+ Object properties)
+ {
+ Map<String, Object> propertyMap = new HashMap<String, Object>();
+ boolean result = true;
+
+ if(properties != null)
+ {
+ propertyMap.put(propertyKey, properties);
+ }
+
+ List<PropertyValidationInterceptor> propertyValidationInterceptors =
+ ExtValContext.getContext().getPropertyValidationInterceptors();
+
+ for(PropertyValidationInterceptor propertyValidationInterceptor : propertyValidationInterceptors)
+ {
+ if(!propertyValidationInterceptor.beforeValidation(facesContext, uiComponent, convertedObject, propertyMap))
+ {
+ result = false;
+ }
+ }
+
+ return result;
+ }
+
+ public static void executeGlobalAfterValidationInterceptors(FacesContext facesContext,
+ UIComponent uiComponent,
+ Object convertedObject,
+ String propertyKey,
+ Object properties)
+ {
+ Map<String, Object> propertyMap = new HashMap<String, Object>();
+
+ if(properties != null)
+ {
+ propertyMap.put(propertyKey, properties);
+ }
+
+ List<PropertyValidationInterceptor> propertyValidationInterceptors =
+ ExtValContext.getContext().getPropertyValidationInterceptors();
+
+ for(PropertyValidationInterceptor propertyValidationInterceptor : propertyValidationInterceptors)
+ {
+ propertyValidationInterceptor.afterValidation(facesContext, uiComponent, convertedObject, propertyMap);
+ }
+ }
}
Modified: myfaces/extensions/validator/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/CrossValidationPhaseListener.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/CrossValidationPhaseListener.java?rev=782423&r1=782422&r2=782423&view=diff
==============================================================================
--- myfaces/extensions/validator/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/CrossValidationPhaseListener.java (original)
+++ myfaces/extensions/validator/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/CrossValidationPhaseListener.java Sun Jun 7 18:43:45 2009
@@ -21,6 +21,7 @@
import org.apache.myfaces.extensions.validator.util.CrossValidationUtils;
import org.apache.myfaces.extensions.validator.util.JsfUtils;
import org.apache.myfaces.extensions.validator.util.ReflectionUtils;
+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 org.apache.myfaces.extensions.validator.crossval.strategy.AbstractCrossValidationStrategy;
@@ -31,6 +32,7 @@
import javax.faces.event.PhaseListener;
import javax.faces.validator.ValidatorException;
import javax.faces.FacesException;
+import javax.faces.context.FacesContext;
/**
* This phase listener processes cross validation as soon as it finds a special request scoped storage.<br/>
@@ -56,6 +58,17 @@
{
try
{
+ if(!ExtValUtils.executeGlobalBeforeValidationInterceptors(
+ FacesContext.getCurrentInstance(),
+ entry.getComponent(),
+ entry.getConvertedObject(),
+ CrossValidationStorageEntry.class.getName(),
+ entry))
+ {
+ continue;
+ }
+
+ //call init-method
if(entry.getValidationStrategy() instanceof AbstractCrossValidationStrategy)
{
ReflectionUtils.tryToInvokeMethod(
@@ -67,6 +80,9 @@
entry);
}
+ /*
+ * validation
+ */
entry.getValidationStrategy().processCrossValidation(entry, crossValidationStorage);
}
catch (ValidatorException validatorException)
@@ -106,6 +122,15 @@
event.getFacesContext().renderResponse();
}
}
+ finally
+ {
+ ExtValUtils.executeGlobalAfterValidationInterceptors(
+ FacesContext.getCurrentInstance(),
+ entry.getComponent(),
+ entry.getConvertedObject(),
+ CrossValidationStorageEntry.class.getName(),
+ entry);
+ }
}
}
finally