From 97377ac4f3547f89cda59cdc0487afd787b4da91 Mon Sep 17 00:00:00 2001 From: Jonas Blatt <jonasblatt@uni-koblenz.de> Date: Sat, 19 Oct 2019 20:54:07 +0200 Subject: [PATCH] Fix Missing rule verifier for string values --- .../bicreater/BiCreaterStringLowerBounds.java | 45 ++++++++++++++++--- 1 file changed, 39 insertions(+), 6 deletions(-) diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/bicreater/BiCreaterStringLowerBounds.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/bicreater/BiCreaterStringLowerBounds.java index 3dd7e3a9..681c4a1b 100644 --- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/bicreater/BiCreaterStringLowerBounds.java +++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/bicreater/BiCreaterStringLowerBounds.java @@ -1,7 +1,7 @@ package de.unikoblenz.fgbks.base.utils.boundary.bicreater; import static de.unikoblenz.fgbks.base.utils.boundary.checker.BoundaryCheckType.IS_EQUAL; -import static de.unikoblenz.fgbks.base.utils.boundary.checker.BoundaryCheckType.IS_NOT_IN_CONTACT; +import static de.unikoblenz.fgbks.base.utils.boundary.checker.BoundaryCheckType.SUBSUMES; import de.unikoblenz.fgbks.base.utils.boundary.impl.StringBoundary; import java.util.Arrays; @@ -11,8 +11,11 @@ import java.util.Set; /** * The lower bound creator implementation of {@link BoundaryBiCreaterType#LOWER_BOUNDS} for {@link - * StringBoundary}. <br> The result is a new boundary with the lower bounds, or an empty optional, - * if the creation is not possible. <br> In: {@code b1: "a","b"; b2: "a"}<br> Out: {@code "b"} <br> + * StringBoundary}. <br> + * The result is a new boundary with the lower bounds, or an empty optional, if the creation is not + * possible. <br> + * In: {@code b1: "a"; b2: "a", "b"}<br> + * Out: {@code "b"} <br> */ public class BiCreaterStringLowerBounds extends AbstractBoundaryBiCreater<StringBoundary> { @@ -38,17 +41,47 @@ public class BiCreaterStringLowerBounds extends AbstractBoundaryBiCreater<String @Override public Optional<StringBoundary> create(StringBoundary b1, StringBoundary b2) { - if (b1.checkWith(IS_NOT_IN_CONTACT, b2) || b1.checkWith(IS_EQUAL, b2)) { + if (b2.matchesAny()) { return Optional.empty(); } - if (b1.matchesAny() || b1.matchesNoneOfValues()) { + if (b1.matchesAny()) { + return Optional.of( + StringBoundary.getBuilder() + .matchesNoneOfValues(!b2.matchesNoneOfValues()) + .addValues(b2.getValues()) + .build()); + } + + if (b2.checkWith(IS_EQUAL, b1) || b2.checkWith(SUBSUMES, b1)) { + return Optional.empty(); + } + + if (b1.matchesNoneOfValues()) { + if (b2.matchesNoneOfValues()) { + Set<String> values = new HashSet<>(Arrays.asList(b2.getValues())); + values.removeAll(Arrays.asList(b1.getValues())); + if (values.size() == 0) { + return Optional.empty(); + } + return Optional.of(StringBoundary.getBuilder().addValues(values).build()); + } else { + return Optional.of( + StringBoundary.getBuilder() + .matchesNoneOfValues(true) + .addValues(b1.getValues()) + .addValues(b2.getValues()) + .build()); + } + } + + if (b2.matchesNoneOfValues()) { return Optional.of( StringBoundary.getBuilder() .addValues(b1.getValues()) .addValues(b2.getValues()) - .matchesNoneOfValues(!b2.matchesNoneOfValues()) .build()); } + Set<String> values = new HashSet<>(Arrays.asList(b1.getValues())); values.removeAll(Arrays.asList(b2.getValues())); return Optional.of(StringBoundary.getBuilder().addValues(values).build()); -- GitLab