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");
}
}