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 af0c490975fb8a43bdf93cb1a57fe3a9d83bbf92..13e97a2d07bac2b63a1e44da5eb3d9f39a53ca71 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 03a0323bc9c010bbd721c849de3c4180b8702486..07c4709b72219242434420d0be263da487acac58 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 83460cfbc217f751916dba4206f47d592eec7c64..fab3d6b148ff509c00bf1476b12b7a1280d80c47 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 3345d8b4a5e2f2210c2a04258d0bff95e55bcba9..168f5b5f126d56f42aadb130ab4c0fd00d94d4d5 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 be74a3cbbf9250a312311d58381715331d711b5a..c578c3ef4115022ae8cd247b74f306e440c1f60d 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 5aaa21e0c03282581c4b6452be21b81e25457c92..2bc266afd92ef184c495398bcbef4be32b68ebf1 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 6c5d0eff6d1993ce27de91a510a1eaf52666a510..954d82beaab50ab6a163656756aa94980d6bf1c9 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 5565d5a4f98a68fffb2e17026f6f469c6bbe49a4..cf8390c864a664d8aec75252a35b7d04fd06ee61 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 e21e32b287b25499db71046fd268f1d71d11392d..6ab3e0727401d7b08bb5ab853ce6fe46717a66f2 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 0000000000000000000000000000000000000000..ed0cf6cb6e3639ad6d5c820b0f22e9bbe224efdc --- /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 0000000000000000000000000000000000000000..bcfcb494b9dd9c31d0cc47d81160e98cfbc49772 --- /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 0000000000000000000000000000000000000000..10ce58c733d9f0eb51addd0db1c798edae79152a --- /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 0000000000000000000000000000000000000000..7bea8da77f8edc010a63b9dc829857eac6798f11 --- /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 0000000000000000000000000000000000000000..3942dd44adff3b981a6529b0b8dcc7cbce435296 --- /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 0000000000000000000000000000000000000000..112582c2c8e7fec9fef8da5b7e5e643424818bea --- /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 0000000000000000000000000000000000000000..f240c05bb00a0e8bcefc18c15664f4f48d54a0cf --- /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 0000000000000000000000000000000000000000..eeec9f3d27e5095fe9d650c84555ffa154baa12e --- /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 31a98ec19c0021fa91656fddd5b9fc79d8771461..61b30aef1da066173cf39c4e5a8e48e29171da19 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 cd46565008d00336d492468b43abc3e65e1a7582..d1eef32e6ddbf481e2da551b8f782851581f23d2 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);