Author: alexsmirnov
Date: 2010-01-05 17:51:50 -0500 (Tue, 05 Jan 2010)
New Revision: 16242
Modified:
branches/community/3.3.X/framework/api/src/main/java/org/richfaces/validator/GraphValidator.java
branches/community/3.3.X/samples/beanValidatorSample/pom.xml
branches/community/3.3.X/ui/beanValidator/pom.xml
branches/community/3.3.X/ui/beanValidator/src/main/java/org/richfaces/component/UIGraphValidator.java
branches/community/3.3.X/ui/beanValidator/src/main/java/org/richfaces/validator/BeanValidator.java
branches/community/3.3.X/ui/beanValidator/src/main/java/org/richfaces/validator/FacesBeanValidator.java
branches/community/3.3.X/ui/beanValidator/src/main/java/org/richfaces/validator/HibernateValidator.java
branches/community/3.3.X/ui/beanValidator/src/main/java/org/richfaces/validator/NullValidator.java
branches/community/3.3.X/ui/beanValidator/src/main/java/org/richfaces/validator/ObjectValidator.java
branches/community/3.3.X/ui/beanValidator/src/test/java/org/richfaces/validator/BeanValidatorTest.java
branches/community/3.3.X/ui/beanValidator/src/test/java/org/richfaces/validator/HibernateValidatorTest.java
branches/community/3.3.X/ui/beanValidator/src/test/java/org/richfaces/validator/ObjectValidatorTest.java
Log:
https://jira.jboss.org/jira/browse/RF-8213
Modified:
branches/community/3.3.X/framework/api/src/main/java/org/richfaces/validator/GraphValidator.java
===================================================================
---
branches/community/3.3.X/framework/api/src/main/java/org/richfaces/validator/GraphValidator.java 2010-01-05
15:57:32 UTC (rev 16241)
+++
branches/community/3.3.X/framework/api/src/main/java/org/richfaces/validator/GraphValidator.java 2010-01-05
22:51:50 UTC (rev 16242)
@@ -3,6 +3,7 @@
*/
package org.richfaces.validator;
+import java.util.Collection;
import java.util.Set;
import javax.faces.component.UIComponent;
@@ -18,7 +19,7 @@
*/
public interface GraphValidator {
- public String[] validateGraph(FacesContext context, UIComponent component, Object
value,
+ public Collection<String> validateGraph(FacesContext context, UIComponent
component, Object value,
Object profiles) throws ValidatorException ;
}
Modified: branches/community/3.3.X/samples/beanValidatorSample/pom.xml
===================================================================
--- branches/community/3.3.X/samples/beanValidatorSample/pom.xml 2010-01-05 15:57:32 UTC
(rev 16241)
+++ branches/community/3.3.X/samples/beanValidatorSample/pom.xml 2010-01-05 22:51:50 UTC
(rev 16242)
@@ -41,12 +41,23 @@
<artifactId>slf4j-jcl</artifactId>
<version>1.4.2</version>
</dependency>
+ <dependency>
+ <groupId>xml-apis</groupId>
+ <artifactId>xml-apis</artifactId>
+ <version>1.0.b2</version>
+ <scope>provided</scope>
+ </dependency>
<dependency>
<groupId>org.richfaces.ui</groupId>
<artifactId>richfaces-ui</artifactId>
<version>3.3.3-SNAPSHOT</version>
</dependency>
<dependency>
+ <groupId>org.richfaces.framework</groupId>
+ <artifactId>richfaces-impl</artifactId>
+ <version>3.3.3-SNAPSHOT</version>
+ </dependency>
+ <dependency>
<groupId>com.uwyn</groupId>
<artifactId>jhighlight</artifactId>
<version>1.0</version>
Modified: branches/community/3.3.X/ui/beanValidator/pom.xml
===================================================================
--- branches/community/3.3.X/ui/beanValidator/pom.xml 2010-01-05 15:57:32 UTC (rev 16241)
+++ branches/community/3.3.X/ui/beanValidator/pom.xml 2010-01-05 22:51:50 UTC (rev 16242)
@@ -66,6 +66,7 @@
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>1.0.0.GA</version>
+ <optional>true</optional>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
Modified:
branches/community/3.3.X/ui/beanValidator/src/main/java/org/richfaces/component/UIGraphValidator.java
===================================================================
---
branches/community/3.3.X/ui/beanValidator/src/main/java/org/richfaces/component/UIGraphValidator.java 2010-01-05
15:57:32 UTC (rev 16241)
+++
branches/community/3.3.X/ui/beanValidator/src/main/java/org/richfaces/component/UIGraphValidator.java 2010-01-05
22:51:50 UTC (rev 16242)
@@ -25,6 +25,7 @@
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
@@ -226,7 +227,7 @@
Validator validator = context.getApplication().createValidator(getType());
if (validator instanceof GraphValidator) {
GraphValidator graphValidator = (GraphValidator) validator;
- String[] messages = graphValidator.validateGraph(context,this, value,getProfiles());
+ Collection<String> messages = graphValidator.validateGraph(context,this,
value,getProfiles());
if (null != messages) {
context.renderResponse();
// send all validation messages.
Modified:
branches/community/3.3.X/ui/beanValidator/src/main/java/org/richfaces/validator/BeanValidator.java
===================================================================
---
branches/community/3.3.X/ui/beanValidator/src/main/java/org/richfaces/validator/BeanValidator.java 2010-01-05
15:57:32 UTC (rev 16241)
+++
branches/community/3.3.X/ui/beanValidator/src/main/java/org/richfaces/validator/BeanValidator.java 2010-01-05
22:51:50 UTC (rev 16242)
@@ -3,6 +3,8 @@
*/
package org.richfaces.validator;
+import java.util.ArrayList;
+import java.util.Collection;
import java.util.Locale;
import java.util.Set;
@@ -47,7 +49,7 @@
* java.lang.String, java.lang.Object, java.util.Locale)
*/
@Override
- protected String[] validate(FacesContext facesContext, Object base, String property,
+ protected Collection<String> validate(FacesContext facesContext, Object base,
String property,
Object value, Set<String> profiles) {
Class beanType = base.getClass();
Set<ConstraintViolation<Object>> constrains = getValidator(facesContext)
@@ -63,12 +65,20 @@
* .FacesContext, java.lang.Object, java.util.Set)
*/
@Override
- public String[] validateGraph(FacesContext context, Object value,
+ public Collection<String> validateGraph(FacesContext context, Object value,
Set<String> profiles) {
Class<?>[] groups = getGroups(profiles);
Set<ConstraintViolation<Object>> violations = getValidator(
context).validate(value, groups);
- String[] messages = extractMessages(violations);
+ Collection<String> messages = extractMessages(violations);
+ if(null != parent){
+ Collection<String> parentMessages = parent.validateGraph(context, value,
profiles);
+ if(null != messages){
+ messages.addAll(parentMessages);
+ } else {
+ messages = parentMessages;
+ }
+ }
return messages;
}
@@ -98,13 +108,12 @@
return groups;
}
- private String[] extractMessages(Set<ConstraintViolation<Object>>
violations) {
- String[] messages = null;
+ private Collection<String>
extractMessages(Set<ConstraintViolation<Object>> violations) {
+ Collection<String> messages = null;
if (null != violations && violations.size() > 0) {
- messages = new String[violations.size()];
- int i = 0;
+ messages = new ArrayList<String>(violations.size());
for (ConstraintViolation<? extends Object> constraintViolation : violations) {
- messages[i++] = constraintViolation.getMessage();
+ messages.add(constraintViolation.getMessage());
}
}
Modified:
branches/community/3.3.X/ui/beanValidator/src/main/java/org/richfaces/validator/FacesBeanValidator.java
===================================================================
---
branches/community/3.3.X/ui/beanValidator/src/main/java/org/richfaces/validator/FacesBeanValidator.java 2010-01-05
15:57:32 UTC (rev 16241)
+++
branches/community/3.3.X/ui/beanValidator/src/main/java/org/richfaces/validator/FacesBeanValidator.java 2010-01-05
22:51:50 UTC (rev 16242)
@@ -22,6 +22,7 @@
import java.io.Serializable;
import java.text.MessageFormat;
+import java.util.Collection;
import java.util.Locale;
import java.util.Set;
@@ -101,7 +102,7 @@
ValueExpression valueExpression = component
.getValueExpression("value");
if (null != valueExpression) {
- String[] messages = ObjectValidator.getInstance(context)
+ Collection<String> messages = ObjectValidator.getInstance(context)
.validate(context, valueExpression, convertedValue, getProfiles());
if (null != messages) {
input.setValid(false);
@@ -144,10 +145,10 @@
return label;
}
- public String[] validateGraph(FacesContext context, UIComponent component,
+ public Collection<String> validateGraph(FacesContext context, UIComponent
component,
Object value, Object profiles) throws ValidatorException {
ObjectValidator beanValidator = ObjectValidator.getInstance(context);
- String[] messages = beanValidator.validateGraph(context,
value,AjaxRendererUtils.asSet(profiles));
+ Collection<String> messages = beanValidator.validateGraph(context,
value,AjaxRendererUtils.asSet(profiles));
return messages;
}
Modified:
branches/community/3.3.X/ui/beanValidator/src/main/java/org/richfaces/validator/HibernateValidator.java
===================================================================
---
branches/community/3.3.X/ui/beanValidator/src/main/java/org/richfaces/validator/HibernateValidator.java 2010-01-05
15:57:32 UTC (rev 16241)
+++
branches/community/3.3.X/ui/beanValidator/src/main/java/org/richfaces/validator/HibernateValidator.java 2010-01-05
22:51:50 UTC (rev 16242)
@@ -21,6 +21,7 @@
package org.richfaces.validator;
import java.beans.FeatureDescriptor;
+import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.EmptyStackException;
@@ -57,19 +58,27 @@
private Map<ValidatorKey, ClassValidator<? extends Object>> classValidators
= new ConcurrentHashMap<ValidatorKey, ClassValidator<? extends Object>>();
HibernateValidator() {
+ super();
// This is a "singleton"-like class. Only factory methods allowed.
// Enforce class to load
ClassValidator.class.getName();
}
+ HibernateValidator(ObjectValidator parent){
+ super(parent);
+ // This is a "singleton"-like class. Only factory methods allowed.
+ // Enforce class to load
+ ClassValidator.class.getName();
+ }
+
@Override
@SuppressWarnings("unchecked")
- public String[] validateGraph(FacesContext context, Object value,
+ public Collection<String> validateGraph(FacesContext context, Object value,
Set<String> profiles) {
if (null == context) {
throw new FacesException(INPUT_PARAMETERS_IS_NOT_CORRECT);
}
- String validationMessages[] = null;
+ Collection<String> validationMessages = null;
if (null != value) {
ClassValidator<Object> validator = (ClassValidator<Object>) getValidator(
context, value.getClass());
@@ -77,14 +86,21 @@
InvalidValue[] invalidValues = validator
.getInvalidValues(value);
if (null != invalidValues && invalidValues.length > 0) {
- validationMessages = new String[invalidValues.length];
+ validationMessages = new ArrayList<String>(invalidValues.length);
for (int i = 0; i < invalidValues.length; i++) {
InvalidValue invalidValue = invalidValues[i];
- validationMessages[i] = invalidValue.getMessage();
+ validationMessages.add(invalidValue.getMessage());
}
}
}
-
+ if(null != parent){
+ Collection<String> parentMessages = parent.validateGraph(context, value,
profiles);
+ if(null != validationMessages){
+ validationMessages.addAll(parentMessages);
+ } else {
+ validationMessages = parentMessages;
+ }
+ }
}
return validationMessages;
}
@@ -156,17 +172,17 @@
}
@Override
- protected String[] validate(FacesContext facesContext, Object base, String property,
+ protected Collection<String> validate(FacesContext facesContext, Object base,
String property,
Object value, Set<String> profiles) {
InvalidValue[] invalidValues = validateBean(facesContext, base, property,
value);
if (null == invalidValues) {
return null;
} else {
- String[] result = new String[invalidValues.length];
+ Collection<String> result = new
ArrayList<String>(invalidValues.length);
for (int i = 0; i < invalidValues.length; i++) {
InvalidValue invalidValue = invalidValues[i];
- result[i] = invalidValue.getMessage();
+ result.add(invalidValue.getMessage());
}
return result;
}
Modified:
branches/community/3.3.X/ui/beanValidator/src/main/java/org/richfaces/validator/NullValidator.java
===================================================================
---
branches/community/3.3.X/ui/beanValidator/src/main/java/org/richfaces/validator/NullValidator.java 2010-01-05
15:57:32 UTC (rev 16241)
+++
branches/community/3.3.X/ui/beanValidator/src/main/java/org/richfaces/validator/NullValidator.java 2010-01-05
22:51:50 UTC (rev 16242)
@@ -3,6 +3,7 @@
*/
package org.richfaces.validator;
+import java.util.Collection;
import java.util.Set;
import javax.faces.context.FacesContext;
@@ -17,7 +18,7 @@
* @see org.richfaces.validator.ObjectValidator#validate(java.lang.Object,
java.lang.String, java.lang.Object, java.util.Locale)
*/
@Override
- protected String[] validate(FacesContext facesContext, Object base, String property,
+ protected Collection<String> validate(FacesContext facesContext, Object base,
String property,
Object value, Set<String> profiles) {
// do nothing.
return null;
@@ -27,7 +28,7 @@
* @see
org.richfaces.validator.ObjectValidator#validateGraph(javax.faces.context.FacesContext,
java.lang.Object, java.util.Set)
*/
@Override
- public String[] validateGraph(FacesContext context, Object value,
+ public Collection<String> validateGraph(FacesContext context, Object value,
Set<String> profiles) {
// do nothing
return null;
Modified:
branches/community/3.3.X/ui/beanValidator/src/main/java/org/richfaces/validator/ObjectValidator.java
===================================================================
---
branches/community/3.3.X/ui/beanValidator/src/main/java/org/richfaces/validator/ObjectValidator.java 2010-01-05
15:57:32 UTC (rev 16241)
+++
branches/community/3.3.X/ui/beanValidator/src/main/java/org/richfaces/validator/ObjectValidator.java 2010-01-05
22:51:50 UTC (rev 16242)
@@ -39,6 +39,8 @@
private static final Object MUTEX = new Object();
private static final Log log = LogFactory.getLog(ObjectValidator.class);
+
+ protected final ObjectValidator parent;
/**
* Create BeanValidator instance. For a Junit tests only.
@@ -52,19 +54,13 @@
ObjectValidator validator = null;
try {
validator = new BeanValidator();
- } catch (Exception e){
- try {
- validator = new HibernateValidator();
- } catch (Throwable e2) {
- //Hibernate-validators not available
- }
+ } catch (Throwable e){
+ // JSR-303 is not avalable.
}
- catch (LinkageError le){
- try {
- validator = new HibernateValidator();
- } catch (Throwable e2) {
- //Hibernate-validators not available
- }
+ try {
+ validator = new HibernateValidator(validator);
+ } catch (Throwable e2) {
+ //Hibernate-validators not available
}
if(validator == null){
log.warn("Validator implementations not found at classpath, default NullValidator
will be used.");
@@ -73,6 +69,13 @@
return validator;
}
+ ObjectValidator() {
+ this.parent = null;
+ }
+
+ ObjectValidator(ObjectValidator parent){
+ this.parent = parent;
+ }
/**
* Return BeanValidator object from a ServletContext attribute. Create new
* instance if none is defined.
@@ -98,7 +101,7 @@
return instance;
}
- public abstract String[] validateGraph(FacesContext context, Object value,
+ public abstract Collection<String> validateGraph(FacesContext context, Object
value,
Set<String> profiles);
/**
@@ -116,12 +119,12 @@
* @throws FacesException
* if locale or context not properly initialized
*/
- public String[] validate(FacesContext context, ValueExpression target,
+ public Collection<String> validate(FacesContext context, ValueExpression target,
Object value, Set<String> profiles) {
if (null == context) {
throw new FacesException(INPUT_PARAMETERS_IS_NOT_CORRECT);
}
- String[] validationMessages = null;
+ Collection<String> validationMessages = null;
if (null != target) {
ELContext elContext = context.getELContext();
ValidationResolver validationResolver = createValidationResolver(
@@ -135,6 +138,14 @@
}
if (!validationResolver.isValid()) {
validationMessages = validationResolver.getValidationMessages();
+ }
+ if(null != parent){
+ Collection<String> parentMessages = parent.validate(context, target, value,
profiles);
+ if(null != validationMessages){
+ validationMessages.addAll(parentMessages);
+ } else {
+ validationMessages = parentMessages;
+ }
}
}
@@ -155,7 +166,7 @@
* @return null for a valid value, array of the validation messages
* othervise.
*/
- protected abstract String[] validate(FacesContext facesContext, Object base,
+ protected abstract Collection<String> validate(FacesContext facesContext, Object
base,
String property, Object value, Set<String> profiles);
static Locale calculateLocale(FacesContext context) {
@@ -323,7 +334,7 @@
private boolean valid = true;
- private String[] validationMessages = null;
+ private Collection<String> validationMessages = null;
private Stack<BasePropertyPair> valuesStack;
@@ -445,7 +456,7 @@
validationMessages = validate(facesContext, base,
property.toString(), value, profiles);
valid = null == validationMessages
- || 0 == validationMessages.length;
+ || 0 == validationMessages.size();
}
}
@@ -468,7 +479,7 @@
/**
* @return the validationMessages
*/
- public String[] getValidationMessages() {
+ public Collection<String> getValidationMessages() {
return validationMessages;
}
Modified:
branches/community/3.3.X/ui/beanValidator/src/test/java/org/richfaces/validator/BeanValidatorTest.java
===================================================================
---
branches/community/3.3.X/ui/beanValidator/src/test/java/org/richfaces/validator/BeanValidatorTest.java 2010-01-05
15:57:32 UTC (rev 16241)
+++
branches/community/3.3.X/ui/beanValidator/src/test/java/org/richfaces/validator/BeanValidatorTest.java 2010-01-05
22:51:50 UTC (rev 16242)
@@ -20,6 +20,7 @@
*/
package org.richfaces.validator;
+import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.ResourceBundle;
@@ -49,9 +50,9 @@
public void testValidate() throws Exception {
BeanValidator validator = new BeanValidator();
- String[] validate = validator.validate(facesContext, new Bean(),
"property", null, null);
+ Collection<String> validate = validator.validate(facesContext, new Bean(),
"property", null, null);
assertNotNull(validate);
- assertEquals(1, validate.length);
+ assertEquals(1, validate.size());
}
public static class Bean {
Modified:
branches/community/3.3.X/ui/beanValidator/src/test/java/org/richfaces/validator/HibernateValidatorTest.java
===================================================================
---
branches/community/3.3.X/ui/beanValidator/src/test/java/org/richfaces/validator/HibernateValidatorTest.java 2010-01-05
15:57:32 UTC (rev 16241)
+++
branches/community/3.3.X/ui/beanValidator/src/test/java/org/richfaces/validator/HibernateValidatorTest.java 2010-01-05
22:51:50 UTC (rev 16242)
@@ -118,7 +118,7 @@
assertTrue(list instanceof List);
validationResolver.setValue(elContext, list, new Integer(0), "");
assertFalse(validationResolver.isValid());
- assertEquals(1, validationResolver.getValidationMessages().length);
+ assertEquals(1, validationResolver.getValidationMessages().size());
}
public void testValidationResolverMap() throws Exception {
ValidableBean bean = new ValidableBean();
@@ -129,7 +129,7 @@
assertTrue(list instanceof Map);
validationResolver.setValue(elContext, list, new Integer(0), "");
assertFalse(validationResolver.isValid());
- assertEquals(1, validationResolver.getValidationMessages().length);
+ assertEquals(1, validationResolver.getValidationMessages().size());
}
public void testHibernateMessages() throws Exception {
Modified:
branches/community/3.3.X/ui/beanValidator/src/test/java/org/richfaces/validator/ObjectValidatorTest.java
===================================================================
---
branches/community/3.3.X/ui/beanValidator/src/test/java/org/richfaces/validator/ObjectValidatorTest.java 2010-01-05
15:57:32 UTC (rev 16241)
+++
branches/community/3.3.X/ui/beanValidator/src/test/java/org/richfaces/validator/ObjectValidatorTest.java 2010-01-05
22:51:50 UTC (rev 16242)
@@ -1,5 +1,6 @@
package org.richfaces.validator;
+import java.util.Collection;
import java.util.Locale;
import java.util.ResourceBundle;
import java.util.Set;
@@ -26,12 +27,12 @@
public void testCreateInstance() {
ObjectValidator objectValidator = ObjectValidator.createInstance();
- assertEquals(BeanValidator.class, objectValidator.getClass());
+ assertEquals(HibernateValidator.class, objectValidator.getClass());
}
public void testGetInstance() {
ObjectValidator objectValidator = ObjectValidator.getInstance(facesContext);
- assertEquals(BeanValidator.class, objectValidator.getClass());
+ assertEquals(HibernateValidator.class, objectValidator.getClass());
ObjectValidator objectValidator2 = ObjectValidator.getInstance(facesContext);
assertSame(objectValidator, objectValidator2);
}
@@ -62,14 +63,14 @@
private static class ObjectValidatorStub extends ObjectValidator {
@Override
- protected String[] validate(FacesContext facesContext, Object base, String property,
+ protected Collection<String> validate(FacesContext facesContext, Object base,
String property,
Object value, Set<String> profiles) {
// TODO Auto-generated method stub
return null;
}
@Override
- public String[] validateGraph(FacesContext context, Object value,
+ public Collection<String> validateGraph(FacesContext context, Object value,
Set<String> profiles) {
// TODO Auto-generated method stub
return null;