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

Add missing input data verifier

parent 6a54b7bd
No related branches found
No related tags found
No related merge requests found
......@@ -31,4 +31,22 @@ public interface VDmnNode extends VDmnElement {
* @return an optional {@link Name}
*/
Optional<Name> getName();
/**
* Check, if the node is a {@link VDmnDecision} node.
*
* @return true, if the node is a {@link VDmnDecision}
*/
default boolean isDecision() {
return this instanceof VDmnDecision;
}
/**
* Check, if the node is a {@link VDmnInputData} node.
*
* @return true, if the node is a {@link VDmnInputData}
*/
default boolean isInputData() {
return this instanceof VDmnInputData;
}
}
package de.unikoblenz.fgbks.core.dmn.verification.verifier.impl;
import static de.unikoblenz.fgbks.core.dmn.verification.result.actions.VerificationFix.SHOW_INPUT_COLUMNS;
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.verifier.AbstractVerifier;
import de.unikoblenz.fgbks.core.dmn.verification.verifier.DmnVerifier;
import de.unikoblenz.fgbks.core.dmn.verification.verifier.types.MissingInputDataVerification;
import java.util.List;
@DmnVerifier(verifierType = MissingInputDataVerification.class)
public class MissingInputDataVerifier 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 one input data node or one output column from a
// decision node
for (VDmnInputColumn inputColumn : decision.getDmnDecisionTable().getInputColumns()) {
checkExistingInputData(inputColumn, inputNodes);
}
}
}
private void checkExistingInputData(VDmnInputColumn inputColumn, List<VDmnNode> inputNodes) {
// if the inputColumn has no name, add the column
if (inputColumn.getName().isPresent()) {
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)) {
return;
}
} 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)) {
return;
}
}
}
}
}
// no input data found yet -> add column to results
String label = "";
if (inputColumn.getLabel().isPresent()) {
label = inputColumn.getLabel().get().getValue();
} else if (inputColumn.getName().isPresent()) {
label = inputColumn.getName().get().getValue();
} else {
label = "no name";
}
vreFactory
.addElement(VerificationResultEntryElement.create(inputColumn))
.addVerificationFix(SHOW_INPUT_COLUMNS)
.addToEntry(
VerificationClassification.WARNING, "Input column \"%s\" has no input data.", label);
}
}
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 MissingInputDataVerification extends AbstractVerificationType {
private static final MissingInputDataVerification instance =
new MissingInputDataVerification();
private MissingInputDataVerification() {
super(
new Name("MissingInputDataVerification"),
new Description(
"todo")); // TODO englisch
}
public static MissingInputDataVerification getInstance() {
return instance;
}
@Override
public @NotNull ClassificationType getClassification() {
return DrdModelingLevelVerification.getInstance();
}
}
......@@ -28,6 +28,17 @@ doVerification (Definition d) {
}
```
### Missing Input Data Verification
- Type: [MissingInputDataVerification](src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/MissingInputDataVerification.java)
- Verifier: [MissingInputDataVerifier](src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/impl/MissingInputDataVerifier.java)
#### Description
#### Algorithm
```
TODO
```
## Modeling Level Verification
- 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