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

Add abstract class for dmnElement

parent 4c464295
No related branches found
No related tags found
No related merge requests found
Showing
with 98 additions and 88 deletions
...@@ -20,8 +20,7 @@ import org.camunda.bpm.model.dmn.impl.DmnParser; ...@@ -20,8 +20,7 @@ import org.camunda.bpm.model.dmn.impl.DmnParser;
@Singleton @Singleton
public class DmnService { public class DmnService {
@Inject @Inject SimpleVDmnParser simpleDmnParser;
SimpleVDmnParser simpleDmnParser;
public DmnObjectContainer getDmnServiceFromXml(String dmnXmlString) { public DmnObjectContainer getDmnServiceFromXml(String dmnXmlString) {
List<DmnDecision> dmnDecisions = List<DmnDecision> dmnDecisions =
...@@ -36,21 +35,25 @@ public class DmnService { ...@@ -36,21 +35,25 @@ public class DmnService {
return new DmnObjectContainer(dmnDecisions, dmnModel, vDmnDefinition); return new DmnObjectContainer(dmnDecisions, dmnModel, vDmnDefinition);
} }
public static List<VDmnColumn> getColumnsByTypeRef(VDmnDefinition dmnDefinition, public static List<VDmnColumn> getColumnsByTypeRef(
VTypeRef vTypeRef) { VDmnDefinition dmnDefinition, VTypeRef vTypeRef) {
Validate.notNull(dmnDefinition); Validate.notNull(dmnDefinition);
Validate.notNull(vTypeRef); Validate.notNull(vTypeRef);
List<VDmnColumn> columns = new ArrayList<>(); List<VDmnColumn> columns = new ArrayList<>();
columns.addAll(dmnDefinition.getDmnDecisions() columns.addAll(
.stream() dmnDefinition.getDmnDecisions().stream()
.flatMap(v -> v.getDmnDecisionTable().getInputColumns().stream() .flatMap(
.filter(c -> c.getTypeRef() == vTypeRef)) v ->
.collect(Collectors.toList())); v.getDmnDecisionTable().getInputColumns().stream()
columns.addAll(dmnDefinition.getDmnDecisions() .filter(c -> c.getTypeRef() == vTypeRef))
.stream() .collect(Collectors.toList()));
.flatMap(v -> v.getDmnDecisionTable().getOutputColumns().stream() columns.addAll(
.filter(c -> c.getTypeRef() == vTypeRef)) dmnDefinition.getDmnDecisions().stream()
.collect(Collectors.toList())); .flatMap(
v ->
v.getDmnDecisionTable().getOutputColumns().stream()
.filter(c -> c.getTypeRef() == vTypeRef))
.collect(Collectors.toList()));
return columns; return columns;
} }
} }
...@@ -2,6 +2,7 @@ package de.unikoblenz.fgbks.core.dmn.verification.result; ...@@ -2,6 +2,7 @@ package de.unikoblenz.fgbks.core.dmn.verification.result;
import de.unikoblenz.fgbks.core.dmn.domain.ids.AbstractId; import de.unikoblenz.fgbks.core.dmn.domain.ids.AbstractId;
import de.unikoblenz.fgbks.core.dmn.domain.ids.JsonIdentifier; import de.unikoblenz.fgbks.core.dmn.domain.ids.JsonIdentifier;
import de.unikoblenz.fgbks.core.dmn.domain.vdmn.VDmnValue;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import javax.json.bind.annotation.JsonbProperty; import javax.json.bind.annotation.JsonbProperty;
...@@ -25,6 +26,16 @@ public class VerificationResultEntryElement extends AbstractResultObject { ...@@ -25,6 +26,16 @@ public class VerificationResultEntryElement extends AbstractResultObject {
return new VerificationResultEntryElement(); return new VerificationResultEntryElement();
} }
public static VerificationResultEntryElement create(VDmnValue vDmnValue) {
return new VerificationResultEntryElement()
.withIdentifier(vDmnValue.getDefinitionId())
.withIdentifier(vDmnValue.getDecisionId())
.withIdentifier(vDmnValue.getDecisionTableId())
.withIdentifier(vDmnValue.getDmnColumn().getColumnId())
.withIdentifier(vDmnValue.getRuleId())
.withIdentifier(vDmnValue.getId());
}
public VerificationResultEntryElement withIdentifier(AbstractId value) { public VerificationResultEntryElement withIdentifier(AbstractId value) {
// Check if annotation is present // Check if annotation is present
......
package de.unikoblenz.fgbks.core.dmn.verification.verifier; package de.unikoblenz.fgbks.core.dmn.verification.verifier;
import static de.unikoblenz.fgbks.core.dmn.verification.result.VerificationResultEntry.VerificationClassification.*; import static de.unikoblenz.fgbks.core.dmn.verification.result.VerificationResultEntry.VerificationClassification.ERROR;
import de.unikoblenz.fgbks.core.dmn.domain.ids.InputEntryId; import de.unikoblenz.fgbks.core.dmn.domain.ids.InputEntryId;
import de.unikoblenz.fgbks.core.dmn.domain.ids.OutputEntryId; import de.unikoblenz.fgbks.core.dmn.domain.ids.OutputEntryId;
import de.unikoblenz.fgbks.core.dmn.domain.ids.RuleId; import de.unikoblenz.fgbks.core.dmn.domain.ids.RuleId;
import de.unikoblenz.fgbks.core.dmn.verification.result.VerificationResultEntryElement; import de.unikoblenz.fgbks.core.dmn.verification.result.VerificationResultEntryElement;
import de.unikoblenz.fgbks.core.dmn.verification.verifier.config.DefaultConfiguration;
import de.unikoblenz.fgbks.core.dmn.verification.verifier.types.IdenticalBusinessRuleVerification;
@DmnVerifier(
verifierType = IdenticalBusinessRuleVerification.class,
verifierConfig = DefaultConfiguration.class)
public class SampleVerifier1 extends AbstractVerifier { public class SampleVerifier1 extends AbstractVerifier {
@Override @Override
......
package de.unikoblenz.fgbks.core.dmn.verification.verifier;
import static de.unikoblenz.fgbks.core.dmn.verification.result.VerificationResultEntry.VerificationClassification.ERROR;
import de.unikoblenz.fgbks.core.dmn.domain.ids.InputEntryId;
import de.unikoblenz.fgbks.core.dmn.domain.ids.OutputEntryId;
import de.unikoblenz.fgbks.core.dmn.domain.ids.RuleId;
import de.unikoblenz.fgbks.core.dmn.verification.result.VerificationResultEntryElement;
import de.unikoblenz.fgbks.core.dmn.verification.verifier.config.DefaultConfiguration;
import de.unikoblenz.fgbks.core.dmn.verification.verifier.types.IdenticalBusinessRuleVerification;
@DmnVerifier(
verifierType = IdenticalBusinessRuleVerification.class,
verifierConfig = DefaultConfiguration.class)
public class SampleVerifier2 extends AbstractVerifier {
@Override
protected void doVerification() {
vref.addElement(
VerificationResultEntryElement.create()
.withIdentifier(
new InputEntryId(
"Config data "
+ super.verifierConfig.getConfiguration(
DefaultConfiguration.KEY_DMN_OBJECT_CONTAINER)))
.withIdentifier(new OutputEntryId("test"))
.withIdentifier(new RuleId("asdasd")));
vref.addElement(
VerificationResultEntryElement.create()
.withIdentifier(new InputEntryId("asdasda"))
.withIdentifier(new OutputEntryId("test"))
.withIdentifier(new RuleId("asdasd")));
vref.addToEntry(ERROR, "My sample message");
vref.addElement(
VerificationResultEntryElement.create()
.withIdentifier(new InputEntryId("asdasda"))
.withIdentifier(new OutputEntryId("test"))
.withIdentifier(new RuleId("asdasd")));
vref.addElement(
VerificationResultEntryElement.create()
.withIdentifier(new InputEntryId("asdasda"))
.withIdentifier(new OutputEntryId("test"))
.withIdentifier(new RuleId("asdasd")));
vref.addElement(
VerificationResultEntryElement.create()
.withIdentifier(new InputEntryId("asdasda"))
.withIdentifier(new OutputEntryId("test"))
.withIdentifier(new RuleId("asdasd")));
vref.addToEntry(ERROR, "My sample message");
}
}
package de.unikoblenz.fgbks.core.dmn.verification.verifier;
import de.unikoblenz.fgbks.core.dmn.verification.verifier.config.DefaultConfiguration;
import de.unikoblenz.fgbks.core.dmn.verification.verifier.types.IdenticalBusinessRuleVerification;
@DmnVerifier(
verifierType = IdenticalBusinessRuleVerification.class,
verifierConfig = DefaultConfiguration.class)
public class SampleVerifier3 extends AbstractVerifier {
private static final String KEY_CONFIG = "asdasd";
@Override
protected void doVerification() {}
}
package de.unikoblenz.fgbks.core.dmn.verification.verifier.impl;
import de.unikoblenz.fgbks.core.dmn.domain.vdmn.VDmnColumn;
import de.unikoblenz.fgbks.core.dmn.domain.vdmn.VDmnValue;
import de.unikoblenz.fgbks.core.dmn.domain.vdmn.VTypeRef;
import de.unikoblenz.fgbks.core.dmn.utils.DmnService;
import de.unikoblenz.fgbks.core.dmn.verification.result.VerificationResultEntry.VerificationClassification;
import de.unikoblenz.fgbks.core.dmn.verification.result.VerificationResultEntryElement;
import de.unikoblenz.fgbks.core.dmn.verification.verifier.AbstractVerifier;
import de.unikoblenz.fgbks.core.dmn.verification.verifier.DmnVerifier;
import de.unikoblenz.fgbks.core.dmn.verification.verifier.config.DefaultConfiguration;
import de.unikoblenz.fgbks.core.dmn.verification.verifier.types.DateVerification;
import java.time.LocalDateTime;
import java.time.format.DateTimeParseException;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@DmnVerifier(verifierType = DateVerification.class, verifierConfig = DefaultConfiguration.class)
public class DateVerifier extends AbstractVerifier {
private static final String datePatternString =
"^date and time\\(\"(?<datetime>(?:19|20)\\d{2}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\\d|3[01])T(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d)\"\\)$";
private static final Pattern datePattern = Pattern.compile(datePatternString);
@Override
protected void doVerification() {
List<VDmnColumn> dateColums =
DmnService.getColumnsByTypeRef(dmnObjectContainer.getvDmnDefinition(), VTypeRef.DATE);
for (VDmnColumn dateColumn : dateColums) {
checkDateColumn(dateColumn);
}
}
private void checkDateColumn(VDmnColumn dateColumn) {
for (VDmnValue dateValue : dateColumn.getValues()) {
checkDateValue(dateValue);
}
}
private void checkDateValue(VDmnValue dateValue) {
if (!dateValue.getText().isEmpty()) {
// 1. check pattern
Matcher matcher = datePattern.matcher(dateValue.getText());
if (!matcher.find()) {
vref.addElement(VerificationResultEntryElement.create(dateValue));
vref.addToEntry(
VerificationClassification.ERROR,
"Date value '%s' does not match 'date and time(\"yyyy-mm-ddTHH:MM:SS\").'",
dateValue.getText());
} else {
// 2. check correct date
String dateTime = matcher.group("datetime");
try {
LocalDateTime.parse(dateTime);
} catch (DateTimeParseException e) {
vref.addElement(VerificationResultEntryElement.create(dateValue));
vref.addToEntry(
VerificationClassification.ERROR, "Date value '%s' is no valid date.", dateTime);
}
}
}
}
}
package de.unikoblenz.fgbks.core.dmn.verification.verifier.impl;
public class EmptyOutputVerifer {}
...@@ -5,7 +5,8 @@ import de.unikoblenz.fgbks.base.domain.Name; ...@@ -5,7 +5,8 @@ import de.unikoblenz.fgbks.base.domain.Name;
import de.unikoblenz.fgbks.base.value.ValueObject; import de.unikoblenz.fgbks.base.value.ValueObject;
public enum VerificationTypeClassification implements ValueObject { public enum VerificationTypeClassification implements ValueObject {
DECISION_LOGIC_LEVEL_VERIFICATION("Decision Logic Verification", "description of classification"); DECISION_LOGIC_LEVEL_VERIFICATION("Decision Logic Verification", "description of classification"),
SYNTAX_LEVEL_VERIFICATION("Syntax Verification", ".."); // TODO
private Name name; private Name name;
private Description description; private Description description;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment