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 2010/05/14 16:33:30 UTC
svn commit: r944289 - in /myfaces/extensions/validator/trunk:
test-modules/bean-validation-tests/src/test/java/org/apache/myfaces/extensions/validator/test/beanval/
test-modules/bean-validation-tests/src/test/java/org/apache/myfaces/extensions/validato...
Author: gpetracek
Date: Fri May 14 14:33:30 2010
New Revision: 944289
URL: http://svn.apache.org/viewvc?rev=944289&view=rev
Log:
EXTVAL-96
Added:
myfaces/extensions/validator/trunk/test-modules/bean-validation-tests/src/test/java/org/apache/myfaces/extensions/validator/test/beanval/CascadedValidationTestCase.java
myfaces/extensions/validator/trunk/test-modules/bean-validation-tests/src/test/java/org/apache/myfaces/extensions/validator/test/beanval/model/CascadedValidationTestCase1Bean.java
myfaces/extensions/validator/trunk/test-modules/bean-validation-tests/src/test/java/org/apache/myfaces/extensions/validator/test/beanval/model/CustomTypeForCascadedValidationTestCase1Bean.java
Modified:
myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/BeanValidationModuleValidationInterceptor.java
myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/BeanValidationModuleValidationInterceptorInternals.java
myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/MappedConstraintSourceBeanValidationModuleValidationInterceptor.java
myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/MappedConstraintSourceBeanValidationModuleValidationInterceptorInternals.java
myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/util/BeanValidationUtils.java
myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/util/ExtValBeanValidationMetaDataInternals.java
Added: myfaces/extensions/validator/trunk/test-modules/bean-validation-tests/src/test/java/org/apache/myfaces/extensions/validator/test/beanval/CascadedValidationTestCase.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/test-modules/bean-validation-tests/src/test/java/org/apache/myfaces/extensions/validator/test/beanval/CascadedValidationTestCase.java?rev=944289&view=auto
==============================================================================
--- myfaces/extensions/validator/trunk/test-modules/bean-validation-tests/src/test/java/org/apache/myfaces/extensions/validator/test/beanval/CascadedValidationTestCase.java (added)
+++ myfaces/extensions/validator/trunk/test-modules/bean-validation-tests/src/test/java/org/apache/myfaces/extensions/validator/test/beanval/CascadedValidationTestCase.java Fri May 14 14:33:30 2010
@@ -0,0 +1,112 @@
+/*
+ * 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.test.beanval;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+import org.apache.myfaces.extensions.validator.test.beanval.model.CascadedValidationTestCase1Bean;
+import org.apache.myfaces.extensions.validator.test.beanval.model.CustomTypeForCascadedValidationTestCase1Bean;
+
+import javax.faces.application.FacesMessage;
+import javax.faces.context.FacesContext;
+import javax.faces.convert.Converter;
+import javax.faces.convert.ConverterException;
+import javax.faces.component.UIComponent;
+
+public class CascadedValidationTestCase extends BaseBeanValPropertyValidationTestCase<CascadedValidationTestCase1Bean>
+{
+ public CascadedValidationTestCase(String name)
+ {
+ super(name);
+ }
+
+ public static Test suite()
+ {
+ return new TestSuite(CascadedValidationTestCase.class);
+ }
+
+ protected CascadedValidationTestCase1Bean getBeanToTest()
+ {
+ return new CascadedValidationTestCase1Bean();
+ }
+
+ public void testCascadedValidationCorrectValue()
+ {
+ createValueBindingForComponent(this.inputComponent1, "#{testBean.property}");
+ setValueToValidate(this.inputComponent1, "123:456");
+ this.inputComponent1.setConverter(createCustomTypeConverter());
+
+ validateComponents();
+
+ assertComponentValid(this.inputComponent1);
+ assertNavigationBlocked(false);
+
+ checkMessageCount(0);
+ }
+
+ public void testCascadedValidationValueTooShort()
+ {
+ createValueBindingForComponent(this.inputComponent1, "#{testBean.property}");
+ setValueToValidate(this.inputComponent1, "1:4");
+ this.inputComponent1.setConverter(createCustomTypeConverter());
+
+ validateComponents();
+
+ assertComponentInvalid(this.inputComponent1);
+ assertNavigationBlocked(true);
+
+ checkMessageCount(1);
+ checkMessageSeverities(FacesMessage.SEVERITY_ERROR);
+ }
+
+ public void testCascadedValidationInvalidValue()
+ {
+ createValueBindingForComponent(this.inputComponent1, "#{testBean.property}");
+ setValueToValidate(this.inputComponent1, "");
+ this.inputComponent1.setConverter(createCustomTypeConverter());
+
+ validateComponents();
+
+ assertComponentInvalid(this.inputComponent1);
+ assertNavigationBlocked(true);
+
+ checkMessageCount(1);
+ checkMessageSeverities(FacesMessage.SEVERITY_ERROR);
+ }
+
+ private Converter createCustomTypeConverter()
+ {
+ return new Converter()
+ {
+ public Object getAsObject(FacesContext facesContext, UIComponent uiComponent, String s) throws ConverterException
+ {
+ if(s != null && !s.equals(""))
+ {
+ return new CustomTypeForCascadedValidationTestCase1Bean(s.split(":")[0], s.split(":")[1]);
+ }
+ return null;
+ }
+
+ public String getAsString(FacesContext facesContext, UIComponent uiComponent, Object o) throws ConverterException
+ {
+ return ((CustomTypeForCascadedValidationTestCase1Bean)o).getProperty1() + "" + ((CustomTypeForCascadedValidationTestCase1Bean)o).getProperty2();
+ }
+ };
+ }
+}
\ No newline at end of file
Added: myfaces/extensions/validator/trunk/test-modules/bean-validation-tests/src/test/java/org/apache/myfaces/extensions/validator/test/beanval/model/CascadedValidationTestCase1Bean.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/test-modules/bean-validation-tests/src/test/java/org/apache/myfaces/extensions/validator/test/beanval/model/CascadedValidationTestCase1Bean.java?rev=944289&view=auto
==============================================================================
--- myfaces/extensions/validator/trunk/test-modules/bean-validation-tests/src/test/java/org/apache/myfaces/extensions/validator/test/beanval/model/CascadedValidationTestCase1Bean.java (added)
+++ myfaces/extensions/validator/trunk/test-modules/bean-validation-tests/src/test/java/org/apache/myfaces/extensions/validator/test/beanval/model/CascadedValidationTestCase1Bean.java Fri May 14 14:33:30 2010
@@ -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.test.beanval.model;
+
+import javax.validation.Valid;
+import javax.validation.constraints.NotNull;
+
+public class CascadedValidationTestCase1Bean
+{
+ @NotNull
+ @Valid
+ private CustomTypeForCascadedValidationTestCase1Bean property;
+
+ public CustomTypeForCascadedValidationTestCase1Bean getProperty()
+ {
+ return property;
+ }
+
+ public void setProperty(CustomTypeForCascadedValidationTestCase1Bean property)
+ {
+ this.property = property;
+ }
+}
\ No newline at end of file
Added: myfaces/extensions/validator/trunk/test-modules/bean-validation-tests/src/test/java/org/apache/myfaces/extensions/validator/test/beanval/model/CustomTypeForCascadedValidationTestCase1Bean.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/test-modules/bean-validation-tests/src/test/java/org/apache/myfaces/extensions/validator/test/beanval/model/CustomTypeForCascadedValidationTestCase1Bean.java?rev=944289&view=auto
==============================================================================
--- myfaces/extensions/validator/trunk/test-modules/bean-validation-tests/src/test/java/org/apache/myfaces/extensions/validator/test/beanval/model/CustomTypeForCascadedValidationTestCase1Bean.java (added)
+++ myfaces/extensions/validator/trunk/test-modules/bean-validation-tests/src/test/java/org/apache/myfaces/extensions/validator/test/beanval/model/CustomTypeForCascadedValidationTestCase1Bean.java Fri May 14 14:33:30 2010
@@ -0,0 +1,47 @@
+/*
+ * 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.test.beanval.model;
+
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+
+public class CustomTypeForCascadedValidationTestCase1Bean
+{
+ @NotNull
+ private String property1;
+
+ @Size(min = 3)
+ private String property2;
+
+ public CustomTypeForCascadedValidationTestCase1Bean(String property1, String property2)
+ {
+ this.property1 = property1;
+ this.property2 = property2;
+ }
+
+ public String getProperty1()
+ {
+ return property1;
+ }
+
+ public String getProperty2()
+ {
+ return property2;
+ }
+}
\ No newline at end of file
Modified: myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/BeanValidationModuleValidationInterceptor.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/BeanValidationModuleValidationInterceptor.java?rev=944289&r1=944288&r2=944289&view=diff
==============================================================================
--- myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/BeanValidationModuleValidationInterceptor.java (original)
+++ myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/BeanValidationModuleValidationInterceptor.java Fri May 14 14:33:30 2010
@@ -109,8 +109,8 @@ public class BeanValidationModuleValidat
PropertyInformation propertyInformation)
{
/*not used yet supportMultipleViolationsPerField()*/
- Set<ConstraintViolation> violations = this.bviUtils
- .validate(facesContext, uiComponent, convertedObject, propertyInformation);
+ Set<ConstraintViolation<Object>> violations = this.bviUtils
+ .validate(facesContext, uiComponent, convertedObject, propertyInformation, true);
processConstraintViolations(facesContext, uiComponent, convertedObject, violations);
}
@@ -118,7 +118,7 @@ public class BeanValidationModuleValidat
protected void processConstraintViolations(FacesContext facesContext,
UIComponent uiComponent,
Object convertedObject,
- Set<ConstraintViolation> violations)
+ Set<ConstraintViolation<Object>> violations)
{
if(violations != null && !violations.isEmpty())
{
Modified: myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/BeanValidationModuleValidationInterceptorInternals.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/BeanValidationModuleValidationInterceptorInternals.java?rev=944289&r1=944288&r2=944289&view=diff
==============================================================================
--- myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/BeanValidationModuleValidationInterceptorInternals.java (original)
+++ myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/BeanValidationModuleValidationInterceptorInternals.java Fri May 14 14:33:30 2010
@@ -19,6 +19,7 @@
package org.apache.myfaces.extensions.validator.beanval;
import org.apache.myfaces.extensions.validator.beanval.validation.strategy.BeanValidationVirtualValidationStrategy;
+import org.apache.myfaces.extensions.validator.beanval.util.BeanValidationUtils;
import org.apache.myfaces.extensions.validator.core.metadata.MetaDataEntry;
import org.apache.myfaces.extensions.validator.core.metadata.extractor.MetaDataExtractor;
import org.apache.myfaces.extensions.validator.core.metadata.transformer.MetaDataTransformer;
@@ -35,9 +36,7 @@ import org.apache.myfaces.extensions.val
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.validation.ConstraintViolation;
-import javax.validation.ValidatorFactory;
import javax.validation.groups.Default;
-import javax.validation.metadata.BeanDescriptor;
import javax.validation.metadata.ConstraintDescriptor;
import javax.validation.metadata.ElementDescriptor;
import java.util.HashMap;
@@ -102,7 +101,8 @@ class BeanValidationModuleValidationInte
targetClass = ProxyUtils.getUnproxiedClass(targetClass);
- ElementDescriptor elementDescriptor = getDescriptorFor(targetClass, propertyDetails.getProperty());
+ ElementDescriptor elementDescriptor = BeanValidationUtils.getElementDescriptor(
+ targetClass, propertyDetails.getProperty());
if (elementDescriptor == null)
{
@@ -193,14 +193,15 @@ class BeanValidationModuleValidationInte
Class targetClass = ProxyUtils.getUnproxiedClass(propertyDetails.getBaseObject().getClass());
- return getDescriptorFor(targetClass, propertyDetails.getProperty()) != null;
+ return BeanValidationUtils.getElementDescriptor(targetClass, propertyDetails.getProperty()) != null;
}
@SuppressWarnings({"unchecked"})
- Set<ConstraintViolation> validate(FacesContext facesContext,
- UIComponent uiComponent,
- Object convertedObject,
- PropertyInformation propertyInformation)
+ Set<ConstraintViolation<Object>> validate(FacesContext facesContext,
+ UIComponent uiComponent,
+ Object convertedObject,
+ PropertyInformation propertyInformation,
+ boolean cascadedValidation)
{
Class baseBeanClass = getBaseClassType(propertyInformation);
String propertyName = getPropertyToValidate(propertyInformation);
@@ -212,14 +213,7 @@ class BeanValidationModuleValidationInte
return null;
}
- ValidatorFactory validatorFactory = ExtValBeanValidationContext.getCurrentInstance().getValidatorFactory();
- return validatorFactory
- .usingContext()
- .messageInterpolator(ExtValBeanValidationContext.getCurrentInstance().getMessageInterpolator())
- .constraintValidatorFactory(validatorFactory.getConstraintValidatorFactory())
- .traversableResolver(validatorFactory.getTraversableResolver())
- .getValidator()
- .validateValue(baseBeanClass, propertyName, convertedObject, groups);
+ return BeanValidationUtils.validate(baseBeanClass, propertyName, convertedObject, groups, cascadedValidation);
}
Class getBaseClassType(PropertyInformation propertyInformation)
@@ -240,12 +234,4 @@ class BeanValidationModuleValidationInte
facesContext.getViewRoot().getViewId(),
uiComponent.getClientId(facesContext));
}
-
- ElementDescriptor getDescriptorFor(Class targetClass, String property)
- {
- BeanDescriptor beanDescriptor = ExtValBeanValidationContext.getCurrentInstance().getValidatorFactory()
- .getValidator().getConstraintsForClass(targetClass);
-
- return beanDescriptor.getConstraintsForProperty(property);
- }
}
Modified: myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/MappedConstraintSourceBeanValidationModuleValidationInterceptor.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/MappedConstraintSourceBeanValidationModuleValidationInterceptor.java?rev=944289&r1=944288&r2=944289&view=diff
==============================================================================
--- myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/MappedConstraintSourceBeanValidationModuleValidationInterceptor.java (original)
+++ myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/MappedConstraintSourceBeanValidationModuleValidationInterceptor.java Fri May 14 14:33:30 2010
@@ -66,8 +66,8 @@ public class MappedConstraintSourceBeanV
Object convertedObject,
PropertyInformation propertyInformation)
{
- Set<ConstraintViolation> violations = this.csaBviUtils
- .validateMappedConstraintSource(facesContext, uiComponent, convertedObject, propertyInformation);
+ Set<ConstraintViolation<Object>> violations = this.csaBviUtils
+ .validateMappedConstraintSource(facesContext, uiComponent, convertedObject, propertyInformation, true);
processConstraintViolations(facesContext, uiComponent, convertedObject, violations);
}
Modified: myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/MappedConstraintSourceBeanValidationModuleValidationInterceptorInternals.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/MappedConstraintSourceBeanValidationModuleValidationInterceptorInternals.java?rev=944289&r1=944288&r2=944289&view=diff
==============================================================================
--- myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/MappedConstraintSourceBeanValidationModuleValidationInterceptorInternals.java (original)
+++ myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/MappedConstraintSourceBeanValidationModuleValidationInterceptorInternals.java Fri May 14 14:33:30 2010
@@ -24,11 +24,11 @@ import org.apache.myfaces.extensions.val
import org.apache.myfaces.extensions.validator.internal.UsageInformation;
import org.apache.myfaces.extensions.validator.util.ExtValUtils;
import org.apache.myfaces.extensions.validator.util.ConstraintSourceUtils;
+import org.apache.myfaces.extensions.validator.beanval.util.BeanValidationUtils;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.validation.ConstraintViolation;
-import javax.validation.ValidatorFactory;
import javax.validation.groups.Default;
import javax.validation.metadata.ElementDescriptor;
import java.util.Collections;
@@ -76,7 +76,7 @@ class MappedConstraintSourceBeanValidati
}
ElementDescriptor elementDescriptor =
- this.bviUtils.getDescriptorFor((Class) constraintSourcePropertyDetails.getBaseObject(),
+ BeanValidationUtils.getElementDescriptor((Class) constraintSourcePropertyDetails.getBaseObject(),
constraintSourcePropertyDetails.getProperty());
if (elementDescriptor == null)
@@ -87,10 +87,11 @@ class MappedConstraintSourceBeanValidati
this.bviUtils.processElementDescriptor(facesContext, uiComponent, foundGroups, elementDescriptor);
}
- Set<ConstraintViolation> validateMappedConstraintSource(FacesContext facesContext,
+ Set<ConstraintViolation<Object>> validateMappedConstraintSource(FacesContext facesContext,
UIComponent uiComponent,
Object convertedObject,
- PropertyInformation propertyInformation)
+ PropertyInformation propertyInformation,
+ boolean cascadedValidation)
{
Class baseBeanClass = this.bviUtils.getBaseClassType(propertyInformation);
String propertyName = this.bviUtils.getPropertyToValidate(propertyInformation);
@@ -114,14 +115,7 @@ class MappedConstraintSourceBeanValidati
return null;
}
- ValidatorFactory validatorFactory = ExtValBeanValidationContext.getCurrentInstance().getValidatorFactory();
- return validatorFactory
- .usingContext()
- .messageInterpolator(ExtValBeanValidationContext.getCurrentInstance().getMessageInterpolator())
- .constraintValidatorFactory(validatorFactory.getConstraintValidatorFactory())
- .traversableResolver(validatorFactory.getTraversableResolver())
- .getValidator()
- .validateValue(baseBeanClass, propertyName, convertedObject, groups);
+ return BeanValidationUtils.validate(baseBeanClass, propertyName, convertedObject, groups, cascadedValidation);
}
private String getKey(PropertyInformation propertyInformation)
Modified: myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/util/BeanValidationUtils.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/util/BeanValidationUtils.java?rev=944289&r1=944288&r2=944289&view=diff
==============================================================================
--- myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/util/BeanValidationUtils.java (original)
+++ myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/util/BeanValidationUtils.java Fri May 14 14:33:30 2010
@@ -19,6 +19,7 @@
package org.apache.myfaces.extensions.validator.beanval.util;
import org.apache.myfaces.extensions.validator.beanval.storage.ModelValidationEntry;
+import org.apache.myfaces.extensions.validator.beanval.ExtValBeanValidationContext;
import org.apache.myfaces.extensions.validator.core.property.PropertyDetails;
import org.apache.myfaces.extensions.validator.core.validation.message.FacesMessageHolder;
import org.apache.myfaces.extensions.validator.internal.UsageCategory;
@@ -32,10 +33,14 @@ import javax.faces.validator.ValidatorEx
import javax.validation.ConstraintViolation;
import javax.validation.ValidatorFactory;
import javax.validation.Validation;
+import javax.validation.metadata.ElementDescriptor;
+import javax.validation.metadata.PropertyDescriptor;
+import javax.validation.metadata.BeanDescriptor;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.Map;
+import java.util.Collections;
import java.util.logging.Logger;
/**
@@ -49,6 +54,58 @@ public class BeanValidationUtils
private static ExtValBeanValidationMetaDataInternals bvmi = new ExtValBeanValidationMetaDataInternals(LOGGER);
private static final String VALIDATOR_FACTORY_KEY = "javax.faces.validator.beanValidator.ValidatorFactory";
+ @SuppressWarnings({"unchecked"})
+ public static Set<ConstraintViolation<Object>> validate(Class baseClass,
+ String propertyName,
+ Object objectToValidate,
+ Class[] groups,
+ boolean cascadedValidation)
+ {
+ ValidatorFactory validatorFactory = ExtValBeanValidationContext.getCurrentInstance().getValidatorFactory();
+ Set<ConstraintViolation<Object>> result =
+ validatorFactory.usingContext()
+ .messageInterpolator(ExtValBeanValidationContext.getCurrentInstance().getMessageInterpolator())
+ .constraintValidatorFactory(validatorFactory.getConstraintValidatorFactory())
+ .traversableResolver(validatorFactory.getTraversableResolver())
+ .getValidator()
+ .validateValue(baseClass, propertyName, objectToValidate, groups);
+
+ if(result.isEmpty() && cascadedValidation)
+ {
+ result = processCascadedValidation(validatorFactory, baseClass, propertyName, objectToValidate, groups);
+ }
+
+ return result;
+ }
+
+ private static Set<ConstraintViolation<Object>> processCascadedValidation(ValidatorFactory validatorFactory,
+ Class baseBeanClass,
+ String propertyName,
+ Object objectToValidate,
+ Class[] groups)
+ {
+ ElementDescriptor elementDescriptor = getElementDescriptor(baseBeanClass, propertyName);
+
+ if(elementDescriptor instanceof PropertyDescriptor && ((PropertyDescriptor)elementDescriptor).isCascaded())
+ {
+ return validatorFactory.usingContext()
+ .messageInterpolator(ExtValBeanValidationContext.getCurrentInstance().getMessageInterpolator())
+ .constraintValidatorFactory(validatorFactory.getConstraintValidatorFactory())
+ .traversableResolver(validatorFactory.getTraversableResolver())
+ .getValidator()
+ .validate(objectToValidate, groups);
+ }
+ return Collections.emptySet();
+ }
+
+ public static ElementDescriptor getElementDescriptor(Class targetClass, String property)
+ {
+ BeanDescriptor beanDescriptor = ExtValBeanValidationContext.getCurrentInstance().getValidatorFactory()
+ .getValidator().getConstraintsForClass(targetClass);
+
+ return beanDescriptor.getConstraintsForProperty(property);
+ }
+
public static void addMetaDataToContext(
UIComponent component, PropertyDetails propertyDetails, boolean processModelValidation)
{
@@ -81,12 +138,12 @@ public class BeanValidationUtils
public static void processConstraintViolations(FacesContext facesContext,
UIComponent uiComponent,
Object convertedObject,
- Set<ConstraintViolation> violations)
+ Set<ConstraintViolation<Object>> violations)
{
List<FacesMessageHolder> facesMessageHolderList = new ArrayList<FacesMessageHolder>();
FacesMessage facesMessage;
- for (ConstraintViolation violation : violations)
+ for (ConstraintViolation<Object> violation : violations)
{
facesMessage = createFacesMessageForConstraintViolation(uiComponent, convertedObject, violation);
@@ -103,7 +160,7 @@ public class BeanValidationUtils
public static FacesMessage createFacesMessageForConstraintViolation(UIComponent uiComponent,
Object convertedObject,
- ConstraintViolation violation)
+ ConstraintViolation<Object> violation)
{
String violationMessage = violation.getMessage();
Modified: myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/util/ExtValBeanValidationMetaDataInternals.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/util/ExtValBeanValidationMetaDataInternals.java?rev=944289&r1=944288&r2=944289&view=diff
==============================================================================
--- myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/util/ExtValBeanValidationMetaDataInternals.java (original)
+++ myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/util/ExtValBeanValidationMetaDataInternals.java Fri May 14 14:33:30 2010
@@ -564,7 +564,7 @@ class ExtValBeanValidationMetaDataIntern
return this.labeledMessageInternals.createLabeledMessage(violationMessage, isDetailMessage);
}
- FacesMessage.Severity calcSeverity(ConstraintViolation<?> violation)
+ FacesMessage.Severity calcSeverity(ConstraintViolation<Object> violation)
{
for (Class<? extends Payload> payload : violation.getConstraintDescriptor().getPayload())
{