From e9e7d0f7460b4a18205ffe22966b2a021d085c18 Mon Sep 17 00:00:00 2001
From: Jonas Blatt <jonasblatt@uni-koblenz.de>
Date: Wed, 30 Oct 2019 17:48:42 +0100
Subject: [PATCH] Optimize id values in action values

---
 .../verification/result/actions/Action.java   | 12 +++++++
 .../impl/MissingInputColumnVerifier.java      |  5 +--
 .../impl/MissingInputDataVerifier.java        |  3 ++
 .../verifier/impl/MissingRuleVerifier.java    |  2 +-
 .../impl/PartialReductionVerifier.java        | 29 +++++++++--------
 .../resources/js/dmnVerifierActions.js        | 32 ++++++++-----------
 6 files changed, 48 insertions(+), 35 deletions(-)

diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/result/actions/Action.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/result/actions/Action.java
index e87bef49..fcb8156c 100644
--- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/result/actions/Action.java
+++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/result/actions/Action.java
@@ -10,6 +10,8 @@ import static de.unikoblenz.fgbks.core.dmn.verification.result.actions.ActionSco
 import static de.unikoblenz.fgbks.core.dmn.verification.result.actions.ActionType.SHOW;
 
 import de.unikoblenz.fgbks.base.builder.DefaultBuilder;
+import de.unikoblenz.fgbks.core.dmn.domain.ids.AbstractId;
+import de.unikoblenz.fgbks.core.dmn.domain.ids.JsonIdentifier;
 import de.unikoblenz.fgbks.core.dmn.verification.result.AbstractResultObject;
 import java.util.HashMap;
 import javax.json.bind.annotation.JsonbProperty;
@@ -83,6 +85,16 @@ public class Action extends AbstractResultObject {
       return this;
     }
 
+    public Builder addIdValue(AbstractId id) {
+      try {
+        String keyValue = id.getClass().getAnnotation(JsonIdentifier.class).value();
+        this.value.values.put(Validate.notNull(keyValue), Validate.notNull(id.getValue()));
+      } catch (Exception e) {
+        // nothing
+      }
+      return this;
+    }
+
     @Override
     protected void validate() {
       super.validate();
diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/impl/MissingInputColumnVerifier.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/impl/MissingInputColumnVerifier.java
index 1fbbef19..fd3a7fe6 100644
--- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/impl/MissingInputColumnVerifier.java
+++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/impl/MissingInputColumnVerifier.java
@@ -77,6 +77,7 @@ public class MissingInputColumnVerifier extends AbstractVerifier {
                 .withFixName(new Name("Delete Input Data"))
                 .addAction(
                     Action.getBuilder()
+                        .addIdValue(inputDataNode.getId())
                         .withActionType(ActionType.DELETE)
                         .withActionScope(ActionScope.INPUT_DATA)
                         .build())
@@ -92,7 +93,7 @@ public class MissingInputColumnVerifier extends AbstractVerifier {
                     Action.getBuilder()
                         .withActionType(ActionType.CREATE)
                         .withActionScope(ActionScope.INPUT_COLUMN)
-                        .addValue("decisionId", decision.getDecisionId().getValue())
+                        .addIdValue(decision.getDecisionId())
                         .addValue("name", inputDataNode.getName().get().getValue())
                         .addValue("typeRef", "string")
                         .build())
@@ -109,7 +110,7 @@ public class MissingInputColumnVerifier extends AbstractVerifier {
                         Action.getBuilder()
                             .withActionType(ActionType.CREATE)
                             .withActionScope(ActionScope.INPUT_COLUMN)
-                            .addValue("decisionId", decision.getDecisionId().getValue())
+                            .addIdValue(decision.getDecisionId())
                             .addValue("name", outputColumn.getName().get().getValue())
                             .addValue("typeRef", outputColumn.getTypeRef().getName())
                             .build())
diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/impl/MissingInputDataVerifier.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/impl/MissingInputDataVerifier.java
index 45a16a94..479e70b5 100644
--- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/impl/MissingInputDataVerifier.java
+++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/impl/MissingInputDataVerifier.java
@@ -71,6 +71,7 @@ public class MissingInputDataVerifier extends AbstractVerifier {
               .withFixName(new Name("Add Data Input"))
               .addAction(
                   Action.getBuilder()
+                      .addIdValue(inputColumn.getVDmnDecision().getDecisionId())
                       .withActionType(ActionType.CREATE)
                       .withActionScope(ActionScope.INPUT_DATA)
                       .addValue("name", inputColumn.getName().get().getValue())
@@ -83,6 +84,8 @@ public class MissingInputDataVerifier extends AbstractVerifier {
             .withFixName(new Name("Delete Column"))
             .addAction(
                 Action.getBuilder()
+                    .addIdValue(inputColumn.getVDmnDecision().getDecisionId())
+                    .addIdValue(inputColumn.getInputId())
                     .withActionType(ActionType.DELETE)
                     .withActionScope(ActionScope.INPUT_COLUMN)
                     .build())
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 6f72e8e9..0771541b 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
@@ -68,7 +68,7 @@ public class MissingRuleVerifier extends AbstractVerifier {
             Action.getBuilder()
                 .withActionScope(ActionScope.RULE)
                 .withActionType(ActionType.CREATE)
-                .addValue("decisionId", missingRule.getVDmnDecision().getDecisionId().getValue());
+                .addIdValue(missingRule.getVDmnDecision().getDecisionId());
         for (VDmnInputValue v : missingRule.getVDmnInputValues()) {
           fixActionBuilder.addValue(
               v.getVDmnInputColumn().getInputId().getValue(), v.getBoundary().getParsedText());
diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/impl/PartialReductionVerifier.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/impl/PartialReductionVerifier.java
index a166b441..dcb12887 100644
--- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/impl/PartialReductionVerifier.java
+++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/impl/PartialReductionVerifier.java
@@ -160,7 +160,7 @@ public class PartialReductionVerifier extends AbstractVerifier {
         Action.getBuilder()
             .withActionScope(ActionScope.RULE)
             .withActionType(ActionType.CREATE)
-            .addValue("decisionId", inColumns.get(0).getVDmnDecision().getDecisionId().getValue());
+            .addIdValue(inColumns.get(0).getVDmnDecision().getDecisionId());
     for (int i = 0; i < inColumns.size(); i++) {
       fixActionBuilder.addValue(
           inColumns.get(i).getInputId().getValue(), boundaries.get(i).getParsedText());
@@ -171,22 +171,25 @@ public class PartialReductionVerifier extends AbstractVerifier {
           outputValues.get(i).getVDmnOutputColumn().getOutputId().getValue(),
           outputValues.get(i).getText().getValue());
     }
-    Action.Builder fixActionBuilder2 =
-        Action.getBuilder().withActionScope(ActionScope.RULE).withActionType(ActionType.DELETE);
-    fixActionBuilder2.addValue(
-        "decisionId", clusterRules.get(0).getVDmnDecision().getDecisionId().getValue());
-    fixActionBuilder2.addValue("ruleId", clusterRules.get(0).getRuleId().getValue());
-    Action.Builder fixActionBuilder3 =
-        Action.getBuilder().withActionScope(ActionScope.RULE).withActionType(ActionType.DELETE);
-    fixActionBuilder3.addValue(
-        "decisionId", clusterRules.get(1).getVDmnDecision().getDecisionId().getValue());
-    fixActionBuilder3.addValue("ruleId", clusterRules.get(1).getRuleId().getValue());
+
     vreFactory.addVerificationFix(
         VerificationFix.getBuilder()
             .withFixName(new Name("Combine"))
             .addAction(fixActionBuilder.build())
-            .addAction(fixActionBuilder2.build())
-            .addAction(fixActionBuilder3.build())
+            .addAction(
+                Action.getBuilder()
+                    .withActionScope(ActionScope.RULE)
+                    .withActionType(ActionType.DELETE)
+                    .addIdValue(clusterRules.get(0).getVDmnDecision().getDecisionId())
+                    .addIdValue(clusterRules.get(0).getRuleId())
+                    .build())
+            .addAction(
+                Action.getBuilder()
+                    .withActionScope(ActionScope.RULE)
+                    .withActionType(ActionType.DELETE)
+                    .addIdValue(clusterRules.get(1).getVDmnDecision().getDecisionId())
+                    .addIdValue(clusterRules.get(1).getRuleId())
+                    .build())
             .build());
   }
 }
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 93879338..e4d72c92 100644
--- a/dmnverifierfrontend/src/main/resources/META-INF/resources/js/dmnVerifierActions.js
+++ b/dmnverifierfrontend/src/main/resources/META-INF/resources/js/dmnVerifierActions.js
@@ -233,8 +233,7 @@ function createRule(verificationEntry, fixAction) {
  */
 function createInputData(verificationEntry, fixAction) {
   openViewWithId(verificationEntry.elements[0].identifier['definitionId']);
-  let decision = getShapeWithId(
-      verificationEntry.elements[0].identifier['decisionId']);
+  let decision = getShapeWithId(fixAction.actionValues['decisionId']);
   const modeler = getCurrentModeler();
   const shape = modeler._elementFactory.createDrdElement('shape',
       {type: 'dmn:InputData'});
@@ -254,7 +253,6 @@ function createInputData(verificationEntry, fixAction) {
  * @param {Action} fixAction
  */
 function createInputColumn(verificationEntry, fixAction) {
-  // getCurrentModeler().createShape(getCurrentModeler()._elementFactory.createDrdElement('shape', {type:'dmn:InputData'}), {x:0,y:0}, dmnModeler._definitions)
   openViewWithId(fixAction.actionValues['decisionId']);
   const modeler = getCurrentModeler();
   let col = modeler.addCol({type: 'dmn:InputClause'});
@@ -300,10 +298,10 @@ function performVerificationFixDELETE(verificationEntry, fixAction) {
 function deleteRule(verificationEntry, fixAction) {
   openViewWithId(fixAction.actionValues['decisionId']);
   const modeler = getCurrentModeler();
-  for (const [key, value] of Object.entries(fixAction.actionValues)) {
-    if (key === 'ruleId') {
-      modeler.removeRow(modeler._sheet._elementRegistry.get(value));
-    }
+  const row = modeler._sheet._elementRegistry.get(
+      fixAction.actionValues['ruleId']);
+  if (row) {
+    modeler.removeRow(row);
   }
 }
 
@@ -316,12 +314,10 @@ function deleteRule(verificationEntry, fixAction) {
 function deleteColumn(verificationEntry, fixAction, columnIdName) {
   openViewWithId(fixAction.actionValues['decisionId']);
   const modeler = getCurrentModeler();
-  verificationEntry.elements.forEach(function (el) {
-    let col = getSheetElementWithId(el.identifier[columnIdName]);
-    if (col) {
-      modeler.removeCol(col);
-    }
-  });
+  const col = getSheetElementWithId(fixAction.actionValues[columnIdName]);
+  if (col) {
+    modeler.removeCol(col);
+  }
 }
 
 /**
@@ -332,12 +328,10 @@ function deleteColumn(verificationEntry, fixAction, columnIdName) {
 function deleteInputData(verificationEntry, fixAction) {
   openViewWithId(verificationEntry.elements[0].identifier['definitionId']);
   const modeler = getCurrentModeler();
-  verificationEntry.elements.forEach(function (el) {
-    let inputData = getShapeWithId(el.identifier['inputDataId']);
-    if (inputData) {
-      modeler.removeShape(inputData);
-    }
-  });
+  let inputData = getShapeWithId(fixAction.actionValues['inputDataId']);
+  if (inputData) {
+    modeler.removeShape(inputData);
+  }
 }
 
 // get a rule:
-- 
GitLab