diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/impl/PredefinedMissingValueVerifier.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/impl/PredefinedMissingValueVerifier.java index b9f0f452cc319e2b4d03c5cfab546c81248ea153..9a11764710ae2295f11d1b707baf500d4229bd22 100644 --- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/impl/PredefinedMissingValueVerifier.java +++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/impl/PredefinedMissingValueVerifier.java @@ -1,5 +1,10 @@ package de.unikoblenz.fgbks.core.dmn.verification.verifier.impl; +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.ActionScope.RULE; +import static de.unikoblenz.fgbks.core.dmn.verification.result.actions.ActionType.CREATE; +import static de.unikoblenz.fgbks.core.dmn.verification.result.actions.ActionType.UPDATE; import static de.unikoblenz.fgbks.core.dmn.verification.result.actions.VerificationFix.SHOW_INPUT_COLUMNS; import static de.unikoblenz.fgbks.core.dmn.verification.result.actions.VerificationFix.SHOW_OUTPUT_COLUMNS; @@ -13,6 +18,8 @@ import de.unikoblenz.fgbks.core.dmn.domain.vdmn.VTypeRef; import de.unikoblenz.fgbks.core.dmn.domain.vdmn.utils.VDmnFunctions; 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.PredefinedMissingValueVerification; @@ -82,9 +89,42 @@ public class PredefinedMissingValueVerifier extends AbstractVerifier { } private void addToResult(VDmnColumn stringColumn, Set<String> missingStringValues) { - vreFactory.addElement(VerificationResultEntryElement.create(stringColumn)); - vreFactory.addVerificationFix( - stringColumn.isInputColumn() ? SHOW_INPUT_COLUMNS : SHOW_OUTPUT_COLUMNS); + + // Add fixes for missing values: add rules + for (String value : missingStringValues) { + vreFactory.addVerificationFix( + VerificationFix.getBuilder() + .withFixName("New rule with \"" + value + "\"") + .addAction( + Action.getBuilder() + .withActionScope(RULE) + .withActionType(CREATE) + .addIdValue(stringColumn.getVDmnDecision().getDecisionId()) + .addValue(stringColumn.getColumnId().getValue(), "\"" + value + "\"") + .build()) + .build()); + } + + // Add fixes for missing values: delete predefined value + for (String value : missingStringValues) { + vreFactory.addVerificationFix( + VerificationFix.getBuilder() + .withFixName("Delete predefined value \"" + value + "\"") + .addAction( + Action.getBuilder() + .withActionScope(stringColumn.isInputColumn() ? INPUT_COLUMN : OUTPUT_COLUMN) + .withActionType(UPDATE) + .addIdValue(stringColumn.getVDmnDecision().getDecisionId()) + .addIdValue(stringColumn.getColumnId()) + .addValue("delPredVal", value) + .build()) + .build()); + } + + vreFactory + .addElement(VerificationResultEntryElement.create(stringColumn)) + .addVerificationFix( + stringColumn.isInputColumn() ? SHOW_INPUT_COLUMNS : SHOW_OUTPUT_COLUMNS); StringBuilder sb = new StringBuilder(); sb.append(VDmnFunctions.templateDecisionColumn(stringColumn)); sb.append(missingStringValues.size() > 1 ? "These string values are" : "This string value is"); diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/PredefinedExistingValueVerification.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/PredefinedExistingValueVerification.java index c7132b0e67d5ea2d7f5b03debd62a23e5bb563ee..7c7331bbf79d43d01d365c6aed45986f606e7d10 100644 --- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/PredefinedExistingValueVerification.java +++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/PredefinedExistingValueVerification.java @@ -17,7 +17,7 @@ public class PredefinedExistingValueVerification extends AbstractVerificationTyp new Name("Predefined Existing Values"), new Description( "Detecting string values, " - + "which are not defined in list of predefined values of the column.")); + + "which are not defined in the list of predefined values of the column.")); } public static PredefinedExistingValueVerification getInstance() { diff --git a/dmnverifierapi/verifier.md b/dmnverifierapi/verifier.md index 3f7421d57a0ef37a7e8619ab72a83084f281bb44..609d4d7a882439ebedae78773e869ead2cd0923e 100644 --- a/dmnverifierapi/verifier.md +++ b/dmnverifierapi/verifier.md @@ -72,7 +72,7 @@ TODO - Verifier: [PredefinedExistingValueVerifier](src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/impl/PredefinedExistingValueVerifier.java) #### Description -Detecting string values, which are not defined in list of predefined values of the column. +Detecting string values, which are not defined in the list of predefined values of the column. #### Algorithm ``` diff --git a/dmnverifierfrontend/src/main/resources/META-INF/resources/js/dmnVerifierActions.js b/dmnverifierfrontend/src/main/resources/META-INF/resources/js/dmnVerifierActions.js index d40bd15c6a632fdf7805e8d82e1dc99c4708f75a..eb585a695e126af03a95b66db794f1de23e3bfad 100644 --- a/dmnverifierfrontend/src/main/resources/META-INF/resources/js/dmnVerifierActions.js +++ b/dmnverifierfrontend/src/main/resources/META-INF/resources/js/dmnVerifierActions.js @@ -197,7 +197,6 @@ function performVerificationFixCREATE(verificationEntry, fixAction) { case 'INPUT_ENTRY': case 'OUTPUT_ENTRY': case 'OUTPUT_COLUMN': - case 'DECISION_TABLE': case 'DECISION': default: alert("ACTION undefined: " + fixAction.actionType + ' -> ' @@ -400,9 +399,6 @@ function updateDecision(verificationEntry, fixAction) { openViewWithId(verificationEntry.elements[0].identifier['definitionId']); } -// ACTION CREATE PREDEFINED VALUE -// ) - /** * * @param {VerificationEntry} verificationEntry @@ -420,19 +416,32 @@ function updateColumn(verificationEntry, fixAction, idName) { column.businessObject.inputExpression.text = fixAction.actionValues['name']; } } - if (fixAction.actionValues['addPredVal']) { + if (fixAction.actionValues['addPredVal'] + || fixAction.actionValues['delPredVal']) { let inputVals = []; if (column.businessObject.inputValues) { inputVals = column.businessObject.inputValues.text.split(","); } - let value = fixAction.actionValues['addPredVal']; + let value; + if (fixAction.actionValues['addPredVal']) { + value = fixAction.actionValues['addPredVal']; + } else if (fixAction.actionValues['delPredVal']) { + value = fixAction.actionValues['delPredVal']; + } if (!value.startsWith('"')) { value = '"' + value; } if (!value.endsWith('"')) { value = value + '"'; } - inputVals.push(value); + if (fixAction.actionValues['addPredVal']) { + inputVals.push(value); + } else if (fixAction.actionValues['delPredVal']) { + var index = inputVals.indexOf(value); + if (index > -1) { + inputVals.splice(index, 1); + } + } getCurrentModeler().editAllowedValues(column.businessObject, inputVals); } }