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

Merge branch 'feature/verifier/missing-output-value' into 'develop'

Resolve "Implementation Verifier "MissingOutputValue""

Closes #7

See merge request jonasblatt/ma-jonasblatt-dmn-verifier!60
parents 2ec0c2d0 251ca657
No related branches found
No related tags found
No related merge requests found
......@@ -47,7 +47,7 @@ public class MissingInputValueVerifier extends AbstractVerifier {
}
private void checkMissingInputValues(VDmnOutputColumn outputColumn, VDmnInputColumn inputColumn) {
// check for each value on outputColumn, if it is used in the inputColumn
// check for each value in outputColumn, if it is used in the inputColumn
outer:
for (VDmnOutputValue outputValue : outputColumn.getDmnOutputValues()) {
if (!outputValue.getText().getValue().isEmpty()) {
......
package de.unikoblenz.fgbks.core.dmn.verification.verifier.impl;
import static de.unikoblenz.fgbks.core.dmn.domain.vdmn.utils.VDmnFunctions.getColumnStringName;
import static de.unikoblenz.fgbks.core.dmn.domain.vdmn.utils.VDmnFunctions.templateDecision;
import static de.unikoblenz.fgbks.core.dmn.verification.result.actions.VerificationFix.DEFAULT_SHOW_NAME;
import de.unikoblenz.fgbks.base.utils.boundary.Boundary;
import de.unikoblenz.fgbks.base.utils.boundary.checker.BoundaryCheckType;
import de.unikoblenz.fgbks.core.dmn.domain.vdmn.VDmnDecision;
import de.unikoblenz.fgbks.core.dmn.domain.vdmn.VDmnInputColumn;
import de.unikoblenz.fgbks.core.dmn.domain.vdmn.VDmnInputValue;
import de.unikoblenz.fgbks.core.dmn.domain.vdmn.VDmnOutputColumn;
import de.unikoblenz.fgbks.core.dmn.domain.vdmn.VDmnOutputValue;
import de.unikoblenz.fgbks.core.dmn.domain.vdmn.VTypeRef;
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.result.actions.Action;
import de.unikoblenz.fgbks.core.dmn.verification.result.actions.VerificationFix;
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.types.MissingOutputValueVerification;
......@@ -9,6 +25,63 @@ public class MissingOutputValueVerifier extends AbstractVerifier {
@Override
protected void doVerification() {
// TODO
for (VDmnDecision decision : dmnObjectContainer.getVDmnDefinition().getDmnDecisions()) {
for (VDmnDecision nextDecision : decision.getInformationProvidingDecisions()) {
checkMissingOutputValues(decision, nextDecision);
}
}
}
private void checkMissingOutputValues(VDmnDecision decision, VDmnDecision nextDecision) {
// find the matching input <- output column
for (VDmnInputColumn inputColumn : nextDecision.getDmnDecisionTable().getInputColumns()) {
for (VDmnOutputColumn outputColumn : decision.getDmnDecisionTable().getOutputColumns()) {
if (outputColumn.getName().isPresent()
&& inputColumn.getName().isPresent()
&& outputColumn.getName().get().equals(inputColumn.getName().get())
&& outputColumn.getTypeRef().equals(inputColumn.getTypeRef())) {
checkMissingOutputValues(outputColumn, inputColumn);
}
}
}
}
private void checkMissingOutputValues(
VDmnOutputColumn outputColumn, VDmnInputColumn inputColumn) {
// check for each value in inputColumn, if it is provided in the outputColumn
outer:
for (VDmnInputValue inputValue : inputColumn.getInputValues()) {
for (VDmnOutputValue outputValue : outputColumn.getDmnOutputValues()) {
if (!outputValue.getText().getValue().isEmpty()) {
// create pseudo boundary for output value
String outputText = outputValue.getText().getValue();
if (outputColumn.getTypeRef() == VTypeRef.DOUBLE
|| outputColumn.getTypeRef() == VTypeRef.INTEGER
|| outputColumn.getTypeRef() == VTypeRef.LONG) {
outputText = "= " + outputText;
}
Boundary b = outputColumn.getTypeRef().getBoundaryFromText(outputText);
if (b.checkWith(BoundaryCheckType.IS_IN_CONTACT, inputValue.getBoundary())) {
continue outer;
}
}
}
// no matching input value found for current input Value
vreFactory
.addElement(VerificationResultEntryElement.create(outputColumn))
.addElement(VerificationResultEntryElement.create(inputValue))
.addVerificationFix(
VerificationFix.getBuilder()
.withFixName(DEFAULT_SHOW_NAME)
.addAction(Action.ACTION_SHOW_INPUT_ENTRIES)
.addAction(Action.ACTION_SHOW_OUTPUT_COLUMNS)
.build())
.addToEntry(
VerificationClassification.WARNING,
templateDecision(outputColumn.getDmnDecision())
+ "Output column \"%s\" never provides a value for the input term '%s'.",
getColumnStringName(outputColumn),
inputValue.getText().getValue());
}
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment