[jboss-cvs] jboss-seam/src/main/org/jboss/seam/core ...
Gavin King
gavin.king at jboss.com
Thu Oct 26 17:16:19 EDT 2006
User: gavin
Date: 06/10/26 17:16:19
Added: src/main/org/jboss/seam/core Validation.java
Log:
testability of validation
Revision Changes Path
1.1 date: 2006/10/26 21:16:19; author: gavin; state: Exp;jboss-seam/src/main/org/jboss/seam/core/Validation.java
Index: Validation.java
===================================================================
package org.jboss.seam.core;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import javax.faces.context.FacesContext;
import org.hibernate.validator.ClassValidator;
import org.hibernate.validator.InvalidValue;
import org.jboss.seam.Component;
import org.jboss.seam.InterceptionType;
import org.jboss.seam.ScopeType;
import org.jboss.seam.Seam;
import org.jboss.seam.annotations.Intercept;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;
import org.jboss.seam.contexts.Contexts;
@Name("org.jboss.seam.core.validation")
@Intercept(InterceptionType.NEVER)
@Scope(ScopeType.APPLICATION)
public class Validation
{
private Map<Class, ClassValidator> classValidators = Collections.synchronizedMap( new HashMap<Class, ClassValidator>() );
public ClassValidator getValidator(Class modelClass)
{
ClassValidator result = classValidators.get(modelClass);
if (result==null)
{
result = createValidator(modelClass);
classValidators.put(modelClass, result);
}
return result;
}
public ClassValidator createValidator(Class modelClass)
{
String componentName = Seam.getComponentName(modelClass);
if (componentName==null)
{
java.util.ResourceBundle bundle = ResourceBundle.instance();
return bundle==null ?
new ClassValidator(modelClass) :
new ClassValidator(modelClass, bundle);
}
else
{
return Component.forName(componentName).getValidator();
}
}
public InvalidValue[] validate(FacesContext context, String propertyExpression, Object value)
{
int sep = propertyExpression.lastIndexOf('.');
if (sep<=0)
{
throw new RuntimeException("not an attribute value binding: " + propertyExpression);
}
String modelExpression = propertyExpression.substring(0, sep) + '}';
String propertyName = propertyExpression.substring( modelExpression.length(), propertyExpression.length()-1 );
Object model = context.getApplication().createValueBinding(modelExpression).getValue(context);
ClassValidator validator = getValidator( model.getClass() );
return validator.getPotentialInvalidValues(propertyName, value);
}
public static Validation instance()
{
if ( !Contexts.isApplicationContextActive() )
{
throw new IllegalStateException("No active application scope");
}
return (Validation) Component.getInstance(Validation.class, ScopeType.APPLICATION, true);
}
}
More information about the jboss-cvs-commits
mailing list