You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@fineract.apache.org by my...@apache.org on 2018/01/22 15:01:27 UTC
[fineract-cn-lang] 32/49: Created an annotation for ensuring the
validity of LocalDateTime iso strings.
This is an automated email from the ASF dual-hosted git repository.
myrle pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/fineract-cn-lang.git
commit 8e3bff8f0b761bb2dfcc0f19505d2df27aec79ec
Author: Myrle Krantz <my...@apache.org>
AuthorDate: Tue Jul 4 11:53:07 2017 +0200
Created an annotation for ensuring the validity of LocalDateTime iso strings.
---
.../lang/validation/CheckLocalDateTimeString.java | 44 ++++++++++++
.../constraints/ValidLocalDateTimeString.java | 46 ++++++++++++
.../validation/ValidLocalDateTimeStringTest.java | 82 ++++++++++++++++++++++
3 files changed, 172 insertions(+)
diff --git a/src/main/java/io/mifos/core/lang/validation/CheckLocalDateTimeString.java b/src/main/java/io/mifos/core/lang/validation/CheckLocalDateTimeString.java
new file mode 100644
index 0000000..9be3cbb
--- /dev/null
+++ b/src/main/java/io/mifos/core/lang/validation/CheckLocalDateTimeString.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright 2017 The Mifos Initiative
+ *
+ * Licensed 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 io.mifos.core.lang.validation;
+
+import io.mifos.core.lang.DateConverter;
+import io.mifos.core.lang.validation.constraints.ValidLocalDateTimeString;
+
+import javax.validation.ConstraintValidator;
+import javax.validation.ConstraintValidatorContext;
+import java.time.DateTimeException;
+import java.time.format.DateTimeParseException;
+
+/**
+ * @author Myrle Krantz
+ */
+public class CheckLocalDateTimeString implements ConstraintValidator<ValidLocalDateTimeString, String> {
+ public void initialize(ValidLocalDateTimeString constraint) {
+ }
+
+ public boolean isValid(final String obj, ConstraintValidatorContext context) {
+ if (obj == null)
+ return true;
+ try {
+ DateConverter.fromIsoString(obj);
+ return true;
+ }
+ catch (final DateTimeException e) {
+ return false;
+ }
+ }
+}
diff --git a/src/main/java/io/mifos/core/lang/validation/constraints/ValidLocalDateTimeString.java b/src/main/java/io/mifos/core/lang/validation/constraints/ValidLocalDateTimeString.java
new file mode 100644
index 0000000..3e42d9e
--- /dev/null
+++ b/src/main/java/io/mifos/core/lang/validation/constraints/ValidLocalDateTimeString.java
@@ -0,0 +1,46 @@
+/*
+ * Copyright 2017 The Mifos Initiative
+ *
+ * Licensed 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 io.mifos.core.lang.validation.constraints;
+
+import io.mifos.core.lang.validation.CheckLocalDateTimeString;
+
+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.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+/**
+ * The annotated string must either null or must contain a time which can be
+ * read by DateConverter.fromIsoString()
+ *
+ * @author Myrle Krantz
+ */
+@SuppressWarnings("unused")
+@Target({ FIELD, METHOD, PARAMETER})
+@Retention(RUNTIME)
+@Documented
+@Constraint(validatedBy = CheckLocalDateTimeString.class)
+public @interface ValidLocalDateTimeString {
+ String message() default "Invalid local date time string.";
+ Class<?>[] groups() default { };
+ Class<? extends Payload>[] payload() default { };
+}
diff --git a/src/test/java/io/mifos/core/lang/validation/ValidLocalDateTimeStringTest.java b/src/test/java/io/mifos/core/lang/validation/ValidLocalDateTimeStringTest.java
new file mode 100644
index 0000000..5a46383
--- /dev/null
+++ b/src/test/java/io/mifos/core/lang/validation/ValidLocalDateTimeStringTest.java
@@ -0,0 +1,82 @@
+/*
+ * Copyright 2017 The Mifos Initiative
+ *
+ * Licensed 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 io.mifos.core.lang.validation;
+
+import io.mifos.core.lang.DateConverter;
+import io.mifos.core.lang.validation.constraints.ValidLocalDateTimeString;
+import org.junit.Assert;
+import org.junit.Test;
+
+import javax.annotation.Nullable;
+import javax.validation.constraints.NotNull;
+
+import java.time.LocalDateTime;
+
+import static io.mifos.core.lang.validation.TestHelper.isValid;
+
+/**
+ * @author Myrle Krantz
+ */
+public class ValidLocalDateTimeStringTest {
+
+ @Test
+ public void now()
+ {
+ final AnnotatedClassNullable annotatedInstance = new AnnotatedClassNullable(DateConverter.toIsoString(LocalDateTime.now()));
+ Assert.assertTrue(isValid(annotatedInstance));
+ }
+
+ @Test
+ public void invalidString()
+ {
+ final AnnotatedClassNullable annotatedInstance = new AnnotatedClassNullable("This is not a date time.");
+ Assert.assertFalse(isValid(annotatedInstance));
+ }
+
+ @Test
+ public void nullLocalDateTimeStringAllowed()
+ {
+ final AnnotatedClassNullable annotatedInstance = new AnnotatedClassNullable(null);
+ Assert.assertTrue(isValid(annotatedInstance));
+ }
+
+ @Test
+ public void nullLocalDateTimeStringNotAllowed()
+ {
+ final AnnotatedClassNotNull annotatedInstance = new AnnotatedClassNotNull(null);
+ Assert.assertFalse(isValid(annotatedInstance));
+ }
+
+ private static class AnnotatedClassNullable {
+ @Nullable
+ @ValidLocalDateTimeString()
+ String localDateTimeString;
+
+ AnnotatedClassNullable(final String localDateTimeString) {
+ this.localDateTimeString = localDateTimeString;
+ }
+ }
+
+ private static class AnnotatedClassNotNull {
+ @NotNull
+ @ValidLocalDateTimeString()
+ String localDateTimeString;
+
+ AnnotatedClassNotNull(final String localDateTimeString) {
+ this.localDateTimeString = localDateTimeString;
+ }
+ }
+}
--
To stop receiving notification emails like this one, please contact
myrle@apache.org.