Skip to content
Snippets Groups Projects
Commit 2dce147a authored by Jonas Blatt's avatar Jonas Blatt :ant:
Browse files

Merge branch 'develop' into feature-actions

parents 2649ab6e 153d1a5c
No related branches found
No related tags found
No related merge requests found
Showing
with 541 additions and 38 deletions
...@@ -8,5 +8,5 @@ This project contains all source files of the implementation, created for the ma ...@@ -8,5 +8,5 @@ This project contains all source files of the implementation, created for the ma
## Backend ## Backend
Based on Based on
- [Quarkus](https://quarkus.io/guides/maven-tooling) - [Quarkus](https://quarkus.io/)
- [Camunda DMN](https://github.com/bpmn-io/dmn-js) - [Camunda DMN](https://github.com/bpmn-io/dmn-js)
...@@ -9,6 +9,7 @@ import de.unikoblenz.fgbks.base.utils.boundary.creater.BoundaryCreaterType; ...@@ -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.base.utils.boundary.impl.InvalidBoundary;
import de.unikoblenz.fgbks.core.dmn.domain.vdmn.VTypeRef; import de.unikoblenz.fgbks.core.dmn.domain.vdmn.VTypeRef;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map;
import java.util.Optional; import java.util.Optional;
import org.apache.commons.lang3.Validate; import org.apache.commons.lang3.Validate;
...@@ -18,7 +19,7 @@ public abstract class AbstractBoundary<T extends Comparable<? super T>> implemen ...@@ -18,7 +19,7 @@ public abstract class AbstractBoundary<T extends Comparable<? super T>> implemen
private HashMap<BoundaryBiCreaterType, BoundaryBiCreater> biCreaterFunctions; private HashMap<BoundaryBiCreaterType, BoundaryBiCreater> biCreaterFunctions;
private HashMap<BoundaryCreaterType, BoundaryCreater> createrFunctions; private HashMap<BoundaryCreaterType, BoundaryCreater> createrFunctions;
private Class<T> type; private Class<T> type;
private String text; protected String text;
protected AbstractBoundary(String text, Class<T> type) { protected AbstractBoundary(String text, Class<T> type) {
this.text = text; this.text = text;
...@@ -113,11 +114,11 @@ public abstract class AbstractBoundary<T extends Comparable<? super T>> implemen ...@@ -113,11 +114,11 @@ public abstract class AbstractBoundary<T extends Comparable<? super T>> implemen
protected abstract void validate(); 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 @Override
public String toString() { public String toString() {
......
...@@ -36,7 +36,9 @@ import de.unikoblenz.fgbks.base.utils.boundary.creater.BoundaryCreater; ...@@ -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.BoundaryCreaterType;
import de.unikoblenz.fgbks.base.utils.boundary.creater.CreaterLower; import de.unikoblenz.fgbks.base.utils.boundary.creater.CreaterLower;
import de.unikoblenz.fgbks.base.utils.boundary.creater.CreaterUpper; import de.unikoblenz.fgbks.base.utils.boundary.creater.CreaterUpper;
import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map;
import java.util.Objects; import java.util.Objects;
import org.apache.commons.lang3.Validate; import org.apache.commons.lang3.Validate;
...@@ -117,18 +119,18 @@ public abstract class AbstractGrowingBoundary<T extends Comparable<? super T>> ...@@ -117,18 +119,18 @@ public abstract class AbstractGrowingBoundary<T extends Comparable<? super T>>
} }
@Override @Override
protected HashMap<BoundaryCheckType, BoundaryCheck> getChecker() { protected Map<BoundaryCheckType, BoundaryCheck> getChecker() {
return checkerMap; return Collections.unmodifiableMap(checkerMap);
} }
@Override @Override
protected HashMap<BoundaryBiCreaterType, BoundaryBiCreater> getBiCreater() { protected Map<BoundaryBiCreaterType, BoundaryBiCreater> getBiCreater() {
return biCreaterMap; return Collections.unmodifiableMap(biCreaterMap);
} }
@Override @Override
protected HashMap<BoundaryCreaterType, BoundaryCreater> getCreater() { protected Map<BoundaryCreaterType, BoundaryCreater> getCreater() {
return createrMap; return Collections.unmodifiableMap(createrMap);
} }
@Override @Override
......
package de.unikoblenz.fgbks.base.utils.boundary.bicreater;
import de.unikoblenz.fgbks.base.utils.boundary.impl.StringBoundary;
import java.util.Optional;
public class BiCreaterStringAppend extends AbstractBoundaryBiCreater<StringBoundary> {
private static final BiCreaterStringAppend instance = new BiCreaterStringAppend();
private BiCreaterStringAppend() {
super();
}
public static BiCreaterStringAppend getInstance() {
return instance;
}
@Override
public BoundaryBiCreaterType getType() {
return BoundaryBiCreaterType.APPEND;
}
@Override
public Optional<StringBoundary> create(StringBoundary b1, StringBoundary b2) {
return Optional.empty();
}
}
package de.unikoblenz.fgbks.base.utils.boundary.bicreater;
import de.unikoblenz.fgbks.base.utils.boundary.impl.StringBoundary;
import java.util.Optional;
public class BiCreaterStringBetween extends AbstractBoundaryBiCreater<StringBoundary> {
private static final BiCreaterStringBetween instance = new BiCreaterStringBetween();
private BiCreaterStringBetween() {
super();
}
public static BiCreaterStringBetween getInstance() {
return instance;
}
@Override
public BoundaryBiCreaterType getType() {
return BoundaryBiCreaterType.BETWEEN;
}
@Override
public Optional<StringBoundary> create(StringBoundary b1, StringBoundary b2) {
return Optional.empty();
}
}
package de.unikoblenz.fgbks.base.utils.boundary.bicreater;
import de.unikoblenz.fgbks.base.utils.boundary.impl.StringBoundary;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Optional;
import java.util.Set;
public class BiCreaterStringCombine extends AbstractBoundaryBiCreater<StringBoundary> {
private static final BiCreaterStringCombine instance = new BiCreaterStringCombine();
private BiCreaterStringCombine() {
super();
}
public static BiCreaterStringCombine getInstance() {
return instance;
}
@Override
public BoundaryBiCreaterType getType() {
return BoundaryBiCreaterType.COMBINE;
}
@Override
public Optional<StringBoundary> create(StringBoundary b1, StringBoundary b2) {
if (b1.isMatchAny() || b2.isMatchAny()) {
return Optional.of(StringBoundary.getBuilder().isMatchAny(true).build());
}
if (!b1.matchesNoneOfValues() && !b2.matchesNoneOfValues()) {
return Optional.of(
StringBoundary.getBuilder().addValues(b1.getValues()).addValues(b2.getValues()).build());
}
Set<String> values = new HashSet<>();
if (b1.matchesNoneOfValues() && b2.matchesNoneOfValues()) {
values = intersection(b1.getValues(), b2.getValues());
} else if (b1.matchesNoneOfValues()) {
values = leftInter(b1.getValues(), b2.getValues());
} else if (b2.matchesNoneOfValues()) {
values = leftInter(b2.getValues(), b1.getValues());
}
return Optional.of(
StringBoundary.getBuilder()
.isMatchNoneOfValues(true)
.addValues(values)
.isMatchAny(values.size() == 0)
.build());
}
private Set<String> leftInter(String[] values1, String[] values2) {
Set<String> vals = new HashSet<>(Arrays.asList(values1));
for (String v : values2) {
vals.removeIf(x -> x.equals(v));
}
return vals;
}
private Set<String> intersection(String[] values1, String[] values2) {
Set<String> vals = new HashSet<>();
for (String v1 : values1) {
for (String v2 : values2) {
if (v1.equals(v2)) {
vals.add(v1);
}
}
}
return vals;
}
}
package de.unikoblenz.fgbks.base.utils.boundary.bicreater;
import de.unikoblenz.fgbks.base.utils.boundary.impl.StringBoundary;
import java.util.Optional;
public class BiCreaterStringIntersection extends AbstractBoundaryBiCreater<StringBoundary> {
private static final BiCreaterStringIntersection instance = new BiCreaterStringIntersection();
private BiCreaterStringIntersection() {
super();
}
public static BiCreaterStringIntersection getInstance() {
return instance;
}
@Override
public BoundaryBiCreaterType getType() {
return BoundaryBiCreaterType.INTERSECTION;
}
@Override
public Optional<StringBoundary> create(StringBoundary b1, StringBoundary b2) {
return Optional.empty();
}
}
package de.unikoblenz.fgbks.base.utils.boundary.bicreater;
import de.unikoblenz.fgbks.base.utils.boundary.impl.StringBoundary;
import java.util.Optional;
public class BiCreaterStringLowerBounds extends AbstractBoundaryBiCreater<StringBoundary> {
private static final BiCreaterStringLowerBounds instance = new BiCreaterStringLowerBounds();
private BiCreaterStringLowerBounds() {
super();
}
public static BiCreaterStringLowerBounds getInstance() {
return instance;
}
@Override
public BoundaryBiCreaterType getType() {
return BoundaryBiCreaterType.LOWER_BOUNDS;
}
@Override
public Optional<StringBoundary> create(StringBoundary b1, StringBoundary b2) {
return Optional.empty();
}
}
package de.unikoblenz.fgbks.base.utils.boundary.bicreater;
import de.unikoblenz.fgbks.base.utils.boundary.impl.StringBoundary;
import java.util.Optional;
public class BiCreaterStringUpperBounds extends AbstractBoundaryBiCreater<StringBoundary> {
private static final BiCreaterStringUpperBounds instance = new BiCreaterStringUpperBounds();
private BiCreaterStringUpperBounds() {
super();
}
public static BiCreaterStringUpperBounds getInstance() {
return instance;
}
@Override
public BoundaryBiCreaterType getType() {
return BoundaryBiCreaterType.UPPER_BOUNDS;
}
@Override
public Optional<StringBoundary> create(StringBoundary b1, StringBoundary b2) {
return Optional.empty();
}
}
package de.unikoblenz.fgbks.base.utils.boundary.creater;
import de.unikoblenz.fgbks.base.utils.boundary.impl.StringBoundary;
import java.util.Optional;
public class CreaterStringLower extends AbstractBoundaryCreater<StringBoundary> {
private static final CreaterStringLower instance = new CreaterStringLower();
private CreaterStringLower() {
super();
}
public static CreaterStringLower getInstance() {
return instance;
}
@Override
public BoundaryCreaterType getType() {
return BoundaryCreaterType.LOWER;
}
@Override
public Optional<StringBoundary> create(StringBoundary b) {
return Optional.of(StringBoundary.getBuilder()
.addValues(b.getValues())
.isMatchNoneOfValues(!b.matchesNoneOfValues())
.isMatchAny(b.getAmountOfElements() == 0)
.build());
}
}
package de.unikoblenz.fgbks.base.utils.boundary.creater;
import de.unikoblenz.fgbks.base.utils.boundary.impl.StringBoundary;
import java.util.Optional;
public class CreaterStringUpper extends AbstractBoundaryCreater<StringBoundary> {
private static final CreaterStringUpper instance = new CreaterStringUpper();
private CreaterStringUpper() {
super();
}
public static CreaterStringUpper getInstance() {
return instance;
}
@Override
public BoundaryCreaterType getType() {
return BoundaryCreaterType.UPPER;
}
@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();
}
}
...@@ -15,12 +15,18 @@ import static de.unikoblenz.fgbks.base.utils.boundary.checker.BoundaryCheckType. ...@@ -15,12 +15,18 @@ import static de.unikoblenz.fgbks.base.utils.boundary.checker.BoundaryCheckType.
import static de.unikoblenz.fgbks.base.utils.boundary.creater.BoundaryCreaterType.LOWER; import static de.unikoblenz.fgbks.base.utils.boundary.creater.BoundaryCreaterType.LOWER;
import static de.unikoblenz.fgbks.base.utils.boundary.creater.BoundaryCreaterType.UPPER; import static de.unikoblenz.fgbks.base.utils.boundary.creater.BoundaryCreaterType.UPPER;
import de.unikoblenz.fgbks.base.builder.DefaultBuilder;
import de.unikoblenz.fgbks.base.utils.boundary.AbstractBoundary; import de.unikoblenz.fgbks.base.utils.boundary.AbstractBoundary;
import de.unikoblenz.fgbks.base.utils.boundary.Boundary; import de.unikoblenz.fgbks.base.utils.boundary.Boundary;
import de.unikoblenz.fgbks.base.utils.boundary.BoundaryParseException; import de.unikoblenz.fgbks.base.utils.boundary.BoundaryParseException;
import de.unikoblenz.fgbks.base.utils.boundary.bicreater.BiCreaterStringAppend;
import de.unikoblenz.fgbks.base.utils.boundary.bicreater.BiCreaterStringBetween;
import de.unikoblenz.fgbks.base.utils.boundary.bicreater.BiCreaterStringCombine;
import de.unikoblenz.fgbks.base.utils.boundary.bicreater.BiCreaterStringIntersection;
import de.unikoblenz.fgbks.base.utils.boundary.bicreater.BiCreaterStringLowerBounds;
import de.unikoblenz.fgbks.base.utils.boundary.bicreater.BiCreaterStringUpperBounds;
import de.unikoblenz.fgbks.base.utils.boundary.bicreater.BoundaryBiCreater; import de.unikoblenz.fgbks.base.utils.boundary.bicreater.BoundaryBiCreater;
import de.unikoblenz.fgbks.base.utils.boundary.bicreater.BoundaryBiCreaterType; import de.unikoblenz.fgbks.base.utils.boundary.bicreater.BoundaryBiCreaterType;
import de.unikoblenz.fgbks.base.utils.boundary.bicreater.EmptyBiCreater;
import de.unikoblenz.fgbks.base.utils.boundary.checker.BoundaryCheck; 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.checker.BoundaryCheckType;
import de.unikoblenz.fgbks.base.utils.boundary.checker.CheckStringEqual; import de.unikoblenz.fgbks.base.utils.boundary.checker.CheckStringEqual;
...@@ -31,10 +37,15 @@ import de.unikoblenz.fgbks.base.utils.boundary.checker.CheckStringSubsumes; ...@@ -31,10 +37,15 @@ 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.checker.CheckStringSubsumption;
import de.unikoblenz.fgbks.base.utils.boundary.creater.BoundaryCreater; 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.BoundaryCreaterType;
import de.unikoblenz.fgbks.base.utils.boundary.creater.CreaterLower; import de.unikoblenz.fgbks.base.utils.boundary.creater.CreaterStringLower;
import de.unikoblenz.fgbks.base.utils.boundary.creater.CreaterUpper; import de.unikoblenz.fgbks.base.utils.boundary.creater.CreaterStringUpper;
import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects; import java.util.Objects;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import org.apache.commons.lang3.Validate; import org.apache.commons.lang3.Validate;
...@@ -52,14 +63,14 @@ public class StringBoundary extends AbstractBoundary<String> { ...@@ -52,14 +63,14 @@ public class StringBoundary extends AbstractBoundary<String> {
checkerMap.put(IS_OVERLAPPING, CheckStringOverlap.getInstance()); checkerMap.put(IS_OVERLAPPING, CheckStringOverlap.getInstance());
checkerMap.put(IS_SUBSUMPTION, CheckStringSubsumption.getInstance()); checkerMap.put(IS_SUBSUMPTION, CheckStringSubsumption.getInstance());
checkerMap.put(SUBSUMES, CheckStringSubsumes.getInstance()); checkerMap.put(SUBSUMES, CheckStringSubsumes.getInstance());
createrMap.put(UPPER, CreaterUpper.getInstance()); createrMap.put(UPPER, CreaterStringUpper.getInstance());
createrMap.put(LOWER, CreaterLower.getInstance()); createrMap.put(LOWER, CreaterStringLower.getInstance());
biCreaterMap.put(INTERSECTION, EmptyBiCreater.getInstance()); biCreaterMap.put(INTERSECTION, BiCreaterStringIntersection.getInstance());
biCreaterMap.put(LOWER_BOUNDS, EmptyBiCreater.getInstance()); biCreaterMap.put(LOWER_BOUNDS, BiCreaterStringLowerBounds.getInstance());
biCreaterMap.put(UPPER_BOUNDS, EmptyBiCreater.getInstance()); biCreaterMap.put(UPPER_BOUNDS, BiCreaterStringUpperBounds.getInstance());
biCreaterMap.put(BETWEEN, EmptyBiCreater.getInstance()); biCreaterMap.put(BETWEEN, BiCreaterStringBetween.getInstance());
biCreaterMap.put(APPEND, EmptyBiCreater.getInstance()); biCreaterMap.put(APPEND, BiCreaterStringAppend.getInstance());
biCreaterMap.put(COMBINE, EmptyBiCreater.getInstance()); biCreaterMap.put(COMBINE, BiCreaterStringCombine.getInstance());
} }
private boolean matchNoneOfValues; private boolean matchNoneOfValues;
...@@ -72,6 +83,10 @@ public class StringBoundary extends AbstractBoundary<String> { ...@@ -72,6 +83,10 @@ public class StringBoundary extends AbstractBoundary<String> {
super(text, String.class); super(text, String.class);
} }
private StringBoundary() {
super(String.class);
}
@Override @Override
public int compareTo(Boundary o) { public int compareTo(Boundary o) {
return o.getText().compareTo(o.getText()); return o.getText().compareTo(o.getText());
...@@ -105,7 +120,6 @@ public class StringBoundary extends AbstractBoundary<String> { ...@@ -105,7 +120,6 @@ public class StringBoundary extends AbstractBoundary<String> {
matchAny = Validate.notNull(text).isEmpty(); matchAny = Validate.notNull(text).isEmpty();
if (matchAny) { if (matchAny) {
values = new String[0]; values = new String[0];
valuesHashes = new int[0];
} else { } else {
matchNoneOfValues = text.toLowerCase().startsWith("not"); matchNoneOfValues = text.toLowerCase().startsWith("not");
text = text.replace('(', '\0').replace(')', '\0').trim(); text = text.replace('(', '\0').replace(')', '\0').trim();
...@@ -113,37 +127,41 @@ public class StringBoundary extends AbstractBoundary<String> { ...@@ -113,37 +127,41 @@ public class StringBoundary extends AbstractBoundary<String> {
text = text.replaceFirst("not", "").trim(); text = text.replaceFirst("not", "").trim();
} }
values = text.split(","); 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 calcHashes();
Arrays.sort(valuesHashes);
} catch (Exception e) { } catch (Exception e) {
throw new BoundaryParseException("String value is not valid: " + this.getText()); 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 @Override
protected void validate() { protected void validate() {
Validate.noNullElements(values); Validate.noNullElements(values);
} }
@Override @Override
protected HashMap<BoundaryCheckType, BoundaryCheck> getChecker() { protected Map<BoundaryCheckType, BoundaryCheck> getChecker() {
return checkerMap; return Collections.unmodifiableMap(checkerMap);
} }
@Override @Override
protected HashMap<BoundaryBiCreaterType, BoundaryBiCreater> getBiCreater() { protected Map<BoundaryBiCreaterType, BoundaryBiCreater> getBiCreater() {
return biCreaterMap; return Collections.unmodifiableMap(biCreaterMap);
} }
@Override @Override
protected HashMap<BoundaryCreaterType, BoundaryCreater> getCreater() { protected Map<BoundaryCreaterType, BoundaryCreater> getCreater() {
return createrMap; return Collections.unmodifiableMap(createrMap);
} }
@Override @Override
...@@ -152,4 +170,63 @@ public class StringBoundary extends AbstractBoundary<String> { ...@@ -152,4 +170,63 @@ public class StringBoundary extends AbstractBoundary<String> {
+ Arrays.stream(values).map(v -> '"' + v + '"').collect(Collectors.joining(",")) + Arrays.stream(values).map(v -> '"' + v + '"').collect(Collectors.joining(","))
+ (matchNoneOfValues ? ")" : ""); + (matchNoneOfValues ? ")" : "");
} }
public static Builder getBuilder() {
return new StringBoundary().new Builder();
}
public class Builder extends DefaultBuilder<StringBoundary> {
private List<String> buildingValues;
private Builder() {
buildingValues = new ArrayList<>();
value.matchAny = false;
value.matchNoneOfValues = false;
}
public Builder isMatchNoneOfValues(boolean matchNoneOfValues) {
value.matchNoneOfValues = matchNoneOfValues;
return this;
}
public Builder isMatchAny(boolean matchAny) {
value.matchAny = matchAny;
return this;
}
public Builder addValue(String value) {
buildingValues.add(Validate.notNull(value));
return this;
}
public Builder addValues(Collection<String> values) {
buildingValues.addAll(Validate.noNullElements(values));
return this;
}
public Builder addValues(String[] values) {
return addValues(Validate.notNull(Arrays.asList(values)));
}
@Override
protected void validate() {
super.validate();
if (matchAny) {
// TODO exception
}
}
@Override
public StringBoundary build() {
value.values = buildingValues.toArray(new String[0]);
if (value.matchAny) {
value.matchNoneOfValues = false;
value.values = new String[0];
}
value.calcHashes();
value.text = value.getParsedText();
return super.build();
}
}
} }
...@@ -12,6 +12,7 @@ import org.apache.commons.lang3.Validate; ...@@ -12,6 +12,7 @@ import org.apache.commons.lang3.Validate;
public class VerifierResult extends AbstractResultObject { public class VerifierResult extends AbstractResultObject {
private VerificationType verificationType; private VerificationType verificationType;
private Long executionTime;
private Set<VerificationResultEntry> verificationResultEntries; private Set<VerificationResultEntry> verificationResultEntries;
public VerifierResult() { public VerifierResult() {
...@@ -33,6 +34,15 @@ public class VerifierResult extends AbstractResultObject { ...@@ -33,6 +34,15 @@ public class VerifierResult extends AbstractResultObject {
return verificationResultEntries.size(); return verificationResultEntries.size();
} }
@JsonbProperty("executionTime")
public Long getExecutionTime() {
return executionTime;
}
public void setExecutionTime(Long executionTime) {
this.executionTime = executionTime;
}
public static Builder getBuilder() { public static Builder getBuilder() {
return new VerifierResult().new Builder(); return new VerifierResult().new Builder();
} }
...@@ -49,6 +59,11 @@ public class VerifierResult extends AbstractResultObject { ...@@ -49,6 +59,11 @@ public class VerifierResult extends AbstractResultObject {
return this; return this;
} }
public Builder withExecutionTime(Long executionTime) {
value.executionTime = executionTime;
return this;
}
public Builder fromVerifier(AbstractVerifier verifier) { public Builder fromVerifier(AbstractVerifier verifier) {
return withVerificationType(Validate.notNull(verifier).getVerificationType()); return withVerificationType(Validate.notNull(verifier).getVerificationType());
} }
......
...@@ -26,6 +26,8 @@ public abstract class AbstractVerifier implements Verifier { ...@@ -26,6 +26,8 @@ public abstract class AbstractVerifier implements Verifier {
protected VerificationResultEntryFactory vreFactory; protected VerificationResultEntryFactory vreFactory;
protected DmnObjectContainer dmnObjectContainer; protected DmnObjectContainer dmnObjectContainer;
private long executionTime = -1;
public VerificationType getVerificationType() { public VerificationType getVerificationType() {
return verificationType; return verificationType;
} }
...@@ -65,18 +67,28 @@ public abstract class AbstractVerifier implements Verifier { ...@@ -65,18 +67,28 @@ public abstract class AbstractVerifier implements Verifier {
watch.start(); watch.start();
doVerification(); doVerification();
watch.stop(); watch.stop();
executionTime = watch.getTime();
LOGGER.info( LOGGER.info(
"Verification " "Verification "
+ getVerificationType().getName() + getVerificationType().getName()
+ " finished. " + " finished. "
+ "Time Elapsed: " + "Time Elapsed: "
+ watch.getTime() + executionTime
+ " ms"); + " ms");
return resultBuilder.build(); return resultBuilder.withExecutionTime(executionTime).build();
} }
protected abstract void doVerification(); protected abstract void doVerification();
@Override
public long getExecutionTime() {
if (executionTime == -1) {
throw new IllegalStateException(
"Verifier must be executed before accessing the execution time!");
}
return executionTime;
}
@Override @Override
public boolean equals(Object o) { public boolean equals(Object o) {
if (this == o) { if (this == o) {
......
...@@ -7,4 +7,6 @@ import java.util.concurrent.Future; ...@@ -7,4 +7,6 @@ import java.util.concurrent.Future;
public interface Verifier { public interface Verifier {
Future<VerifierResult> verify(ExecutorService executor); Future<VerifierResult> verify(ExecutorService executor);
long getExecutionTime();
} }
package de.unikoblenz.fgbks.base.utils.boundary.bicreater;
import static de.unikoblenz.fgbks.base.utils.boundary.bicreater.BoundaryBiCreaterType.COMBINE;
import static org.junit.jupiter.api.Assertions.assertArrayEquals;
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 BiCreaterStringCombineTest {
StringBoundary sb1;
StringBoundary sb2;
StringBoundary sbR;
@Test
void testCreater() {
sb1 = StringBoundary.getBuilder().addValue("a").build();
sb2 = StringBoundary.getBuilder().addValue("b").build();
sbR = (StringBoundary) sb1.createBi(COMBINE, sb2).get();
assertArrayEquals(new String[]{"a", "b"}, sbR.getValues());
assertFalse(sbR.matchesNoneOfValues());
assertFalse(sbR.isMatchAny());
sb1 = StringBoundary.getBuilder().isMatchNoneOfValues(true).addValue("a").build();
sb2 = StringBoundary.getBuilder().addValue("b").build();
sbR = (StringBoundary) sb1.createBi(COMBINE, sb2).get();
assertArrayEquals(new String[]{"a"}, sbR.getValues());
assertTrue(sbR.matchesNoneOfValues());
assertFalse(sbR.isMatchAny());
sb1 = StringBoundary.getBuilder().isMatchNoneOfValues(true).addValue("a").addValue("b").build();
sb2 = StringBoundary.getBuilder().addValue("b").build();
sbR = (StringBoundary) sb1.createBi(COMBINE, sb2).get();
assertArrayEquals(new String[]{"a"}, sbR.getValues());
assertTrue(sbR.matchesNoneOfValues());
assertFalse(sbR.isMatchAny());
sb1 = StringBoundary.getBuilder().addValue("b").build();
sb2 = StringBoundary.getBuilder().isMatchNoneOfValues(true).addValue("a").addValue("b").build();
sbR = (StringBoundary) sb1.createBi(COMBINE, sb2).get();
assertArrayEquals(new String[]{"a"}, sbR.getValues());
assertTrue(sbR.matchesNoneOfValues());
assertFalse(sbR.isMatchAny());
sb1 = StringBoundary.getBuilder().isMatchNoneOfValues(true).addValue("a").build();
sb2 = StringBoundary.getBuilder().isMatchNoneOfValues(true).addValue("b").build();
sbR = (StringBoundary) sb1.createBi(COMBINE, sb2).get();
assertArrayEquals(new String[]{}, sbR.getValues());
assertFalse(sbR.matchesNoneOfValues());
assertTrue(sbR.isMatchAny());
sb1 = StringBoundary.getBuilder().isMatchNoneOfValues(true).addValue("a").build();
sb2 = StringBoundary.getBuilder().isMatchNoneOfValues(true).addValue("b").addValue("a").build();
sbR = (StringBoundary) sb1.createBi(COMBINE, sb2).get();
assertArrayEquals(new String[]{"a"}, sbR.getValues());
assertTrue(sbR.matchesNoneOfValues());
assertFalse(sbR.isMatchAny());
sb1 = StringBoundary.getBuilder().isMatchAny(true).build();
sb2 = StringBoundary.getBuilder().isMatchNoneOfValues(true).addValue("b").addValue("a").build();
sbR = (StringBoundary) sb1.createBi(COMBINE, sb2).get();
assertArrayEquals(new String[]{}, sbR.getValues());
assertFalse(sbR.matchesNoneOfValues());
assertTrue(sbR.isMatchAny());
sb1 = StringBoundary.getBuilder().isMatchAny(true).build();
sb2 = StringBoundary.getBuilder().isMatchAny(true).build();
sbR = (StringBoundary) sb1.createBi(COMBINE, sb2).get();
assertArrayEquals(new String[]{}, sbR.getValues());
assertFalse(sbR.matchesNoneOfValues());
assertTrue(sbR.isMatchAny());
}
}
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());
}
}
package de.unikoblenz.fgbks.base.utils.boundary.impl;
import io.quarkus.test.junit.QuarkusTest;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
@QuarkusTest
class StringBoundaryTest {
@Test
public void testBuilder() {
StringBoundary sb = StringBoundary.getBuilder().addValue("a").build();
Assertions.assertEquals("a", sb.getValues()[0]);
Assertions.assertFalse(sb.isMatchAny());
Assertions.assertFalse(sb.matchesNoneOfValues());
Assertions.assertEquals("\"a\"", sb.getText());
sb = StringBoundary.getBuilder().addValue("a").addValue("b").isMatchNoneOfValues(true).build();
Assertions.assertEquals("a", sb.getValues()[0]);
Assertions.assertFalse(sb.isMatchAny());
Assertions.assertTrue(sb.matchesNoneOfValues());
Assertions.assertEquals("not(\"a\",\"b\")", sb.getText());
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment