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

Merge branch '28-verifier-no-matching-data-types-for-output-column-input-column' into 'develop'

Resolve "Verifier No matching data types for output column -> input column"

Closes #28

See merge request jonasblatt/ma-jonasblatt-dmn-verifier!119
parents 78e39f0d 147c5e57
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.verification.result.VerificationResultEntry.VerificationClassification.ERROR;
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_OUTPUT_COLUMNS;
import static de.unikoblenz.fgbks.core.dmn.verification.result.actions.ActionScope.INPUT_COLUMN;
import static de.unikoblenz.fgbks.core.dmn.verification.result.actions.ActionScope.OUTPUT_COLUMN;
import static de.unikoblenz.fgbks.core.dmn.verification.result.actions.ActionType.UPDATE;
import static de.unikoblenz.fgbks.core.dmn.verification.result.actions.VerificationFix.DEFAULT_SHOW_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.VDmnOutputColumn;
import de.unikoblenz.fgbks.core.dmn.domain.vdmn.utils.VDmnFunctions;
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.WrongDataTypeVerification;
@DmnVerifier(verifierType = WrongDataTypeVerification.class)
public class WrongDataTypeVerifier extends AbstractVerifier {
@Override
protected void doVerification() {
for (VDmnDecision decision : dmnObjectContainer.getVDmnDefinition().getVDmnDecisions()) {
for (VDmnDecision nextDecision : decision.getInformationProvidingDecisions()) {
checkWrongDataTypes(decision, nextDecision);
}
}
}
private void checkWrongDataTypes(VDmnDecision decision, VDmnDecision nextDecision) {
for (VDmnOutputColumn outputColumn : decision.getVDmnDecisionTable().getVDmnOutputColumns()) {
for (VDmnInputColumn inputColumn :
nextDecision.getVDmnDecisionTable().getVDmnInputColumns()) {
if (outputColumn.getName().isPresent()
&& inputColumn.getName().isPresent()
&& outputColumn.getName().equals(inputColumn.getName())
&& outputColumn.getTypeRef() != inputColumn.getTypeRef()) {
if (inputColumn.getValues().size() == 0) {
vreFactory.addVerificationFix(
VerificationFix.getBuilder()
.withFixName(
"Set type of column \""
+ inputColumn.getName().get().getValue()
+ "\" to "
+ outputColumn.getTypeRef().getName())
.addAction(
Action.getBuilder()
.withActionType(UPDATE)
.withActionScope(INPUT_COLUMN)
.addIdValue(inputColumn.getVDmnDecision().getDecisionId())
.addIdValue(inputColumn.getInputId())
.addValue("typeRef", outputColumn.getTypeRef().getName())
.build())
.build());
}
if (outputColumn.getValues().size() == 0) {
vreFactory.addVerificationFix(
VerificationFix.getBuilder()
.withFixName(
"Set type of column \""
+ outputColumn.getName().get().getValue()
+ "\" to "
+ inputColumn.getTypeRef().getName())
.addAction(
Action.getBuilder()
.withActionType(UPDATE)
.withActionScope(OUTPUT_COLUMN)
.addIdValue(outputColumn.getVDmnDecision().getDecisionId())
.addIdValue(outputColumn.getOutputId())
.addValue("typeRef", inputColumn.getTypeRef().getName())
.build())
.build());
}
vreFactory
.addElement(VerificationResultEntryElement.create(inputColumn))
.addElement(VerificationResultEntryElement.create(outputColumn))
.addVerificationFix(
VerificationFix.getBuilder()
.withFixName(DEFAULT_SHOW_NAME)
.addAction(ACTION_SHOW_INPUT_COLUMNS)
.addAction(ACTION_SHOW_OUTPUT_COLUMNS)
.build())
.addToEntry(
ERROR,
VDmnFunctions.templateDecision(outputColumn.getVDmnDecision())
+ " & "
+ VDmnFunctions.templateDecision(inputColumn.getVDmnDecision())
+ "The columns %s have different data types.",
outputColumn.getName().get().getValue());
}
}
}
}
}
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.ModelingLevelVerification;
import javax.validation.constraints.NotNull;
@Type
public class WrongDataTypeVerification extends AbstractVerificationType {
private static final WrongDataTypeVerification instance = new WrongDataTypeVerification();
private WrongDataTypeVerification() {
super(
new Name("WrongDataTypeVerification"),
new Name("Wrong Data Type"),
new Description(
"Detecting output columns and their connected input columns, "
+ "which have different data types."));
}
public static WrongDataTypeVerification getInstance() {
return instance;
}
@Override
public @NotNull ClassificationType getClassification() {
return ModelingLevelVerification.getInstance();
}
}
......@@ -120,7 +120,19 @@ TODO
- Verifier: [EmptyOutputVerifier](src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/impl/EmptyOutputVerifier.java)
#### Description
Detection rules with an empty output values."
Detection rules with an empty output values.
#### Algorithm
```
TODO
```
### Wrong Data Type Verification
- Type: [WrongDataTypeVerification](/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/WrongDataTypeVerification.java)
- Verifier: [WrongDataTypeVerifier](src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/impl/WrongDataTypeVerifier.java)
#### Description
Detecting output columns and their connected input columns, which have different data types.
#### Algorithm
```
......
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