From bb09aa65248ef7f94afcf6bc96d2b040eff382c8 Mon Sep 17 00:00:00 2001
From: Jonas Blatt <jonasblatt@uni-koblenz.de>
Date: Mon, 28 Oct 2019 10:03:49 +0100
Subject: [PATCH] Perform action "add Rule" for missing rule verifier

---
 .../verifier/impl/MissingRuleVerifier.java    |  4 +-
 .../resources/js/dmnVerificationResultSet..js |  2 +-
 .../resources/js/dmnVerifierActions.js        | 48 ++++++++++++++++++-
 3 files changed, 49 insertions(+), 5 deletions(-)

diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/impl/MissingRuleVerifier.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/impl/MissingRuleVerifier.java
index e7e931d3..51d78671 100644
--- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/impl/MissingRuleVerifier.java
+++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/impl/MissingRuleVerifier.java
@@ -66,8 +66,8 @@ public class MissingRuleVerifier extends AbstractVerifier {
       Action.Builder fixActionBuilder =
           Action.getBuilder().withActionScope(ActionScope.RULE).withActionType(ActionType.CREATE);
       for (VDmnInputValue v : missingRule.getDmnInputValues()) {
-        fixActionBuilder.addValue("inputColumnId", v.getDmnInputColumn().getInputId().getValue());
-        fixActionBuilder.addValue("value", v.getBoundary().getParsedText());
+        fixActionBuilder.addValue(
+            v.getDmnInputColumn().getInputId().getValue(), v.getBoundary().getParsedText());
       }
       vreFactory
           .addVerificationFix(VerificationFix.SHOW_DECISION)
diff --git a/dmnverifierfrontend/src/main/resources/META-INF/resources/js/dmnVerificationResultSet..js b/dmnverifierfrontend/src/main/resources/META-INF/resources/js/dmnVerificationResultSet..js
index 83469d1e..5d859c63 100644
--- a/dmnverifierfrontend/src/main/resources/META-INF/resources/js/dmnVerificationResultSet..js
+++ b/dmnverifierfrontend/src/main/resources/META-INF/resources/js/dmnVerificationResultSet..js
@@ -47,7 +47,7 @@
  * @property {number} id
  * @property {string} actionScope
  * @property {string} actionType SHOW, UPDATE, INSERT, DELETE
- * @property {Object.<string, number>} actionValues
+ * @property {Object.<string, string>} actionValues
  */
 
 /**
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 75706537..68758229 100644
--- a/dmnverifierfrontend/src/main/resources/META-INF/resources/js/dmnVerifierActions.js
+++ b/dmnverifierfrontend/src/main/resources/META-INF/resources/js/dmnVerifierActions.js
@@ -16,8 +16,9 @@ function performVerificationFix(verificationEntry, fix, id) {
         break;
       case 'UPDATE':
         // break;
-      case 'INSERT':
-        // break;
+      case 'CREATE':
+        performVerificationFixCREATE(verificationEntry, fix.actions[i]);
+        break;
       case 'DELETE':
         // break;
       default:
@@ -135,3 +136,46 @@ function fixSHOW_DECISION_TABLE(verificationEntry, fixAction) {
 function fixSHOW_DECISION(verificationEntry, fixAction) {
   highlightDecision(verificationEntry.elements);
 }
+
+/**
+ *
+ * @param {VerificationEntry} verificationEntry
+ * @param {Action} fixAction
+ */
+function performVerificationFixCREATE(verificationEntry, fixAction) {
+  switch (fixAction.actionScope) {
+    case 'RULE':
+      createRule(verificationEntry, fixAction);
+      break;
+    case 'INPUT_ENTRY':
+    case 'OUTPUT_ENTRY':
+    case 'INPUT_DATA':
+    case 'INPUT_COLUMN':
+    case 'OUTPUT_COLUMN':
+    case 'DECISION_TABLE':
+    case 'DECISION':
+    default:
+      alert("ACTION undefined: " + fix.actions[i].actionType + ' -> '
+          + fix.actions[i].actionScope);
+  }
+}
+
+/**
+ *
+ * @param {VerificationEntry}  verificationEntry
+ * @param {Action} fixAction
+ */
+function createRule(verificationEntry, fixAction) {
+  $('#tab-dec-'
+      + verificationEntry.elements[0].identifier['decisionId']).click();
+  $('.tjs-table tfoot .add-rule-add').click();
+  let $lastRow = $('.tjs-table tbody tr:last');
+  for (const [key, value] of Object.entries(fixAction.actionValues)) {
+    let $cell = $lastRow.find('[data-col-id=' + key + ']').find(
+        '.content-editable');
+    $cell.empty();
+    $cell.append(`${value}`);
+    $cell.append(`<br>`);
+    $cell.trigger('input')
+  }
+}
-- 
GitLab