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 2023/03/14 12:19:46 UTC
[hop] branch master updated: Fix Start Action can have conditional output #2545
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 8f7c52da86 Fix Start Action can have conditional output #2545
new 2debbb695f Merge pull request #2551 from nadment/2545
8f7c52da86 is described below
commit 8f7c52da86f96b8f00ca2f29ee8e2dfa3575fd05
Author: Nicolas Adment <39...@users.noreply.github.com>
AuthorDate: Fri Mar 10 22:06:00 2023 +0100
Fix Start Action can have conditional output #2545
- Cleanup hop serialization
---
.../main/java/org/apache/hop/base/BaseHopMeta.java | 18 +++++++-
.../org/apache/hop/pipeline/PipelineHopMeta.java | 33 +++++---------
.../org/apache/hop/workflow/WorkflowHopMeta.java | 51 ++++++++--------------
.../workflow/context/HopGuiWorkflowHopContext.java | 24 +++++++++-
4 files changed, 66 insertions(+), 60 deletions(-)
diff --git a/engine/src/main/java/org/apache/hop/base/BaseHopMeta.java b/engine/src/main/java/org/apache/hop/base/BaseHopMeta.java
index 8572930e00..9307f949e2 100644
--- a/engine/src/main/java/org/apache/hop/base/BaseHopMeta.java
+++ b/engine/src/main/java/org/apache/hop/base/BaseHopMeta.java
@@ -16,12 +16,18 @@
*/
package org.apache.hop.base;
+import org.apache.hop.core.xml.XmlHandler;
+import org.w3c.dom.Node;
+
/**
* This class defines a base hop from one action copy to another, or from one transform to another.
*/
public abstract class BaseHopMeta<T> {
- public static final String XML_TAG = "hop";
-
+ public static final String XML_HOP_TAG = "hop";
+ public static final String XML_FROM_TAG = "from";
+ public static final String XML_TO_TAG = "to";
+ public static final String XML_ENABLED_TAG = "enabled";
+
public boolean split = false;
protected T from;
protected T to;
@@ -89,4 +95,12 @@ public abstract class BaseHopMeta<T> {
public void setSplit(boolean split) {
this.split = split;
}
+
+ protected boolean getTagValueAsBoolean(final Node node, final String tag, final boolean defaultValue) {
+ String value = XmlHandler.getTagValue(node, tag);
+ if (value == null) {
+ return defaultValue;
+ }
+ return value.equalsIgnoreCase("Y");
+ }
}
diff --git a/engine/src/main/java/org/apache/hop/pipeline/PipelineHopMeta.java b/engine/src/main/java/org/apache/hop/pipeline/PipelineHopMeta.java
index c24a6a8833..4692449689 100644
--- a/engine/src/main/java/org/apache/hop/pipeline/PipelineHopMeta.java
+++ b/engine/src/main/java/org/apache/hop/pipeline/PipelineHopMeta.java
@@ -33,20 +33,16 @@ public class PipelineHopMeta extends BaseHopMeta<TransformMeta>
implements Comparable<PipelineHopMeta>, Cloneable {
private static final Class<?> PKG = Pipeline.class; // For Translator
- public static final String XML_HOP_TAG = "hop";
- public static final String XML_FROM_TAG = "from";
- public static final String XML_TO_TAG = "to";
-
public PipelineHopMeta(TransformMeta from, TransformMeta to, boolean en) {
this.from = from;
this.to = to;
- enabled = en;
+ this.enabled = en;
}
public PipelineHopMeta(TransformMeta from, TransformMeta to) {
this.from = from;
this.to = to;
- enabled = true;
+ this.enabled = true;
}
public PipelineHopMeta() {
@@ -55,18 +51,11 @@ public class PipelineHopMeta extends BaseHopMeta<TransformMeta>
public PipelineHopMeta(Node hopNode, List<TransformMeta> transforms) throws HopXmlException {
try {
- this.from =
- searchTransform(
- transforms, XmlHandler.getTagValue(hopNode, PipelineHopMeta.XML_FROM_TAG));
+ this.from = searchTransform(transforms,
+ XmlHandler.getTagValue(hopNode, XML_FROM_TAG));
this.to =
- searchTransform(transforms, XmlHandler.getTagValue(hopNode, PipelineHopMeta.XML_TO_TAG));
- String en = XmlHandler.getTagValue(hopNode, "enabled");
-
- if (en == null) {
- enabled = true;
- } else {
- enabled = en.equalsIgnoreCase("Y");
- }
+ searchTransform(transforms, XmlHandler.getTagValue(hopNode, XML_TO_TAG));
+ this.enabled = getTagValueAsBoolean(hopNode, XML_ENABLED_TAG, true);
} catch (Exception e) {
throw new HopXmlException(
BaseMessages.getString(PKG, "PipelineHopMeta.Exception.UnableToLoadHopInfo"), e);
@@ -148,13 +137,13 @@ public class PipelineHopMeta extends BaseHopMeta<TransformMeta>
StringBuilder xml = new StringBuilder(200);
if (this.from != null && this.to != null) {
- xml.append(" ").append(XmlHandler.openTag(XML_TAG)).append(Const.CR);
+ xml.append(" ").append(XmlHandler.openTag(XML_HOP_TAG)).append(Const.CR);
xml.append(" ")
- .append(XmlHandler.addTagValue(PipelineHopMeta.XML_FROM_TAG, this.from.getName()));
+ .append(XmlHandler.addTagValue(XML_FROM_TAG, this.from.getName()));
xml.append(" ")
- .append(XmlHandler.addTagValue(PipelineHopMeta.XML_TO_TAG, this.to.getName()));
- xml.append(" ").append(XmlHandler.addTagValue("enabled", enabled));
- xml.append(" ").append(XmlHandler.closeTag(XML_TAG)).append(Const.CR);
+ .append(XmlHandler.addTagValue(XML_TO_TAG, this.to.getName()));
+ xml.append(" ").append(XmlHandler.addTagValue(XML_ENABLED_TAG, enabled));
+ xml.append(" ").append(XmlHandler.closeTag(XML_HOP_TAG)).append(Const.CR);
}
return xml.toString();
diff --git a/engine/src/main/java/org/apache/hop/workflow/WorkflowHopMeta.java b/engine/src/main/java/org/apache/hop/workflow/WorkflowHopMeta.java
index 7649a9dc03..9273f09ae6 100644
--- a/engine/src/main/java/org/apache/hop/workflow/WorkflowHopMeta.java
+++ b/engine/src/main/java/org/apache/hop/workflow/WorkflowHopMeta.java
@@ -31,9 +31,9 @@ import java.util.List;
public class WorkflowHopMeta extends BaseHopMeta<ActionMeta> implements Cloneable {
private static final Class<?> PKG = WorkflowHopMeta.class; // For Translator
- public static final String XML_FROM_TAG = "from";
- public static final String XML_TO_TAG = "to";
-
+ public static final String XML_EVALUATION_TAG = "evaluation";
+ public static final String XML_UNCONDITIONAL_TAG = "unconditional";
+
private boolean evaluation;
private boolean unconditional;
@@ -68,16 +68,11 @@ public class WorkflowHopMeta extends BaseHopMeta<ActionMeta> implements Cloneabl
public WorkflowHopMeta(Node hopNode, List<ActionMeta> actions) throws HopXmlException {
try {
- this.from =
- searchAction(actions, XmlHandler.getTagValue(hopNode, WorkflowHopMeta.XML_FROM_TAG));
- this.to = searchAction(actions, XmlHandler.getTagValue(hopNode, WorkflowHopMeta.XML_TO_TAG));
- String en = XmlHandler.getTagValue(hopNode, "enabled");
-
- if (en == null) {
- enabled = true;
- } else {
- enabled = en.equalsIgnoreCase("Y");
- }
+ this.from = searchAction(actions, XmlHandler.getTagValue(hopNode, XML_FROM_TAG));
+ this.to = searchAction(actions, XmlHandler.getTagValue(hopNode, XML_TO_TAG));
+ this.enabled = getTagValueAsBoolean(hopNode, XML_ENABLED_TAG, true);
+ this.evaluation = getTagValueAsBoolean(hopNode, XML_EVALUATION_TAG, true);
+ this.unconditional = getTagValueAsBoolean(hopNode, XML_UNCONDITIONAL_TAG, false);
} catch (Exception e) {
throw new HopXmlException(
BaseMessages.getString(PKG, "WorkflowHopMeta.Exception.UnableToLoadHopInfo"), e);
@@ -111,24 +106,12 @@ public class WorkflowHopMeta extends BaseHopMeta<ActionMeta> implements Cloneabl
try {
String fromName = XmlHandler.getTagValue(hopNode, XML_FROM_TAG);
String toName = XmlHandler.getTagValue(hopNode, XML_TO_TAG);
- String sEnabled = XmlHandler.getTagValue(hopNode, "enabled");
- String sEvaluation = XmlHandler.getTagValue(hopNode, "evaluation");
- String sUnconditional = XmlHandler.getTagValue(hopNode, "unconditional");
-
+
this.from = workflow.findAction(fromName);
this.to = workflow.findAction(toName);
-
- if (sEnabled == null) {
- enabled = true;
- } else {
- enabled = "Y".equalsIgnoreCase(sEnabled);
- }
- if (sEvaluation == null) {
- evaluation = true;
- } else {
- evaluation = "Y".equalsIgnoreCase(sEvaluation);
- }
- unconditional = "Y".equalsIgnoreCase(sUnconditional);
+ this.enabled = getTagValueAsBoolean(hopNode, XML_ENABLED_TAG, true);
+ this.evaluation = getTagValueAsBoolean(hopNode, XML_EVALUATION_TAG, true);
+ this.unconditional = getTagValueAsBoolean(hopNode, XML_UNCONDITIONAL_TAG, false);
} catch (Exception e) {
throw new HopXmlException(
BaseMessages.getString(PKG, "WorkflowHopMeta.Exception.UnableToLoadHopInfoXML"), e);
@@ -138,13 +121,13 @@ public class WorkflowHopMeta extends BaseHopMeta<ActionMeta> implements Cloneabl
public String getXml() {
StringBuilder xml = new StringBuilder(200);
if ((null != this.from) && (null != this.to)) {
- xml.append(" ").append(XmlHandler.openTag(XML_TAG)).append(Const.CR);
+ xml.append(" ").append(XmlHandler.openTag(XML_HOP_TAG)).append(Const.CR);
xml.append(" ").append(XmlHandler.addTagValue(XML_FROM_TAG, this.from.getName()));
xml.append(" ").append(XmlHandler.addTagValue(XML_TO_TAG, this.to.getName()));
- xml.append(" ").append(XmlHandler.addTagValue("enabled", enabled));
- xml.append(" ").append(XmlHandler.addTagValue("evaluation", evaluation));
- xml.append(" ").append(XmlHandler.addTagValue("unconditional", unconditional));
- xml.append(" ").append(XmlHandler.closeTag(XML_TAG)).append(Const.CR);
+ xml.append(" ").append(XmlHandler.addTagValue(XML_ENABLED_TAG, this.enabled));
+ xml.append(" ").append(XmlHandler.addTagValue(XML_EVALUATION_TAG, this.evaluation));
+ xml.append(" ").append(XmlHandler.addTagValue(XML_UNCONDITIONAL_TAG, this.unconditional));
+ xml.append(" ").append(XmlHandler.closeTag(XML_HOP_TAG)).append(Const.CR);
}
return xml.toString();
diff --git a/ui/src/main/java/org/apache/hop/ui/hopgui/file/workflow/context/HopGuiWorkflowHopContext.java b/ui/src/main/java/org/apache/hop/ui/hopgui/file/workflow/context/HopGuiWorkflowHopContext.java
index 1a5bbce64c..b14f3bcf34 100644
--- a/ui/src/main/java/org/apache/hop/ui/hopgui/file/workflow/context/HopGuiWorkflowHopContext.java
+++ b/ui/src/main/java/org/apache/hop/ui/hopgui/file/workflow/context/HopGuiWorkflowHopContext.java
@@ -20,6 +20,7 @@ package org.apache.hop.ui.hopgui.file.workflow.context;
import org.apache.hop.core.gui.Point;
import org.apache.hop.core.gui.plugin.action.GuiAction;
import org.apache.hop.core.gui.plugin.action.GuiActionLambdaBuilder;
+import org.apache.hop.core.util.TranslateUtil;
import org.apache.hop.ui.hopgui.context.BaseGuiContextHandler;
import org.apache.hop.ui.hopgui.context.IGuiContextHandler;
import org.apache.hop.ui.hopgui.file.workflow.HopGuiWorkflowGraph;
@@ -33,6 +34,8 @@ public class HopGuiWorkflowHopContext extends BaseGuiContextHandler implements I
public static final String CONTEXT_ID = "HopGuiWorkflowHopContext";
+ private static String ROUTING_CATEGORY = TranslateUtil.translate("i18n::HopGuiWorkflowGraph.ContextualAction.Category.Routing.Text", HopGuiWorkflowGraph.class);
+
private WorkflowMeta workflowMeta;
private WorkflowHopMeta hopMeta;
private HopGuiWorkflowGraph workflowGraph;
@@ -70,14 +73,31 @@ public class HopGuiWorkflowHopContext extends BaseGuiContextHandler implements I
//
List<GuiAction> pluginActions = getPluginActions(true);
if (pluginActions != null) {
- for (GuiAction pluginAction : pluginActions) {
- actions.add(lambdaBuilder.createLambda(pluginAction, this, workflowGraph));
+ for (GuiAction pluginAction : pluginActions) {
+ if ( isGuiActionAvailable(pluginAction) ) {
+ actions.add(lambdaBuilder.createLambda(pluginAction, this, workflowGraph));
+ }
}
}
return actions;
}
+ protected boolean isGuiActionAvailable(final GuiAction guiAction) {
+ if (hopMeta==null) {
+ return false;
+ }
+
+ // Filter routing action on the first hop after Start
+ //
+ // TODO: Find a more robust way to detect routing actions
+ if ( hopMeta.getFromAction().isStart() && guiAction.getCategory().equals(ROUTING_CATEGORY) ) {
+ return false;
+ }
+
+ return true;
+ }
+
/**
* Gets workflowMeta
*