You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@bval.apache.org by mb...@apache.org on 2018/02/21 20:25:06 UTC
[10/11] bval git commit: implement BV 2.0 against existing BVal unit
tests
http://git-wip-us.apache.org/repos/asf/bval/blob/3f287a7a/bval-extras/src/test/java/org/apache/bval/extras/constraints/checkdigit/EAN13CheckDigitTest.java
----------------------------------------------------------------------
diff --git a/bval-extras/src/test/java/org/apache/bval/extras/constraints/checkdigit/EAN13CheckDigitTest.java b/bval-extras/src/test/java/org/apache/bval/extras/constraints/checkdigit/EAN13CheckDigitTest.java
index 83cbf63..052a1c9 100644
--- a/bval-extras/src/test/java/org/apache/bval/extras/constraints/checkdigit/EAN13CheckDigitTest.java
+++ b/bval-extras/src/test/java/org/apache/bval/extras/constraints/checkdigit/EAN13CheckDigitTest.java
@@ -25,7 +25,7 @@ import java.lang.annotation.Annotation;
public class EAN13CheckDigitTest extends AbstractCheckDigitTest {
@Override
- protected ConstraintValidator<? extends Annotation, String> getConstraint() {
+ protected ConstraintValidator<? extends Annotation, ? super String> getConstraint() {
return new EAN13Validator();
}
http://git-wip-us.apache.org/repos/asf/bval/blob/3f287a7a/bval-extras/src/test/java/org/apache/bval/extras/constraints/checkdigit/IBANCheckDigitTest.java
----------------------------------------------------------------------
diff --git a/bval-extras/src/test/java/org/apache/bval/extras/constraints/checkdigit/IBANCheckDigitTest.java b/bval-extras/src/test/java/org/apache/bval/extras/constraints/checkdigit/IBANCheckDigitTest.java
index c0ea8e6..04cfd73 100644
--- a/bval-extras/src/test/java/org/apache/bval/extras/constraints/checkdigit/IBANCheckDigitTest.java
+++ b/bval-extras/src/test/java/org/apache/bval/extras/constraints/checkdigit/IBANCheckDigitTest.java
@@ -35,7 +35,7 @@ public class IBANCheckDigitTest extends AbstractCheckDigitTest {
}
@Override
- protected ConstraintValidator<? extends Annotation, String> getConstraint() {
+ protected ConstraintValidator<? extends Annotation, ? super String> getConstraint() {
return new IBANValidator();
}
http://git-wip-us.apache.org/repos/asf/bval/blob/3f287a7a/bval-extras/src/test/java/org/apache/bval/extras/constraints/checkdigit/ISBN10CheckDigitTest.java
----------------------------------------------------------------------
diff --git a/bval-extras/src/test/java/org/apache/bval/extras/constraints/checkdigit/ISBN10CheckDigitTest.java b/bval-extras/src/test/java/org/apache/bval/extras/constraints/checkdigit/ISBN10CheckDigitTest.java
index f03e7a1..4940c8b 100644
--- a/bval-extras/src/test/java/org/apache/bval/extras/constraints/checkdigit/ISBN10CheckDigitTest.java
+++ b/bval-extras/src/test/java/org/apache/bval/extras/constraints/checkdigit/ISBN10CheckDigitTest.java
@@ -25,7 +25,7 @@ import java.lang.annotation.Annotation;
public class ISBN10CheckDigitTest extends AbstractCheckDigitTest {
@Override
- protected ConstraintValidator<? extends Annotation, String> getConstraint() {
+ protected ConstraintValidator<? extends Annotation, ? super String> getConstraint() {
return new ISBN10Validator();
}
http://git-wip-us.apache.org/repos/asf/bval/blob/3f287a7a/bval-extras/src/test/java/org/apache/bval/extras/constraints/checkdigit/LuhnCheckDigitTest.java
----------------------------------------------------------------------
diff --git a/bval-extras/src/test/java/org/apache/bval/extras/constraints/checkdigit/LuhnCheckDigitTest.java b/bval-extras/src/test/java/org/apache/bval/extras/constraints/checkdigit/LuhnCheckDigitTest.java
index 06263e7..2b09d50 100644
--- a/bval-extras/src/test/java/org/apache/bval/extras/constraints/checkdigit/LuhnCheckDigitTest.java
+++ b/bval-extras/src/test/java/org/apache/bval/extras/constraints/checkdigit/LuhnCheckDigitTest.java
@@ -37,7 +37,7 @@ public class LuhnCheckDigitTest extends AbstractCheckDigitTest {
private static final String VALID_DINERS = "30569309025904";
@Override
- protected ConstraintValidator<? extends Annotation, String> getConstraint() {
+ protected ConstraintValidator<? extends Annotation, ? super String> getConstraint() {
return new LuhnValidator();
}
http://git-wip-us.apache.org/repos/asf/bval/blob/3f287a7a/bval-extras/src/test/java/org/apache/bval/extras/constraints/checkdigit/SedolCheckDigitTest.java
----------------------------------------------------------------------
diff --git a/bval-extras/src/test/java/org/apache/bval/extras/constraints/checkdigit/SedolCheckDigitTest.java b/bval-extras/src/test/java/org/apache/bval/extras/constraints/checkdigit/SedolCheckDigitTest.java
index 73ea523..55d1f51 100644
--- a/bval-extras/src/test/java/org/apache/bval/extras/constraints/checkdigit/SedolCheckDigitTest.java
+++ b/bval-extras/src/test/java/org/apache/bval/extras/constraints/checkdigit/SedolCheckDigitTest.java
@@ -25,7 +25,7 @@ import java.lang.annotation.Annotation;
public class SedolCheckDigitTest extends AbstractCheckDigitTest {
@Override
- protected ConstraintValidator<? extends Annotation, String> getConstraint() {
+ protected ConstraintValidator<? extends Annotation, ? super String> getConstraint() {
return new SedolValidator();
}
http://git-wip-us.apache.org/repos/asf/bval/blob/3f287a7a/bval-extras/src/test/java/org/apache/bval/extras/constraints/checkdigit/VerhoeffCheckDigitTest.java
----------------------------------------------------------------------
diff --git a/bval-extras/src/test/java/org/apache/bval/extras/constraints/checkdigit/VerhoeffCheckDigitTest.java b/bval-extras/src/test/java/org/apache/bval/extras/constraints/checkdigit/VerhoeffCheckDigitTest.java
index 2c6e982..fbd3c7f 100644
--- a/bval-extras/src/test/java/org/apache/bval/extras/constraints/checkdigit/VerhoeffCheckDigitTest.java
+++ b/bval-extras/src/test/java/org/apache/bval/extras/constraints/checkdigit/VerhoeffCheckDigitTest.java
@@ -28,7 +28,7 @@ import java.lang.annotation.Annotation;
public class VerhoeffCheckDigitTest extends AbstractCheckDigitTest {
@Override
- protected ConstraintValidator<? extends Annotation, String> getConstraint() {
+ protected ConstraintValidator<? extends Annotation, ? super String> getConstraint() {
return new VerhoeffValidator();
}
http://git-wip-us.apache.org/repos/asf/bval/blob/3f287a7a/bval-extras/src/test/java/org/apache/bval/extras/constraints/net/InetAddressValidatorTest.java
----------------------------------------------------------------------
diff --git a/bval-extras/src/test/java/org/apache/bval/extras/constraints/net/InetAddressValidatorTest.java b/bval-extras/src/test/java/org/apache/bval/extras/constraints/net/InetAddressValidatorTest.java
index 9eba6ec..a79430d 100644
--- a/bval-extras/src/test/java/org/apache/bval/extras/constraints/net/InetAddressValidatorTest.java
+++ b/bval-extras/src/test/java/org/apache/bval/extras/constraints/net/InetAddressValidatorTest.java
@@ -27,7 +27,7 @@ import static org.junit.Assert.assertTrue;
/**
* Test cases for InetAddressValidator.
*
- * @version $Revision$
+ * @version $Revision: 1766546 $
*/
public class InetAddressValidatorTest {
http://git-wip-us.apache.org/repos/asf/bval/blob/3f287a7a/bval-json/pom.xml
----------------------------------------------------------------------
diff --git a/bval-json/pom.xml b/bval-json/pom.xml
index a489071..59dcb17 100644
--- a/bval-json/pom.xml
+++ b/bval-json/pom.xml
@@ -27,7 +27,7 @@
<parent>
<groupId>org.apache.bval</groupId>
<artifactId>bval-parent</artifactId>
- <version>1.1.3-SNAPSHOT</version>
+ <version>2.0.0-SNAPSHOT</version>
</parent>
<artifactId>bval-json</artifactId>
http://git-wip-us.apache.org/repos/asf/bval/blob/3f287a7a/bval-jsr/pom.xml
----------------------------------------------------------------------
diff --git a/bval-jsr/pom.xml b/bval-jsr/pom.xml
index e716645..561d2d4 100644
--- a/bval-jsr/pom.xml
+++ b/bval-jsr/pom.xml
@@ -24,7 +24,7 @@
<parent>
<groupId>org.apache.bval</groupId>
<artifactId>bval-parent</artifactId>
- <version>1.1.3-SNAPSHOT</version>
+ <version>2.0.0-SNAPSHOT</version>
</parent>
<artifactId>bval-jsr</artifactId>
@@ -38,7 +38,7 @@
</properties>
<profiles>
<!--
- default profile using geronimo-validation_1.0_spec.jar active when
+ default profile using geronimo-validation_2.0_spec.jar active when
property "ri" is not present.
-->
<profile>
@@ -51,7 +51,7 @@
<dependencies>
<dependency>
<groupId>org.apache.geronimo.specs</groupId>
- <artifactId>geronimo-validation_1.1_spec</artifactId>
+ <artifactId>geronimo-validation_2.0_spec</artifactId>
<scope>provided</scope>
</dependency>
</dependencies>
@@ -215,6 +215,10 @@
<version>1.0</version>
<scope>provided</scope>
</dependency>
+ <dependency>
+ <groupId>com.oracle</groupId>
+ <artifactId>javafx</artifactId>
+ </dependency>
<!-- Testing dependencies -->
<dependency>
@@ -244,10 +248,10 @@
</resources>
<plugins>
- <plugin> <!-- http://jira.codehaus.org/browse/MJAXB-37 -->
+ <plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxb2-maven-plugin</artifactId>
- <version>1.4</version>
+ <version>2.3.1</version>
<executions>
<execution>
<goals>
@@ -258,8 +262,11 @@
<configuration>
<packageName>org.apache.bval.jsr.xml</packageName>
<extension>true</extension>
- <schemaFiles>validation-configuration-1.1.xsd,validation-mapping-1.1.xsd</schemaFiles>
<enableIntrospection>true</enableIntrospection>
+ <sources>
+ <source>${project.basedir}/src/main/xsd/validation-configuration-2.0.xsd</source>
+ <source>${project.basedir}/src/main/xsd/validation-mapping-2.0.xsd</source>
+ </sources>
</configuration>
</plugin>
http://git-wip-us.apache.org/repos/asf/bval/blob/3f287a7a/bval-jsr/src/main/java/org/apache/bval/cdi/AnyLiteral.java
----------------------------------------------------------------------
diff --git a/bval-jsr/src/main/java/org/apache/bval/cdi/AnyLiteral.java b/bval-jsr/src/main/java/org/apache/bval/cdi/AnyLiteral.java
index 2b62c1e..1e14f1e 100644
--- a/bval-jsr/src/main/java/org/apache/bval/cdi/AnyLiteral.java
+++ b/bval-jsr/src/main/java/org/apache/bval/cdi/AnyLiteral.java
@@ -19,7 +19,6 @@
package org.apache.bval.cdi;
import javax.enterprise.inject.Any;
-import javax.enterprise.util.AnnotationLiteral;
public class AnyLiteral extends EmptyAnnotationLiteral<Any> implements Any {
private static final long serialVersionUID = 1L;
@@ -31,7 +30,7 @@ public class AnyLiteral extends EmptyAnnotationLiteral<Any> implements Any {
@Override
public String toString() {
- return "@javax.enterprise.inject.Any()";
+ return String.format("@%s()", Any.class.getName());
}
}
http://git-wip-us.apache.org/repos/asf/bval/blob/3f287a7a/bval-jsr/src/main/java/org/apache/bval/cdi/BValAnnotatedType.java
----------------------------------------------------------------------
diff --git a/bval-jsr/src/main/java/org/apache/bval/cdi/BValAnnotatedType.java b/bval-jsr/src/main/java/org/apache/bval/cdi/BValAnnotatedType.java
index a143a5b..2b08fe6 100644
--- a/bval-jsr/src/main/java/org/apache/bval/cdi/BValAnnotatedType.java
+++ b/bval-jsr/src/main/java/org/apache/bval/cdi/BValAnnotatedType.java
@@ -18,17 +18,16 @@
*/
package org.apache.bval.cdi;
-import javax.enterprise.inject.spi.AnnotatedConstructor;
-import javax.enterprise.inject.spi.AnnotatedField;
-import javax.enterprise.inject.spi.AnnotatedMethod;
-import javax.enterprise.inject.spi.AnnotatedType;
-import javax.enterprise.util.AnnotationLiteral;
-
import java.lang.annotation.Annotation;
import java.lang.reflect.Type;
import java.util.HashSet;
import java.util.Set;
+import javax.enterprise.inject.spi.AnnotatedConstructor;
+import javax.enterprise.inject.spi.AnnotatedField;
+import javax.enterprise.inject.spi.AnnotatedMethod;
+import javax.enterprise.inject.spi.AnnotatedType;
+
public class BValAnnotatedType<A> implements AnnotatedType<A> {
private final AnnotatedType<A> delegate;
private final Set<Annotation> annotations;
@@ -36,8 +35,7 @@ public class BValAnnotatedType<A> implements AnnotatedType<A> {
public BValAnnotatedType(final AnnotatedType<A> annotatedType) {
delegate = annotatedType;
- annotations = new HashSet<Annotation>(annotatedType.getAnnotations().size());
- annotations.addAll(annotatedType.getAnnotations());
+ annotations = new HashSet<>(annotatedType.getAnnotations());
annotations.add(BValBindingLiteral.INSTANCE);
}
@@ -73,14 +71,8 @@ public class BValAnnotatedType<A> implements AnnotatedType<A> {
@Override
public <T extends Annotation> T getAnnotation(final Class<T> annotationType) {
- for (final Annotation ann : annotations) {
- if (ann.annotationType().equals(annotationType)) {
- @SuppressWarnings("unchecked")
- final T result = (T) ann;
- return result;
- }
- }
- return null;
+ return annotations.stream().filter(ann -> ann.annotationType().equals(annotationType)).map(annotationType::cast)
+ .findFirst().orElse(null);
}
@Override
@@ -90,12 +82,7 @@ public class BValAnnotatedType<A> implements AnnotatedType<A> {
@Override
public boolean isAnnotationPresent(Class<? extends Annotation> annotationType) {
- for (final Annotation ann : annotations) {
- if (ann.annotationType().equals(annotationType)) {
- return true;
- }
- }
- return false;
+ return annotations.stream().anyMatch(ann -> ann.annotationType().equals(annotationType));
}
public static class BValBindingLiteral extends EmptyAnnotationLiteral<BValBinding> implements BValBinding {
@@ -105,7 +92,7 @@ public class BValAnnotatedType<A> implements AnnotatedType<A> {
@Override
public String toString() {
- return "@org.apache.bval.cdi.BValBinding()";
+ return String.format("@%s()", BValBinding.class.getName());
}
}
http://git-wip-us.apache.org/repos/asf/bval/blob/3f287a7a/bval-jsr/src/main/java/org/apache/bval/cdi/BValExtension.java
----------------------------------------------------------------------
diff --git a/bval-jsr/src/main/java/org/apache/bval/cdi/BValExtension.java b/bval-jsr/src/main/java/org/apache/bval/cdi/BValExtension.java
index f84074e..e10a9ba 100644
--- a/bval-jsr/src/main/java/org/apache/bval/cdi/BValExtension.java
+++ b/bval-jsr/src/main/java/org/apache/bval/cdi/BValExtension.java
@@ -59,13 +59,7 @@ import org.apache.bval.util.Validate;
public class BValExtension implements Extension {
private static final Logger LOGGER = Logger.getLogger(BValExtension.class.getName());
- private static final AnnotatedTypeFilter DEFAULT_ANNOTATED_TYPE_FILTER = new AnnotatedTypeFilter() {
-
- @Override
- public boolean accept(AnnotatedType<?> annotatedType) {
- return !annotatedType.getJavaClass().getName().startsWith("org.apache.bval.");
- }
- };
+ private static final AnnotatedTypeFilter DEFAULT_ANNOTATED_TYPE_FILTER = annotatedType -> !annotatedType.getJavaClass().getName().startsWith("org.apache.bval.");
private static AnnotatedTypeFilter annotatedTypeFilter = DEFAULT_ANNOTATED_TYPE_FILTER;
@@ -183,8 +177,7 @@ public class BValExtension implements Extension {
&& !classConstraints.getConstrainedMethods(MethodType.NON_GETTER).isEmpty()
|| validGetterMethods
&& !classConstraints.getConstrainedMethods(MethodType.GETTER).isEmpty())) {
- final BValAnnotatedType<A> bValAnnotatedType = new BValAnnotatedType<A>(annotatedType);
- pat.setAnnotatedType(bValAnnotatedType);
+ pat.setAnnotatedType(new BValAnnotatedType<A>(annotatedType));
}
} catch (final NoClassDefFoundError ncdfe) {
// skip
@@ -199,12 +192,7 @@ public class BValExtension implements Extension {
private static <A> boolean hasValidationAnnotation(
final Collection<? extends AnnotatedCallable<? super A>> methods) {
- for (final AnnotatedCallable<? super A> m : methods) {
- if (m.isAnnotationPresent(ValidateOnExecution.class)) {
- return true;
- }
- }
- return false;
+ return methods.stream().anyMatch(m -> m.isAnnotationPresent(ValidateOnExecution.class));
}
public <A> void processBean(final @Observes ProcessBean<A> processBeanEvent) {
http://git-wip-us.apache.org/repos/asf/bval/blob/3f287a7a/bval-jsr/src/main/java/org/apache/bval/cdi/BValInterceptor.java
----------------------------------------------------------------------
diff --git a/bval-jsr/src/main/java/org/apache/bval/cdi/BValInterceptor.java b/bval-jsr/src/main/java/org/apache/bval/cdi/BValInterceptor.java
index 3a7f000..7bf7709 100644
--- a/bval-jsr/src/main/java/org/apache/bval/cdi/BValInterceptor.java
+++ b/bval-jsr/src/main/java/org/apache/bval/cdi/BValInterceptor.java
@@ -18,8 +18,7 @@
*/
package org.apache.bval.cdi;
-import org.apache.bval.jsr.util.ClassHelper;
-import org.apache.bval.jsr.util.Proxies;
+import static java.util.Arrays.asList;
import java.io.Serializable;
import java.lang.reflect.Constructor;
@@ -33,6 +32,7 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
+
import javax.annotation.Priority;
import javax.enterprise.inject.spi.AnnotatedConstructor;
import javax.enterprise.inject.spi.AnnotatedMethod;
@@ -53,18 +53,20 @@ import javax.validation.executable.ValidateOnExecution;
import javax.validation.metadata.ConstructorDescriptor;
import javax.validation.metadata.MethodDescriptor;
-import static java.util.Arrays.asList;
+import org.apache.bval.jsr.util.ClassHelper;
+import org.apache.bval.jsr.util.Proxies;
/**
* Interceptor class for the {@link BValBinding} {@link InterceptorBinding}.
*/
+@SuppressWarnings("serial")
@Interceptor
@BValBinding
@Priority(4800)
// TODO: maybe add it through ASM to be compliant with CDI 1.0 containers using simply this class as a template to
// generate another one for CDI 1.1 impl
public class BValInterceptor implements Serializable {
- private transient volatile Map<Method, Boolean> methodConfiguration = new ConcurrentHashMap<Method, Boolean>();
+ private transient volatile Map<Method, Boolean> methodConfiguration = new ConcurrentHashMap<>();
private transient volatile Set<ExecutableType> classConfiguration;
private transient volatile Boolean constructorValidated;
@@ -204,7 +206,7 @@ public class BValInterceptor implements Serializable {
methodConfig = methodConfiguration.get(method);
if (methodConfig == null) {
final List<Class<?>> classHierarchy =
- ClassHelper.fillFullClassHierarchyAsList(new LinkedList<Class<?>>(), targetClass);
+ ClassHelper.fillFullClassHierarchyAsList(new LinkedList<>(), targetClass);
Collections.reverse(classHierarchy);
// search on method @ValidateOnExecution
@@ -213,19 +215,19 @@ public class BValInterceptor implements Serializable {
for (final Class<?> c : classHierarchy) {
final AnnotatedType<?> annotatedType = CDI.current().getBeanManager().createAnnotatedType(c);
AnnotatedMethod<?> annotatedMethod = null;
+
for (final AnnotatedMethod<?> m : annotatedType.getMethods()) {
- if (!m.getJavaMember().getName().equals(method.getName())
- || !asList(method.getGenericParameterTypes())
+ if (m.getJavaMember().getName().equals(method.getName())
+ && asList(method.getGenericParameterTypes())
.equals(asList(m.getJavaMember().getGenericParameterTypes()))) {
- continue;
+ annotatedMethod = m;
+ break;
}
- annotatedMethod = m;
- break;
+ }
+ if (annotatedMethod == null) {
+ continue;
}
try {
- if (annotatedMethod == null) {
- continue;
- }
if (validateOnExecutionType == null) {
final ValidateOnExecution vat = annotatedType.getAnnotation(ValidateOnExecution.class);
if (vat != null) {
http://git-wip-us.apache.org/repos/asf/bval/blob/3f287a7a/bval-jsr/src/main/java/org/apache/bval/cdi/BValInterceptorBean.java
----------------------------------------------------------------------
diff --git a/bval-jsr/src/main/java/org/apache/bval/cdi/BValInterceptorBean.java b/bval-jsr/src/main/java/org/apache/bval/cdi/BValInterceptorBean.java
index 8a0c95e..e8f7e1d 100644
--- a/bval-jsr/src/main/java/org/apache/bval/cdi/BValInterceptorBean.java
+++ b/bval-jsr/src/main/java/org/apache/bval/cdi/BValInterceptorBean.java
@@ -43,12 +43,12 @@ public class BValInterceptorBean implements Bean<BValInterceptor>, PassivationCa
private final InjectionTarget<BValInterceptor> injectionTarget;
public BValInterceptorBean(final BeanManager bm) {
- final Set<Type> t = new HashSet<Type>();
+ final Set<Type> t = new HashSet<>();
t.add(BValInterceptor.class);
t.add(Object.class);
types = Collections.unmodifiableSet(t);
- final Set<Annotation> q = new HashSet<Annotation>();
+ final Set<Annotation> q = new HashSet<>();
q.add(DefaultLiteral.INSTANCE);
q.add(AnyLiteral.INSTANCE);
qualifiers = Collections.unmodifiableSet(q);
@@ -120,7 +120,7 @@ public class BValInterceptorBean implements Bean<BValInterceptor>, PassivationCa
@Override
public String getId() {
- return "BValInterceptor-" + hashCode();
+ return String.format("%s-%d",BValInterceptor.class.getSimpleName(), hashCode());
}
private static class BValInterceptorInjectionPoint implements InjectionPoint {
http://git-wip-us.apache.org/repos/asf/bval/blob/3f287a7a/bval-jsr/src/main/java/org/apache/bval/cdi/DefaultLiteral.java
----------------------------------------------------------------------
diff --git a/bval-jsr/src/main/java/org/apache/bval/cdi/DefaultLiteral.java b/bval-jsr/src/main/java/org/apache/bval/cdi/DefaultLiteral.java
index 07b2246..e86db31 100644
--- a/bval-jsr/src/main/java/org/apache/bval/cdi/DefaultLiteral.java
+++ b/bval-jsr/src/main/java/org/apache/bval/cdi/DefaultLiteral.java
@@ -19,7 +19,6 @@
package org.apache.bval.cdi;
import javax.enterprise.inject.Default;
-import javax.enterprise.util.AnnotationLiteral;
public class DefaultLiteral extends EmptyAnnotationLiteral<Default> implements Default {
private static final long serialVersionUID = 1L;
@@ -28,6 +27,6 @@ public class DefaultLiteral extends EmptyAnnotationLiteral<Default> implements D
@Override
public String toString() {
- return "@javax.enterprise.inject.Default()";
+ return String.format("@%s()", Default.class.getName());
}
}
http://git-wip-us.apache.org/repos/asf/bval/blob/3f287a7a/bval-jsr/src/main/java/org/apache/bval/cdi/EmptyAnnotationLiteral.java
----------------------------------------------------------------------
diff --git a/bval-jsr/src/main/java/org/apache/bval/cdi/EmptyAnnotationLiteral.java b/bval-jsr/src/main/java/org/apache/bval/cdi/EmptyAnnotationLiteral.java
index 6866551..e9e9f1a 100644
--- a/bval-jsr/src/main/java/org/apache/bval/cdi/EmptyAnnotationLiteral.java
+++ b/bval-jsr/src/main/java/org/apache/bval/cdi/EmptyAnnotationLiteral.java
@@ -29,6 +29,7 @@ import javax.enterprise.util.AnnotationLiteral;
* Taken from Apache OpenWebBeans.
* @param <T>
*/
+@SuppressWarnings("serial")
public abstract class EmptyAnnotationLiteral<T extends Annotation> extends AnnotationLiteral<T> {
private Class<T> annotationType;
@@ -77,11 +78,10 @@ public abstract class EmptyAnnotationLiteral<T extends Annotation> extends Annot
private Class<T> getAnnotationType(Class<?> definedClazz) {
Type superClazz = definedClazz.getGenericSuperclass();
- Class<T> clazz = null;
-
- if (superClazz.equals(Object.class)) {
- throw new RuntimeException("Super class must be parametrized type!");
- } else if (superClazz instanceof ParameterizedType) {
+ if (Object.class.equals(superClazz)) {
+ throw new RuntimeException("Super class must be parameterized type!");
+ }
+ if (superClazz instanceof ParameterizedType) {
ParameterizedType paramType = (ParameterizedType) superClazz;
Type[] actualArgs = paramType.getActualTypeArguments();
@@ -89,17 +89,15 @@ public abstract class EmptyAnnotationLiteral<T extends Annotation> extends Annot
//Actual annotation type
Type type = actualArgs[0];
- if (type instanceof Class) {
- clazz = (Class<T>) type;
+ if (type instanceof Class<?>) {
+ @SuppressWarnings("unchecked")
+ Class<T> clazz = (Class<T>) type;
return clazz;
- } else {
- throw new RuntimeException("Not class type!");
}
- } else {
- throw new RuntimeException("More than one parametric type!");
+ throw new RuntimeException("Not class type!");
}
- } else {
- return getAnnotationType((Class<?>) superClazz);
+ throw new RuntimeException("More than one parametric type!");
}
+ return getAnnotationType((Class<?>) superClazz);
}
}
http://git-wip-us.apache.org/repos/asf/bval/blob/3f287a7a/bval-jsr/src/main/java/org/apache/bval/cdi/ValidatorBean.java
----------------------------------------------------------------------
diff --git a/bval-jsr/src/main/java/org/apache/bval/cdi/ValidatorBean.java b/bval-jsr/src/main/java/org/apache/bval/cdi/ValidatorBean.java
index c551d72..cd17fae 100644
--- a/bval-jsr/src/main/java/org/apache/bval/cdi/ValidatorBean.java
+++ b/bval-jsr/src/main/java/org/apache/bval/cdi/ValidatorBean.java
@@ -44,12 +44,12 @@ public class ValidatorBean implements Bean<Validator>, PassivationCapable {
this.factory = factory;
this.instance = validator;
- final Set<Type> t = new HashSet<Type>();
+ final Set<Type> t = new HashSet<>();
t.add(Validator.class);
t.add(Object.class);
types = Collections.unmodifiableSet(t);
- final Set<Annotation> q = new HashSet<Annotation>();
+ final Set<Annotation> q = new HashSet<>();
q.add(DefaultLiteral.INSTANCE);
q.add(AnyLiteral.INSTANCE);
qualifiers = Collections.unmodifiableSet(q);
@@ -119,6 +119,6 @@ public class ValidatorBean implements Bean<Validator>, PassivationCapable {
@Override
public String getId() {
- return "BValValidator-" + hashCode();
+ return String.format("BVal%s-%d", Validator.class.getSimpleName(), hashCode());
}
}
http://git-wip-us.apache.org/repos/asf/bval/blob/3f287a7a/bval-jsr/src/main/java/org/apache/bval/cdi/ValidatorFactoryBean.java
----------------------------------------------------------------------
diff --git a/bval-jsr/src/main/java/org/apache/bval/cdi/ValidatorFactoryBean.java b/bval-jsr/src/main/java/org/apache/bval/cdi/ValidatorFactoryBean.java
index aeffd81..0a8c2e5 100644
--- a/bval-jsr/src/main/java/org/apache/bval/cdi/ValidatorFactoryBean.java
+++ b/bval-jsr/src/main/java/org/apache/bval/cdi/ValidatorFactoryBean.java
@@ -41,12 +41,12 @@ public class ValidatorFactoryBean implements Bean<ValidatorFactory>, Passivation
public ValidatorFactoryBean(final ValidatorFactory validatorFactory) {
this.instance = validatorFactory;
- final Set<Type> t = new HashSet<Type>();
+ final Set<Type> t = new HashSet<>();
t.add(ValidatorFactory.class);
t.add(Object.class);
types = Collections.unmodifiableSet(t);
- final Set<Annotation> q = new HashSet<Annotation>();
+ final Set<Annotation> q = new HashSet<>();
q.add(DefaultLiteral.INSTANCE);
q.add(AnyLiteral.INSTANCE);
qualifiers = Collections.unmodifiableSet(q);
@@ -109,6 +109,6 @@ public class ValidatorFactoryBean implements Bean<ValidatorFactory>, Passivation
@Override
public String getId() {
- return "BValValidatorFactory-" + hashCode();
+ return String.format("BVal%s-%d", ValidatorFactory.class.getSimpleName(), hashCode());
}
}
http://git-wip-us.apache.org/repos/asf/bval/blob/3f287a7a/bval-jsr/src/main/java/org/apache/bval/constraints/AssertFalseValidator.java
----------------------------------------------------------------------
diff --git a/bval-jsr/src/main/java/org/apache/bval/constraints/AssertFalseValidator.java b/bval-jsr/src/main/java/org/apache/bval/constraints/AssertFalseValidator.java
index 9eb4a14..143b76a 100644
--- a/bval-jsr/src/main/java/org/apache/bval/constraints/AssertFalseValidator.java
+++ b/bval-jsr/src/main/java/org/apache/bval/constraints/AssertFalseValidator.java
@@ -28,12 +28,8 @@ import javax.validation.constraints.AssertFalse;
public class AssertFalseValidator implements ConstraintValidator<AssertFalse, Boolean> {
@Override
- public void initialize(AssertFalse annotation) {
- }
-
- @Override
public boolean isValid(Boolean value, ConstraintValidatorContext context) {
- return value == null || Boolean.FALSE.equals(value);
+ return !Boolean.TRUE.equals(value);
}
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/bval/blob/3f287a7a/bval-jsr/src/main/java/org/apache/bval/constraints/AssertTrueValidator.java
----------------------------------------------------------------------
diff --git a/bval-jsr/src/main/java/org/apache/bval/constraints/AssertTrueValidator.java b/bval-jsr/src/main/java/org/apache/bval/constraints/AssertTrueValidator.java
index 47ee7f6..93ae933 100644
--- a/bval-jsr/src/main/java/org/apache/bval/constraints/AssertTrueValidator.java
+++ b/bval-jsr/src/main/java/org/apache/bval/constraints/AssertTrueValidator.java
@@ -28,12 +28,8 @@ import javax.validation.constraints.AssertTrue;
public class AssertTrueValidator implements ConstraintValidator<AssertTrue, Boolean> {
@Override
- public void initialize(AssertTrue annotation) {
- }
-
- @Override
public boolean isValid(Boolean value, ConstraintValidatorContext context) {
- return value == null || Boolean.TRUE.equals(value);
+ return !Boolean.FALSE.equals(value);
}
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/bval/blob/3f287a7a/bval-jsr/src/main/java/org/apache/bval/constraints/DecimalMaxValidatorForNumber.java
----------------------------------------------------------------------
diff --git a/bval-jsr/src/main/java/org/apache/bval/constraints/DecimalMaxValidatorForNumber.java b/bval-jsr/src/main/java/org/apache/bval/constraints/DecimalMaxValidatorForNumber.java
index dd0c210..725613c 100644
--- a/bval-jsr/src/main/java/org/apache/bval/constraints/DecimalMaxValidatorForNumber.java
+++ b/bval-jsr/src/main/java/org/apache/bval/constraints/DecimalMaxValidatorForNumber.java
@@ -43,12 +43,14 @@ public class DecimalMaxValidatorForNumber implements ConstraintValidator<Decimal
if (value == null) {
return true;
}
+ BigDecimal bigValue;
if (value instanceof BigDecimal) {
- return ((BigDecimal) value).compareTo(maxValue) != 1;
+ bigValue = (BigDecimal) value;
+ } else if (value instanceof BigInteger) {
+ bigValue = new BigDecimal((BigInteger) value);
+ } else {
+ bigValue = new BigDecimal(value.doubleValue());
}
- if (value instanceof BigInteger) {
- return (new BigDecimal((BigInteger) value)).compareTo(maxValue) != 1;
- }
- return (new BigDecimal(value.doubleValue()).compareTo(maxValue)) != 1;
+ return bigValue.compareTo(maxValue) < 1;
}
}
http://git-wip-us.apache.org/repos/asf/bval/blob/3f287a7a/bval-jsr/src/main/java/org/apache/bval/constraints/DecimalMaxValidatorForString.java
----------------------------------------------------------------------
diff --git a/bval-jsr/src/main/java/org/apache/bval/constraints/DecimalMaxValidatorForString.java b/bval-jsr/src/main/java/org/apache/bval/constraints/DecimalMaxValidatorForString.java
index a247297..cb0e232 100644
--- a/bval-jsr/src/main/java/org/apache/bval/constraints/DecimalMaxValidatorForString.java
+++ b/bval-jsr/src/main/java/org/apache/bval/constraints/DecimalMaxValidatorForString.java
@@ -46,7 +46,7 @@ public class DecimalMaxValidatorForString implements ConstraintValidator<Decimal
return true;
}
try {
- return new BigDecimal(value).compareTo(maxValue) != 1;
+ return new BigDecimal(value).compareTo(maxValue) < 1;
} catch (NumberFormatException nfe) {
return false;
}
http://git-wip-us.apache.org/repos/asf/bval/blob/3f287a7a/bval-jsr/src/main/java/org/apache/bval/constraints/DecimalMinValidatorForNumber.java
----------------------------------------------------------------------
diff --git a/bval-jsr/src/main/java/org/apache/bval/constraints/DecimalMinValidatorForNumber.java b/bval-jsr/src/main/java/org/apache/bval/constraints/DecimalMinValidatorForNumber.java
index 74ed17a..17c6c38 100644
--- a/bval-jsr/src/main/java/org/apache/bval/constraints/DecimalMinValidatorForNumber.java
+++ b/bval-jsr/src/main/java/org/apache/bval/constraints/DecimalMinValidatorForNumber.java
@@ -43,12 +43,14 @@ public class DecimalMinValidatorForNumber implements ConstraintValidator<Decimal
if (value == null) {
return true;
}
+ BigDecimal bigValue;
if (value instanceof BigDecimal) {
- return ((BigDecimal) value).compareTo(minValue) != -1;
+ bigValue = (BigDecimal) value;
+ } else if (value instanceof BigInteger) {
+ bigValue = new BigDecimal((BigInteger) value);
+ } else {
+ bigValue = new BigDecimal(value.doubleValue());
}
- if (value instanceof BigInteger) {
- return (new BigDecimal((BigInteger) value)).compareTo(minValue) != -1;
- }
- return (new BigDecimal(value.doubleValue()).compareTo(minValue)) != -1;
+ return bigValue.compareTo(minValue) >= 0;
}
}
http://git-wip-us.apache.org/repos/asf/bval/blob/3f287a7a/bval-jsr/src/main/java/org/apache/bval/constraints/DecimalMinValidatorForString.java
----------------------------------------------------------------------
diff --git a/bval-jsr/src/main/java/org/apache/bval/constraints/DecimalMinValidatorForString.java b/bval-jsr/src/main/java/org/apache/bval/constraints/DecimalMinValidatorForString.java
index 8110f8e..ef62387 100644
--- a/bval-jsr/src/main/java/org/apache/bval/constraints/DecimalMinValidatorForString.java
+++ b/bval-jsr/src/main/java/org/apache/bval/constraints/DecimalMinValidatorForString.java
@@ -48,7 +48,7 @@ public class DecimalMinValidatorForString implements ConstraintValidator<Decimal
return true;
}
try {
- return new BigDecimal(value).compareTo(minValue) != -1;
+ return new BigDecimal(value).compareTo(minValue) >= 0;
} catch (NumberFormatException nfe) {
return false;
}
http://git-wip-us.apache.org/repos/asf/bval/blob/3f287a7a/bval-jsr/src/main/java/org/apache/bval/constraints/Email.java
----------------------------------------------------------------------
diff --git a/bval-jsr/src/main/java/org/apache/bval/constraints/Email.java b/bval-jsr/src/main/java/org/apache/bval/constraints/Email.java
index 2d66d28..f1f9435 100644
--- a/bval-jsr/src/main/java/org/apache/bval/constraints/Email.java
+++ b/bval-jsr/src/main/java/org/apache/bval/constraints/Email.java
@@ -19,34 +19,41 @@
package org.apache.bval.constraints;
import javax.validation.Constraint;
+import javax.validation.OverridesAttribute;
import javax.validation.Payload;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import static java.lang.annotation.ElementType.ANNOTATION_TYPE;
+import static java.lang.annotation.ElementType.CONSTRUCTOR;
import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE_USE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
/**
* <p>
* --
- * TODO - This class is NOT part of the bean_validation spec and might disappear
- * as soon as a final version of the specification contains a similar functionality.
+ * NOTE - This constraint predates the equivalent version from the bean_validation spec.
* --
* </p>
* Description: annotation to validate an email address (by pattern)<br/>
*/
+@Deprecated
@Documented
-@Constraint(validatedBy = EmailValidator.class)
-@Target({ METHOD, FIELD, ANNOTATION_TYPE, PARAMETER })
+@Constraint(validatedBy = {})
+@javax.validation.constraints.Email
+@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
@Retention(RUNTIME)
public @interface Email {
+ @OverridesAttribute(constraint = javax.validation.constraints.Email.class, name = "groups")
Class<?>[] groups() default {};
+ @OverridesAttribute(constraint = javax.validation.constraints.Email.class, name = "message")
String message() default "{org.apache.bval.constraints.Email.message}";
+ @OverridesAttribute(constraint = javax.validation.constraints.Email.class, name = "payload")
Class<? extends Payload>[] payload() default {};
}
http://git-wip-us.apache.org/repos/asf/bval/blob/3f287a7a/bval-jsr/src/main/java/org/apache/bval/constraints/EmailValidator.java
----------------------------------------------------------------------
diff --git a/bval-jsr/src/main/java/org/apache/bval/constraints/EmailValidator.java b/bval-jsr/src/main/java/org/apache/bval/constraints/EmailValidator.java
index bcdf0fe..b20806b 100644
--- a/bval-jsr/src/main/java/org/apache/bval/constraints/EmailValidator.java
+++ b/bval-jsr/src/main/java/org/apache/bval/constraints/EmailValidator.java
@@ -26,15 +26,10 @@ import javax.validation.ConstraintValidatorContext;
/**
* Description: <br/>
*/
-public class EmailValidator implements ConstraintValidator<Email, CharSequence> {
+public class EmailValidator implements ConstraintValidator<javax.validation.constraints.Email, CharSequence> {
@Override
public boolean isValid(CharSequence value, ConstraintValidatorContext context) {
return EMailValidationUtils.isValid(value);
}
-
- @Override
- public void initialize(Email parameters) {
- // do nothing (as long as Email has no properties)
- }
}
http://git-wip-us.apache.org/repos/asf/bval/blob/3f287a7a/bval-jsr/src/main/java/org/apache/bval/constraints/FutureOrPresentValidator.java
----------------------------------------------------------------------
diff --git a/bval-jsr/src/main/java/org/apache/bval/constraints/FutureOrPresentValidator.java b/bval-jsr/src/main/java/org/apache/bval/constraints/FutureOrPresentValidator.java
new file mode 100644
index 0000000..4cc85b1
--- /dev/null
+++ b/bval-jsr/src/main/java/org/apache/bval/constraints/FutureOrPresentValidator.java
@@ -0,0 +1,138 @@
+/*
+ * 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.bval.constraints;
+
+import java.time.Clock;
+import java.time.Instant;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.time.MonthDay;
+import java.time.OffsetDateTime;
+import java.time.OffsetTime;
+import java.time.Year;
+import java.time.YearMonth;
+import java.time.ZonedDateTime;
+import java.time.chrono.ChronoLocalDate;
+import java.time.chrono.ChronoLocalDateTime;
+import java.time.chrono.ChronoZonedDateTime;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.GregorianCalendar;
+import java.util.function.Function;
+
+import javax.validation.ConstraintValidator;
+import javax.validation.constraints.FutureOrPresent;
+
+/**
+ * Defines built-in {@link ConstraintValidator} implementations for {@link FutureOrPresent}.
+ *
+ * @param <T>
+ * validated type
+ */
+public abstract class FutureOrPresentValidator<T extends Comparable<T>> extends TimeValidator<FutureOrPresent, T> {
+
+ public static class ForDate extends FutureOrPresentValidator<Date> {
+
+ public ForDate() {
+ super(clock -> Date.from(clock.instant()));
+ }
+ }
+
+ public static class ForCalendar extends FutureOrPresentValidator<Calendar> {
+
+ public ForCalendar() {
+ super(clock -> GregorianCalendar.from(clock.instant().atZone(clock.getZone())));
+ }
+ }
+
+ public static class ForInstant extends FutureOrPresentValidator<Instant> {
+
+ public ForInstant() {
+ super(Instant::now);
+ }
+ }
+
+ public static class ForChronoLocalDate extends FutureOrPresentValidator<ChronoLocalDate> {
+
+ public ForChronoLocalDate() {
+ super(LocalDate::now);
+ }
+ }
+
+ public static class ForChronoLocalDateTime extends FutureOrPresentValidator<ChronoLocalDateTime<?>> {
+
+ public ForChronoLocalDateTime() {
+ super(LocalDateTime::now);
+ }
+ }
+
+ public static class ForLocalTime extends FutureOrPresentValidator<LocalTime> {
+
+ public ForLocalTime() {
+ super(LocalTime::now);
+ }
+ }
+
+ public static class ForOffsetDateTime extends FutureOrPresentValidator<OffsetDateTime> {
+
+ public ForOffsetDateTime() {
+ super(OffsetDateTime::now);
+ }
+ }
+
+ public static class ForOffsetTime extends FutureOrPresentValidator<OffsetTime> {
+
+ public ForOffsetTime() {
+ super(OffsetTime::now);
+ }
+ }
+
+ public static class ForChronoZonedDateTime extends FutureOrPresentValidator<ChronoZonedDateTime<?>> {
+
+ public ForChronoZonedDateTime() {
+ super(ZonedDateTime::now);
+ }
+ }
+
+ public static class ForMonthDay extends FutureOrPresentValidator<MonthDay> {
+
+ public ForMonthDay() {
+ super(MonthDay::now);
+ }
+ }
+
+ public static class ForYear extends FutureOrPresentValidator<Year> {
+
+ public ForYear() {
+ super(Year::now);
+ }
+ }
+
+ public static class ForYearMonth extends FutureOrPresentValidator<YearMonth> {
+
+ public ForYearMonth() {
+ super(YearMonth::now);
+ }
+ }
+
+ protected FutureOrPresentValidator(Function<Clock, T> now) {
+ super(now, n -> n >= 0);
+ }
+}
http://git-wip-us.apache.org/repos/asf/bval/blob/3f287a7a/bval-jsr/src/main/java/org/apache/bval/constraints/FutureValidator.java
----------------------------------------------------------------------
diff --git a/bval-jsr/src/main/java/org/apache/bval/constraints/FutureValidator.java b/bval-jsr/src/main/java/org/apache/bval/constraints/FutureValidator.java
new file mode 100644
index 0000000..dd6116b
--- /dev/null
+++ b/bval-jsr/src/main/java/org/apache/bval/constraints/FutureValidator.java
@@ -0,0 +1,138 @@
+/*
+ * 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.bval.constraints;
+
+import java.time.Clock;
+import java.time.Instant;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.time.MonthDay;
+import java.time.OffsetDateTime;
+import java.time.OffsetTime;
+import java.time.Year;
+import java.time.YearMonth;
+import java.time.ZonedDateTime;
+import java.time.chrono.ChronoLocalDate;
+import java.time.chrono.ChronoLocalDateTime;
+import java.time.chrono.ChronoZonedDateTime;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.GregorianCalendar;
+import java.util.function.Function;
+
+import javax.validation.ConstraintValidator;
+import javax.validation.constraints.Future;
+
+/**
+ * Defines built-in {@link ConstraintValidator} implementations for {@link Future}.
+ *
+ * @param <T>
+ * validated type
+ */
+public abstract class FutureValidator<T extends Comparable<T>> extends TimeValidator<Future, T> {
+
+ public static class ForDate extends FutureValidator<Date> {
+
+ public ForDate() {
+ super(clock -> Date.from(clock.instant()));
+ }
+ }
+
+ public static class ForCalendar extends FutureValidator<Calendar> {
+
+ public ForCalendar() {
+ super(clock -> GregorianCalendar.from(clock.instant().atZone(clock.getZone())));
+ }
+ }
+
+ public static class ForInstant extends FutureValidator<Instant> {
+
+ public ForInstant() {
+ super(Instant::now);
+ }
+ }
+
+ public static class ForChronoLocalDate extends FutureValidator<ChronoLocalDate> {
+
+ public ForChronoLocalDate() {
+ super(LocalDate::now);
+ }
+ }
+
+ public static class ForChronoLocalDateTime extends FutureValidator<ChronoLocalDateTime<?>> {
+
+ public ForChronoLocalDateTime() {
+ super(LocalDateTime::now);
+ }
+ }
+
+ public static class ForLocalTime extends FutureValidator<LocalTime> {
+
+ public ForLocalTime() {
+ super(LocalTime::now);
+ }
+ }
+
+ public static class ForOffsetDateTime extends FutureValidator<OffsetDateTime> {
+
+ public ForOffsetDateTime() {
+ super(OffsetDateTime::now);
+ }
+ }
+
+ public static class ForOffsetTime extends FutureValidator<OffsetTime> {
+
+ public ForOffsetTime() {
+ super(OffsetTime::now);
+ }
+ }
+
+ public static class ForChronoZonedDateTime extends FutureValidator<ChronoZonedDateTime<?>> {
+
+ public ForChronoZonedDateTime() {
+ super(ZonedDateTime::now);
+ }
+ }
+
+ public static class ForMonthDay extends FutureValidator<MonthDay> {
+
+ public ForMonthDay() {
+ super(MonthDay::now);
+ }
+ }
+
+ public static class ForYear extends FutureValidator<Year> {
+
+ public ForYear() {
+ super(Year::now);
+ }
+ }
+
+ public static class ForYearMonth extends FutureValidator<YearMonth> {
+
+ public ForYearMonth() {
+ super(YearMonth::now);
+ }
+ }
+
+ protected FutureValidator(Function<Clock, T> now) {
+ super(now, n -> n > 0);
+ }
+}
http://git-wip-us.apache.org/repos/asf/bval/blob/3f287a7a/bval-jsr/src/main/java/org/apache/bval/constraints/MaxValidatorForNumber.java
----------------------------------------------------------------------
diff --git a/bval-jsr/src/main/java/org/apache/bval/constraints/MaxValidatorForNumber.java b/bval-jsr/src/main/java/org/apache/bval/constraints/MaxValidatorForNumber.java
index 78524f9..0ad81a8 100644
--- a/bval-jsr/src/main/java/org/apache/bval/constraints/MaxValidatorForNumber.java
+++ b/bval-jsr/src/main/java/org/apache/bval/constraints/MaxValidatorForNumber.java
@@ -43,10 +43,10 @@ public class MaxValidatorForNumber implements ConstraintValidator<Max, Number> {
return true;
}
if (value instanceof BigDecimal) {
- return ((BigDecimal) value).compareTo(BigDecimal.valueOf(max)) != 1;
+ return ((BigDecimal) value).compareTo(BigDecimal.valueOf(max)) < 1;
}
if (value instanceof BigInteger) {
- return ((BigInteger) value).compareTo(BigInteger.valueOf(max)) != 1;
+ return ((BigInteger) value).compareTo(BigInteger.valueOf(max)) < 1;
}
return value.longValue() <= max;
}
http://git-wip-us.apache.org/repos/asf/bval/blob/3f287a7a/bval-jsr/src/main/java/org/apache/bval/constraints/MaxValidatorForString.java
----------------------------------------------------------------------
diff --git a/bval-jsr/src/main/java/org/apache/bval/constraints/MaxValidatorForString.java b/bval-jsr/src/main/java/org/apache/bval/constraints/MaxValidatorForString.java
index 4170a5c..f14f8e7 100644
--- a/bval-jsr/src/main/java/org/apache/bval/constraints/MaxValidatorForString.java
+++ b/bval-jsr/src/main/java/org/apache/bval/constraints/MaxValidatorForString.java
@@ -42,7 +42,7 @@ public class MaxValidatorForString implements ConstraintValidator<Max, String> {
return true;
}
try {
- return new BigDecimal(value).compareTo(BigDecimal.valueOf(max)) != 1;
+ return new BigDecimal(value).compareTo(BigDecimal.valueOf(max)) < 1;
} catch (NumberFormatException nfe) {
return false;
}
http://git-wip-us.apache.org/repos/asf/bval/blob/3f287a7a/bval-jsr/src/main/java/org/apache/bval/constraints/MinValidatorForNumber.java
----------------------------------------------------------------------
diff --git a/bval-jsr/src/main/java/org/apache/bval/constraints/MinValidatorForNumber.java b/bval-jsr/src/main/java/org/apache/bval/constraints/MinValidatorForNumber.java
index b5aeaad..c467de2 100644
--- a/bval-jsr/src/main/java/org/apache/bval/constraints/MinValidatorForNumber.java
+++ b/bval-jsr/src/main/java/org/apache/bval/constraints/MinValidatorForNumber.java
@@ -42,10 +42,10 @@ public class MinValidatorForNumber implements ConstraintValidator<Min, Number> {
return true;
}
if (value instanceof BigDecimal) {
- return ((BigDecimal) value).compareTo(BigDecimal.valueOf(minValue)) != -1;
+ return ((BigDecimal) value).compareTo(BigDecimal.valueOf(minValue)) >= 0;
}
if (value instanceof BigInteger) {
- return ((BigInteger) value).compareTo(BigInteger.valueOf(minValue)) != -1;
+ return ((BigInteger) value).compareTo(BigInteger.valueOf(minValue)) >= 0;
}
return value.longValue() >= minValue;
}
http://git-wip-us.apache.org/repos/asf/bval/blob/3f287a7a/bval-jsr/src/main/java/org/apache/bval/constraints/MinValidatorForString.java
----------------------------------------------------------------------
diff --git a/bval-jsr/src/main/java/org/apache/bval/constraints/MinValidatorForString.java b/bval-jsr/src/main/java/org/apache/bval/constraints/MinValidatorForString.java
index bd3a4dd..5d45fc2 100644
--- a/bval-jsr/src/main/java/org/apache/bval/constraints/MinValidatorForString.java
+++ b/bval-jsr/src/main/java/org/apache/bval/constraints/MinValidatorForString.java
@@ -42,7 +42,7 @@ public class MinValidatorForString implements ConstraintValidator<Min, String> {
return true;
}
try {
- return new BigDecimal(value).compareTo(BigDecimal.valueOf(minValue)) != -1;
+ return new BigDecimal(value).compareTo(BigDecimal.valueOf(minValue)) >= 0;
} catch (NumberFormatException nfe) {
return false;
}
http://git-wip-us.apache.org/repos/asf/bval/blob/3f287a7a/bval-jsr/src/main/java/org/apache/bval/constraints/NotBlankValidator.java
----------------------------------------------------------------------
diff --git a/bval-jsr/src/main/java/org/apache/bval/constraints/NotBlankValidator.java b/bval-jsr/src/main/java/org/apache/bval/constraints/NotBlankValidator.java
new file mode 100644
index 0000000..e201c0d
--- /dev/null
+++ b/bval-jsr/src/main/java/org/apache/bval/constraints/NotBlankValidator.java
@@ -0,0 +1,34 @@
+/*
+ * 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.bval.constraints;
+
+import javax.validation.ConstraintValidator;
+import javax.validation.ConstraintValidatorContext;
+import javax.validation.constraints.NotBlank;
+
+/**
+ * Validate {@link NotBlank} for {@link CharSequence}.
+ */
+public class NotBlankValidator implements ConstraintValidator<NotBlank, CharSequence> {
+
+ @Override
+ public boolean isValid(CharSequence value, ConstraintValidatorContext context) {
+ return value == null || value.length() > 0 && !value.chars().allMatch(Character::isWhitespace);
+ }
+}
http://git-wip-us.apache.org/repos/asf/bval/blob/3f287a7a/bval-jsr/src/main/java/org/apache/bval/constraints/NotEmpty.java
----------------------------------------------------------------------
diff --git a/bval-jsr/src/main/java/org/apache/bval/constraints/NotEmpty.java b/bval-jsr/src/main/java/org/apache/bval/constraints/NotEmpty.java
index ffa8cf8..00497ea 100644
--- a/bval-jsr/src/main/java/org/apache/bval/constraints/NotEmpty.java
+++ b/bval-jsr/src/main/java/org/apache/bval/constraints/NotEmpty.java
@@ -18,18 +18,22 @@
*/
package org.apache.bval.constraints;
-import javax.validation.Constraint;
-import javax.validation.Payload;
-import java.lang.annotation.Documented;
-import java.lang.annotation.Retention;
-import java.lang.annotation.Target;
-
import static java.lang.annotation.ElementType.ANNOTATION_TYPE;
+import static java.lang.annotation.ElementType.CONSTRUCTOR;
import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE_USE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.validation.Constraint;
+import javax.validation.OverridesAttribute;
+import javax.validation.Payload;
+
/**
* <pre>
* This class is NOT part of the bean_validation spec and might disappear
@@ -37,14 +41,20 @@ import static java.lang.annotation.RetentionPolicy.RUNTIME;
* </pre>
*/
@Documented
-@Constraint(validatedBy = { NotEmptyValidatorForCollection.class, NotEmptyValidatorForMap.class,
- NotEmptyValidatorForString.class, NotEmptyValidator.class })
-@Target({ METHOD, FIELD, ANNOTATION_TYPE, PARAMETER })
+@Constraint(validatedBy = {})
+@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
@Retention(RUNTIME)
+@javax.validation.constraints.NotEmpty
+@Deprecated
public @interface NotEmpty {
Class<?>[] groups() default {};
+ @OverridesAttribute(constraint = javax.validation.constraints.NotEmpty.class, name = "message")
String message() default "{org.apache.bval.constraints.NotEmpty.message}";
Class<? extends Payload>[] payload() default {};
+
+ public @interface List {
+ NotEmpty[] value();
+ }
}
http://git-wip-us.apache.org/repos/asf/bval/blob/3f287a7a/bval-jsr/src/main/java/org/apache/bval/constraints/NotEmptyValidator.java
----------------------------------------------------------------------
diff --git a/bval-jsr/src/main/java/org/apache/bval/constraints/NotEmptyValidator.java b/bval-jsr/src/main/java/org/apache/bval/constraints/NotEmptyValidator.java
index 4316b39..92c8739 100644
--- a/bval-jsr/src/main/java/org/apache/bval/constraints/NotEmptyValidator.java
+++ b/bval-jsr/src/main/java/org/apache/bval/constraints/NotEmptyValidator.java
@@ -25,14 +25,10 @@ import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
/**
- * Description: Check the non emptyness of an
+ * Description: Check the non emptiness of an
* any object that has a public isEmpty():boolean or a valid toString() method
*/
-public class NotEmptyValidator implements ConstraintValidator<NotEmpty, Object> {
- @Override
- public void initialize(NotEmpty constraintAnnotation) {
- // do nothing
- }
+public class NotEmptyValidator implements ConstraintValidator<javax.validation.constraints.NotEmpty, Object> {
@Override
public boolean isValid(Object value, ConstraintValidatorContext context) {
@@ -45,15 +41,12 @@ public class NotEmptyValidator implements ConstraintValidator<NotEmpty, Object>
try {
final Method isEmptyMethod = value.getClass().getMethod("isEmpty");
if (isEmptyMethod != null) {
- return !((Boolean) isEmptyMethod.invoke(value)).booleanValue();
+ return !Boolean.TRUE.equals(isEmptyMethod.invoke(value));
}
- } catch (IllegalAccessException iae) {
- // do nothing
- } catch (NoSuchMethodException nsme) {
- // do nothing
- } catch (InvocationTargetException ite) {
+ } catch (IllegalAccessException | NoSuchMethodException | InvocationTargetException iae) {
// do nothing
}
- return !value.toString().isEmpty();
+ final String s = value.toString();
+ return s != null && !s.isEmpty();
}
}
http://git-wip-us.apache.org/repos/asf/bval/blob/3f287a7a/bval-jsr/src/main/java/org/apache/bval/constraints/NotEmptyValidatorForCharSequence.java
----------------------------------------------------------------------
diff --git a/bval-jsr/src/main/java/org/apache/bval/constraints/NotEmptyValidatorForCharSequence.java b/bval-jsr/src/main/java/org/apache/bval/constraints/NotEmptyValidatorForCharSequence.java
new file mode 100644
index 0000000..320c105
--- /dev/null
+++ b/bval-jsr/src/main/java/org/apache/bval/constraints/NotEmptyValidatorForCharSequence.java
@@ -0,0 +1,34 @@
+/*
+ * 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.bval.constraints;
+
+import javax.validation.ConstraintValidator;
+import javax.validation.ConstraintValidatorContext;
+
+/**
+ * Description: <br/>
+ */
+public class NotEmptyValidatorForCharSequence
+ implements ConstraintValidator<javax.validation.constraints.NotEmpty, CharSequence> {
+
+ @Override
+ public boolean isValid(CharSequence value, ConstraintValidatorContext context) {
+ return value == null || value.length() > 0;
+ }
+}
http://git-wip-us.apache.org/repos/asf/bval/blob/3f287a7a/bval-jsr/src/main/java/org/apache/bval/constraints/NotEmptyValidatorForCollection.java
----------------------------------------------------------------------
diff --git a/bval-jsr/src/main/java/org/apache/bval/constraints/NotEmptyValidatorForCollection.java b/bval-jsr/src/main/java/org/apache/bval/constraints/NotEmptyValidatorForCollection.java
index 5faab13..da0c438 100644
--- a/bval-jsr/src/main/java/org/apache/bval/constraints/NotEmptyValidatorForCollection.java
+++ b/bval-jsr/src/main/java/org/apache/bval/constraints/NotEmptyValidatorForCollection.java
@@ -25,11 +25,8 @@ import java.util.Collection;
/**
* Description: <br/>
*/
-public class NotEmptyValidatorForCollection implements ConstraintValidator<NotEmpty, Collection<?>> {
- @Override
- public void initialize(NotEmpty constraintAnnotation) {
- // do nothing
- }
+public class NotEmptyValidatorForCollection
+ implements ConstraintValidator<javax.validation.constraints.NotEmpty, Collection<?>> {
@Override
public boolean isValid(Collection<?> value, ConstraintValidatorContext context) {
http://git-wip-us.apache.org/repos/asf/bval/blob/3f287a7a/bval-jsr/src/main/java/org/apache/bval/constraints/NotEmptyValidatorForMap.java
----------------------------------------------------------------------
diff --git a/bval-jsr/src/main/java/org/apache/bval/constraints/NotEmptyValidatorForMap.java b/bval-jsr/src/main/java/org/apache/bval/constraints/NotEmptyValidatorForMap.java
index b5a4f49..6a5221e 100644
--- a/bval-jsr/src/main/java/org/apache/bval/constraints/NotEmptyValidatorForMap.java
+++ b/bval-jsr/src/main/java/org/apache/bval/constraints/NotEmptyValidatorForMap.java
@@ -25,11 +25,7 @@ import java.util.Map;
/**
* Description: <br/>
*/
-public class NotEmptyValidatorForMap implements ConstraintValidator<NotEmpty, Map<?, ?>> {
- @Override
- public void initialize(NotEmpty constraintAnnotation) {
- // do nothing
- }
+public class NotEmptyValidatorForMap implements ConstraintValidator<javax.validation.constraints.NotEmpty, Map<?, ?>> {
@Override
public boolean isValid(Map<?, ?> value, ConstraintValidatorContext context) {
http://git-wip-us.apache.org/repos/asf/bval/blob/3f287a7a/bval-jsr/src/main/java/org/apache/bval/constraints/NotEmptyValidatorForString.java
----------------------------------------------------------------------
diff --git a/bval-jsr/src/main/java/org/apache/bval/constraints/NotEmptyValidatorForString.java b/bval-jsr/src/main/java/org/apache/bval/constraints/NotEmptyValidatorForString.java
deleted file mode 100644
index 9fc3023..0000000
--- a/bval-jsr/src/main/java/org/apache/bval/constraints/NotEmptyValidatorForString.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * 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.bval.constraints;
-
-import javax.validation.ConstraintValidator;
-import javax.validation.ConstraintValidatorContext;
-
-/**
- * Description: <br/>
- */
-public class NotEmptyValidatorForString implements ConstraintValidator<NotEmpty, String> {
- @Override
- public void initialize(NotEmpty constraintAnnotation) {
- // do nothing
- }
-
- @Override
- public boolean isValid(String value, ConstraintValidatorContext context) {
- return value == null || !value.isEmpty();
- }
-}
http://git-wip-us.apache.org/repos/asf/bval/blob/3f287a7a/bval-jsr/src/main/java/org/apache/bval/constraints/NotNullValidator.java
----------------------------------------------------------------------
diff --git a/bval-jsr/src/main/java/org/apache/bval/constraints/NotNullValidator.java b/bval-jsr/src/main/java/org/apache/bval/constraints/NotNullValidator.java
index b39d493..c14cff2 100644
--- a/bval-jsr/src/main/java/org/apache/bval/constraints/NotNullValidator.java
+++ b/bval-jsr/src/main/java/org/apache/bval/constraints/NotNullValidator.java
@@ -24,10 +24,6 @@ import javax.validation.constraints.NotNull;
/** valid when object is NOT null */
public class NotNullValidator implements ConstraintValidator<NotNull, Object> {
- @Override
- public void initialize(NotNull constraintAnnotation) {
- // do nothing
- }
@Override
public boolean isValid(Object value, ConstraintValidatorContext context) {
http://git-wip-us.apache.org/repos/asf/bval/blob/3f287a7a/bval-jsr/src/main/java/org/apache/bval/constraints/NullValidator.java
----------------------------------------------------------------------
diff --git a/bval-jsr/src/main/java/org/apache/bval/constraints/NullValidator.java b/bval-jsr/src/main/java/org/apache/bval/constraints/NullValidator.java
index 7c16296..523ef75 100644
--- a/bval-jsr/src/main/java/org/apache/bval/constraints/NullValidator.java
+++ b/bval-jsr/src/main/java/org/apache/bval/constraints/NullValidator.java
@@ -28,11 +28,6 @@ import javax.validation.constraints.Null;
public class NullValidator implements ConstraintValidator<Null, Object> {
@Override
- public void initialize(Null annotation) {
- // do nothing
- }
-
- @Override
public boolean isValid(Object object, ConstraintValidatorContext context) {
return object == null;
}
http://git-wip-us.apache.org/repos/asf/bval/blob/3f287a7a/bval-jsr/src/main/java/org/apache/bval/constraints/NumberSignValidator.java
----------------------------------------------------------------------
diff --git a/bval-jsr/src/main/java/org/apache/bval/constraints/NumberSignValidator.java b/bval-jsr/src/main/java/org/apache/bval/constraints/NumberSignValidator.java
new file mode 100644
index 0000000..fe8f59c
--- /dev/null
+++ b/bval-jsr/src/main/java/org/apache/bval/constraints/NumberSignValidator.java
@@ -0,0 +1,68 @@
+/*
+ * 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.bval.constraints;
+
+import java.util.function.IntPredicate;
+
+import javax.validation.ConstraintValidator;
+import javax.validation.ConstraintValidatorContext;
+import javax.validation.constraints.Negative;
+
+import org.apache.bval.util.Validate;
+
+/**
+ * Description: validate positive/negative number values.
+ */
+public abstract class NumberSignValidator implements ConstraintValidator<Negative, Number> {
+ public static class ForPositive extends NumberSignValidator {
+ public static class OrZero extends NumberSignValidator {
+ public OrZero() {
+ super(n -> n >= 0);
+ }
+ }
+
+ public ForPositive() {
+ super(n -> n > 0);
+ }
+ }
+
+ public static class ForNegative extends NumberSignValidator {
+ public static class OrZero extends NumberSignValidator {
+ public OrZero() {
+ super(n -> n <= 0);
+ }
+ }
+
+ public ForNegative() {
+ super(n -> n < 0);
+ }
+ }
+
+ private final IntPredicate comparisonTest;
+
+ protected NumberSignValidator(IntPredicate comparisonTest) {
+ super();
+ this.comparisonTest = Validate.notNull(comparisonTest);
+ }
+
+ @Override
+ public boolean isValid(Number value, ConstraintValidatorContext context) {
+ return value == null || comparisonTest.test(Double.compare(value.doubleValue(), 0.0));
+ }
+}
http://git-wip-us.apache.org/repos/asf/bval/blob/3f287a7a/bval-jsr/src/main/java/org/apache/bval/constraints/PastOrPresentValidator.java
----------------------------------------------------------------------
diff --git a/bval-jsr/src/main/java/org/apache/bval/constraints/PastOrPresentValidator.java b/bval-jsr/src/main/java/org/apache/bval/constraints/PastOrPresentValidator.java
new file mode 100644
index 0000000..d1e3e19
--- /dev/null
+++ b/bval-jsr/src/main/java/org/apache/bval/constraints/PastOrPresentValidator.java
@@ -0,0 +1,138 @@
+/*
+ * 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.bval.constraints;
+
+import java.time.Clock;
+import java.time.Instant;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.time.MonthDay;
+import java.time.OffsetDateTime;
+import java.time.OffsetTime;
+import java.time.Year;
+import java.time.YearMonth;
+import java.time.ZonedDateTime;
+import java.time.chrono.ChronoLocalDate;
+import java.time.chrono.ChronoLocalDateTime;
+import java.time.chrono.ChronoZonedDateTime;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.GregorianCalendar;
+import java.util.function.Function;
+
+import javax.validation.ConstraintValidator;
+import javax.validation.constraints.PastOrPresent;
+
+/**
+ * Defines built-in {@link ConstraintValidator} implementations for {@link PastOrPresent}.
+ *
+ * @param <T>
+ * validated type
+ */
+public abstract class PastOrPresentValidator<T extends Comparable<T>> extends TimeValidator<PastOrPresent, T> {
+
+ public static class ForDate extends PastOrPresentValidator<Date> {
+
+ public ForDate() {
+ super(clock -> Date.from(clock.instant()));
+ }
+ }
+
+ public static class ForCalendar extends PastOrPresentValidator<Calendar> {
+
+ public ForCalendar() {
+ super(clock -> GregorianCalendar.from(clock.instant().atZone(clock.getZone())));
+ }
+ }
+
+ public static class ForInstant extends PastOrPresentValidator<Instant> {
+
+ public ForInstant() {
+ super(Instant::now);
+ }
+ }
+
+ public static class ForChronoLocalDate extends PastOrPresentValidator<ChronoLocalDate> {
+
+ public ForChronoLocalDate() {
+ super(LocalDate::now);
+ }
+ }
+
+ public static class ForChronoLocalDateTime extends PastOrPresentValidator<ChronoLocalDateTime<?>> {
+
+ public ForChronoLocalDateTime() {
+ super(LocalDateTime::now);
+ }
+ }
+
+ public static class ForLocalTime extends PastOrPresentValidator<LocalTime> {
+
+ public ForLocalTime() {
+ super(LocalTime::now);
+ }
+ }
+
+ public static class ForOffsetDateTime extends PastOrPresentValidator<OffsetDateTime> {
+
+ public ForOffsetDateTime() {
+ super(OffsetDateTime::now);
+ }
+ }
+
+ public static class ForOffsetTime extends PastOrPresentValidator<OffsetTime> {
+
+ public ForOffsetTime() {
+ super(OffsetTime::now);
+ }
+ }
+
+ public static class ForChronoZonedDateTime extends PastOrPresentValidator<ChronoZonedDateTime<?>> {
+
+ public ForChronoZonedDateTime() {
+ super(ZonedDateTime::now);
+ }
+ }
+
+ public static class ForMonthDay extends PastOrPresentValidator<MonthDay> {
+
+ public ForMonthDay() {
+ super(MonthDay::now);
+ }
+ }
+
+ public static class ForYear extends PastOrPresentValidator<Year> {
+
+ public ForYear() {
+ super(Year::now);
+ }
+ }
+
+ public static class ForYearMonth extends PastOrPresentValidator<YearMonth> {
+
+ public ForYearMonth() {
+ super(YearMonth::now);
+ }
+ }
+
+ protected PastOrPresentValidator(Function<Clock, T> now) {
+ super(now, n -> n <= 0);
+ }
+}
http://git-wip-us.apache.org/repos/asf/bval/blob/3f287a7a/bval-jsr/src/main/java/org/apache/bval/constraints/PastValidator.java
----------------------------------------------------------------------
diff --git a/bval-jsr/src/main/java/org/apache/bval/constraints/PastValidator.java b/bval-jsr/src/main/java/org/apache/bval/constraints/PastValidator.java
new file mode 100644
index 0000000..0136d83
--- /dev/null
+++ b/bval-jsr/src/main/java/org/apache/bval/constraints/PastValidator.java
@@ -0,0 +1,138 @@
+/*
+ * 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.bval.constraints;
+
+import java.time.Clock;
+import java.time.Instant;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.time.MonthDay;
+import java.time.OffsetDateTime;
+import java.time.OffsetTime;
+import java.time.Year;
+import java.time.YearMonth;
+import java.time.ZonedDateTime;
+import java.time.chrono.ChronoLocalDate;
+import java.time.chrono.ChronoLocalDateTime;
+import java.time.chrono.ChronoZonedDateTime;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.GregorianCalendar;
+import java.util.function.Function;
+
+import javax.validation.ConstraintValidator;
+import javax.validation.constraints.Past;
+
+/**
+ * Defines built-in {@link ConstraintValidator} implementations for {@link Past}.
+ *
+ * @param <T>
+ * validated type
+ */
+public abstract class PastValidator<T extends Comparable<T>> extends TimeValidator<Past, T> {
+
+ public static class ForDate extends PastValidator<Date> {
+
+ public ForDate() {
+ super(clock -> Date.from(clock.instant()));
+ }
+ }
+
+ public static class ForCalendar extends PastValidator<Calendar> {
+
+ public ForCalendar() {
+ super(clock -> GregorianCalendar.from(clock.instant().atZone(clock.getZone())));
+ }
+ }
+
+ public static class ForInstant extends PastValidator<Instant> {
+
+ public ForInstant() {
+ super(Instant::now);
+ }
+ }
+
+ public static class ForChronoLocalDate extends PastValidator<ChronoLocalDate> {
+
+ public ForChronoLocalDate() {
+ super(LocalDate::now);
+ }
+ }
+
+ public static class ForChronoLocalDateTime extends PastValidator<ChronoLocalDateTime<?>> {
+
+ public ForChronoLocalDateTime() {
+ super(LocalDateTime::now);
+ }
+ }
+
+ public static class ForLocalTime extends PastValidator<LocalTime> {
+
+ public ForLocalTime() {
+ super(LocalTime::now);
+ }
+ }
+
+ public static class ForOffsetDateTime extends PastValidator<OffsetDateTime> {
+
+ public ForOffsetDateTime() {
+ super(OffsetDateTime::now);
+ }
+ }
+
+ public static class ForOffsetTime extends PastValidator<OffsetTime> {
+
+ public ForOffsetTime() {
+ super(OffsetTime::now);
+ }
+ }
+
+ public static class ForChronoZonedDateTime extends PastValidator<ChronoZonedDateTime<?>> {
+
+ public ForChronoZonedDateTime() {
+ super(ZonedDateTime::now);
+ }
+ }
+
+ public static class ForMonthDay extends PastValidator<MonthDay> {
+
+ public ForMonthDay() {
+ super(MonthDay::now);
+ }
+ }
+
+ public static class ForYear extends PastValidator<Year> {
+
+ public ForYear() {
+ super(Year::now);
+ }
+ }
+
+ public static class ForYearMonth extends PastValidator<YearMonth> {
+
+ public ForYearMonth() {
+ super(YearMonth::now);
+ }
+ }
+
+ protected PastValidator(Function<Clock, T> now) {
+ super(now, n -> n < 0);
+ }
+}
http://git-wip-us.apache.org/repos/asf/bval/blob/3f287a7a/bval-jsr/src/main/java/org/apache/bval/constraints/PatternValidator.java
----------------------------------------------------------------------
diff --git a/bval-jsr/src/main/java/org/apache/bval/constraints/PatternValidator.java b/bval-jsr/src/main/java/org/apache/bval/constraints/PatternValidator.java
index 9534e6b..8a53062 100644
--- a/bval-jsr/src/main/java/org/apache/bval/constraints/PatternValidator.java
+++ b/bval-jsr/src/main/java/org/apache/bval/constraints/PatternValidator.java
@@ -27,7 +27,7 @@ import java.util.regex.PatternSyntaxException;
* validator using a regular expression,
* based on the jsr Pattern constraint annotation.
*/
-public class PatternValidator implements ConstraintValidator<Pattern, String> {
+public class PatternValidator implements ConstraintValidator<Pattern, CharSequence> {
protected java.util.regex.Pattern pattern;
@Override
@@ -46,7 +46,7 @@ public class PatternValidator implements ConstraintValidator<Pattern, String> {
}
@Override
- public boolean isValid(String value, ConstraintValidatorContext context) {
+ public boolean isValid(CharSequence value, ConstraintValidatorContext context) {
return value == null || pattern.matcher(value).matches();
}
}
http://git-wip-us.apache.org/repos/asf/bval/blob/3f287a7a/bval-jsr/src/main/java/org/apache/bval/constraints/TimeValidator.java
----------------------------------------------------------------------
diff --git a/bval-jsr/src/main/java/org/apache/bval/constraints/TimeValidator.java b/bval-jsr/src/main/java/org/apache/bval/constraints/TimeValidator.java
new file mode 100644
index 0000000..02e3836
--- /dev/null
+++ b/bval-jsr/src/main/java/org/apache/bval/constraints/TimeValidator.java
@@ -0,0 +1,44 @@
+/*
+ * 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.bval.constraints;
+
+import java.lang.annotation.Annotation;
+import java.time.Clock;
+import java.util.function.Function;
+import java.util.function.IntPredicate;
+
+import javax.validation.ConstraintValidator;
+import javax.validation.ConstraintValidatorContext;
+
+public abstract class TimeValidator<A extends Annotation, T extends Comparable<T>> implements ConstraintValidator<A, T> {
+
+ private final Function<Clock, T> now;
+ private final IntPredicate test;
+
+ protected TimeValidator(Function<Clock, T> now, IntPredicate test) {
+ super();
+ this.now = now;
+ this.test = test;
+ }
+
+ @Override
+ public final boolean isValid(T value, ConstraintValidatorContext context) {
+ return value == null || test.test(value.compareTo(now.apply(context.getClockProvider().getClock())));
+ }
+}
http://git-wip-us.apache.org/repos/asf/bval/blob/3f287a7a/bval-jsr/src/main/java/org/apache/bval/context/ValidationContext.java
----------------------------------------------------------------------
diff --git a/bval-jsr/src/main/java/org/apache/bval/context/ValidationContext.java b/bval-jsr/src/main/java/org/apache/bval/context/ValidationContext.java
new file mode 100644
index 0000000..37415ba
--- /dev/null
+++ b/bval-jsr/src/main/java/org/apache/bval/context/ValidationContext.java
@@ -0,0 +1,125 @@
+package org.apache.bval.context;
+
+import java.util.ArrayList;
+import java.util.LinkedList;
+import java.util.List;
+
+import javax.validation.ClockProvider;
+import javax.validation.ConstraintValidatorContext;
+import javax.validation.Path;
+import javax.validation.ValidationException;
+import javax.validation.metadata.CascadableDescriptor;
+import javax.validation.metadata.ContainerDescriptor;
+import javax.validation.metadata.ElementDescriptor;
+
+import org.apache.bval.jsr.ApacheValidatorFactory;
+import org.apache.bval.jsr.descriptor.BeanD;
+import org.apache.bval.jsr.util.PathImpl;
+import org.apache.bval.model.ValidationListener;
+import org.apache.bval.util.Exceptions;
+import org.apache.bval.util.Validate;
+
+/**
+ * Context for a single validation call over one object or graph.
+ */
+public class ValidationContext {
+
+ abstract class ElementContext<D> {
+
+ class ValidatorContext implements ConstraintValidatorContext {
+ private final List<ValidationListener.Error> errorMessages = new LinkedList<>();
+ private boolean disableDefaultConstraintViolation;
+
+ /**
+ * Get the queued error messages.
+ *
+ * @return List
+ */
+ List<ValidationListener.Error> getErrorMessages() {
+ if (disableDefaultConstraintViolation && errorMessages.isEmpty()) {
+ throw new ValidationException(
+ "At least one custom message must be created if the default error message gets disabled.");
+ }
+
+ List<ValidationListener.Error> returnedErrorMessages = new ArrayList<>(errorMessages);
+ if (!disableDefaultConstraintViolation) {
+ returnedErrorMessages
+ .add(new ValidationListener.Error(getDefaultConstraintMessageTemplate(), getPath(), null));
+ }
+ return returnedErrorMessages;
+ }
+
+ @Override
+ public void disableDefaultConstraintViolation() {
+ this.disableDefaultConstraintViolation = true;
+ }
+
+ @Override
+ public String getDefaultConstraintMessageTemplate() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public ConstraintViolationBuilder buildConstraintViolationWithTemplate(String messageTemplate) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public final ClockProvider getClockProvider() {
+ return validatorFactory.getClockProvider();
+ }
+
+ @Override
+ public final <T> T unwrap(Class<T> type) {
+ Exceptions.raiseUnless(type.isInstance(this), ValidationException::new, "Type %s not supported", type);
+ return type.cast(this);
+ }
+ }
+
+ protected final D descriptor;
+
+ ElementContext(D descriptor) {
+ super();
+ this.descriptor = Validate.notNull(descriptor, "descriptor");
+ }
+
+ protected abstract PathImpl getPath();
+ }
+
+ private class BeanContext extends ElementContext<BeanD> {
+ BeanContext(BeanD descriptor) {
+ super(descriptor);
+ }
+
+ @Override
+ protected PathImpl getPath() {
+ return PathImpl.create();
+ }
+ }
+
+ private class CascadableContainerContext<D extends ElementDescriptor & CascadableDescriptor & ContainerDescriptor>
+ extends ElementContext<D> {
+
+ private final PathImpl path;
+
+ CascadableContainerContext(D descriptor, Path path) {
+ super(descriptor);
+ this.path = PathImpl.copy(Validate.notNull(path, "path"));
+ }
+
+ @Override
+ protected PathImpl getPath() {
+ // careful, live
+ return path;
+ }
+ }
+
+ private final ApacheValidatorFactory validatorFactory;
+
+ public ValidationContext(ApacheValidatorFactory validatorFactory) {
+ super();
+ this.validatorFactory = Validate.notNull(validatorFactory, "validatorFactory");
+ }
+}