From 598e861560d1d2711097b7a37894671c87e9ee44 Mon Sep 17 00:00:00 2001
From: Jonas Blatt <jonasblatt@uni-koblenz.de>
Date: Sat, 19 Oct 2019 17:01:02 +0200
Subject: [PATCH] BugFix Compare to of String boundary

---
 .../utils/boundary/impl/StringBoundary.java   | 26 ++++++++++++++++---
 1 file changed, 23 insertions(+), 3 deletions(-)

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 973d8d55..7c94b20f 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
@@ -57,8 +57,13 @@ import org.apache.commons.lang3.Validate;
  * StringBoundary#matchesNoneOfValues} returns true, which are not in the boundary. <br>
  *
  * <p>Only value "a": <br>
- * {@code "a"} <br> Value "a" or value "b": <br> {@code "a","b"} <br> Not value "a" and not value
- * "b": <br> {@code not("a","b")} <br> All values: <br> {@code (empty String)}
+ * {@code "a"} <br>
+ * Value "a" or value "b": <br>
+ * {@code "a","b"} <br>
+ * Not value "a" and not value "b": <br>
+ * {@code not("a","b")} <br>
+ * All values: <br>
+ * {@code (empty String)}
  */
 public class StringBoundary extends AbstractBoundary<String> {
 
@@ -105,7 +110,21 @@ public class StringBoundary extends AbstractBoundary<String> {
 
   @Override
   public int compareTo(Boundary o) {
-    return o.getText().compareTo(o.getText());
+    if (!(o instanceof StringBoundary)) {
+      return 0;
+    }
+    StringBoundary otherStringB = (StringBoundary) o;
+    if (matchesAny() || matchesNoneOfValues()) {
+      if (otherStringB.matchesAny() || otherStringB.matchesNoneOfValues()) {
+        return 0;
+      } else {
+        return -1;
+      }
+    }
+    if (otherStringB.matchesAny() || otherStringB.matchesNoneOfValues()) {
+      return 1;
+    }
+    return this.getValues()[0].compareTo(otherStringB.getValues()[0]);
   }
 
   /**
@@ -178,6 +197,7 @@ public class StringBoundary extends AbstractBoundary<String> {
   }
 
   private void calcHashes() {
+    Arrays.sort(values);
     valuesHashes = new int[values.length];
     for (int i = 0; i < values.length; i++) {
       values[i] = values[i].replace('"', '\0').trim();
-- 
GitLab