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/03/22 20:28:53 UTC
bval git commit: handle threeten chrono* types by introducing
Comparator to TimeValidator+
Repository: bval
Updated Branches:
refs/heads/bv2 eab5a0123 -> 0247c2361
handle threeten chrono* types by introducing Comparator to TimeValidator+
Project: http://git-wip-us.apache.org/repos/asf/bval/repo
Commit: http://git-wip-us.apache.org/repos/asf/bval/commit/0247c236
Tree: http://git-wip-us.apache.org/repos/asf/bval/tree/0247c236
Diff: http://git-wip-us.apache.org/repos/asf/bval/diff/0247c236
Branch: refs/heads/bv2
Commit: 0247c23619dd1eaf5c4dc00b58e8303db192814f
Parents: eab5a01
Author: Matt Benson <mb...@apache.org>
Authored: Thu Mar 22 15:28:46 2018 -0500
Committer: Matt Benson <mb...@apache.org>
Committed: Thu Mar 22 15:28:46 2018 -0500
----------------------------------------------------------------------
.../constraints/FutureOrPresentValidator.java | 17 +++++--
.../bval/constraints/FutureValidator.java | 16 +++++--
.../constraints/FutureValidatorForCalendar.java | 48 --------------------
.../constraints/FutureValidatorForDate.java | 48 --------------------
.../constraints/PastOrPresentValidator.java | 16 +++++--
.../apache/bval/constraints/PastValidator.java | 16 +++++--
.../constraints/PastValidatorForCalendar.java | 48 --------------------
.../bval/constraints/PastValidatorForDate.java | 48 --------------------
.../apache/bval/constraints/TimeValidator.java | 25 ++++++++--
9 files changed, 71 insertions(+), 211 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/bval/blob/0247c236/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
index 4cc85b1..fc358b4 100644
--- a/bval-jsr/src/main/java/org/apache/bval/constraints/FutureOrPresentValidator.java
+++ b/bval-jsr/src/main/java/org/apache/bval/constraints/FutureOrPresentValidator.java
@@ -33,9 +33,11 @@ import java.time.chrono.ChronoLocalDate;
import java.time.chrono.ChronoLocalDateTime;
import java.time.chrono.ChronoZonedDateTime;
import java.util.Calendar;
+import java.util.Comparator;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.function.Function;
+import java.util.function.IntPredicate;
import javax.validation.ConstraintValidator;
import javax.validation.constraints.FutureOrPresent;
@@ -72,14 +74,14 @@ public abstract class FutureOrPresentValidator<T extends Comparable<T>> extends
public static class ForChronoLocalDate extends FutureOrPresentValidator<ChronoLocalDate> {
public ForChronoLocalDate() {
- super(LocalDate::now);
+ super(LocalDate::now, CHRONO_LOCAL_DATE_COMPARATOR);
}
}
public static class ForChronoLocalDateTime extends FutureOrPresentValidator<ChronoLocalDateTime<?>> {
public ForChronoLocalDateTime() {
- super(LocalDateTime::now);
+ super(LocalDateTime::now, CHRONO_LOCAL_DATE_TIME_COMPARATOR);
}
}
@@ -107,7 +109,7 @@ public abstract class FutureOrPresentValidator<T extends Comparable<T>> extends
public static class ForChronoZonedDateTime extends FutureOrPresentValidator<ChronoZonedDateTime<?>> {
public ForChronoZonedDateTime() {
- super(ZonedDateTime::now);
+ super(ZonedDateTime::now, CHRONO_ZONED_DATE_TIME_COMPARATOR);
}
}
@@ -132,7 +134,14 @@ public abstract class FutureOrPresentValidator<T extends Comparable<T>> extends
}
}
+ private static final IntPredicate TEST = n -> n >= 0;
+
protected FutureOrPresentValidator(Function<Clock, T> now) {
- super(now, n -> n >= 0);
+ super(now, TEST);
+ }
+
+ protected FutureOrPresentValidator(Function<Clock, T> now, Comparator<? super T> cmp) {
+ super(now, cmp, TEST);
}
+
}
http://git-wip-us.apache.org/repos/asf/bval/blob/0247c236/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
index dd6116b..1362cae 100644
--- a/bval-jsr/src/main/java/org/apache/bval/constraints/FutureValidator.java
+++ b/bval-jsr/src/main/java/org/apache/bval/constraints/FutureValidator.java
@@ -33,9 +33,11 @@ import java.time.chrono.ChronoLocalDate;
import java.time.chrono.ChronoLocalDateTime;
import java.time.chrono.ChronoZonedDateTime;
import java.util.Calendar;
+import java.util.Comparator;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.function.Function;
+import java.util.function.IntPredicate;
import javax.validation.ConstraintValidator;
import javax.validation.constraints.Future;
@@ -72,14 +74,14 @@ public abstract class FutureValidator<T extends Comparable<T>> extends TimeValid
public static class ForChronoLocalDate extends FutureValidator<ChronoLocalDate> {
public ForChronoLocalDate() {
- super(LocalDate::now);
+ super(LocalDate::now, CHRONO_LOCAL_DATE_COMPARATOR);
}
}
public static class ForChronoLocalDateTime extends FutureValidator<ChronoLocalDateTime<?>> {
public ForChronoLocalDateTime() {
- super(LocalDateTime::now);
+ super(LocalDateTime::now, CHRONO_LOCAL_DATE_TIME_COMPARATOR);
}
}
@@ -107,7 +109,7 @@ public abstract class FutureValidator<T extends Comparable<T>> extends TimeValid
public static class ForChronoZonedDateTime extends FutureValidator<ChronoZonedDateTime<?>> {
public ForChronoZonedDateTime() {
- super(ZonedDateTime::now);
+ super(ZonedDateTime::now, CHRONO_ZONED_DATE_TIME_COMPARATOR);
}
}
@@ -132,7 +134,13 @@ public abstract class FutureValidator<T extends Comparable<T>> extends TimeValid
}
}
+ private static final IntPredicate TEST = n -> n > 0;
+
protected FutureValidator(Function<Clock, T> now) {
- super(now, n -> n > 0);
+ super(now, TEST);
+ }
+
+ protected FutureValidator(Function<Clock, T> now, Comparator<T> cmp) {
+ super(now, cmp, TEST);
}
}
http://git-wip-us.apache.org/repos/asf/bval/blob/0247c236/bval-jsr/src/main/java/org/apache/bval/constraints/FutureValidatorForCalendar.java
----------------------------------------------------------------------
diff --git a/bval-jsr/src/main/java/org/apache/bval/constraints/FutureValidatorForCalendar.java b/bval-jsr/src/main/java/org/apache/bval/constraints/FutureValidatorForCalendar.java
deleted file mode 100644
index ecc50bb..0000000
--- a/bval-jsr/src/main/java/org/apache/bval/constraints/FutureValidatorForCalendar.java
+++ /dev/null
@@ -1,48 +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;
-import javax.validation.constraints.Future;
-import java.util.Calendar;
-
-/**
- * Description: validate a date or calendar representing a date in the future <br/>
- */
-public class FutureValidatorForCalendar implements ConstraintValidator<Future, Calendar> {
-
- @Override
- public void initialize(Future annotation) {
- }
-
- @Override
- public boolean isValid(Calendar cal, ConstraintValidatorContext context) {
- return cal == null || cal.after(now());
- }
-
- /**
- * overwrite when you need a different algorithm for 'now'.
- *
- * @return current date/time
- */
- protected Calendar now() {
- return Calendar.getInstance();
- }
-}
http://git-wip-us.apache.org/repos/asf/bval/blob/0247c236/bval-jsr/src/main/java/org/apache/bval/constraints/FutureValidatorForDate.java
----------------------------------------------------------------------
diff --git a/bval-jsr/src/main/java/org/apache/bval/constraints/FutureValidatorForDate.java b/bval-jsr/src/main/java/org/apache/bval/constraints/FutureValidatorForDate.java
deleted file mode 100644
index a962f64..0000000
--- a/bval-jsr/src/main/java/org/apache/bval/constraints/FutureValidatorForDate.java
+++ /dev/null
@@ -1,48 +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;
-import javax.validation.constraints.Future;
-import java.util.Date;
-
-/**
- * Description: validate a date or calendar representing a date in the future <br/>
- */
-public class FutureValidatorForDate implements ConstraintValidator<Future, Date> {
-
- @Override
- public void initialize(Future annotation) {
- }
-
- @Override
- public boolean isValid(Date date, ConstraintValidatorContext context) {
- return date == null || date.after(now());
- }
-
- /**
- * overwrite when you need a different algorithm for 'now'.
- *
- * @return current date/time
- */
- protected Date now() {
- return new Date();
- }
-}
http://git-wip-us.apache.org/repos/asf/bval/blob/0247c236/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
index d1e3e19..c678827 100644
--- a/bval-jsr/src/main/java/org/apache/bval/constraints/PastOrPresentValidator.java
+++ b/bval-jsr/src/main/java/org/apache/bval/constraints/PastOrPresentValidator.java
@@ -33,9 +33,11 @@ import java.time.chrono.ChronoLocalDate;
import java.time.chrono.ChronoLocalDateTime;
import java.time.chrono.ChronoZonedDateTime;
import java.util.Calendar;
+import java.util.Comparator;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.function.Function;
+import java.util.function.IntPredicate;
import javax.validation.ConstraintValidator;
import javax.validation.constraints.PastOrPresent;
@@ -72,14 +74,14 @@ public abstract class PastOrPresentValidator<T extends Comparable<T>> extends Ti
public static class ForChronoLocalDate extends PastOrPresentValidator<ChronoLocalDate> {
public ForChronoLocalDate() {
- super(LocalDate::now);
+ super(LocalDate::now, CHRONO_LOCAL_DATE_COMPARATOR);
}
}
public static class ForChronoLocalDateTime extends PastOrPresentValidator<ChronoLocalDateTime<?>> {
public ForChronoLocalDateTime() {
- super(LocalDateTime::now);
+ super(LocalDateTime::now, CHRONO_LOCAL_DATE_TIME_COMPARATOR);
}
}
@@ -107,7 +109,7 @@ public abstract class PastOrPresentValidator<T extends Comparable<T>> extends Ti
public static class ForChronoZonedDateTime extends PastOrPresentValidator<ChronoZonedDateTime<?>> {
public ForChronoZonedDateTime() {
- super(ZonedDateTime::now);
+ super(ZonedDateTime::now, CHRONO_ZONED_DATE_TIME_COMPARATOR);
}
}
@@ -132,7 +134,13 @@ public abstract class PastOrPresentValidator<T extends Comparable<T>> extends Ti
}
}
+ private static final IntPredicate TEST = n -> n <= 0;
+
protected PastOrPresentValidator(Function<Clock, T> now) {
- super(now, n -> n <= 0);
+ super(now, TEST);
+ }
+
+ protected PastOrPresentValidator(Function<Clock, T> now, Comparator<? super T> cmp) {
+ super(now, cmp, TEST);
}
}
http://git-wip-us.apache.org/repos/asf/bval/blob/0247c236/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
index 0136d83..ae61fcc 100644
--- a/bval-jsr/src/main/java/org/apache/bval/constraints/PastValidator.java
+++ b/bval-jsr/src/main/java/org/apache/bval/constraints/PastValidator.java
@@ -33,9 +33,11 @@ import java.time.chrono.ChronoLocalDate;
import java.time.chrono.ChronoLocalDateTime;
import java.time.chrono.ChronoZonedDateTime;
import java.util.Calendar;
+import java.util.Comparator;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.function.Function;
+import java.util.function.IntPredicate;
import javax.validation.ConstraintValidator;
import javax.validation.constraints.Past;
@@ -72,14 +74,14 @@ public abstract class PastValidator<T extends Comparable<T>> extends TimeValidat
public static class ForChronoLocalDate extends PastValidator<ChronoLocalDate> {
public ForChronoLocalDate() {
- super(LocalDate::now);
+ super(LocalDate::now, CHRONO_LOCAL_DATE_COMPARATOR);
}
}
public static class ForChronoLocalDateTime extends PastValidator<ChronoLocalDateTime<?>> {
public ForChronoLocalDateTime() {
- super(LocalDateTime::now);
+ super(LocalDateTime::now, CHRONO_LOCAL_DATE_TIME_COMPARATOR);
}
}
@@ -107,7 +109,7 @@ public abstract class PastValidator<T extends Comparable<T>> extends TimeValidat
public static class ForChronoZonedDateTime extends PastValidator<ChronoZonedDateTime<?>> {
public ForChronoZonedDateTime() {
- super(ZonedDateTime::now);
+ super(ZonedDateTime::now, PastValidator.CHRONO_ZONED_DATE_TIME_COMPARATOR);
}
}
@@ -132,7 +134,13 @@ public abstract class PastValidator<T extends Comparable<T>> extends TimeValidat
}
}
+ private static final IntPredicate TEST = n -> n < 0;
+
protected PastValidator(Function<Clock, T> now) {
- super(now, n -> n < 0);
+ super(now, TEST);
+ }
+
+ protected PastValidator(Function<Clock, T> now, Comparator<? super T> cmp) {
+ super(now, cmp, TEST);
}
}
http://git-wip-us.apache.org/repos/asf/bval/blob/0247c236/bval-jsr/src/main/java/org/apache/bval/constraints/PastValidatorForCalendar.java
----------------------------------------------------------------------
diff --git a/bval-jsr/src/main/java/org/apache/bval/constraints/PastValidatorForCalendar.java b/bval-jsr/src/main/java/org/apache/bval/constraints/PastValidatorForCalendar.java
deleted file mode 100644
index bcd87df..0000000
--- a/bval-jsr/src/main/java/org/apache/bval/constraints/PastValidatorForCalendar.java
+++ /dev/null
@@ -1,48 +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;
-import javax.validation.constraints.Past;
-import java.util.Calendar;
-
-/**
- * Description: validate a date or calendar representing a date in the past<br/>
- */
-public class PastValidatorForCalendar implements ConstraintValidator<Past, Calendar> {
-
- @Override
- public void initialize(Past annotation) {
- }
-
- @Override
- public boolean isValid(Calendar cal, ConstraintValidatorContext context) {
- return cal == null || cal.before(now());
- }
-
- /**
- * overwrite when you need a different algorithm for 'now'.
- *
- * @return current date/time
- */
- protected Calendar now() {
- return Calendar.getInstance();
- }
-}
http://git-wip-us.apache.org/repos/asf/bval/blob/0247c236/bval-jsr/src/main/java/org/apache/bval/constraints/PastValidatorForDate.java
----------------------------------------------------------------------
diff --git a/bval-jsr/src/main/java/org/apache/bval/constraints/PastValidatorForDate.java b/bval-jsr/src/main/java/org/apache/bval/constraints/PastValidatorForDate.java
deleted file mode 100644
index 565cca2..0000000
--- a/bval-jsr/src/main/java/org/apache/bval/constraints/PastValidatorForDate.java
+++ /dev/null
@@ -1,48 +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;
-import javax.validation.constraints.Past;
-import java.util.Date;
-
-/**
- * Description: validate a date or calendar representing a date in the past<br/>
- */
-public class PastValidatorForDate implements ConstraintValidator<Past, Date> {
-
- @Override
- public void initialize(Past annotation) {
- }
-
- @Override
- public boolean isValid(Date date, ConstraintValidatorContext context) {
- return date == null || date.before(now());
- }
-
- /**
- * overwrite when you need a different algorithm for 'now'.
- *
- * @return current date/time
- */
- protected Date now() {
- return new Date();
- }
-}
http://git-wip-us.apache.org/repos/asf/bval/blob/0247c236/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
index 02e3836..034e9d1 100644
--- a/bval-jsr/src/main/java/org/apache/bval/constraints/TimeValidator.java
+++ b/bval-jsr/src/main/java/org/apache/bval/constraints/TimeValidator.java
@@ -20,25 +20,44 @@ package org.apache.bval.constraints;
import java.lang.annotation.Annotation;
import java.time.Clock;
+import java.time.chrono.ChronoLocalDate;
+import java.time.chrono.ChronoLocalDateTime;
+import java.time.chrono.ChronoZonedDateTime;
+import java.util.Comparator;
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> {
+public abstract class TimeValidator<A extends Annotation, T> implements ConstraintValidator<A, T> {
+ protected static final Comparator<ChronoLocalDate> CHRONO_LOCAL_DATE_COMPARATOR =
+ Comparator.nullsFirst((quid, quo) -> quid.isBefore(quo) ? -1 : quid.isAfter(quo) ? 1 : 0);
+
+ protected static final Comparator<ChronoLocalDateTime<?>> CHRONO_LOCAL_DATE_TIME_COMPARATOR =
+ Comparator.nullsFirst((quid, quo) -> quid.isBefore(quo) ? -1 : quid.isAfter(quo) ? 1 : 0);
+
+ protected static final Comparator<ChronoZonedDateTime<?>> CHRONO_ZONED_DATE_TIME_COMPARATOR =
+ Comparator.nullsFirst((quid, quo) -> quid.isBefore(quo) ? -1 : quid.isAfter(quo) ? 1 : 0);
private final Function<Clock, T> now;
+ private final Comparator<? super T> cmp;
private final IntPredicate test;
-
+
+ @SuppressWarnings("unchecked")
protected TimeValidator(Function<Clock, T> now, IntPredicate test) {
+ this(now, (Comparator<T>) Comparator.naturalOrder(), test);
+ }
+
+ protected TimeValidator(Function<Clock, T> now, Comparator<? super T> cmp,IntPredicate test) {
super();
this.now = now;
+ this.cmp = cmp;
this.test = test;
}
@Override
public final boolean isValid(T value, ConstraintValidatorContext context) {
- return value == null || test.test(value.compareTo(now.apply(context.getClockProvider().getClock())));
+ return value == null || test.test(cmp.compare(value, now.apply(context.getClockProvider().getClock())));
}
}