diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/AbstractBoundary.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/AbstractBoundary.java index 868e621d9e0b06db428e56fd57f59c1fe42d9759..406a6a3736c010cb3589818f2868a0a3432d22e0 100644 --- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/AbstractBoundary.java +++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/AbstractBoundary.java @@ -18,7 +18,7 @@ public abstract class AbstractBoundary<T extends Comparable<? super T>> implemen private HashMap<BoundaryBiCreaterType, BoundaryBiCreater> biCreaterFunctions; private HashMap<BoundaryCreaterType, BoundaryCreater> createrFunctions; private Class<T> type; - private String text; + protected String text; protected AbstractBoundary(String text, Class<T> type) { this.text = text; diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/impl/StringBoundary.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/impl/StringBoundary.java index ab43e382788a832eb091dca27cb359bdff9f2f73..6394aa81939ba8309432c67752da113cc4341d8d 100644 --- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/impl/StringBoundary.java +++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/impl/StringBoundary.java @@ -15,6 +15,7 @@ import static de.unikoblenz.fgbks.base.utils.boundary.checker.BoundaryCheckType. import static de.unikoblenz.fgbks.base.utils.boundary.creater.BoundaryCreaterType.LOWER; import static de.unikoblenz.fgbks.base.utils.boundary.creater.BoundaryCreaterType.UPPER; +import de.unikoblenz.fgbks.base.builder.DefaultBuilder; import de.unikoblenz.fgbks.base.utils.boundary.AbstractBoundary; import de.unikoblenz.fgbks.base.utils.boundary.Boundary; import de.unikoblenz.fgbks.base.utils.boundary.BoundaryParseException; @@ -37,8 +38,11 @@ import de.unikoblenz.fgbks.base.utils.boundary.creater.BoundaryCreater; import de.unikoblenz.fgbks.base.utils.boundary.creater.BoundaryCreaterType; import de.unikoblenz.fgbks.base.utils.boundary.creater.CreaterStringLower; import de.unikoblenz.fgbks.base.utils.boundary.creater.CreaterStringUpper; +import java.util.ArrayList; import java.util.Arrays; +import java.util.Collection; import java.util.HashMap; +import java.util.List; import java.util.Objects; import java.util.stream.Collectors; import org.apache.commons.lang3.Validate; @@ -76,6 +80,10 @@ public class StringBoundary extends AbstractBoundary<String> { super(text, String.class); } + private StringBoundary() { + super(String.class); + } + @Override public int compareTo(Boundary o) { return o.getText().compareTo(o.getText()); @@ -156,4 +164,56 @@ public class StringBoundary extends AbstractBoundary<String> { + Arrays.stream(values).map(v -> '"' + v + '"').collect(Collectors.joining(",")) + (matchNoneOfValues ? ")" : ""); } + + public static Builder getBuilder() { + return new StringBoundary().new Builder(); + } + + public class Builder extends DefaultBuilder<StringBoundary> { + + private List<String> buildingValues; + + private Builder() { + buildingValues = new ArrayList<>(); + value.matchAny = false; + value.matchNoneOfValues = false; + } + + public Builder isMatchNoneOfValues(boolean matchNoneOfValues) { + value.matchNoneOfValues = matchNoneOfValues; + return this; + } + + public Builder isMatchAny(boolean matchAny) { + value.matchAny = matchAny; + value.matchNoneOfValues = false; + value.values = new String[0]; + return this; + } + + public Builder addValue(String value) { + buildingValues.add(Validate.notNull(value)); + return this; + } + + public Builder addValues(Collection<String> values) { + buildingValues.addAll(Validate.noNullElements(values)); + return this; + } + + @Override + protected void validate() { + super.validate(); + if (matchAny) { + // TODO exception + } + } + + @Override + public StringBoundary build() { + value.values = buildingValues.toArray(new String[buildingValues.size()]); + value.text = value.getParsedText(); + return super.build(); + } + } } diff --git a/dmnverifierapi/src/test/java/de/unikoblenz/fgbks/base/utils/boundary/impl/StringBoundaryTest.java b/dmnverifierapi/src/test/java/de/unikoblenz/fgbks/base/utils/boundary/impl/StringBoundaryTest.java new file mode 100644 index 0000000000000000000000000000000000000000..5db876c0405b02304da009f8a6ec6510a95febbf --- /dev/null +++ b/dmnverifierapi/src/test/java/de/unikoblenz/fgbks/base/utils/boundary/impl/StringBoundaryTest.java @@ -0,0 +1,24 @@ +package de.unikoblenz.fgbks.base.utils.boundary.impl; + +import io.quarkus.test.junit.QuarkusTest; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +@QuarkusTest +class StringBoundaryTest { + + @Test + public void testBuilder() { + StringBoundary sb = StringBoundary.getBuilder().addValue("a").build(); + Assertions.assertEquals("a", sb.getValues()[0]); + Assertions.assertFalse(sb.isMatchAny()); + Assertions.assertFalse(sb.matchesNoneOfValues()); + Assertions.assertEquals("\"a\"", sb.getText()); + + sb = StringBoundary.getBuilder().addValue("a").addValue("b").isMatchNoneOfValues(true).build(); + Assertions.assertEquals("a", sb.getValues()[0]); + Assertions.assertFalse(sb.isMatchAny()); + Assertions.assertTrue(sb.matchesNoneOfValues()); + Assertions.assertEquals("not(\"a\",\"b\")", sb.getText()); + } +}