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 406a6a3736c010cb3589818f2868a0a3432d22e0..7e95f7012406985fec9e440fd78420e1aef6709b 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 @@ -9,6 +9,7 @@ import de.unikoblenz.fgbks.base.utils.boundary.creater.BoundaryCreaterType; import de.unikoblenz.fgbks.base.utils.boundary.impl.InvalidBoundary; import de.unikoblenz.fgbks.core.dmn.domain.vdmn.VTypeRef; import java.util.HashMap; +import java.util.Map; import java.util.Optional; import org.apache.commons.lang3.Validate; @@ -113,11 +114,11 @@ public abstract class AbstractBoundary<T extends Comparable<? super T>> implemen protected abstract void validate(); - protected abstract HashMap<BoundaryCheckType, BoundaryCheck> getChecker(); + protected abstract Map<BoundaryCheckType, BoundaryCheck> getChecker(); - protected abstract HashMap<BoundaryBiCreaterType, BoundaryBiCreater> getBiCreater(); + protected abstract Map<BoundaryBiCreaterType, BoundaryBiCreater> getBiCreater(); - protected abstract HashMap<BoundaryCreaterType, BoundaryCreater> getCreater(); + protected abstract Map<BoundaryCreaterType, BoundaryCreater> getCreater(); @Override public String toString() { diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/AbstractGrowingBoundary.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/AbstractGrowingBoundary.java index 8298ef97d650f85672cc8ed11d23529534b40c51..1672df6b515e3a1ae3ec9d7f4c1d1520699ad4d4 100644 --- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/AbstractGrowingBoundary.java +++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/AbstractGrowingBoundary.java @@ -36,7 +36,9 @@ 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.CreaterLower; import de.unikoblenz.fgbks.base.utils.boundary.creater.CreaterUpper; +import java.util.Collections; import java.util.HashMap; +import java.util.Map; import java.util.Objects; import org.apache.commons.lang3.Validate; @@ -117,18 +119,18 @@ public abstract class AbstractGrowingBoundary<T extends Comparable<? super T>> } @Override - protected HashMap<BoundaryCheckType, BoundaryCheck> getChecker() { - return checkerMap; + protected Map<BoundaryCheckType, BoundaryCheck> getChecker() { + return Collections.unmodifiableMap(checkerMap); } @Override - protected HashMap<BoundaryBiCreaterType, BoundaryBiCreater> getBiCreater() { - return biCreaterMap; + protected Map<BoundaryBiCreaterType, BoundaryBiCreater> getBiCreater() { + return Collections.unmodifiableMap(biCreaterMap); } @Override - protected HashMap<BoundaryCreaterType, BoundaryCreater> getCreater() { - return createrMap; + protected Map<BoundaryCreaterType, BoundaryCreater> getCreater() { + return Collections.unmodifiableMap(createrMap); } @Override diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/creater/CreaterStringLower.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/creater/CreaterStringLower.java index 8371ff22484ee11fb30d602bd2d64218e6fd9318..0b24bd5aa9b5084d7d9b2a4286c2188a1f1f0349 100644 --- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/creater/CreaterStringLower.java +++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/creater/CreaterStringLower.java @@ -22,6 +22,10 @@ public class CreaterStringLower extends AbstractBoundaryCreater<StringBoundary> @Override public Optional<StringBoundary> create(StringBoundary b) { - return Optional.empty(); + return Optional.of(StringBoundary.getBuilder() + .addValues(b.getValues()) + .isMatchNoneOfValues(!b.matchesNoneOfValues()) + .isMatchAny(b.getAmountOfElements() == 0) + .build()); } } diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/creater/CreaterStringUpper.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/creater/CreaterStringUpper.java index 6167e61581f470c41dee78ceff937dac6d489634..00e08a004bc68dcb6183ffcedfb2f7749e4f90f7 100644 --- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/creater/CreaterStringUpper.java +++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/creater/CreaterStringUpper.java @@ -22,6 +22,8 @@ public class CreaterStringUpper extends AbstractBoundaryCreater<StringBoundary> @Override public Optional<StringBoundary> create(StringBoundary b) { + // is every time empty, because there is no "Upper", the result for "Upper" is + // inside the class CreaterStringLower return Optional.empty(); } } 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 6394aa81939ba8309432c67752da113cc4341d8d..436dbc0f6b99fddab31fb313f9fd7e22ead350e9 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 @@ -41,8 +41,10 @@ import de.unikoblenz.fgbks.base.utils.boundary.creater.CreaterStringUpper; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; +import java.util.Collections; import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.Objects; import java.util.stream.Collectors; import org.apache.commons.lang3.Validate; @@ -117,7 +119,6 @@ public class StringBoundary extends AbstractBoundary<String> { matchAny = Validate.notNull(text).isEmpty(); if (matchAny) { values = new String[0]; - valuesHashes = new int[0]; } else { matchNoneOfValues = text.toLowerCase().startsWith("not"); text = text.replace('(', '\0').replace(')', '\0').trim(); @@ -125,37 +126,41 @@ public class StringBoundary extends AbstractBoundary<String> { text = text.replaceFirst("not", "").trim(); } values = text.split(","); - valuesHashes = new int[values.length]; - for (int i = 0; i < values.length; i++) { - values[i] = values[i].replace('"', '\0').trim(); - valuesHashes[i] = Objects.hashCode(values[i]); - } } - // Sort hashes for later comparisons - Arrays.sort(valuesHashes); + calcHashes(); } catch (Exception e) { throw new BoundaryParseException("String value is not valid: " + this.getText()); } } + private void calcHashes() { + valuesHashes = new int[values.length]; + for (int i = 0; i < values.length; i++) { + values[i] = values[i].replace('"', '\0').trim(); + valuesHashes[i] = Objects.hashCode(values[i]); + } + // Sort hashes for later comparisons + Arrays.sort(valuesHashes); + } + @Override protected void validate() { Validate.noNullElements(values); } @Override - protected HashMap<BoundaryCheckType, BoundaryCheck> getChecker() { - return checkerMap; + protected Map<BoundaryCheckType, BoundaryCheck> getChecker() { + return Collections.unmodifiableMap(checkerMap); } @Override - protected HashMap<BoundaryBiCreaterType, BoundaryBiCreater> getBiCreater() { - return biCreaterMap; + protected Map<BoundaryBiCreaterType, BoundaryBiCreater> getBiCreater() { + return Collections.unmodifiableMap(biCreaterMap); } @Override - protected HashMap<BoundaryCreaterType, BoundaryCreater> getCreater() { - return createrMap; + protected Map<BoundaryCreaterType, BoundaryCreater> getCreater() { + return Collections.unmodifiableMap(createrMap); } @Override @@ -186,8 +191,10 @@ public class StringBoundary extends AbstractBoundary<String> { public Builder isMatchAny(boolean matchAny) { value.matchAny = matchAny; - value.matchNoneOfValues = false; - value.values = new String[0]; + if (matchAny) { + value.matchNoneOfValues = false; + value.values = new String[0]; + } return this; } @@ -201,6 +208,10 @@ public class StringBoundary extends AbstractBoundary<String> { return this; } + public Builder addValues(String[] values) { + return addValues(Validate.notNull(Arrays.asList(values))); + } + @Override protected void validate() { super.validate(); @@ -211,7 +222,8 @@ public class StringBoundary extends AbstractBoundary<String> { @Override public StringBoundary build() { - value.values = buildingValues.toArray(new String[buildingValues.size()]); + value.values = buildingValues.toArray(new String[0]); + value.calcHashes(); value.text = value.getParsedText(); return super.build(); } diff --git a/dmnverifierapi/src/test/java/de/unikoblenz/fgbks/base/utils/boundary/creater/CreaterStringLowerTest.java b/dmnverifierapi/src/test/java/de/unikoblenz/fgbks/base/utils/boundary/creater/CreaterStringLowerTest.java new file mode 100644 index 0000000000000000000000000000000000000000..9a6635e9ad375c654487a09f079387200cd5b84a --- /dev/null +++ b/dmnverifierapi/src/test/java/de/unikoblenz/fgbks/base/utils/boundary/creater/CreaterStringLowerTest.java @@ -0,0 +1,28 @@ +package de.unikoblenz.fgbks.base.utils.boundary.creater; + +import static org.junit.jupiter.api.Assertions.assertArrayEquals; +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 de.unikoblenz.fgbks.base.utils.boundary.impl.StringBoundary; +import io.quarkus.test.junit.QuarkusTest; +import org.junit.jupiter.api.Test; + +@QuarkusTest +class CreaterStringLowerTest { + + @Test + public void testStringLower() { + StringBoundary sb = StringBoundary.getBuilder().addValue("a").build(); + assertEquals("a", sb.getValues()[0]); + assertFalse(sb.isMatchAny()); + assertFalse(sb.matchesNoneOfValues()); + assertEquals("\"a\"", sb.getText()); + + StringBoundary sb2 = (StringBoundary) sb.create(BoundaryCreaterType.LOWER).get(); + assertArrayEquals(sb.getValues(), sb2.getValues()); + assertTrue(sb2.matchesNoneOfValues()); + assertFalse(sb.isMatchAny()); + } +}