From 5017c0fbe7be15cb35632a9f666c05411e9aa577 Mon Sep 17 00:00:00 2001 From: Jonas Blatt <jonasblatt@uni-koblenz.de> Date: Sun, 22 Sep 2019 20:59:56 +0200 Subject: [PATCH] Add construct for Boundary creater and combiner --- .../base/utils/boundary/AbstractBoundary.java | 60 ++++++++++++++++++- .../boundary/AbstractGrowingBoundary.java | 52 ++++++++++++++-- .../fgbks/base/utils/boundary/Boundary.java | 7 +++ .../boundary/checker/CheckStringEqual.java | 4 ++ .../checker/CheckStringInContact.java | 4 ++ .../checker/CheckStringNotInContact.java | 4 ++ .../boundary/checker/CheckStringOverlap.java | 4 ++ .../boundary/checker/CheckStringSubsumes.java | 4 ++ .../checker/CheckStringSubsumption.java | 4 ++ .../combiner/AbstractBoundaryCombiner.java | 5 ++ .../combiner/BoundaryCombineType.java | 10 ++++ .../boundary/combiner/BoundaryCombiner.java | 11 ++++ .../boundary/combiner/EmptyCombiner.java | 27 +++++++++ .../creater/AbstractBoundaryCreater.java | 5 ++ .../boundary/creater/BoundaryCreater.java | 11 ++++ .../boundary/creater/BoundaryCreaterType.java | 6 ++ .../utils/boundary/creater/EmptyCreater.java | 27 +++++++++ .../utils/boundary/impl/InvalidBoundary.java | 13 ++++ .../utils/boundary/impl/StringBoundary.java | 35 +++++++++++ 19 files changed, 284 insertions(+), 9 deletions(-) create mode 100644 dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/combiner/AbstractBoundaryCombiner.java create mode 100644 dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/combiner/BoundaryCombineType.java create mode 100644 dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/combiner/BoundaryCombiner.java create mode 100644 dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/combiner/EmptyCombiner.java create mode 100644 dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/creater/AbstractBoundaryCreater.java create mode 100644 dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/creater/BoundaryCreater.java create mode 100644 dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/creater/BoundaryCreaterType.java create mode 100644 dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/creater/EmptyCreater.java 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 af0c4909..13e97a2d 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 @@ -2,14 +2,21 @@ package de.unikoblenz.fgbks.base.utils.boundary; import de.unikoblenz.fgbks.base.utils.boundary.checker.BoundaryCheck; import de.unikoblenz.fgbks.base.utils.boundary.checker.BoundaryCheckType; +import de.unikoblenz.fgbks.base.utils.boundary.combiner.BoundaryCombineType; +import de.unikoblenz.fgbks.base.utils.boundary.combiner.BoundaryCombiner; +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.impl.InvalidBoundary; import de.unikoblenz.fgbks.core.dmn.domain.vdmn.VTypeRef; import java.util.HashMap; +import java.util.Optional; import org.apache.commons.lang3.Validate; public abstract class AbstractBoundary<T extends Comparable<? super T>> implements Boundary { private HashMap<BoundaryCheckType, BoundaryCheck> checkFunctions; + private HashMap<BoundaryCombineType, BoundaryCombiner> combineFunctions; + private HashMap<BoundaryCreaterType, BoundaryCreater> createrFunctions; private Class<T> type; private String text; @@ -19,6 +26,8 @@ public abstract class AbstractBoundary<T extends Comparable<? super T>> implemen parse(text); validate(); checkFunctions = new HashMap<>(getChecker()); + combineFunctions = new HashMap<>(getCombiner()); + createrFunctions = new HashMap<>(getCreater()); } @Override @@ -36,11 +45,32 @@ public abstract class AbstractBoundary<T extends Comparable<? super T>> implemen if (other instanceof InvalidBoundary) { return false; } - BoundaryCheck checkFunction = getTestFunction(checkType); + BoundaryCheck checkFunction = getCheckFunction(checkType); if (checkFunction == null || !isValidOperation(checkType, other)) { throw new BoundaryOperationNotSupportedException(); // TODO: add error text } - return checkFunction.check(this, other); + return checkFunction.check(this, other); // TODO, remove RAW type + } + + @Override + public Optional<Boundary> create(BoundaryCreaterType createrType) { + BoundaryCreater creater = getCreaterFunction(createrType); + if (creater == null || !isValidOperation(createrType)) { + throw new BoundaryOperationNotSupportedException(); // TODO: add error text + } + return creater.create(this); + } + + @Override + public Optional<Boundary> combine(BoundaryCombineType combineType, Boundary other) { + if (other instanceof InvalidBoundary) { + return Optional.empty(); + } + BoundaryCombiner combiner = getCombineFunction(combineType); + if (combiner == null || !isValidOperation(combineType, other)) { + throw new BoundaryOperationNotSupportedException(); // TODO: add error text + } + return combiner.combine(this, other); // TODO, remove RAW type } public boolean isValidOperation(BoundaryCheckType checkType, Boundary other) { @@ -51,16 +81,40 @@ public abstract class AbstractBoundary<T extends Comparable<? super T>> implemen return checkFunctions.containsKey(Validate.notNull(checkType)); } - protected BoundaryCheck getTestFunction(BoundaryCheckType checkType) { + public boolean isValidOperation(BoundaryCombineType combineType, Boundary other) { + return this.getTypeRef() == other.getTypeRef() && isValidOperation(combineType); + } + + public boolean isValidOperation(BoundaryCombineType combineTyp) { + return combineFunctions.containsKey(Validate.notNull(combineTyp)); + } + + public boolean isValidOperation(BoundaryCreaterType createrType) { + return createrFunctions.containsKey(Validate.notNull(createrType)); + } + + protected BoundaryCheck getCheckFunction(BoundaryCheckType checkType) { return checkFunctions.get(checkType); } + protected BoundaryCreater getCreaterFunction(BoundaryCreaterType createrType) { + return createrFunctions.get(createrType); + } + + protected BoundaryCombiner getCombineFunction(BoundaryCombineType combineTypeType) { + return combineFunctions.get(combineTypeType); + } + protected abstract void parse(String text); protected abstract void validate(); protected abstract HashMap<BoundaryCheckType, BoundaryCheck> getChecker(); + protected abstract HashMap<BoundaryCombineType, BoundaryCombiner> getCombiner(); + + protected abstract HashMap<BoundaryCreaterType, BoundaryCreater> getCreater(); + protected abstract String getParsedText(); @Override 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 03a0323b..07c4709b 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 @@ -1,6 +1,20 @@ package de.unikoblenz.fgbks.base.utils.boundary; import static de.unikoblenz.fgbks.base.utils.boundary.BoundType.INCLUSIVE; +import static de.unikoblenz.fgbks.base.utils.boundary.checker.BoundaryCheckType.IS_EQUAL; +import static de.unikoblenz.fgbks.base.utils.boundary.checker.BoundaryCheckType.IS_IN_CONTACT; +import static de.unikoblenz.fgbks.base.utils.boundary.checker.BoundaryCheckType.IS_NOT_IN_CONTACT; +import static de.unikoblenz.fgbks.base.utils.boundary.checker.BoundaryCheckType.IS_OVERLAPPING; +import static de.unikoblenz.fgbks.base.utils.boundary.checker.BoundaryCheckType.IS_SUBSUMPTION; +import static de.unikoblenz.fgbks.base.utils.boundary.checker.BoundaryCheckType.SUBSUMES; +import static de.unikoblenz.fgbks.base.utils.boundary.combiner.BoundaryCombineType.APPEND; +import static de.unikoblenz.fgbks.base.utils.boundary.combiner.BoundaryCombineType.BETWEEN; +import static de.unikoblenz.fgbks.base.utils.boundary.combiner.BoundaryCombineType.COMBINE; +import static de.unikoblenz.fgbks.base.utils.boundary.combiner.BoundaryCombineType.INTERSECTION; +import static de.unikoblenz.fgbks.base.utils.boundary.combiner.BoundaryCombineType.LOWER_BOUNDS; +import static de.unikoblenz.fgbks.base.utils.boundary.combiner.BoundaryCombineType.UPPER_BOUNDS; +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.utils.boundary.checker.BoundaryCheck; import de.unikoblenz.fgbks.base.utils.boundary.checker.BoundaryCheckType; @@ -10,6 +24,12 @@ import de.unikoblenz.fgbks.base.utils.boundary.checker.CheckIsSubsumption; import de.unikoblenz.fgbks.base.utils.boundary.checker.CheckNotInContact; import de.unikoblenz.fgbks.base.utils.boundary.checker.CheckOverlap; import de.unikoblenz.fgbks.base.utils.boundary.checker.CheckSubsumes; +import de.unikoblenz.fgbks.base.utils.boundary.combiner.BoundaryCombineType; +import de.unikoblenz.fgbks.base.utils.boundary.combiner.BoundaryCombiner; +import de.unikoblenz.fgbks.base.utils.boundary.combiner.EmptyCombiner; +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.EmptyCreater; import java.util.HashMap; import java.util.Objects; import org.apache.commons.lang3.Validate; @@ -68,12 +88,32 @@ public abstract class AbstractGrowingBoundary<T extends Comparable<? super T>> @Override protected HashMap<BoundaryCheckType, BoundaryCheck> getChecker() { HashMap<BoundaryCheckType, BoundaryCheck> map = new HashMap<>(); - map.put(BoundaryCheckType.IS_EQUAL, CheckEqual.getInstance()); - map.put(BoundaryCheckType.IS_IN_CONTACT, CheckInContact.getInstance()); - map.put(BoundaryCheckType.IS_NOT_IN_CONTACT, CheckNotInContact.getInstance()); - map.put(BoundaryCheckType.IS_OVERLAPPING, CheckOverlap.getInstance()); - map.put(BoundaryCheckType.IS_SUBSUMPTION, CheckIsSubsumption.getInstance()); - map.put(BoundaryCheckType.SUBSUMES, CheckSubsumes.getInstance()); + map.put(IS_EQUAL, CheckEqual.getInstance()); + map.put(IS_IN_CONTACT, CheckInContact.getInstance()); + map.put(IS_NOT_IN_CONTACT, CheckNotInContact.getInstance()); + map.put(IS_OVERLAPPING, CheckOverlap.getInstance()); + map.put(IS_SUBSUMPTION, CheckIsSubsumption.getInstance()); + map.put(SUBSUMES, CheckSubsumes.getInstance()); + return map; + } + + @Override + protected HashMap<BoundaryCombineType, BoundaryCombiner> getCombiner() { + HashMap<BoundaryCombineType, BoundaryCombiner> map = new HashMap<>(); + map.put(INTERSECTION, EmptyCombiner.getInstance()); + map.put(LOWER_BOUNDS, EmptyCombiner.getInstance()); + map.put(UPPER_BOUNDS, EmptyCombiner.getInstance()); + map.put(BETWEEN, EmptyCombiner.getInstance()); + map.put(APPEND, EmptyCombiner.getInstance()); + map.put(COMBINE, EmptyCombiner.getInstance()); + return map; + } + + @Override + protected HashMap<BoundaryCreaterType, BoundaryCreater> getCreater() { + HashMap<BoundaryCreaterType, BoundaryCreater> map = new HashMap<>(); + map.put(UPPER, EmptyCreater.getInstance()); + map.put(LOWER, EmptyCreater.getInstance()); return map; } diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/Boundary.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/Boundary.java index 83460cfb..fab3d6b1 100644 --- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/Boundary.java +++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/Boundary.java @@ -1,7 +1,10 @@ package de.unikoblenz.fgbks.base.utils.boundary; import de.unikoblenz.fgbks.base.utils.boundary.checker.BoundaryCheckType; +import de.unikoblenz.fgbks.base.utils.boundary.combiner.BoundaryCombineType; +import de.unikoblenz.fgbks.base.utils.boundary.creater.BoundaryCreaterType; import de.unikoblenz.fgbks.core.dmn.domain.vdmn.VTypeRef; +import java.util.Optional; public interface Boundary extends Comparable<Boundary> { @@ -10,4 +13,8 @@ public interface Boundary extends Comparable<Boundary> { String getText(); boolean checkWith(BoundaryCheckType checkType, Boundary other); + + Optional<Boundary> create(BoundaryCreaterType createType); + + Optional<Boundary> combine(BoundaryCombineType combineType, Boundary other); } diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/checker/CheckStringEqual.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/checker/CheckStringEqual.java index 3345d8b4..168f5b5f 100644 --- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/checker/CheckStringEqual.java +++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/checker/CheckStringEqual.java @@ -6,6 +6,10 @@ public class CheckStringEqual extends AbstractBoundaryCheck<StringBoundary> { private static CheckStringEqual instance = new CheckStringEqual(); + private CheckStringEqual() { + super(); + } + public static CheckStringEqual getInstance() { return instance; } diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/checker/CheckStringInContact.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/checker/CheckStringInContact.java index be74a3cb..c578c3ef 100644 --- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/checker/CheckStringInContact.java +++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/checker/CheckStringInContact.java @@ -6,6 +6,10 @@ public class CheckStringInContact extends AbstractBoundaryCheck<StringBoundary> private static CheckStringInContact instance = new CheckStringInContact(); + private CheckStringInContact() { + super(); + } + public static CheckStringInContact getInstance() { return instance; } diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/checker/CheckStringNotInContact.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/checker/CheckStringNotInContact.java index 5aaa21e0..2bc266af 100644 --- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/checker/CheckStringNotInContact.java +++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/checker/CheckStringNotInContact.java @@ -6,6 +6,10 @@ public class CheckStringNotInContact extends AbstractBoundaryCheck<StringBoundar private static CheckStringNotInContact instance = new CheckStringNotInContact(); + private CheckStringNotInContact() { + super(); + } + public static CheckStringNotInContact getInstance() { return instance; } diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/checker/CheckStringOverlap.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/checker/CheckStringOverlap.java index 6c5d0eff..954d82be 100644 --- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/checker/CheckStringOverlap.java +++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/checker/CheckStringOverlap.java @@ -6,6 +6,10 @@ public class CheckStringOverlap extends AbstractBoundaryCheck<StringBoundary> { private static CheckStringOverlap instance = new CheckStringOverlap(); + private CheckStringOverlap() { + super(); + } + public static CheckStringOverlap getInstance() { return instance; } diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/checker/CheckStringSubsumes.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/checker/CheckStringSubsumes.java index 5565d5a4..cf8390c8 100644 --- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/checker/CheckStringSubsumes.java +++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/checker/CheckStringSubsumes.java @@ -6,6 +6,10 @@ public class CheckStringSubsumes extends AbstractBoundaryCheck<StringBoundary> { private static CheckStringSubsumes instance = new CheckStringSubsumes(); + private CheckStringSubsumes() { + super(); + } + public static CheckStringSubsumes getInstance() { return instance; } diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/checker/CheckStringSubsumption.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/checker/CheckStringSubsumption.java index e21e32b2..6ab3e072 100644 --- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/checker/CheckStringSubsumption.java +++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/checker/CheckStringSubsumption.java @@ -6,6 +6,10 @@ public class CheckStringSubsumption extends AbstractBoundaryCheck<StringBoundary private static CheckStringSubsumption instance = new CheckStringSubsumption(); + private CheckStringSubsumption() { + super(); + } + public static CheckStringSubsumption getInstance() { return instance; } diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/combiner/AbstractBoundaryCombiner.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/combiner/AbstractBoundaryCombiner.java new file mode 100644 index 00000000..ed0cf6cb --- /dev/null +++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/combiner/AbstractBoundaryCombiner.java @@ -0,0 +1,5 @@ +package de.unikoblenz.fgbks.base.utils.boundary.combiner; + +import de.unikoblenz.fgbks.base.utils.boundary.Boundary; + +public abstract class AbstractBoundaryCombiner<T extends Boundary> implements BoundaryCombiner<T> {} diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/combiner/BoundaryCombineType.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/combiner/BoundaryCombineType.java new file mode 100644 index 00000000..bcfcb494 --- /dev/null +++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/combiner/BoundaryCombineType.java @@ -0,0 +1,10 @@ +package de.unikoblenz.fgbks.base.utils.boundary.combiner; + +public enum BoundaryCombineType { + INTERSECTION, + LOWER_BOUNDS, + UPPER_BOUNDS, + BETWEEN, + APPEND, + COMBINE; +} diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/combiner/BoundaryCombiner.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/combiner/BoundaryCombiner.java new file mode 100644 index 00000000..10ce58c7 --- /dev/null +++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/combiner/BoundaryCombiner.java @@ -0,0 +1,11 @@ +package de.unikoblenz.fgbks.base.utils.boundary.combiner; + +import de.unikoblenz.fgbks.base.utils.boundary.Boundary; +import java.util.Optional; + +public interface BoundaryCombiner<T extends Boundary> { + + BoundaryCombineType getType(); + + Optional<T> combine(T b1, T b2); +} diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/combiner/EmptyCombiner.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/combiner/EmptyCombiner.java new file mode 100644 index 00000000..7bea8da7 --- /dev/null +++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/combiner/EmptyCombiner.java @@ -0,0 +1,27 @@ +package de.unikoblenz.fgbks.base.utils.boundary.combiner; + +import de.unikoblenz.fgbks.base.utils.boundary.Boundary; +import java.util.Optional; + +public class EmptyCombiner extends AbstractBoundaryCombiner<Boundary> { + + private static final EmptyCombiner instance = new EmptyCombiner(); + + private EmptyCombiner() { + super(); + } + + public static EmptyCombiner getInstance() { + return instance; + } + + @Override + public BoundaryCombineType getType() { + return null; + } + + @Override + public Optional<Boundary> combine(Boundary b1, Boundary b2) { + return Optional.empty(); + } +} diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/creater/AbstractBoundaryCreater.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/creater/AbstractBoundaryCreater.java new file mode 100644 index 00000000..3942dd44 --- /dev/null +++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/creater/AbstractBoundaryCreater.java @@ -0,0 +1,5 @@ +package de.unikoblenz.fgbks.base.utils.boundary.creater; + +import de.unikoblenz.fgbks.base.utils.boundary.Boundary; + +public abstract class AbstractBoundaryCreater<T extends Boundary> implements BoundaryCreater<T> {} diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/creater/BoundaryCreater.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/creater/BoundaryCreater.java new file mode 100644 index 00000000..112582c2 --- /dev/null +++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/creater/BoundaryCreater.java @@ -0,0 +1,11 @@ +package de.unikoblenz.fgbks.base.utils.boundary.creater; + +import de.unikoblenz.fgbks.base.utils.boundary.Boundary; +import java.util.Optional; + +public interface BoundaryCreater<T extends Boundary> { + + BoundaryCreaterType getType(); + + Optional<T> create(T b); +} diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/creater/BoundaryCreaterType.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/creater/BoundaryCreaterType.java new file mode 100644 index 00000000..f240c05b --- /dev/null +++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/creater/BoundaryCreaterType.java @@ -0,0 +1,6 @@ +package de.unikoblenz.fgbks.base.utils.boundary.creater; + +public enum BoundaryCreaterType { + LOWER, + UPPER; +} diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/creater/EmptyCreater.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/creater/EmptyCreater.java new file mode 100644 index 00000000..eeec9f3d --- /dev/null +++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/creater/EmptyCreater.java @@ -0,0 +1,27 @@ +package de.unikoblenz.fgbks.base.utils.boundary.creater; + +import de.unikoblenz.fgbks.base.utils.boundary.Boundary; +import java.util.Optional; + +public class EmptyCreater extends AbstractBoundaryCreater<Boundary> { + + private static final EmptyCreater instance = new EmptyCreater(); + + private EmptyCreater() { + super(); + } + + public static EmptyCreater getInstance() { + return instance; + } + + @Override + public BoundaryCreaterType getType() { + return null; + } + + @Override + public Optional<Boundary> create(Boundary b) { + return Optional.empty(); + } +} diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/impl/InvalidBoundary.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/impl/InvalidBoundary.java index 31a98ec1..61b30aef 100644 --- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/impl/InvalidBoundary.java +++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/impl/InvalidBoundary.java @@ -2,7 +2,10 @@ package de.unikoblenz.fgbks.base.utils.boundary.impl; import de.unikoblenz.fgbks.base.utils.boundary.Boundary; import de.unikoblenz.fgbks.base.utils.boundary.checker.BoundaryCheckType; +import de.unikoblenz.fgbks.base.utils.boundary.combiner.BoundaryCombineType; +import de.unikoblenz.fgbks.base.utils.boundary.creater.BoundaryCreaterType; import de.unikoblenz.fgbks.core.dmn.domain.vdmn.VTypeRef; +import java.util.Optional; public class InvalidBoundary implements Boundary { @@ -29,6 +32,16 @@ public class InvalidBoundary implements Boundary { return false; } + @Override + public Optional<Boundary> create(BoundaryCreaterType createType) { + return Optional.empty(); + } + + @Override + public Optional<Boundary> combine(BoundaryCombineType combineType, Boundary other) { + return Optional.empty(); + } + @Override public int compareTo(Boundary o) { return 0; 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 cd465650..d1eef32e 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 @@ -1,5 +1,14 @@ package de.unikoblenz.fgbks.base.utils.boundary.impl; +import static de.unikoblenz.fgbks.base.utils.boundary.combiner.BoundaryCombineType.APPEND; +import static de.unikoblenz.fgbks.base.utils.boundary.combiner.BoundaryCombineType.BETWEEN; +import static de.unikoblenz.fgbks.base.utils.boundary.combiner.BoundaryCombineType.COMBINE; +import static de.unikoblenz.fgbks.base.utils.boundary.combiner.BoundaryCombineType.INTERSECTION; +import static de.unikoblenz.fgbks.base.utils.boundary.combiner.BoundaryCombineType.LOWER_BOUNDS; +import static de.unikoblenz.fgbks.base.utils.boundary.combiner.BoundaryCombineType.UPPER_BOUNDS; +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.utils.boundary.AbstractBoundary; import de.unikoblenz.fgbks.base.utils.boundary.Boundary; import de.unikoblenz.fgbks.base.utils.boundary.BoundaryParseException; @@ -11,6 +20,12 @@ import de.unikoblenz.fgbks.base.utils.boundary.checker.CheckStringNotInContact; import de.unikoblenz.fgbks.base.utils.boundary.checker.CheckStringOverlap; import de.unikoblenz.fgbks.base.utils.boundary.checker.CheckStringSubsumes; import de.unikoblenz.fgbks.base.utils.boundary.checker.CheckStringSubsumption; +import de.unikoblenz.fgbks.base.utils.boundary.combiner.BoundaryCombineType; +import de.unikoblenz.fgbks.base.utils.boundary.combiner.BoundaryCombiner; +import de.unikoblenz.fgbks.base.utils.boundary.combiner.EmptyCombiner; +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.EmptyCreater; import java.util.Arrays; import java.util.HashMap; import java.util.Objects; @@ -99,6 +114,26 @@ public class StringBoundary extends AbstractBoundary<String> { return map; } + @Override + protected HashMap<BoundaryCombineType, BoundaryCombiner> getCombiner() { + HashMap<BoundaryCombineType, BoundaryCombiner> map = new HashMap<>(); + map.put(INTERSECTION, EmptyCombiner.getInstance()); + map.put(LOWER_BOUNDS, EmptyCombiner.getInstance()); + map.put(UPPER_BOUNDS, EmptyCombiner.getInstance()); + map.put(BETWEEN, EmptyCombiner.getInstance()); + map.put(APPEND, EmptyCombiner.getInstance()); + map.put(COMBINE, EmptyCombiner.getInstance()); + return map; + } + + @Override + protected HashMap<BoundaryCreaterType, BoundaryCreater> getCreater() { + HashMap<BoundaryCreaterType, BoundaryCreater> map = new HashMap<>(); + map.put(UPPER, EmptyCreater.getInstance()); + map.put(LOWER, EmptyCreater.getInstance()); + return map; + } + @Override protected String getParsedText() { return (matchNoneOfValues ? "not" : "") + Arrays.toString(values); -- GitLab