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/incubator-hop.git


The following commit(s) were added to refs/heads/master by this push:
     new b9edb33  HOP-3236 - Dummy task wrongly converted in workflows
     new 4d21fe2  Merge pull request #1032 from sramazzina/HOP-3236
b9edb33 is described below

commit b9edb3340bb19954e1f75e32919fb806412d13f3
Author: sergio.ramazzina <[email protected]>
AuthorDate: Wed Sep 1 00:52:56 2021 +0200

    HOP-3236 - Dummy task wrongly converted in workflows
---
 .../org/apache/hop/imports/kettle/KettleConst.java | 28 +++++++
 .../apache/hop/imports/kettle/KettleImport.java    | 88 ++++++++++++++++------
 2 files changed, 94 insertions(+), 22 deletions(-)

diff --git 
a/plugins/misc/import/src/main/java/org/apache/hop/imports/kettle/KettleConst.java
 
b/plugins/misc/import/src/main/java/org/apache/hop/imports/kettle/KettleConst.java
index 88b613a..9affe61 100644
--- 
a/plugins/misc/import/src/main/java/org/apache/hop/imports/kettle/KettleConst.java
+++ 
b/plugins/misc/import/src/main/java/org/apache/hop/imports/kettle/KettleConst.java
@@ -98,6 +98,34 @@ public class KettleConst {
               })
           .collect(Collectors.toMap(data -> (String) data[0], data -> (String) 
data[1]));
 
+  public static final Map<String, String> kettleStartEntryElementsToRemove =
+      Stream.of(
+              new Object[][] {
+                {"start", ""},
+                {"draw", ""},
+                {"nr", ""},
+                {"dummy", ""}
+              })
+          .collect(Collectors.toMap(data -> (String) data[0], data -> (String) 
data[1]));
+
+  public static final Map<String, String> kettleDummyEntryElementsToRemove =
+      Stream.of(
+              new Object[][] {
+                {"start", ""},
+                {"dummy", ""},
+                {"repeat", ""},
+                {"schedulerType", ""},
+                {"intervalSeconds", ""},
+                {"intervalMinutes", ""},
+                {"hour", ""},
+                {"minutes", ""},
+                {"weekDay", ""},
+                {"DayOfMonth", ""},
+                {"draw", ""},
+                {"nr", ""}
+              })
+          .collect(Collectors.toMap(data -> (String) data[0], data -> (String) 
data[1]));
+
   public static final Map<String, String> kettleReplaceContent =
       Stream.of(
               new Object[][] {
diff --git 
a/plugins/misc/import/src/main/java/org/apache/hop/imports/kettle/KettleImport.java
 
b/plugins/misc/import/src/main/java/org/apache/hop/imports/kettle/KettleImport.java
index 205844e..ca8aa1f 100644
--- 
a/plugins/misc/import/src/main/java/org/apache/hop/imports/kettle/KettleImport.java
+++ 
b/plugins/misc/import/src/main/java/org/apache/hop/imports/kettle/KettleImport.java
@@ -70,6 +70,12 @@ public class KettleImport extends HopImportBase implements 
IHopImport {
   private String variablesTargetConfigFile;
   private String connectionsReportFileName;
 
+  private enum EntryType {
+    START,
+    DUMMY,
+    OTHER
+  };
+
   public KettleImport() {
     super();
   }
@@ -155,7 +161,8 @@ public class KettleImport extends HopImportBase implements 
IHopImport {
       //
       documentElement.insertBefore(nameSync, 
XmlHandler.getSubNode(documentElement, "description"));
     }
-    processNode(doc, documentElement);
+
+    processNode(doc, documentElement, EntryType.OTHER);
 
     // Align x/y locations with a grid size...
     //
@@ -452,7 +459,7 @@ public class KettleImport extends HopImportBase implements 
IHopImport {
     doc.renameNode(element, null, newElementName);
   }
 
-  private void processNode(Document doc, Node node) {
+  private void processNode(Document doc, Node node, EntryType entryType) {
     Node nodeToProcess = node;
     NodeList nodeList = nodeToProcess.getChildNodes();
 
@@ -478,34 +485,71 @@ public class KettleImport extends HopImportBase 
implements IHopImport {
 
     for (int i = 0; i < nodeList.getLength(); i++) {
       Node currentNode = nodeList.item(i);
-
       if (currentNode.getNodeType() == Node.ELEMENT_NODE) {
+        // Identify if an entry is of type START or DUMMY type because they 
must be managed properly
+        if (currentNode.getNodeName().equals("entry")) {
+          entryType = EntryType.OTHER;
+          Node entryTypeNode = null;
+          boolean isEntryTypeSpecial = false;
+          NodeList currentNodeChildNodes = currentNode.getChildNodes();
+          for (int i1 = 0; i1 < currentNodeChildNodes.getLength(); i1++) {
+            Node childNode = currentNodeChildNodes.item(i1);
+            if (childNode.getNodeType() == Node.ELEMENT_NODE) {
+              if (childNode.getNodeName().equals("type")
+                  && 
childNode.getChildNodes().item(0).getNodeValue().equals("SPECIAL")) {
+                isEntryTypeSpecial = true;
+                entryTypeNode = childNode;
+              } else if (isEntryTypeSpecial
+                  && childNode.getNodeName().equals("start")
+                  && 
childNode.getChildNodes().item(0).getNodeValue().equals("Y")) {
+                entryType = EntryType.START;
+              } else if (isEntryTypeSpecial
+                  && childNode.getNodeName().equals("dummy")
+                  && 
childNode.getChildNodes().item(0).getNodeValue().equals("Y")) {
+                entryType = EntryType.DUMMY;
+                // Immediately change entry type to DUMMY to not bother about 
it later on
+                entryTypeNode.getFirstChild().setTextContent("DUMMY");
+              }
+            }
+          }
+        }
 
         // remove superfluous elements
-        if 
(KettleConst.kettleElementsToRemove.containsKey(currentNode.getNodeName())) {
-          if (!StringUtils.isEmpty(
-              
KettleConst.kettleElementsToRemove.get(currentNode.getNodeName()))) {
-            // see if we have multiple parent nodes to check for:
-            if 
(KettleConst.kettleElementsToRemove.get(currentNode.getNodeName()).contains(","))
 {
-              Node parentNode = currentNode.getParentNode();
-              String[] parentNodeNames =
-                  
KettleConst.kettleElementsToRemove.get(currentNode.getNodeName()).split(",");
-              for (String parentNodeName : parentNodeNames) {
-                if (parentNode.getNodeName().equals(parentNodeName)) {
-                  parentNode.removeChild(currentNode);
+        if (entryType == EntryType.OTHER) {
+          if 
(KettleConst.kettleElementsToRemove.containsKey(currentNode.getNodeName())) {
+            if (!StringUtils.isEmpty(
+                
KettleConst.kettleElementsToRemove.get(currentNode.getNodeName()))) {
+              // see if we have multiple parent nodes to check for:
+              if 
(KettleConst.kettleElementsToRemove.get(currentNode.getNodeName()).contains(","))
 {
+                Node parentNode = currentNode.getParentNode();
+                String[] parentNodeNames =
+                    
KettleConst.kettleElementsToRemove.get(currentNode.getNodeName()).split(",");
+                for (String parentNodeName : parentNodeNames) {
+                  if (parentNode.getNodeName().equals(parentNodeName)) {
+                    parentNode.removeChild(currentNode);
+                  }
+                }
+              } else {
+                if (currentNode
+                    .getParentNode()
+                    .getNodeName()
+                    
.equals(KettleConst.kettleElementsToRemove.get(currentNode.getNodeName()))) {
+                  currentNode.getParentNode().removeChild(currentNode);
                 }
               }
             } else {
-              if (currentNode
-                  .getParentNode()
-                  .getNodeName()
-                  
.equals(KettleConst.kettleElementsToRemove.get(currentNode.getNodeName()))) {
-                currentNode.getParentNode().removeChild(currentNode);
-              }
+              currentNode.getParentNode().removeChild(currentNode);
             }
-          } else {
+          }
+        } else if (entryType == EntryType.START) {
+          if 
(KettleConst.kettleStartEntryElementsToRemove.containsKey(currentNode.getNodeName()))
 {
             currentNode.getParentNode().removeChild(currentNode);
           }
+        } else if (entryType == EntryType.DUMMY) {
+          if 
(KettleConst.kettleDummyEntryElementsToRemove.containsKey(currentNode.getNodeName()))
 {
+            currentNode.getParentNode().removeChild(currentNode);
+
+          }
         }
 
         // rename Kettle elements to Hop elements
@@ -522,7 +566,7 @@ public class KettleImport extends HopImportBase implements 
IHopImport {
               
KettleConst.kettleReplaceContent.get(currentNode.getTextContent()));
         }
 
-        processNode(doc, currentNode);
+        processNode(doc, currentNode, entryType);
       }
 
       // partial node content replacement

Reply via email to