Return-Path:
Delivered-To: apmail-incubator-bval-commits-archive@minotaur.apache.org
Received: (qmail 36167 invoked from network); 9 Jul 2010 16:32:53 -0000
Received: from unknown (HELO mail.apache.org) (140.211.11.3)
by 140.211.11.9 with SMTP; 9 Jul 2010 16:32:53 -0000
Received: (qmail 16419 invoked by uid 500); 9 Jul 2010 16:32:53 -0000
Delivered-To: apmail-incubator-bval-commits-archive@incubator.apache.org
Received: (qmail 16385 invoked by uid 500); 9 Jul 2010 16:32:53 -0000
Mailing-List: contact bval-commits-help@incubator.apache.org; run by ezmlm
Precedence: bulk
List-Help:
List-Unsubscribe:
List-Post:
List-Id:
Reply-To: bval-dev@incubator.apache.org
Delivered-To: mailing list bval-commits@incubator.apache.org
Received: (qmail 16378 invoked by uid 99); 9 Jul 2010 16:32:53 -0000
Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230)
by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 09 Jul 2010 16:32:53 +0000
X-ASF-Spam-Status: No, hits=-2000.0 required=10.0
tests=ALL_TRUSTED
X-Spam-Check-By: apache.org
Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4)
by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 09 Jul 2010 16:32:44 +0000
Received: by eris.apache.org (Postfix, from userid 65534)
id 2ADCE23889B3; Fri, 9 Jul 2010 16:31:20 +0000 (UTC)
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Subject: svn commit: r962601 [1/4] - in /incubator/bval/trunk:
bval-core/src/main/java/org/apache/bval/
bval-core/src/main/java/org/apache/bval/model/
bval-core/src/main/java/org/apache/bval/routines/
bval-core/src/main/java/org/apache/bval/util/ bval-jsr303/sr...
Date: Fri, 09 Jul 2010 16:31:18 -0000
To: bval-commits@incubator.apache.org
From: carlosvara@apache.org
X-Mailer: svnmailer-1.0.8
Message-Id: <20100709163120.2ADCE23889B3@eris.apache.org>
X-Virus-Checked: Checked by ClamAV on apache.org
Author: carlosvara
Date: Fri Jul 9 16:31:15 2010
New Revision: 962601
URL: http://svn.apache.org/viewvc?rev=962601&view=rev
Log:
BVAL-75: merged patches by Matt Benson
Modified:
incubator/bval/trunk/bval-core/src/main/java/org/apache/bval/AbstractBeanValidator.java
incubator/bval/trunk/bval-core/src/main/java/org/apache/bval/BeanValidationContext.java
incubator/bval/trunk/bval-core/src/main/java/org/apache/bval/BeanValidator.java
incubator/bval/trunk/bval-core/src/main/java/org/apache/bval/DynamicMetaBean.java
incubator/bval/trunk/bval-core/src/main/java/org/apache/bval/IntrospectorMetaBeanFactory.java
incubator/bval/trunk/bval-core/src/main/java/org/apache/bval/MetaBeanBuilder.java
incubator/bval/trunk/bval-core/src/main/java/org/apache/bval/MetaBeanCache.java
incubator/bval/trunk/bval-core/src/main/java/org/apache/bval/MetaBeanFactory.java
incubator/bval/trunk/bval-core/src/main/java/org/apache/bval/MetaBeanFinder.java
incubator/bval/trunk/bval-core/src/main/java/org/apache/bval/MetaBeanManager.java
incubator/bval/trunk/bval-core/src/main/java/org/apache/bval/ValidationResults.java
incubator/bval/trunk/bval-core/src/main/java/org/apache/bval/model/DynaType.java
incubator/bval/trunk/bval-core/src/main/java/org/apache/bval/model/DynaTypeEnum.java
incubator/bval/trunk/bval-core/src/main/java/org/apache/bval/model/Features.java
incubator/bval/trunk/bval-core/src/main/java/org/apache/bval/model/FeaturesCapable.java
incubator/bval/trunk/bval-core/src/main/java/org/apache/bval/model/MetaBean.java
incubator/bval/trunk/bval-core/src/main/java/org/apache/bval/model/MetaProperty.java
incubator/bval/trunk/bval-core/src/main/java/org/apache/bval/model/ValidationContext.java
incubator/bval/trunk/bval-core/src/main/java/org/apache/bval/model/ValidationListener.java
incubator/bval/trunk/bval-core/src/main/java/org/apache/bval/routines/EMailValidationUtils.java
incubator/bval/trunk/bval-core/src/main/java/org/apache/bval/util/AccessStrategy.java
incubator/bval/trunk/bval-core/src/main/java/org/apache/bval/util/BeanValidationVersion.java
incubator/bval/trunk/bval-core/src/main/java/org/apache/bval/util/FieldAccess.java
incubator/bval/trunk/bval-core/src/main/java/org/apache/bval/util/MethodAccess.java
incubator/bval/trunk/bval-core/src/main/java/org/apache/bval/util/PrivilegedActions.java
incubator/bval/trunk/bval-core/src/main/java/org/apache/bval/util/PropertyAccess.java
incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/AnnotationConstraintBuilder.java
incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/ApacheFactoryContext.java
incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/ApacheValidationProvider.java
incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/ApacheValidatorFactory.java
incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/AppendValidation.java
incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/AppendValidationToBuilder.java
incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/AppendValidationToMeta.java
incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/BaseAppendValidation.java
incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/BeanDescriptorImpl.java
incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/ClassValidator.java
incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/ConfigurationImpl.java
incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/ConstraintCached.java
incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/ConstraintDefaults.java
incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/ConstraintDescriptorImpl.java
incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/ConstraintFinderImpl.java
incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/ConstraintValidation.java
incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/ConstraintValidationListener.java
incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/ConstraintValidatorContextImpl.java
incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/ConstraintValidatorIdentity.java
incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/ConstraintViolationImpl.java
incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/DefaultMessageInterpolator.java
incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/DefaultValidationProviderResolver.java
incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/ElementDescriptorImpl.java
incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/GraphBeanIdentity.java
incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/GroupValidationContext.java
incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/GroupValidationContextImpl.java
incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/Jsr303Features.java
incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/Jsr303MetaBeanFactory.java
incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/NestedMetaProperty.java
incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/PropertyDescriptorImpl.java
incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/UnknownPropertyException.java
incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/extensions/AppendValidationToList.java
incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/extensions/ConstructorDescriptor.java
incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/extensions/ConstructorDescriptorImpl.java
incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/extensions/MethodBeanDescriptor.java
incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/extensions/MethodBeanDescriptorImpl.java
incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/extensions/MethodDescriptor.java
incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/extensions/MethodDescriptorImpl.java
incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/extensions/MethodValidatorImpl.java
incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/extensions/MethodValidatorMetaBeanFactory.java
incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/extensions/ParameterAccess.java
incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/extensions/ParameterDescriptor.java
incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/extensions/ParameterDescriptorImpl.java
incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/extensions/ProcedureDescriptor.java
incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/extensions/ReturnAccess.java
incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/groups/Group.java
incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/groups/Groups.java
incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/groups/GroupsComputer.java
incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/resolver/CachingRelevant.java
incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/resolver/CachingTraversableResolver.java
incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/resolver/DefaultTraversableResolver.java
incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/resolver/JPATraversableResolver.java
incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/resolver/SimpleTraversableResolver.java
incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/util/ClassHelper.java
incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/util/EnumerationConverter.java
incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/util/NodeBuilderCustomizableContextImpl.java
incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/util/NodeBuilderDefinedContextImpl.java
incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/util/NodeContextBuilderImpl.java
incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/util/NodeImpl.java
incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/util/PathImpl.java
incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/util/SecureActions.java
incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/util/TypeUtils.java
incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/xml/AnnotationIgnores.java
incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/xml/AnnotationProxy.java
incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/xml/AnnotationProxyBuilder.java
incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/xml/MetaConstraint.java
incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/xml/ValidationMappingParser.java
incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/xml/ValidationParser.java
Modified: incubator/bval/trunk/bval-core/src/main/java/org/apache/bval/AbstractBeanValidator.java
URL: http://svn.apache.org/viewvc/incubator/bval/trunk/bval-core/src/main/java/org/apache/bval/AbstractBeanValidator.java?rev=962601&r1=962600&r2=962601&view=diff
==============================================================================
--- incubator/bval/trunk/bval-core/src/main/java/org/apache/bval/AbstractBeanValidator.java (original)
+++ incubator/bval/trunk/bval-core/src/main/java/org/apache/bval/AbstractBeanValidator.java Fri Jul 9 16:31:15 2010
@@ -154,6 +154,7 @@ public abstract class AbstractBeanValida
* The validation context, its current bean must implement
* {@link Map}.
*/
+ @SuppressWarnings("unchecked")
protected void validateMapInContext(ValidationContext context) {
// jsr303 spec: For Map, the value of each Map.Entry is validated (key is not validated).
Iterator> it = ((Map
+ * @param bean
+ * @return this or null
+ */
public MetaBean resolveMetaBean(Object bean) {
return bean == null || bean == beanClass || beanClass.isInstance(bean) ? this : null;
}
Modified: incubator/bval/trunk/bval-core/src/main/java/org/apache/bval/model/MetaProperty.java
URL: http://svn.apache.org/viewvc/incubator/bval/trunk/bval-core/src/main/java/org/apache/bval/model/MetaProperty.java?rev=962601&r1=962600&r2=962601&view=diff
==============================================================================
--- incubator/bval/trunk/bval-core/src/main/java/org/apache/bval/model/MetaProperty.java (original)
+++ incubator/bval/trunk/bval-core/src/main/java/org/apache/bval/model/MetaProperty.java Fri Jul 9 16:31:15 2010
@@ -20,8 +20,8 @@ import java.lang.reflect.ParameterizedTy
import java.lang.reflect.Type;
/**
- * Description: the meta description of a property of a bean. it supports a map
- * of features and multiple validations
+ * Description: the meta description of a property of a bean. It supports a map
+ * of features and multiple validations.
*
* @see Validation
* @see MetaBean
@@ -36,46 +36,79 @@ public class MetaProperty extends Featur
private MetaBean metaBean;
private MetaBean parentMetaBean;
+ /**
+ * Create a new MetaProperty instance.
+ */
public MetaProperty() {
}
- /** the metabean of the target bean (mainly for relationships) */
+ /**
+ * Get the metabean of the target bean (mainly for relationships).
+ * @return MetaBean (may be null).
+ */
public MetaBean getMetaBean() {
return metaBean;
}
+ /**
+ * Set the MetaBean of this {@link MetaProperty}.
+ * @param metaBean to set
+ */
public void setMetaBean(MetaBean metaBean) {
this.metaBean = metaBean;
}
- /**
- * the metabean that owns this property (set by MetaBean.putProperty())
- */
+ /**
+ * Get the metabean that owns this property (set by MetaBean.putProperty())
+ * @return
+ */
public MetaBean getParentMetaBean() {
return parentMetaBean;
}
+ /**
+ * Set the metabean that owns this property (usually called by MetaBean.putProperty())
+ * @param parentMetaBean
+ */
+ //TODO could this be made package-private?
public void setParentMetaBean(MetaBean parentMetaBean) {
this.parentMetaBean = parentMetaBean;
- }
+ }
+ /**
+ * Learn whether this property is considered a relationship.
+ * @return true if it has a MetaBean of its own
+ */
public boolean isRelationship() {
return metaBean != null;
}
+ /**
+ * Set the type of this property.
+ * @param type to set
+ */
public void setType(Type type) {
this.type = type;
}
+ /**
+ * Get the type of this property.
+ * @return
+ */
public Type getType() {
return type;
}
+ /**
+ * Resolve the type of this property to a class.
+ * @return Class, null if cannot be determined
+ */
public Class> getTypeClass() {
return getTypeClass(type);
}
- private Class> getTypeClass(Type rawType) {
+ //TODO can this handle variables? Perhaps move TypeUtils up from bval-jsr303
+ private static Class> getTypeClass(Type rawType) {
if (rawType instanceof Class>) {
return (Class>) rawType;
} else if (rawType instanceof ParameterizedType) {
@@ -87,31 +120,60 @@ public class MetaProperty extends Featur
}
}
+ /**
+ * Get the name of this property.
+ * @return String
+ */
public String getName() {
return name;
}
+ /**
+ * Learn whether this property is considered mandatory.
+ * @return true if the MANDATORY feature is set to true.
+ * @see {@link Features.Property#MANDATORY}
+ */
public boolean isMandatory() {
return getFeature(MANDATORY, Boolean.FALSE).booleanValue();
}
+ /**
+ * Set this property as being mandatory (or not).
+ * @param mandatory
+ * @see {@link Features.Property#MANDATORY}
+ */
public void setMandatory(boolean mandatory) {
putFeature(MANDATORY, Boolean.valueOf(mandatory));
}
+ /**
+ * Get javascript validations of this property.
+ * @return String[]
+ * @deprecated
+ */
@Deprecated // remove this method?
public String[] getJavaScriptValidations() {
return getFeature(JAVASCRIPT_VALIDATION_FUNCTIONS);
}
+ /**
+ * Set the name of this property.
+ * @param name to set
+ */
public void setName(String name) {
this.name = name;
}
+ /**
+ * {@inheritDoc}
+ */
public MetaProperty clone() throws CloneNotSupportedException {
return (MetaProperty) super.clone();
}
+ /**
+ * {@inheritDoc}
+ */
public String toString() {
return "MetaProperty{" + "name='" + name + '\'' + ", type=" + type + '}';
}
Modified: incubator/bval/trunk/bval-core/src/main/java/org/apache/bval/model/ValidationContext.java
URL: http://svn.apache.org/viewvc/incubator/bval/trunk/bval-core/src/main/java/org/apache/bval/model/ValidationContext.java?rev=962601&r1=962600&r2=962601&view=diff
==============================================================================
--- incubator/bval/trunk/bval-core/src/main/java/org/apache/bval/model/ValidationContext.java (original)
+++ incubator/bval/trunk/bval-core/src/main/java/org/apache/bval/model/ValidationContext.java Fri Jul 9 16:31:15 2010
@@ -23,48 +23,113 @@ import org.apache.bval.util.AccessStrate
* during the validation process
*/
public interface ValidationContext {
+ /**
+ * Get the property value.
+ * @return {@link Object}
+ */
Object getPropertyValue();
- /** get the value by using the given access strategy and cache it */
+ /**
+ * Get the value by using the given access strategy.
+ * @param access
+ * @return {@link Object}
+ */
Object getPropertyValue(AccessStrategy access);
+ /**
+ * Get the property name.
+ * @return {@link String}
+ */
String getPropertyName();
+ /**
+ * Get the {@link ValidationListener}.
+ * @return T
+ */
T getListener();
+ /**
+ * Get the bean.
+ * @return {@link Object}
+ */
Object getBean();
+ /**
+ * Get the model meta-bean.
+ * @return {@link MetaBean}
+ */
MetaBean getMetaBean();
+ /**
+ * Set the model meta-bean.
+ * @param metaBean
+ */
void setMetaBean(MetaBean metaBean);
+ /**
+ * Get the model meta-property.
+ * @return {@link MetaProperty}
+ */
MetaProperty getMetaProperty();
+ /**
+ * Set the bean.
+ * @param bean
+ */
void setBean(Object bean);
+ /**
+ * Avoid recursion by recording the current state of this context as having been validated.
+ *
+ *
+ * @return true when this state had not already been recorded
+ */
boolean collectValidated();
+ /**
+ * Set the current bean/metabean.
+ * @param aBean
+ * @param aMetaBean
+ */
void setBean(Object aBean, MetaBean aMetaBean);
+ /**
+ * Set the current meta-property.
+ * @param metaProperty
+ */
void setMetaProperty(MetaProperty metaProperty);
- /** step deeper into association at 'prop' */
+ /**
+ * Step deeper into association at 'prop'
+ * @param prop
+ * @param access
+ */
void moveDown(MetaProperty prop, AccessStrategy access);
- /** step out from a validation of associated objects. */
+ /**
+ * Step out from a validation of associated objects.
+ * @param bean
+ * @param metaBean
+ */
void moveUp(Object bean, MetaBean metaBean);
/**
- * set the index of the object currently validated into the context.
+ * Set the index of the object currently validated into the context.
* used to create the propertyPath with [index] information for collections.
+ * @param index
*/
void setCurrentIndex(Integer index);
/**
* set the key of the object in a map currently validated into the context.
* used to create the propertyPath with [key] information for maps.
+ * @param key
*/
void setCurrentKey(Object key);
-
+
+ /**
+ * Get the current access strategy.
+ * @return {@link AccessStrategy}
+ */
AccessStrategy getAccess();
}
Modified: incubator/bval/trunk/bval-core/src/main/java/org/apache/bval/model/ValidationListener.java
URL: http://svn.apache.org/viewvc/incubator/bval/trunk/bval-core/src/main/java/org/apache/bval/model/ValidationListener.java?rev=962601&r1=962600&r2=962601&view=diff
==============================================================================
--- incubator/bval/trunk/bval-core/src/main/java/org/apache/bval/model/ValidationListener.java (original)
+++ incubator/bval/trunk/bval-core/src/main/java/org/apache/bval/model/ValidationListener.java Fri Jul 9 16:31:15 2010
@@ -41,34 +41,58 @@ public interface ValidationListener {
void addError(Error error, ValidationContext context);
/**
- * an object holding a single validation constraint violation
+ * An object holding a single validation constraint violation
* found during the validation process.
*/
public class Error implements Serializable {
private static final long serialVersionUID = 1L;
+ /** Reason */
final String reason;
+ /** Owner */
final Object owner;
+ /** Property name*/
final String propertyName;
+ /**
+ * Create a new Error instance.
+ * @param aReason
+ * @param aOwner
+ * @param aPropertyName
+ */
public Error(String aReason, Object aOwner, String aPropertyName) {
this.reason = aReason;
this.owner = aOwner;
this.propertyName = aPropertyName;
}
+ /**
+ * Get the reason.
+ * @return String
+ */
public String getReason() {
return reason;
}
+ /**
+ * Get the owner.
+ * @return Object
+ */
public Object getOwner() {
return owner;
}
+ /**
+ * Get the propertyName.
+ * @return String
+ */
public String getPropertyName() {
return propertyName;
}
+ /**
+ * {@inheritDoc}
+ */
public String toString() {
return "Error{" + "reason='" + reason + '\'' + ", propertyName='" +
propertyName + '\'' + '}';
Modified: incubator/bval/trunk/bval-core/src/main/java/org/apache/bval/routines/EMailValidationUtils.java
URL: http://svn.apache.org/viewvc/incubator/bval/trunk/bval-core/src/main/java/org/apache/bval/routines/EMailValidationUtils.java?rev=962601&r1=962600&r2=962601&view=diff
==============================================================================
--- incubator/bval/trunk/bval-core/src/main/java/org/apache/bval/routines/EMailValidationUtils.java (original)
+++ incubator/bval/trunk/bval-core/src/main/java/org/apache/bval/routines/EMailValidationUtils.java Fri Jul 9 16:31:15 2010
@@ -43,12 +43,25 @@ public class EMailValidationUtils {
);
}
+ /**
+ * Learn whether a given object is a valid email address.
+ * @param value to check
+ * @return true if the validation passes
+ */
public static boolean isValid(Object value) {
return isValid(value, DEFAULT_EMAIL_PATTERN);
}
+ /**
+ * Learn whether a particular value matches a given pattern per {@link Matcher#matches()}.
+ * @param value
+ * @param aPattern
+ * @return true if value was a String matching aPattern
+ */
+ //TODO it would seem to make sense to move or reduce the visibility of this method as it is more general than email.
public static boolean isValid(Object value, Pattern aPattern) {
if (value == null) return true;
+ //TODO could effortlessly validate any CharSequence
if (!(value instanceof String)) return false;
String string = (String) value;
if (string.length() == 0) return true;
Modified: incubator/bval/trunk/bval-core/src/main/java/org/apache/bval/util/AccessStrategy.java
URL: http://svn.apache.org/viewvc/incubator/bval/trunk/bval-core/src/main/java/org/apache/bval/util/AccessStrategy.java?rev=962601&r1=962600&r2=962601&view=diff
==============================================================================
--- incubator/bval/trunk/bval-core/src/main/java/org/apache/bval/util/AccessStrategy.java (original)
+++ incubator/bval/trunk/bval-core/src/main/java/org/apache/bval/util/AccessStrategy.java Fri Jul 9 16:31:15 2010
@@ -21,20 +21,38 @@ import java.lang.reflect.Type;
/**
* Description: abstract class to encapsulate different strategies
- * to get the value of a Property.
+ * to get the value of a Property. This class is designed such that
+ * subclasses are intended to know internally to which property they refer,
+ * with only the particular target instance being externally required
+ * to calculate the property's value. One intent of this design is
+ * that the notion of the very definition of a property is abstracted
+ * along with the mechanism for accessing that property.
*/
public abstract class AccessStrategy {
/**
- * get the value from the given instance.
+ * Get the value from the given instance.
* @param instance
* @return the value
* @throws IllegalArgumentException in case of an error
*/
public abstract Object get(Object instance);
+ /**
+ * Get the Java program {@link ElementType} used by this {@link AccessStrategy}
+ * to determine property values.
+ * @return ElementType
+ */
public abstract ElementType getElementType();
+ /**
+ * Get the type of the property
+ * @return Type
+ */
public abstract Type getJavaType();
+ /**
+ * Get a name representative of this property.
+ * @return String
+ */
public abstract String getPropertyName();
}
Modified: incubator/bval/trunk/bval-core/src/main/java/org/apache/bval/util/BeanValidationVersion.java
URL: http://svn.apache.org/viewvc/incubator/bval/trunk/bval-core/src/main/java/org/apache/bval/util/BeanValidationVersion.java?rev=962601&r1=962600&r2=962601&view=diff
==============================================================================
--- incubator/bval/trunk/bval-core/src/main/java/org/apache/bval/util/BeanValidationVersion.java (original)
+++ incubator/bval/trunk/bval-core/src/main/java/org/apache/bval/util/BeanValidationVersion.java Fri Jul 9 16:31:15 2010
@@ -18,10 +18,8 @@
*/
package org.apache.bval.util;
-import java.io.File;
import java.io.InputStream;
import java.io.IOException;
-import java.security.AccessController;
import java.util.Properties;
import java.util.StringTokenizer;
@@ -32,13 +30,21 @@ import java.util.StringTokenizer;
*/
public class BeanValidationVersion {
+ /** Project name */
public static final String PROJECT_NAME = "Apache Bean Validation";
+ /** Unique id of the current project/version/revision */
public static final String PROJECT_ID;
+ /** Version number */
public static final String VERSION_NUMBER;
+ /** Major release number */
public static final int MAJOR_RELEASE;
+ /** Minor release number */
public static final int MINOR_RELEASE;
+ /** Patch/point release number */
public static final int PATCH_RELEASE;
+ /** Release status */
public static final String RELEASE_STATUS;
+ /** Version control revision number */
public static final String REVISION_NUMBER;
static {
@@ -105,26 +111,49 @@ public class BeanValidationVersion {
PROJECT_ID = PROJECT_NAME + " " + VERSION_NUMBER + "-r" + REVISION_NUMBER;
}
+ /**
+ * Get the project version number.
+ * @return String
+ */
public static String getVersion() {
return VERSION_NUMBER;
}
+ /**
+ * Get the version control revision number.
+ * @return String
+ */
public static String getRevision() {
return REVISION_NUMBER;
}
+ /**
+ * Get the project name.
+ * @return String
+ */
public static String getName() {
return PROJECT_NAME;
}
+ /**
+ * Get the fully-qualified project id.
+ * @return String
+ */
public static String getID() {
return PROJECT_ID;
}
+ /**
+ * Main method of this class that prints the {@link #toString()} to System.out.
+ * @param args ignored
+ */
public static void main(String [] args) {
System.out.println(new BeanValidationVersion().toString());
}
+ /**
+ * {@inheritDoc}
+ */
public String toString() {
StringBuilder buf = new StringBuilder(80 * 40);
appendBanner(buf);
Modified: incubator/bval/trunk/bval-core/src/main/java/org/apache/bval/util/FieldAccess.java
URL: http://svn.apache.org/viewvc/incubator/bval/trunk/bval-core/src/main/java/org/apache/bval/util/FieldAccess.java?rev=962601&r1=962600&r2=962601&view=diff
==============================================================================
--- incubator/bval/trunk/bval-core/src/main/java/org/apache/bval/util/FieldAccess.java (original)
+++ incubator/bval/trunk/bval-core/src/main/java/org/apache/bval/util/FieldAccess.java Fri Jul 9 16:31:15 2010
@@ -22,16 +22,16 @@ import java.lang.reflect.Type;
import java.security.PrivilegedAction;
/**
- * Description: direct field access.
+ * Description: direct field access strategy.
*/
public class FieldAccess extends AccessStrategy {
private final Field field;
- public Type getJavaType() {
- return field.getGenericType();
- }
-
+ /**
+ * Create a new FieldAccess instance.
+ * @param field
+ */
public FieldAccess(Field field) {
this.field = field;
if(!field.isAccessible()) {
@@ -39,6 +39,9 @@ public class FieldAccess extends AccessS
}
}
+ /**
+ * {@inheritDoc}
+ */
public Object get(final Object instance) {
return PrivilegedActions.run(new PrivilegedAction() {
public Object run() {
@@ -51,18 +54,37 @@ public class FieldAccess extends AccessS
});
}
+ /**
+ * {@inheritDoc}
+ */
public ElementType getElementType() {
return ElementType.FIELD;
}
+ /**
+ * {@inheritDoc}
+ */
+ public Type getJavaType() {
+ return field.getGenericType();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
public String getPropertyName() {
return field.getName();
}
+ /**
+ * {@inheritDoc}
+ */
public String toString() {
return field.toString();
}
+ /**
+ * {@inheritDoc}
+ */
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
@@ -72,6 +94,9 @@ public class FieldAccess extends AccessS
return field.equals(that.field);
}
+ /**
+ * {@inheritDoc}
+ */
public int hashCode() {
return field.hashCode();
}
Modified: incubator/bval/trunk/bval-core/src/main/java/org/apache/bval/util/MethodAccess.java
URL: http://svn.apache.org/viewvc/incubator/bval/trunk/bval-core/src/main/java/org/apache/bval/util/MethodAccess.java?rev=962601&r1=962600&r2=962601&view=diff
==============================================================================
--- incubator/bval/trunk/bval-core/src/main/java/org/apache/bval/util/MethodAccess.java (original)
+++ incubator/bval/trunk/bval-core/src/main/java/org/apache/bval/util/MethodAccess.java Fri Jul 9 16:31:15 2010
@@ -30,14 +30,19 @@ public class MethodAccess extends Access
private final Method method;
private final String propertyName;
- public Type getJavaType() {
- return method.getGenericReturnType();
- }
-
+ /**
+ * Create a new MethodAccess instance.
+ * @param method
+ */
public MethodAccess(Method method) {
this(getPropertyName(method), method);
}
+ /**
+ * Create a new MethodAccess instance.
+ * @param propertyName
+ * @param method
+ */
public MethodAccess(String propertyName, Method method) {
this.method = method;
this.propertyName = propertyName;
@@ -72,6 +77,7 @@ public class MethodAccess extends Access
}
/**
+ * {@inheritDoc}
* normally the propertyName of the getter method, e.g.
* method: getName() -> propertyName: name
* method: isValid() -> propertyName: valid
@@ -80,6 +86,9 @@ public class MethodAccess extends Access
return propertyName;
}
+ /**
+ * {@inheritDoc}
+ */
public Object get(final Object instance) {
return PrivilegedActions.run(new PrivilegedAction() {
public Object run() {
@@ -94,14 +103,30 @@ public class MethodAccess extends Access
});
}
+ /**
+ * {@inheritDoc}
+ */
public ElementType getElementType() {
return ElementType.METHOD;
}
+ /**
+ * {@inheritDoc}
+ */
+ public Type getJavaType() {
+ return method.getGenericReturnType();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
public String toString() {
return method.toString();
}
+ /**
+ * {@inheritDoc}
+ */
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
@@ -111,6 +136,9 @@ public class MethodAccess extends Access
return method.equals(that.method);
}
+ /**
+ * {@inheritDoc}
+ */
public int hashCode() {
return method.hashCode();
}
Modified: incubator/bval/trunk/bval-core/src/main/java/org/apache/bval/util/PrivilegedActions.java
URL: http://svn.apache.org/viewvc/incubator/bval/trunk/bval-core/src/main/java/org/apache/bval/util/PrivilegedActions.java?rev=962601&r1=962600&r2=962601&view=diff
==============================================================================
--- incubator/bval/trunk/bval-core/src/main/java/org/apache/bval/util/PrivilegedActions.java (original)
+++ incubator/bval/trunk/bval-core/src/main/java/org/apache/bval/util/PrivilegedActions.java Fri Jul 9 16:31:15 2010
@@ -67,7 +67,7 @@ public class PrivilegedActions {
}
/**
- * create a new instance.
+ * Create a new instance of a specified class.
*
* @param cls - the class (no interface, non-abstract, has accessible default no-arg-constructor)
* @return a new instance
@@ -77,6 +77,18 @@ public class PrivilegedActions {
return newInstance(cls, IllegalArgumentException.class);
}
+ /**
+ * Create a new instance of a specified class.
+ *
+ * @param
+ * @param
+ * @param cls - the class (no interface, non-abstract, has accessible matching constructor)
+ * @param exception type to rethrow
+ * @param paramTypes
+ * @param values
+ * @return a new instance
+ * @throws E
+ */
public static T newInstance(final Class cls,
final Class exception,
final Class>[] paramTypes,
@@ -97,7 +109,7 @@ public class PrivilegedActions {
}
/**
- * create a new instance of the class using the default no-arg constructor.
+ * Create a new instance of the class using the default no-arg constructor.
* perform newInstance() call with AccessController.doPrivileged() if possible.
*
* @param cls - the type to create a new instance from
@@ -137,7 +149,7 @@ public class PrivilegedActions {
}
/**
- * perform action with AccessController.doPrivileged() if possible.
+ * Perform action with AccessController.doPrivileged() if possible.
*
* @param action - the action to run
* @return result of running the action
Modified: incubator/bval/trunk/bval-core/src/main/java/org/apache/bval/util/PropertyAccess.java
URL: http://svn.apache.org/viewvc/incubator/bval/trunk/bval-core/src/main/java/org/apache/bval/util/PropertyAccess.java?rev=962601&r1=962600&r2=962601&view=diff
==============================================================================
--- incubator/bval/trunk/bval-core/src/main/java/org/apache/bval/util/PropertyAccess.java (original)
+++ incubator/bval/trunk/bval-core/src/main/java/org/apache/bval/util/PropertyAccess.java Fri Jul 9 16:31:15 2010
@@ -35,11 +35,19 @@ public class PropertyAccess extends Acce
private final String propertyName;
private Field rememberField;
+ /**
+ * Create a new PropertyAccess instance.
+ * @param clazz
+ * @param propertyName
+ */
public PropertyAccess(Class> clazz, String propertyName) {
this.beanClass = clazz;
this.propertyName = propertyName;
}
+ /**
+ * {@inheritDoc}
+ */
public ElementType getElementType() {
return (rememberField != null) ? ElementType.FIELD : ElementType.METHOD;
}
@@ -53,15 +61,30 @@ public class PropertyAccess extends Acce
}
}
+ /**
+ * Get a named property from bean.
+ * @param bean
+ * @param propertyName
+ * @return Object found
+ * @throws InvocationTargetException
+ * @throws NoSuchMethodException
+ * @throws IllegalAccessException
+ */
public static Object getProperty(Object bean, String propertyName) throws
InvocationTargetException, NoSuchMethodException, IllegalAccessException {
return new PropertyAccess(bean.getClass(), propertyName).get(bean);
}
+ /**
+ * {@inheritDoc}
+ */
public String toString() {
return "Property{" + beanClass.getName() + '.' + propertyName + '}';
}
+ /**
+ * {@inheritDoc}
+ */
public Type getJavaType() {
/*if(Map.class.isAssignableFrom(beanClass)) {
return beanClass.
@@ -91,10 +114,16 @@ public class PropertyAccess extends Acce
return Object.class; // unknown type: allow any type??
}
+ /**
+ * {@inheritDoc}
+ */
public String getPropertyName() {
return propertyName;
}
+ /**
+ * {@inheritDoc}
+ */
public Object get(Object bean) {
try {
if (rememberField != null) { // cache field of previous access
@@ -143,6 +172,9 @@ public class PropertyAccess extends Acce
}
}
+ /**
+ * {@inheritDoc}
+ */
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
@@ -152,6 +184,9 @@ public class PropertyAccess extends Acce
return beanClass.equals(that.beanClass) && propertyName.equals(that.propertyName);
}
+ /**
+ * {@inheritDoc}
+ */
public int hashCode() {
int result;
result = beanClass.hashCode();
Modified: incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/AnnotationConstraintBuilder.java
URL: http://svn.apache.org/viewvc/incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/AnnotationConstraintBuilder.java?rev=962601&r1=962600&r2=962601&view=diff
==============================================================================
--- incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/AnnotationConstraintBuilder.java (original)
+++ incubator/bval/trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/AnnotationConstraintBuilder.java Fri Jul 9 16:31:15 2010
@@ -38,21 +38,31 @@ import java.util.*;
* composite constraint validations by parsing the jsr303-annotations
* and providing information (e.g. for @OverridesAttributes)
*/
-final class AnnotationConstraintBuilder {
+final class AnnotationConstraintBuilder {
private static final Log log = LogFactory.getLog(AnnotationConstraintBuilder.class);
+
+ //TODO extract these to some neutral location; see AnnotationProxyBuilder
private static final String ANNOTATION_PAYLOAD = "payload";
private static final String ANNOTATION_GROUPS = "groups";
private final ConstraintValidation> constraintValidation;
private List overrides;
+ /**
+ * Create a new AnnotationConstraintBuilder instance.
+ * @param validatorClasses
+ * @param constraintValidator
+ * @param annotation
+ * @param owner
+ * @param access
+ */
public AnnotationConstraintBuilder(
- Class extends ConstraintValidator, ?>>[] validatorClasses,
- ConstraintValidator constraintValidator, Annotation annotation, Class owner,
+ Class extends ConstraintValidator>[] validatorClasses,
+ ConstraintValidator constraintValidator, A annotation, Class> owner,
AccessStrategy access) {
boolean reportFromComposite = annotation != null && annotation.annotationType()
.isAnnotationPresent(ReportAsSingleViolation.class);
- constraintValidation = new ConstraintValidation(validatorClasses,
+ constraintValidation = new ConstraintValidation(validatorClasses,
constraintValidator, annotation, owner, access, reportFromComposite);
buildFromAnnotation();
}
@@ -93,8 +103,8 @@ final class AnnotationConstraintBuilder
throws IllegalAccessException, InvocationTargetException {
Object raw = method.invoke(constraintValidation.getAnnotation());
Class>[] garr;
- if (raw instanceof Class) {
- garr = new Class>[]{(Class) raw};
+ if (raw instanceof Class>) {
+ garr = new Class[]{(Class>) raw};
} else if (raw instanceof Class>[]) {
garr = (Class>[]) raw;
} else {
@@ -104,24 +114,29 @@ final class AnnotationConstraintBuilder
if (garr == null || garr.length == 0) {
garr = GroupsComputer.getDefaultGroupArray();
}
- constraintValidation.setGroups(new HashSet(Arrays.asList(garr)));
+ constraintValidation.setGroups(new HashSet>(Arrays.asList(garr)));
}
+ @SuppressWarnings("unchecked")
private void buildPayload(Method method)
throws IllegalAccessException, InvocationTargetException {
- Class[] payload_raw =
- (Class[]) method.invoke(constraintValidation.getAnnotation());
+ Class extends Payload>[] payload_raw =
+ (Class extends Payload>[]) method.invoke(constraintValidation.getAnnotation());
+ Set> payloadSet;
if (payload_raw == null) {
- constraintValidation
- .setPayload(Collections.>emptySet());
+ payloadSet = Collections.>emptySet();
} else {
- Set pl = new HashSet(payload_raw.length);
- pl.addAll(Arrays.asList(payload_raw));
- constraintValidation.setPayload(pl);
+ payloadSet = new HashSet>(payload_raw.length);
+ payloadSet.addAll(Arrays.asList(payload_raw));
}
+ constraintValidation.setPayload(payloadSet);
}
- public ConstraintValidation getConstraintValidation() {
+ /**
+ * Get the configured {@link ConstraintValidation}.
+ * @return {@link ConstraintValidation}
+ */
+ public ConstraintValidation> getConstraintValidation() {
return constraintValidation;
}
@@ -129,7 +144,7 @@ final class AnnotationConstraintBuilder
* initialize a child composite 'validation' with @OverridesAttribute
* from 'constraintValidation' and add to composites.
*/
- public void addComposed(ConstraintValidation composite) {
+ public void addComposed(ConstraintValidation> composite) {
applyOverridesAttributes(composite);
constraintValidation.addComposed(composite); // add AFTER apply()
}
@@ -234,10 +249,11 @@ final class AnnotationConstraintBuilder
int constraintIndex) {
this.constraintType = constraintType;
this.constraintIndex = constraintIndex;
- values = new HashMap();
+ values = new HashMap();
}
- public void applyOn(ConstraintValidation composite) {
+ @SuppressWarnings("unchecked")
+ private void applyOn(ConstraintValidation> composite) {
// Update the attributes
composite.getAttributes().putAll(values);
@@ -248,7 +264,7 @@ final class AnnotationConstraintBuilder
apb.putValue(key, values.get(key));
}
Annotation newAnnot = apb.createAnnotation();
- composite.setAnnotation(newAnnot);
+ ((ConstraintValidation) composite).setAnnotation(newAnnot);
}
}
}