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

Add new verifier "Lonely Data Input Verification"

parent c3cae130
No related branches found
No related tags found
No related merge requests found
Showing with 109 additions and 2 deletions
......@@ -4,6 +4,7 @@ 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.vdmn.VDmnColumn;
import de.unikoblenz.fgbks.core.dmn.domain.vdmn.VDmnDecisionTable;
import de.unikoblenz.fgbks.core.dmn.domain.vdmn.VDmnInputData;
import de.unikoblenz.fgbks.core.dmn.domain.vdmn.VDmnValue;
import java.util.HashMap;
import java.util.Map;
......@@ -82,6 +83,20 @@ public class VerificationResultEntryElement extends AbstractResultObject {
.withIdentifier(column.getColumnId());
}
/**
* Create a new {@link VerificationResultEntryElement} with the initial identifier from a {@link
* VDmnInputData}. Call {@link VerificationResultEntryElement#withIdentifier(AbstractId)} to add
* further identifier.
*
* @param inputData the {@link VDmnInputData}
* @return the new {@link VerificationResultEntryElement}
*/
public static VerificationResultEntryElement create(VDmnInputData inputData) {
return new VerificationResultEntryElement()
.withIdentifier(inputData.getDmnDefinition().getDefinitionId())
.withIdentifier(inputData.getInputDataId());
}
/**
* Get all required ids ({@link AbstractId}) of the {@link VerificationResultEntryElement}.
*
......
package de.unikoblenz.fgbks.core.dmn.verification.result.actions;
import static de.unikoblenz.fgbks.core.dmn.verification.result.actions.ActionScope.INPUT_COLUMN;
import static de.unikoblenz.fgbks.core.dmn.verification.result.actions.ActionScope.INPUT_DATA;
import static de.unikoblenz.fgbks.core.dmn.verification.result.actions.ActionScope.INPUT_ENTRY;
import static de.unikoblenz.fgbks.core.dmn.verification.result.actions.ActionScope.OUTPUT_COLUMN;
import static de.unikoblenz.fgbks.core.dmn.verification.result.actions.ActionScope.OUTPUT_ENTRY;
......@@ -15,6 +16,7 @@ import org.apache.commons.lang3.Validate;
public class Action extends AbstractResultObject {
public static Action ACTION_SHOW_INPUT_DATA;
public static Action ACTION_SHOW_RULES;
public static Action ACTION_SHOW_INPUT_ENTRIES;
public static Action ACTION_SHOW_OUTPUT_ENTRIES;
......@@ -22,6 +24,7 @@ public class Action extends AbstractResultObject {
public static Action ACTION_SHOW_OUTPUT_COLUMNS;
static {
ACTION_SHOW_INPUT_DATA = getBuilder().withActionType(SHOW).withActionScope(INPUT_DATA).build();
ACTION_SHOW_RULES = getBuilder().withActionType(SHOW).withActionScope(RULE).build();
ACTION_SHOW_INPUT_ENTRIES =
getBuilder().withActionType(SHOW).withActionScope(INPUT_ENTRY).build();
......
......@@ -4,7 +4,8 @@ public enum ActionScope {
RULE,
INPUT_ENTRY,
OUTPUT_ENTRY,
INPUT_NODE,
INPUT_DATA,
INPUT_COLUMN,
OUTPUT_COLUMN
OUTPUT_COLUMN,
DECISION
}
package de.unikoblenz.fgbks.core.dmn.verification.result.actions;
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.Action.ACTION_SHOW_INPUT_ENTRIES;
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.Action.ACTION_SHOW_OUTPUT_ENTRIES;
......@@ -17,6 +18,7 @@ public class VerificationFix {
private static final Name DEFAULT_FIX_NAME = new Name("Fix");
private static final Name DEFAULT_SHOW_NAME = new Name("Show");
public static VerificationFix SHOW_INPUT_DATA;
public static VerificationFix SHOW_RULES;
public static VerificationFix SHOW_INPUT_ENTRIES;
public static VerificationFix SHOW_OUTPUT_ENTRIES;
......@@ -24,6 +26,11 @@ public class VerificationFix {
public static VerificationFix SHOW_OUTPUT_COLUMNS;
static {
SHOW_INPUT_DATA =
VerificationFix.getBuilder()
.withFixName(DEFAULT_SHOW_NAME)
.addAction(ACTION_SHOW_INPUT_DATA)
.build();
SHOW_RULES =
VerificationFix.getBuilder()
.withFixName(DEFAULT_SHOW_NAME)
......
package de.unikoblenz.fgbks.core.dmn.verification.verifier.classification;
import de.unikoblenz.fgbks.base.domain.Description;
import de.unikoblenz.fgbks.base.domain.Name;
@Classification
public class DrdModelingLevelVerification extends AbstractClassificationType {
private static final DrdModelingLevelVerification instance =
new DrdModelingLevelVerification();
private DrdModelingLevelVerification() {
super(new Name("DrdModeling"), new Description("test")); // TODO
}
public static DrdModelingLevelVerification getInstance() {
return instance;
}
}
package de.unikoblenz.fgbks.core.dmn.verification.verifier.impl;
import static de.unikoblenz.fgbks.core.dmn.verification.result.actions.VerificationFix.SHOW_INPUT_DATA;
import de.unikoblenz.fgbks.base.domain.Name;
import de.unikoblenz.fgbks.core.dmn.domain.vdmn.VDmnInputData;
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.LonelyDataInputVerification;
import java.util.function.Supplier;
@DmnVerifier(verifierType = LonelyDataInputVerification.class)
public class LonelyDataInputVerifier extends AbstractVerifier {
private Supplier<Name> defaultName = () -> new Name("[no name]");
@Override
protected void doVerification() {
for (VDmnInputData i : dmnObjectContainer.getVDmnDefinition().getDmnInputData()) {
if (i.getInformationProvidingDecisions().isEmpty()) {
vreFactory
.addElement(VerificationResultEntryElement.create(i))
.addVerificationFix(SHOW_INPUT_DATA)
.addToEntry(
VerificationClassification.WARNING,
"Input data \"%s\" has no outgoing connections to at least one decision node.",
i.getName().orElseGet(defaultName));
}
}
}
}
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 LonelyDataInputVerification extends AbstractVerificationType {
private static final LonelyDataInputVerification instance = new LonelyDataInputVerification();
private LonelyDataInputVerification() {
super(
new Name("LonelyDataInputVerification"),
new Description(
"Checks for any input data node, if it has no connection to at least one decision table."));
}
public static LonelyDataInputVerification getInstance() {
return instance;
}
@Override
public @NotNull ClassificationType getClassification() {
return DrdModelingLevelVerification.getInstance();
}
}
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