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

Merge branch 'feature/verifier/multipleinputdata' into 'develop'

Resolve "Verifier: Multiple Input data of the same column"

See merge request jonasblatt/ma-jonasblatt-dmn-verifier!46
parents c2aab232 af4ef145
No related branches found
No related tags found
No related merge requests found
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.Action.ACTION_SHOW_DECISION;
import static de.unikoblenz.fgbks.core.dmn.verification.result.actions.Action.ACTION_SHOW_INPUT_COLUMNS;
import static de.unikoblenz.fgbks.core.dmn.verification.result.actions.Action.ACTION_SHOW_INPUT_DATA;
import static de.unikoblenz.fgbks.core.dmn.verification.result.actions.VerificationFix.DEFAULT_SHOW_NAME;
import de.unikoblenz.fgbks.base.domain.Name;
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.VDmnNode;
import de.unikoblenz.fgbks.core.dmn.domain.vdmn.VDmnOutputColumn;
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.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.MultipleInputDataVerification;
import java.util.ArrayList;
import java.util.List;
@DmnVerifier(verifierType = MultipleInputDataVerification.class)
public class MultipleInputDataVerifier extends AbstractVerifier {
@Override
protected void doVerification() {
for (VDmnDecision decision : dmnObjectContainer.getVDmnDefinition().getDmnDecisions()) {
List<VDmnNode> inputNodes = decision.getDmnInformationRequirements();
// Check for each input column if there is more than one input data nodes or output columns
// from decision nodes
for (VDmnInputColumn inputColumn : decision.getDmnDecisionTable().getInputColumns()) {
checkMultipleInputData(inputColumn, inputNodes);
}
}
}
private void checkMultipleInputData(VDmnInputColumn inputColumn, List<VDmnNode> inputNodes) {
List<VDmnNode> matchingNodes = new ArrayList<>();
// if the inputColumn has no name, add the column
if (inputColumn.getName().isPresent()) {
// Counter
Name inputColumnName = inputColumn.getName().get();
// check, if there is one input Data with the same name
for (VDmnNode node : inputNodes) {
// input Data node, check only the name
if (node.isInputData()) {
if (node.getName().isPresent() && node.getName().get().equals(inputColumnName)) {
matchingNodes.add(node);
}
} else if (node.isDecision()) {
VDmnDecision decision = (VDmnDecision) node;
// check for each output column, if the name of the output column matches the input column
// name
for (VDmnOutputColumn outputColumn : decision.getDmnDecisionTable().getOutputColumns()) {
if (outputColumn.getName().isPresent()
&& outputColumn.getName().get().equals(inputColumnName)) {
matchingNodes.add(node);
}
}
}
}
}
// if founded list of input nodes > 1 --> Add to result
if (matchingNodes.size() > 1) {
matchingNodes.forEach(n -> vreFactory.addElement(VerificationResultEntryElement.create(n)));
vreFactory
.addElement(VerificationResultEntryElement.create(inputColumn))
.addVerificationFix(
VerificationFix.getBuilder()
.withFixName(DEFAULT_SHOW_NAME)
.addAction(ACTION_SHOW_INPUT_COLUMNS)
.addAction(ACTION_SHOW_INPUT_DATA)
.addAction(ACTION_SHOW_DECISION)
.build())
.addToEntry(
VerificationClassification.WARNING,
templateDecision(inputColumn.getDmnDecision())
+ "Input column \"%s\" has multiple input data node.",
getColumnStringName(inputColumn));
}
}
}
package de.unikoblenz.fgbks.core.dmn.verification.verifier.types;
import de.unikoblenz.fgbks.base.domain.Description;
import de.unikoblenz.fgbks.base.domain.Name;
import de.unikoblenz.fgbks.core.dmn.verification.verifier.classification.ClassificationType;
import de.unikoblenz.fgbks.core.dmn.verification.verifier.classification.DrdModelingLevelVerification;
import javax.validation.constraints.NotNull;
@Type
public class MultipleInputDataVerification extends AbstractVerificationType {
private static final MultipleInputDataVerification instance = new MultipleInputDataVerification();
private MultipleInputDataVerification() {
super(
new Name("MultipleInputDataVerification"),
new Name("Multiple Input Data"),
new Description(
"Detecting columns which has more than one input data (or output columns from decisions)."));
}
public static MultipleInputDataVerification getInstance() {
return instance;
}
@Override
public @NotNull ClassificationType getClassification() {
return DrdModelingLevelVerification.getInstance();
}
}
...@@ -52,6 +52,18 @@ Detecting for all decisions and input data nodes if their output names are found ...@@ -52,6 +52,18 @@ Detecting for all decisions and input data nodes if their output names are found
TODO TODO
``` ```
### Multiple Input Data Verification
- Type: [MultipleInputDataVerification](src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/MultipleInputDataVerification.java)
- Verifier: [MultipleInputDataVerifier](src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/impl/MultipleInputDataVerifier.java)
#### Description
Detecting columns which has more than one input data (or output columns from decisions).
#### Algorithm
```
TODO
```
## Modeling Level Verification ## Modeling Level Verification
- Classification: [ModelingLevelVerification](src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/classification/ModelingLevelVerification.java) - Classification: [ModelingLevelVerification](src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/classification/ModelingLevelVerification.java)
......
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