You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hop.apache.org by ha...@apache.org on 2022/05/30 17:32:05 UTC

[hop] branch master updated: HOP-3965 RuleExecutor & RuleAccumulator: enhance error messages in case rules validation fails

This is an automated email from the ASF dual-hosted git repository.

hansva pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hop.git


The following commit(s) were added to refs/heads/master by this push:
     new 202ce47c30 HOP-3965 RuleExecutor & RuleAccumulator: enhance error messages in case rules validation fails
     new 553ff25a53 Merge pull request #1511 from sramazzina/HOP-3965
202ce47c30 is described below

commit 202ce47c3019b5e3dd5fa4903e268320c130a3b4
Author: Sergio Ramazzina <se...@serasoft.it>
AuthorDate: Mon May 30 14:56:20 2022 +0200

    HOP-3965 RuleExecutor & RuleAccumulator: enhance error messages in case rules validation fails
---
 .../transforms/drools/RuleValidationException.java | 48 ++++++++++++++++++++++
 .../hop/pipeline/transforms/drools/Rules.java      |  8 ++--
 .../transforms/drools/RulesAccumulator.java        | 14 ++++++-
 .../transforms/drools/RulesAccumulatorData.java    |  5 +--
 .../pipeline/transforms/drools/RulesExecutor.java  | 16 ++++++--
 .../transforms/drools/RulesExecutorData.java       |  5 +--
 6 files changed, 81 insertions(+), 15 deletions(-)

diff --git a/plugins/transforms/drools/src/main/java/org/apache/hop/pipeline/transforms/drools/RuleValidationException.java b/plugins/transforms/drools/src/main/java/org/apache/hop/pipeline/transforms/drools/RuleValidationException.java
new file mode 100644
index 0000000000..7f65870d74
--- /dev/null
+++ b/plugins/transforms/drools/src/main/java/org/apache/hop/pipeline/transforms/drools/RuleValidationException.java
@@ -0,0 +1,48 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.hop.pipeline.transforms.drools;
+
+import org.kie.api.builder.Message;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class RuleValidationException extends Exception {
+
+    List<String> messages;
+
+    /**
+     * Constructs a new throwable with the specified set of detail messages.
+     *
+     * @param messages the detailed messages (which is saved for later retrieval by the getMessages()
+     *     method).
+     */
+    public RuleValidationException(List<Message> messages) {
+        super();
+        this.messages = new ArrayList<String>();
+        for (Message item : messages) {
+
+            this.messages.add("Severity: " + item.getLevel().toString() +
+                    " - Line: " + item.getLine() + " - Message: " + item.getText());
+        }
+    }
+
+    public List<String> getMessages() {
+        return messages;
+    }
+}
diff --git a/plugins/transforms/drools/src/main/java/org/apache/hop/pipeline/transforms/drools/Rules.java b/plugins/transforms/drools/src/main/java/org/apache/hop/pipeline/transforms/drools/Rules.java
index bbe08fe031..a7ff3ae08e 100644
--- a/plugins/transforms/drools/src/main/java/org/apache/hop/pipeline/transforms/drools/Rules.java
+++ b/plugins/transforms/drools/src/main/java/org/apache/hop/pipeline/transforms/drools/Rules.java
@@ -25,7 +25,7 @@ public class Rules {
   public static class Row {
     private Map<String, Object> row;
 
-    private Boolean external;
+    private boolean external;
 
     public Row() {
       this( new Hashtable<String, Object>(), false );
@@ -64,7 +64,7 @@ public class Rules {
 
     private Object payload;
 
-    private Boolean external;
+    private boolean external;
 
     public Column() {
       this.external = false;
@@ -112,11 +112,11 @@ public class Rules {
       this.payload = payload;
     }
 
-    public void setExternalSource( Boolean external ) {
+    public void setExternalSource( boolean external ) {
       this.external = external;
     }
 
-    public Boolean isExternalSource() {
+    public boolean isExternalSource() {
       return external;
     }
   }
diff --git a/plugins/transforms/drools/src/main/java/org/apache/hop/pipeline/transforms/drools/RulesAccumulator.java b/plugins/transforms/drools/src/main/java/org/apache/hop/pipeline/transforms/drools/RulesAccumulator.java
index 702d3fe991..9014d43067 100644
--- a/plugins/transforms/drools/src/main/java/org/apache/hop/pipeline/transforms/drools/RulesAccumulator.java
+++ b/plugins/transforms/drools/src/main/java/org/apache/hop/pipeline/transforms/drools/RulesAccumulator.java
@@ -20,13 +20,14 @@ package org.apache.hop.pipeline.transforms.drools;
 
 import org.apache.hop.core.exception.HopException;
 import org.apache.hop.core.exception.HopTransformException;
+import org.apache.hop.i18n.BaseMessages;
 import org.apache.hop.pipeline.Pipeline;
 import org.apache.hop.pipeline.PipelineMeta;
 import org.apache.hop.pipeline.transform.BaseTransform;
 import org.apache.hop.pipeline.transform.TransformMeta;
 
 public class RulesAccumulator  extends BaseTransform<RulesAccumulatorMeta, RulesAccumulatorData> {
-  // private static Class<?> PKG = Rules.class; // for i18n purposes
+  private static Class<?> PKG = Rules.class; // for i18n purposes
 
   public RulesAccumulator(
           TransformMeta transformMeta,
@@ -55,7 +56,16 @@ public class RulesAccumulator  extends BaseTransform<RulesAccumulatorMeta, Rules
       data.setRuleFilePath( meta.getRuleFile() );
       data.setRuleString( meta.getRuleDefinition() );
 
-      data.initializeRules();
+
+      try {
+        data.initializeRules();
+      } catch (RuleValidationException e) {
+
+        for (String message : e.getMessages()) {
+          log.logError(message);
+        }
+        throw new HopTransformException(BaseMessages.getString(PKG, "RulesData.Error.CompileDRL"));
+      }
       data.initializeInput( getInputRowMeta() );
 
       return true;
diff --git a/plugins/transforms/drools/src/main/java/org/apache/hop/pipeline/transforms/drools/RulesAccumulatorData.java b/plugins/transforms/drools/src/main/java/org/apache/hop/pipeline/transforms/drools/RulesAccumulatorData.java
index 12fb0c0293..5779dda843 100644
--- a/plugins/transforms/drools/src/main/java/org/apache/hop/pipeline/transforms/drools/RulesAccumulatorData.java
+++ b/plugins/transforms/drools/src/main/java/org/apache/hop/pipeline/transforms/drools/RulesAccumulatorData.java
@@ -75,7 +75,7 @@ public class RulesAccumulatorData extends BaseTransformData implements ITransfor
     return outputRowMeta;
   }
 
-  public void initializeRules() {
+  public void initializeRules() throws RuleValidationException {
 
     // To ensure the plugin classloader use for dependency resolution
     ClassLoader orig = Thread.currentThread().getContextClassLoader();
@@ -95,8 +95,7 @@ public class RulesAccumulatorData extends BaseTransformData implements ITransfor
 
     Results results1 = kieHelper.verify();
     if (results1.hasMessages(Message.Level.ERROR)) {
-      System.out.println(results1.getMessages());
-      throw new RuntimeException(BaseMessages.getString(PKG, "RulesData.Error.CompileDRL"));
+      throw new RuleValidationException(results1.getMessages());
     }
 
    // reset classloader back to original
diff --git a/plugins/transforms/drools/src/main/java/org/apache/hop/pipeline/transforms/drools/RulesExecutor.java b/plugins/transforms/drools/src/main/java/org/apache/hop/pipeline/transforms/drools/RulesExecutor.java
index a50c38338b..e8ff29adb9 100644
--- a/plugins/transforms/drools/src/main/java/org/apache/hop/pipeline/transforms/drools/RulesExecutor.java
+++ b/plugins/transforms/drools/src/main/java/org/apache/hop/pipeline/transforms/drools/RulesExecutor.java
@@ -19,6 +19,7 @@ package org.apache.hop.pipeline.transforms.drools;
 
 import org.apache.hop.core.exception.HopException;
 import org.apache.hop.core.exception.HopTransformException;
+import org.apache.hop.i18n.BaseMessages;
 import org.apache.hop.pipeline.Pipeline;
 import org.apache.hop.pipeline.PipelineMeta;
 import org.apache.hop.pipeline.transform.BaseTransform;
@@ -26,9 +27,8 @@ import org.apache.hop.pipeline.transform.TransformMeta;
 
 import java.util.Arrays;
 
-
 public class RulesExecutor extends BaseTransform<RulesExecutorMeta, RulesExecutorData> {
-  // private static Class<?> PKG = Rules.class; // for i18n purposes
+  private static Class<?> PKG = Rules.class; // for i18n purposes
 
   public RulesExecutor(
       TransformMeta transformMeta,
@@ -55,7 +55,16 @@ public class RulesExecutor extends BaseTransform<RulesExecutorMeta, RulesExecuto
     data.setRuleFilePath(meta.getRuleFile());
     data.setRuleString(meta.getRuleDefinition());
 
-    data.initializeRules();
+    try {
+      data.initializeRules();
+    } catch (RuleValidationException e) {
+
+      for (String message : e.getMessages()) {
+        log.logError(message);
+      }
+      throw new HopTransformException(BaseMessages.getString(PKG, "RulesData.Error.CompileDRL"));
+    }
+
     data.initializeColumns(getInputRowMeta());
 
     return true;
@@ -76,6 +85,7 @@ public class RulesExecutor extends BaseTransform<RulesExecutorMeta, RulesExecuto
     }
 
     if (first) {
+
       if (!runtimeInit()) {
         return false;
       }
diff --git a/plugins/transforms/drools/src/main/java/org/apache/hop/pipeline/transforms/drools/RulesExecutorData.java b/plugins/transforms/drools/src/main/java/org/apache/hop/pipeline/transforms/drools/RulesExecutorData.java
index 8600b473c8..b6ae2d4961 100644
--- a/plugins/transforms/drools/src/main/java/org/apache/hop/pipeline/transforms/drools/RulesExecutorData.java
+++ b/plugins/transforms/drools/src/main/java/org/apache/hop/pipeline/transforms/drools/RulesExecutorData.java
@@ -77,7 +77,7 @@ public class RulesExecutorData extends BaseTransformData implements ITransformDa
   }
 
 
-  public void initializeRules() {
+  public void initializeRules() throws RuleValidationException {
 
     // To ensure the plugin classloader use for dependency resolution
     ClassLoader orig = Thread.currentThread().getContextClassLoader();
@@ -97,8 +97,7 @@ public class RulesExecutorData extends BaseTransformData implements ITransformDa
 
     Results results1 = kieHelper.verify();
     if (results1.hasMessages(Message.Level.ERROR)) {
-      System.out.println(results1.getMessages());
-      throw new RuntimeException(BaseMessages.getString(PKG, "RulesData.Error.CompileDRL"));
+      throw new RuleValidationException(results1.getMessages());
     }
 
     // reset classloader back to original