From f2daad5dafe10740e23826abb450e3dc53d76b93 Mon Sep 17 00:00:00 2001
From: pacien
Date: Fri, 29 Mar 2019 16:29:07 +0100
Subject: shorten name
---
.../org/pacien/lemonad/validation/Validation.java | 129 +++++++++++++++++++++
.../lemonad/validation/ValidationContainer.java | 40 +++++++
.../lemonad/validation/ValidationResult.java | 129 ---------------------
.../validation/ValidationResultContainer.java | 40 -------
.../org/pacien/lemonad/validation/Validator.java | 10 +-
.../lemonad/validation/ValidationResultTest.java | 75 ------------
.../pacien/lemonad/validation/ValidationTest.java | 75 ++++++++++++
7 files changed, 249 insertions(+), 249 deletions(-)
create mode 100644 src/main/java/org/pacien/lemonad/validation/Validation.java
create mode 100644 src/main/java/org/pacien/lemonad/validation/ValidationContainer.java
delete mode 100644 src/main/java/org/pacien/lemonad/validation/ValidationResult.java
delete mode 100644 src/main/java/org/pacien/lemonad/validation/ValidationResultContainer.java
delete mode 100644 src/test/java/org/pacien/lemonad/validation/ValidationResultTest.java
create mode 100644 src/test/java/org/pacien/lemonad/validation/ValidationTest.java
diff --git a/src/main/java/org/pacien/lemonad/validation/Validation.java b/src/main/java/org/pacien/lemonad/validation/Validation.java
new file mode 100644
index 0000000..04c1ed0
--- /dev/null
+++ b/src/main/java/org/pacien/lemonad/validation/Validation.java
@@ -0,0 +1,129 @@
+/*
+ * lemonad - Some functional sweetness for Java
+ * Copyright (C) 2019 Pacien TRAN-GIRARD
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+
+package org.pacien.lemonad.validation;
+
+import org.pacien.lemonad.attempt.Attempt;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Objects;
+import java.util.function.BiConsumer;
+import java.util.function.Consumer;
+import java.util.function.Function;
+import java.util.stream.Stream;
+
+import lombok.NonNull;
+
+import static java.util.stream.Collectors.toUnmodifiableList;
+import static org.pacien.lemonad.attempt.Attempt.failure;
+import static org.pacien.lemonad.attempt.Attempt.success;
+
+/**
+ * Wraps the result of the validation of a subject.
+ *
+ * @param the subject type,
+ * @param the error type.
+ * @author pacien
+ */
+public interface Validation {
+ /**
+ * @return whether no error have been reported during the validation.
+ */
+ boolean isValid();
+
+ /**
+ * @return whether some error have been reported during the validation.
+ */
+ boolean isInvalid();
+
+ /**
+ * @return the subject of the validation.
+ */
+ S getSubject();
+
+ /**
+ * @return the potentially empty list of reported validation errors.
+ */
+ List getErrors();
+
+ /**
+ * @param consumer a subject consumer called if the validation is successful.
+ * @return the current object.
+ */
+ default Validation ifValid(@NonNull Consumer super S> consumer) {
+ if (isValid()) consumer.accept(getSubject());
+ return this;
+ }
+
+ /**
+ * @param consumer the consumer called with the validation subject and reported errors if the validation is failed.
+ * @return the current object.
+ */
+ default Validation ifInvalid(@NonNull BiConsumer super S, ? super List super E>> consumer) {
+ if (!isValid()) consumer.accept(getSubject(), getErrors());
+ return this;
+ }
+
+ /**
+ * @return an {@link Attempt} with a state corresponding to the one of the validation.
+ */
+ default Attempt> toAttempt() {
+ return isValid() ? success(getSubject()) : failure(getErrors());
+ }
+
+ /**
+ * @param mapper a function transforming a {@link Validation}.
+ * @return the transformed {@link Validation}.
+ */
+ default Validation flatMap(@NonNull Function super Validation super S, ? super E>, ? extends Validation extends SS, ? extends EE>> mapper) {
+ //noinspection unchecked
+ return (Validation) mapper.apply(this);
+ }
+
+ /**
+ * @param subject an overriding subject.
+ * @param validationResults a {@link Stream} of {@link Validation}s to merge.
+ * @return the merged {@link Validation} containing all errors from the supplied ones.
+ */
+ static Validation merge(S subject, @NonNull Stream extends Validation, ? extends E>> validationResults) {
+ return new ValidationContainer<>(
+ subject,
+ validationResults.flatMap(res -> res.getErrors().stream()).collect(toUnmodifiableList()));
+ }
+
+ /**
+ * @param subject the suject of the validation.
+ * @return a successful {@link Validation}.
+ */
+ static Validation valid(S subject) {
+ return new ValidationContainer<>(subject, List.of());
+ }
+
+ /**
+ * @param subject the suject of the validation.
+ * @param error a validation error.
+ * @param errors additional validation errors.
+ * @return a failed {@link Validation} for the supplied subject.
+ */
+ @SafeVarargs static Validation invalid(S subject, E error, E... errors) {
+ return new ValidationContainer<>(
+ subject,
+ Stream.concat(Stream.of(error), Arrays.stream(errors)).map(Objects::requireNonNull).collect(toUnmodifiableList()));
+ }
+}
diff --git a/src/main/java/org/pacien/lemonad/validation/ValidationContainer.java b/src/main/java/org/pacien/lemonad/validation/ValidationContainer.java
new file mode 100644
index 0000000..03f77be
--- /dev/null
+++ b/src/main/java/org/pacien/lemonad/validation/ValidationContainer.java
@@ -0,0 +1,40 @@
+/*
+ * lemonad - Some functional sweetness for Java
+ * Copyright (C) 2019 Pacien TRAN-GIRARD
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+
+package org.pacien.lemonad.validation;
+
+import java.util.List;
+
+import lombok.NonNull;
+import lombok.Value;
+
+/**
+ * @author pacien
+ */
+@Value class ValidationContainer implements Validation {
+ S subject;
+ @NonNull List errors;
+
+ @Override public boolean isValid() {
+ return errors.isEmpty();
+ }
+
+ @Override public boolean isInvalid() {
+ return !isValid();
+ }
+}
diff --git a/src/main/java/org/pacien/lemonad/validation/ValidationResult.java b/src/main/java/org/pacien/lemonad/validation/ValidationResult.java
deleted file mode 100644
index 65bb389..0000000
--- a/src/main/java/org/pacien/lemonad/validation/ValidationResult.java
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- * lemonad - Some functional sweetness for Java
- * Copyright (C) 2019 Pacien TRAN-GIRARD
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see .
- */
-
-package org.pacien.lemonad.validation;
-
-import org.pacien.lemonad.attempt.Attempt;
-
-import java.util.Arrays;
-import java.util.List;
-import java.util.Objects;
-import java.util.function.BiConsumer;
-import java.util.function.Consumer;
-import java.util.function.Function;
-import java.util.stream.Stream;
-
-import lombok.NonNull;
-
-import static java.util.stream.Collectors.toUnmodifiableList;
-import static org.pacien.lemonad.attempt.Attempt.failure;
-import static org.pacien.lemonad.attempt.Attempt.success;
-
-/**
- * Wraps the result of the validation of a subject.
- *
- * @param the subject type,
- * @param the error type.
- * @author pacien
- */
-public interface ValidationResult {
- /**
- * @return whether no error have been reported during the validation.
- */
- boolean isValid();
-
- /**
- * @return whether some error have been reported during the validation.
- */
- boolean isInvalid();
-
- /**
- * @return the subject of the validation.
- */
- S getSubject();
-
- /**
- * @return the potentially empty list of reported validation errors.
- */
- List getErrors();
-
- /**
- * @param consumer a subject consumer called if the validation is successful.
- * @return the current object.
- */
- default ValidationResult ifValid(@NonNull Consumer super S> consumer) {
- if (isValid()) consumer.accept(getSubject());
- return this;
- }
-
- /**
- * @param consumer the consumer called with the validation subject and reported errors if the validation is failed.
- * @return the current object.
- */
- default ValidationResult ifInvalid(@NonNull BiConsumer super S, ? super List super E>> consumer) {
- if (!isValid()) consumer.accept(getSubject(), getErrors());
- return this;
- }
-
- /**
- * @return an {@link Attempt} with a state corresponding to the one of the validation.
- */
- default Attempt> toAttempt() {
- return isValid() ? success(getSubject()) : failure(getErrors());
- }
-
- /**
- * @param mapper a function transforming a {@link ValidationResult}.
- * @return the transformed {@link ValidationResult}.
- */
- default ValidationResult flatMap(@NonNull Function super ValidationResult super S, ? super E>, ? extends ValidationResult extends SS, ? extends EE>> mapper) {
- //noinspection unchecked
- return (ValidationResult) mapper.apply(this);
- }
-
- /**
- * @param subject an overriding subject.
- * @param validationResults a {@link Stream} of {@link ValidationResult}s to merge.
- * @return the merged {@link ValidationResult} containing all errors from the supplied ones.
- */
- static ValidationResult merge(S subject, @NonNull Stream extends ValidationResult, ? extends E>> validationResults) {
- return new ValidationResultContainer<>(
- subject,
- validationResults.flatMap(res -> res.getErrors().stream()).collect(toUnmodifiableList()));
- }
-
- /**
- * @param subject the suject of the validation.
- * @return a successful {@link ValidationResult}.
- */
- static ValidationResult valid(S subject) {
- return new ValidationResultContainer<>(subject, List.of());
- }
-
- /**
- * @param subject the suject of the validation.
- * @param error a validation error.
- * @param errors additional validation errors.
- * @return a failed {@link ValidationResult} for the supplied subject.
- */
- @SafeVarargs static ValidationResult invalid(S subject, E error, E... errors) {
- return new ValidationResultContainer<>(
- subject,
- Stream.concat(Stream.of(error), Arrays.stream(errors)).map(Objects::requireNonNull).collect(toUnmodifiableList()));
- }
-}
diff --git a/src/main/java/org/pacien/lemonad/validation/ValidationResultContainer.java b/src/main/java/org/pacien/lemonad/validation/ValidationResultContainer.java
deleted file mode 100644
index 2c752f6..0000000
--- a/src/main/java/org/pacien/lemonad/validation/ValidationResultContainer.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * lemonad - Some functional sweetness for Java
- * Copyright (C) 2019 Pacien TRAN-GIRARD
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see .
- */
-
-package org.pacien.lemonad.validation;
-
-import java.util.List;
-
-import lombok.NonNull;
-import lombok.Value;
-
-/**
- * @author pacien
- */
-@Value class ValidationResultContainer implements ValidationResult {
- S subject;
- @NonNull List errors;
-
- @Override public boolean isValid() {
- return errors.isEmpty();
- }
-
- @Override public boolean isInvalid() {
- return !isValid();
- }
-}
diff --git a/src/main/java/org/pacien/lemonad/validation/Validator.java b/src/main/java/org/pacien/lemonad/validation/Validator.java
index a8a9e3f..e04cde8 100644
--- a/src/main/java/org/pacien/lemonad/validation/Validator.java
+++ b/src/main/java/org/pacien/lemonad/validation/Validator.java
@@ -28,8 +28,8 @@ import lombok.NonNull;
import lombok.val;
import static java.util.stream.Collectors.toUnmodifiableList;
-import static org.pacien.lemonad.validation.ValidationResult.invalid;
-import static org.pacien.lemonad.validation.ValidationResult.valid;
+import static org.pacien.lemonad.validation.Validation.invalid;
+import static org.pacien.lemonad.validation.Validation.valid;
/**
* A function which applies validation rules on a subject and reports possible errors.
@@ -43,7 +43,7 @@ import static org.pacien.lemonad.validation.ValidationResult.valid;
* @param subject the subject to validate, which can potentially be null.
* @return the non-null result of the validation of the supplied subject.
*/
- ValidationResult validate(S subject);
+ Validation validate(S subject);
/**
* @param predicate the validation predicate testing the validity of a subject.
@@ -60,7 +60,7 @@ import static org.pacien.lemonad.validation.ValidationResult.valid;
*/
@SafeVarargs static Validator validatingAll(@NonNull Validator super S, ? extends E>... validators) {
val validatorList = Arrays.stream(validators).map(Objects::requireNonNull).collect(toUnmodifiableList());
- return subject -> new ValidationResultContainer<>(
+ return subject -> new ValidationContainer<>(
subject,
validatorList.stream()
.flatMap(validator -> validator.validate(subject).getErrors().stream())
@@ -75,6 +75,6 @@ import static org.pacien.lemonad.validation.ValidationResult.valid;
static Validator validatingField(@NonNull Function super S, ? extends F> getter,
@NonNull Validator super F, ? extends E> validator) {
//noinspection unchecked
- return subject -> new ValidationResultContainer<>(subject, (List) validator.validate(getter.apply(subject)).getErrors());
+ return subject -> new ValidationContainer<>(subject, (List) validator.validate(getter.apply(subject)).getErrors());
}
}
diff --git a/src/test/java/org/pacien/lemonad/validation/ValidationResultTest.java b/src/test/java/org/pacien/lemonad/validation/ValidationResultTest.java
deleted file mode 100644
index 65b2cb3..0000000
--- a/src/test/java/org/pacien/lemonad/validation/ValidationResultTest.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * lemonad - Some functional sweetness for Java
- * Copyright (C) 2019 Pacien TRAN-GIRARD
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see .
- */
-
-package org.pacien.lemonad.validation;
-
-import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.Test;
-
-import java.util.List;
-import java.util.stream.Stream;
-
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertFalse;
-import static org.junit.jupiter.api.Assertions.assertTrue;
-import static org.junit.jupiter.api.Assertions.fail;
-
-/**
- * @author pacien
- */
-class ValidationResultTest {
- @Test void testValidResult() {
- var subject = "subject";
- var validationResult = ValidationResult.valid(subject);
- assertTrue(validationResult.getErrors().isEmpty());
- assertTrue(validationResult.isValid());
- assertFalse(validationResult.isInvalid());
- validationResult.ifValid(innerSubject -> assertEquals(subject, innerSubject));
- validationResult.ifInvalid((__, ___) -> fail());
- }
-
- @Test void testInvalidResult() {
- var subject = "subject";
- var errors = List.of(0, 1);
- var validationResult = ValidationResult.invalid(subject, 0, 1);
- assertEquals(errors, validationResult.getErrors());
- assertFalse(validationResult.isValid());
- assertTrue(validationResult.isInvalid());
- validationResult.ifValid(Assertions::fail);
- validationResult.ifInvalid((innerSubject, innerErrors) -> {
- assertEquals(subject, innerSubject);
- assertEquals(errors, innerErrors);
- });
- }
-
- @Test void testFlatMap() {
- ValidationResult.valid("subject")
- .ifInvalid((__, ___) -> fail())
- .flatMap(res -> ValidationResult.invalid(res.getSubject(), 0))
- .ifValid(innerSubject -> fail());
- }
-
- @Test void testMerge() {
- var subject = "subject";
- assertEquals(List.of(0, 1, 2, 3), ValidationResult.merge(subject, Stream.of(
- ValidationResult.valid(subject),
- ValidationResult.invalid(subject, 0, 1),
- ValidationResult.invalid(subject, 2, 3))
- ).getErrors());
- }
-}
diff --git a/src/test/java/org/pacien/lemonad/validation/ValidationTest.java b/src/test/java/org/pacien/lemonad/validation/ValidationTest.java
new file mode 100644
index 0000000..665f501
--- /dev/null
+++ b/src/test/java/org/pacien/lemonad/validation/ValidationTest.java
@@ -0,0 +1,75 @@
+/*
+ * lemonad - Some functional sweetness for Java
+ * Copyright (C) 2019 Pacien TRAN-GIRARD
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+
+package org.pacien.lemonad.validation;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+import java.util.List;
+import java.util.stream.Stream;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
+
+/**
+ * @author pacien
+ */
+class ValidationTest {
+ @Test void testValidResult() {
+ var subject = "subject";
+ var validation = Validation.valid(subject);
+ assertTrue(validation.getErrors().isEmpty());
+ assertTrue(validation.isValid());
+ assertFalse(validation.isInvalid());
+ validation.ifValid(innerSubject -> assertEquals(subject, innerSubject));
+ validation.ifInvalid((__, ___) -> fail());
+ }
+
+ @Test void testInvalidResult() {
+ var subject = "subject";
+ var errors = List.of(0, 1);
+ var validation = Validation.invalid(subject, 0, 1);
+ assertEquals(errors, validation.getErrors());
+ assertFalse(validation.isValid());
+ assertTrue(validation.isInvalid());
+ validation.ifValid(Assertions::fail);
+ validation.ifInvalid((innerSubject, innerErrors) -> {
+ assertEquals(subject, innerSubject);
+ assertEquals(errors, innerErrors);
+ });
+ }
+
+ @Test void testFlatMap() {
+ Validation.valid("subject")
+ .ifInvalid((__, ___) -> fail())
+ .flatMap(res -> Validation.invalid(res.getSubject(), 0))
+ .ifValid(innerSubject -> fail());
+ }
+
+ @Test void testMerge() {
+ var subject = "subject";
+ assertEquals(List.of(0, 1, 2, 3), Validation.merge(subject, Stream.of(
+ Validation.valid(subject),
+ Validation.invalid(subject, 0, 1),
+ Validation.invalid(subject, 2, 3))
+ ).getErrors());
+ }
+}
--
cgit v1.2.3