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 b4a533a93c Cleanup XML of action SQL #1994
     new cb307f733d Merge pull request #2943 from nadment/1994
b4a533a93c is described below

commit b4a533a93c874144687d12aa43c35e6b9fa324a8
Author: Nicolas Adment <[email protected]>
AuthorDate: Thu May 18 11:59:44 2023 +0200

    Cleanup XML of action SQL #1994
    
    The Const.toBoolean() method supports the value 'T' as TRUE for
    backwards compatibility with SQL Action serialization when switching to
    HopMetadateProperty.
---
 core/src/main/java/org/apache/hop/core/Const.java  |   3 +-
 .../test/java/org/apache/hop/core/ConstTest.java   |   2 +
 .../apache/hop/workflow/actions/sql/ActionSql.java | 114 ++++++---------------
 .../hop/workflow/actions/sql/ActionSqlDialog.java  | 111 +++++---------------
 .../actions/sql/WorkflowActionSqlTest.java         |  20 ++--
 5 files changed, 68 insertions(+), 182 deletions(-)

diff --git a/core/src/main/java/org/apache/hop/core/Const.java 
b/core/src/main/java/org/apache/hop/core/Const.java
index a2ec5200c9..7dedb211e4 100644
--- a/core/src/main/java/org/apache/hop/core/Const.java
+++ b/core/src/main/java/org/apache/hop/core/Const.java
@@ -522,7 +522,8 @@ public class Const {
   public static boolean toBoolean(String string) {
     return "y".equalsIgnoreCase(string)
         || "yes".equalsIgnoreCase(string)
-        || "true".equalsIgnoreCase(string);
+        || "true".equalsIgnoreCase(string)
+        || "t".equalsIgnoreCase(string);
   }
 
   /**
diff --git a/core/src/test/java/org/apache/hop/core/ConstTest.java 
b/core/src/test/java/org/apache/hop/core/ConstTest.java
index 115b38d3a2..db795cedfa 100644
--- a/core/src/test/java/org/apache/hop/core/ConstTest.java
+++ b/core/src/test/java/org/apache/hop/core/ConstTest.java
@@ -2756,6 +2756,8 @@ public class ConstTest {
     assertTrue(Const.toBoolean("true"));
     assertTrue(Const.toBoolean("True"));
     assertTrue(Const.toBoolean("TRUE"));
+    assertTrue(Const.toBoolean("T"));
+    assertTrue(Const.toBoolean("t"));
     assertFalse(Const.toBoolean("N"));
     assertFalse(Const.toBoolean("n"));
     assertFalse(Const.toBoolean("treu"));
diff --git 
a/plugins/actions/sql/src/main/java/org/apache/hop/workflow/actions/sql/ActionSql.java
 
b/plugins/actions/sql/src/main/java/org/apache/hop/workflow/actions/sql/ActionSql.java
index 3499d5e9b5..e769f384eb 100644
--- 
a/plugins/actions/sql/src/main/java/org/apache/hop/workflow/actions/sql/ActionSql.java
+++ 
b/plugins/actions/sql/src/main/java/org/apache/hop/workflow/actions/sql/ActionSql.java
@@ -25,13 +25,11 @@ import org.apache.hop.core.annotations.Action;
 import org.apache.hop.core.database.Database;
 import org.apache.hop.core.database.DatabaseMeta;
 import org.apache.hop.core.exception.HopDatabaseException;
-import org.apache.hop.core.exception.HopException;
-import org.apache.hop.core.exception.HopXmlException;
 import org.apache.hop.core.util.Utils;
 import org.apache.hop.core.variables.IVariables;
 import org.apache.hop.core.vfs.HopVfs;
-import org.apache.hop.core.xml.XmlHandler;
 import org.apache.hop.i18n.BaseMessages;
+import org.apache.hop.metadata.api.HopMetadataProperty;
 import org.apache.hop.metadata.api.IHopMetadataProvider;
 import org.apache.hop.resource.ResourceEntry;
 import org.apache.hop.resource.ResourceEntry.ResourceType;
@@ -41,8 +39,6 @@ import org.apache.hop.workflow.action.ActionBase;
 import org.apache.hop.workflow.action.IAction;
 import org.apache.hop.workflow.action.validator.ActionValidatorUtils;
 import org.apache.hop.workflow.action.validator.AndValidator;
-import org.w3c.dom.Node;
-
 import java.io.BufferedInputStream;
 import java.io.BufferedReader;
 import java.io.InputStream;
@@ -61,11 +57,17 @@ import java.util.List;
 public class ActionSql extends ActionBase implements Cloneable, IAction {
   private static final Class<?> PKG = ActionSql.class; // For Translator
 
+  @HopMetadataProperty(key = "sql")
   private String sql;
-  private DatabaseMeta connection;
+  @HopMetadataProperty(key = "connection")
+  private String connection;
+  @HopMetadataProperty(key = "useVariableSubstitution")
   private boolean useVariableSubstitution = false;
-  private boolean sqlfromfile = false;
-  private String sqlfilename;
+  @HopMetadataProperty(key = "sqlfromfile")
+  private boolean sqlFromFile = false;
+  @HopMetadataProperty(key = "sqlfilename")
+  private String sqlFilename;
+  @HopMetadataProperty(key = "sendOneStatement")
   private boolean sendOneStatement = false;
 
   public ActionSql(String n) {
@@ -84,62 +86,6 @@ public class ActionSql extends ActionBase implements 
Cloneable, IAction {
     return je;
   }
 
-  @Override
-  public String getXml() {
-    StringBuilder retval = new StringBuilder(200);
-
-    retval.append(super.getXml());
-
-    retval.append("      ").append(XmlHandler.addTagValue("sql", sql));
-    retval
-        .append("      ")
-        .append(
-            XmlHandler.addTagValue("useVariableSubstitution", 
useVariableSubstitution ? "T" : "F"));
-    retval.append("      ").append(XmlHandler.addTagValue("sqlfromfile", 
sqlfromfile ? "T" : "F"));
-    retval.append("      ").append(XmlHandler.addTagValue("sqlfilename", 
sqlfilename));
-    retval
-        .append("      ")
-        .append(XmlHandler.addTagValue("sendOneStatement", sendOneStatement ? 
"T" : "F"));
-
-    retval
-        .append("      ")
-        .append(
-            XmlHandler.addTagValue("connection", connection == null ? null : 
connection.getName()));
-
-    return retval.toString();
-  }
-
-  @Override
-  public void loadXml(Node entrynode, IHopMetadataProvider metadataProvider, 
IVariables variables)
-      throws HopXmlException {
-    try {
-      super.loadXml(entrynode);
-      sql = XmlHandler.getTagValue(entrynode, "sql");
-      String dbname = XmlHandler.getTagValue(entrynode, "connection");
-      String sSubs = XmlHandler.getTagValue(entrynode, 
"useVariableSubstitution");
-
-      if (sSubs != null && sSubs.equalsIgnoreCase("T")) {
-        useVariableSubstitution = true;
-      }
-      connection = DatabaseMeta.loadDatabase(metadataProvider, dbname);
-
-      String ssql = XmlHandler.getTagValue(entrynode, "sqlfromfile");
-      if (ssql != null && ssql.equalsIgnoreCase("T")) {
-        sqlfromfile = true;
-      }
-
-      sqlfilename = XmlHandler.getTagValue(entrynode, "sqlfilename");
-
-      String sOneStatement = XmlHandler.getTagValue(entrynode, 
"sendOneStatement");
-      if (sOneStatement != null && sOneStatement.equalsIgnoreCase("T")) {
-        sendOneStatement = true;
-      }
-
-    } catch (HopException e) {
-      throw new HopXmlException("Unable to load action of type 'sql' from XML 
node", e);
-    }
-  }
-
   public void setSql(String sql) {
     this.sql = sql;
   }
@@ -149,14 +95,14 @@ public class ActionSql extends ActionBase implements 
Cloneable, IAction {
   }
 
   public String getSqlFilename() {
-    return sqlfilename;
+    return sqlFilename;
   }
 
   public void setSqlFilename(String sqlfilename) {
-    this.sqlfilename = sqlfilename;
+    this.sqlFilename = sqlfilename;
   }
 
-  public boolean getUseVariableSubstitution() {
+  public boolean isUseVariableSubstitution() {
     return useVariableSubstitution;
   }
 
@@ -165,11 +111,11 @@ public class ActionSql extends ActionBase implements 
Cloneable, IAction {
   }
 
   public void setSqlFromFile(boolean sqlfromfilein) {
-    sqlfromfile = sqlfromfilein;
+    sqlFromFile = sqlfromfilein;
   }
 
-  public boolean getSqlFromFile() {
-    return sqlfromfile;
+  public boolean isSqlFromFile() {
+    return sqlFromFile;
   }
 
   public boolean isSendOneStatement() {
@@ -180,11 +126,11 @@ public class ActionSql extends ActionBase implements 
Cloneable, IAction {
     sendOneStatement = sendOneStatementin;
   }
 
-  public void setDatabase(DatabaseMeta database) {
-    this.connection = database;
+  public void setConnection(String connection) {
+    this.connection = connection;
   }
 
-  public DatabaseMeta getDatabase() {
+  public String getConnection() {
     return connection;
   }
 
@@ -192,20 +138,21 @@ public class ActionSql extends ActionBase implements 
Cloneable, IAction {
   public Result execute(Result previousResult, int nr) {
     Result result = previousResult;
 
-    if (connection != null) {
+    DatabaseMeta databaseMeta = parentWorkflowMeta.findDatabase(connection, 
getVariables());
+    if (databaseMeta != null) {
       FileObject sqlFile = null;
-      try (Database db = new Database(this, this, connection)) {
+      try (Database db = new Database(this, this, databaseMeta)) {
         String theSql = null;
         db.connect();
 
-        if (sqlfromfile) {
-          if (sqlfilename == null) {
+        if (sqlFromFile) {
+          if (sqlFilename == null) {
             throw new HopDatabaseException(
                 BaseMessages.getString(PKG, "ActionSQL.NoSQLFileSpecified"));
           }
 
           try {
-            String realfilename = resolve(sqlfilename);
+            String realfilename = resolve(sqlFilename);
             sqlFile = HopVfs.getFileObject(realfilename);
             if (!sqlFile.exists()) {
               logError(BaseMessages.getString(PKG, 
"ActionSQL.SQLFileNotExist", realfilename));
@@ -297,21 +244,20 @@ public class ActionSql extends ActionBase implements 
Cloneable, IAction {
 
   @Override
   public DatabaseMeta[] getUsedDatabaseConnections() {
-    return new DatabaseMeta[] {
-      connection,
-    };
+    return new DatabaseMeta[0];
   }
 
   @Override
   public List<ResourceReference> getResourceDependencies(
       IVariables variables, WorkflowMeta workflowMeta) {
     List<ResourceReference> references = 
super.getResourceDependencies(variables, workflowMeta);
-    if (connection != null) {
+    DatabaseMeta databaseMeta = parentWorkflowMeta.findDatabase(connection, 
getVariables());
+    if (databaseMeta != null) {
       ResourceReference reference = new ResourceReference(this);
-      reference.getEntries().add(new ResourceEntry(connection.getHostname(), 
ResourceType.SERVER));
+      reference.getEntries().add(new ResourceEntry(databaseMeta.getHostname(), 
ResourceType.SERVER));
       reference
           .getEntries()
-          .add(new ResourceEntry(connection.getDatabaseName(), 
ResourceType.DATABASENAME));
+          .add(new ResourceEntry(databaseMeta.getDatabaseName(), 
ResourceType.DATABASENAME));
       references.add(reference);
     }
     return references;
diff --git 
a/plugins/actions/sql/src/main/java/org/apache/hop/workflow/actions/sql/ActionSqlDialog.java
 
b/plugins/actions/sql/src/main/java/org/apache/hop/workflow/actions/sql/ActionSqlDialog.java
index ebee0d0667..9e1552faca 100644
--- 
a/plugins/actions/sql/src/main/java/org/apache/hop/workflow/actions/sql/ActionSqlDialog.java
+++ 
b/plugins/actions/sql/src/main/java/org/apache/hop/workflow/actions/sql/ActionSqlDialog.java
@@ -36,14 +36,6 @@ import org.apache.hop.workflow.WorkflowMeta;
 import org.apache.hop.workflow.action.IAction;
 import org.apache.hop.workflow.action.IActionDialog;
 import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.FocusAdapter;
-import org.eclipse.swt.events.FocusEvent;
-import org.eclipse.swt.events.KeyAdapter;
-import org.eclipse.swt.events.KeyEvent;
-import org.eclipse.swt.events.MouseAdapter;
-import org.eclipse.swt.events.MouseEvent;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
 import org.eclipse.swt.layout.FormAttachment;
 import org.eclipse.swt.layout.FormData;
 import org.eclipse.swt.layout.FormLayout;
@@ -144,7 +136,8 @@ public class ActionSqlDialog extends ActionDialog 
implements IActionDialog {
     wName.setLayoutData(fdName);
 
     // Connection line
-    wConnection = addConnectionLine(shell, wName, action.getDatabase(), null);
+    DatabaseMeta databaseMeta = 
workflowMeta.findDatabase(action.getConnection(), variables);
+    wConnection = addConnectionLine(shell, wName, databaseMeta, null);
 
     // SQL from file?
     Label wlSqlFromFile = new Label(shell, SWT.RIGHT);
@@ -163,14 +156,10 @@ public class ActionSqlDialog extends ActionDialog 
implements IActionDialog {
     fdSqlFromFile.top = new FormAttachment(wlSqlFromFile, 0, SWT.CENTER);
     fdSqlFromFile.right = new FormAttachment(100, 0);
     wSqlFromFile.setLayoutData(fdSqlFromFile);
-    wSqlFromFile.addSelectionListener(
-        new SelectionAdapter() {
-          @Override
-          public void widgetSelected(SelectionEvent e) {
-            activeSqlFromFile();
-            action.setChanged();
-          }
-        });
+    wSqlFromFile.addListener(SWT.Selection, e -> {
+      activeSqlFromFile();
+      action.setChanged();
+    });
 
     // Filename line
     wlFilename = new Label(shell, SWT.RIGHT);
@@ -232,13 +221,7 @@ public class ActionSqlDialog extends ActionDialog 
implements IActionDialog {
     fdUseOneStatement.top = new FormAttachment(wlUseOneStatement, 0, 
SWT.CENTER);
     fdUseOneStatement.right = new FormAttachment(100, 0);
     wSendOneStatement.setLayoutData(fdUseOneStatement);
-    wSendOneStatement.addSelectionListener(
-        new SelectionAdapter() {
-          @Override
-          public void widgetSelected(SelectionEvent e) {
-            action.setChanged();
-          }
-        });
+    wSendOneStatement.addListener(SWT.Selection, e -> action.setChanged());
 
     // Use variable substitution?
     Label wlUseSubs = new Label(shell, SWT.RIGHT);
@@ -257,14 +240,10 @@ public class ActionSqlDialog extends ActionDialog 
implements IActionDialog {
     fdUseSubs.top = new FormAttachment(wlUseSubs, 0, SWT.CENTER);
     fdUseSubs.right = new FormAttachment(100, 0);
     wUseSubs.setLayoutData(fdUseSubs);
-    wUseSubs.addSelectionListener(
-        new SelectionAdapter() {
-          @Override
-          public void widgetSelected(SelectionEvent e) {
-            
action.setUseVariableSubstitution(!action.getUseVariableSubstitution());
-            action.setChanged();
-          }
-        });
+    wUseSubs.addListener(SWT.Selection, e -> {
+      action.setUseVariableSubstitution(!action.isUseVariableSubstitution());
+      action.setChanged();
+    });
 
     wlPosition = new Label(shell, SWT.NONE);
     wlPosition.setText(BaseMessages.getString(PKG, "ActionSQL.LineNr.Label", 
"0"));
@@ -294,49 +273,14 @@ public class ActionSqlDialog extends ActionDialog 
implements IActionDialog {
     fdSql.right = new FormAttachment(100, -20);
     fdSql.bottom = new FormAttachment(wlPosition, -margin);
     wSql.setLayoutData(fdSql);
-    wSql.addModifyListener(arg0 -> setPosition());
-
-    wSql.addKeyListener(
-        new KeyAdapter() {
-          @Override
-          public void keyPressed(KeyEvent e) {
-            setPosition();
-          }
-
-          @Override
-          public void keyReleased(KeyEvent e) {
-            setPosition();
-          }
-        });
-    wSql.addFocusListener(
-        new FocusAdapter() {
-          @Override
-          public void focusGained(FocusEvent e) {
-            setPosition();
-          }
-
-          @Override
-          public void focusLost(FocusEvent e) {
-            setPosition();
-          }
-        });
-    wSql.addMouseListener(
-        new MouseAdapter() {
-          @Override
-          public void mouseDoubleClick(MouseEvent e) {
-            setPosition();
-          }
-
-          @Override
-          public void mouseDown(MouseEvent e) {
-            setPosition();
-          }
-
-          @Override
-          public void mouseUp(MouseEvent e) {
-            setPosition();
-          }
-        });
+    wSql.addListener(SWT.Modify, e -> setPosition());
+    wSql.addListener(SWT.KeyDown, e -> setPosition());
+    wSql.addListener(SWT.KeyUp, e -> setPosition());
+    wSql.addListener(SWT.FocusIn, e -> setPosition());
+    wSql.addListener(SWT.FocusOut, e -> setPosition());
+    wSql.addListener(SWT.MouseDoubleClick, e -> setPosition());
+    wSql.addListener(SWT.MouseDown, e -> setPosition());
+    wSql.addListener(SWT.MouseUp, e -> setPosition());
 
     getData();
     activeSqlFromFile();
@@ -358,17 +302,10 @@ public class ActionSqlDialog extends ActionDialog 
implements IActionDialog {
   public void getData() {
     wName.setText(Const.nullToEmpty(action.getName()));
     wSql.setText(Const.nullToEmpty(action.getSql()));
-    DatabaseMeta dbinfo = action.getDatabase();
-    if (dbinfo != null && dbinfo.getName() != null) {
-      wConnection.setText(dbinfo.getName());
-    } else {
-      wConnection.setText("");
-    }
-
-    wUseSubs.setSelection(action.getUseVariableSubstitution());
-    wSqlFromFile.setSelection(action.getSqlFromFile());
+    wConnection.setText(Const.nullToEmpty(action.getConnection()));
+    wUseSubs.setSelection(action.isUseVariableSubstitution());
+    wSqlFromFile.setSelection(action.isSqlFromFile());
     wSendOneStatement.setSelection(action.isSendOneStatement());
-
     wFilename.setText(Const.nullToEmpty(action.getSqlFilename()));
 
     wName.selectAll();
@@ -398,12 +335,12 @@ public class ActionSqlDialog extends ActionDialog 
implements IActionDialog {
       return;
     }
     action.setName(wName.getText());
+    action.setConnection(wConnection.getText());
     action.setSql(wSql.getText());
     action.setUseVariableSubstitution(wUseSubs.getSelection());
     action.setSqlFromFile(wSqlFromFile.getSelection());
     action.setSqlFilename(wFilename.getText());
-    action.setSendOneStatement(wSendOneStatement.getSelection());
-    action.setDatabase(getWorkflowMeta().findDatabase(wConnection.getText(), 
variables));
+    action.setSendOneStatement(wSendOneStatement.getSelection());    
     action.setChanged();
 
     dispose();
diff --git 
a/plugins/actions/sql/src/test/java/org/apache/hop/workflow/actions/sql/WorkflowActionSqlTest.java
 
b/plugins/actions/sql/src/test/java/org/apache/hop/workflow/actions/sql/WorkflowActionSqlTest.java
index df0afeee18..64978a06e9 100644
--- 
a/plugins/actions/sql/src/test/java/org/apache/hop/workflow/actions/sql/WorkflowActionSqlTest.java
+++ 
b/plugins/actions/sql/src/test/java/org/apache/hop/workflow/actions/sql/WorkflowActionSqlTest.java
@@ -38,21 +38,21 @@ public class WorkflowActionSqlTest extends 
WorkflowActionLoadSaveTestSupport<Act
     return Arrays.asList(
         "sql",
         "useVariableSubstitution",
-        "sqlfromfile",
-        "sqlfilename",
+        "sqlFromFile",
+        "sqlFilename",
         "sendOneStatement",
-        "database");
+        "connection");
   }
 
   @Override
   protected Map<String, String> createGettersMap() {
     return toMap(
         "sql", "getSql",
-        "useVariableSubstitution", "getUseVariableSubstitution",
-        "sqlfromfile", "getSqlFromFile",
-        "sqlfilename", "getSqlFilename",
+        "useVariableSubstitution", "isUseVariableSubstitution",
+        "sqlFromFile", "isSqlFromFile",
+        "sqlFilename", "getSqlFilename",
         "sendOneStatement", "isSendOneStatement",
-        "database", "getDatabase");
+        "connection", "getConnection");
   }
 
   @Override
@@ -60,9 +60,9 @@ public class WorkflowActionSqlTest extends 
WorkflowActionLoadSaveTestSupport<Act
     return toMap(
         "sql", "setSql",
         "useVariableSubstitution", "setUseVariableSubstitution",
-        "sqlfromfile", "setSqlFromFile",
-        "sqlfilename", "setSqlFilename",
+        "sqlFromFile", "setSqlFromFile",
+        "sqlFilename", "setSqlFilename",
         "sendOneStatement", "setSendOneStatement",
-        "database", "setDatabase");
+        "connection", "setConnection");
   }
 }

Reply via email to