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

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


The following commit(s) were added to refs/heads/main by this push:
     new 96db8d0cfc additional metadata annotation properties #3981 (#4081)
96db8d0cfc is described below

commit 96db8d0cfc545fdf3276c3572da4fb5e2733bc6c
Author: Bart Maertens <[email protected]>
AuthorDate: Fri Jul 5 16:02:08 2024 +0200

    additional metadata annotation properties #3981 (#4081)
    
    * initial draft implementation of additional metadata for #3981
    
    * resolved merge conflicts on delete transform. #3981
    
    * additional metadata annotation updates. #3981
    
    * minor changes. #3981
    
    * resolved merge conflicts on delete transform. #3981
    
    * added missing ASF headers. #3981
    
    * additional metadata properties. #3981
---
 .../hop/metadata/api/HopMetadataProperty.java      |  7 ++++
 .../hop/metadata/api/HopMetadataPropertyType.java  | 48 ++++++++++++++++++++++
 .../org/apache/hop/core/annotations/Action.java    |  3 ++
 .../hop/core/annotations/ActionTransformType.java  | 32 +++++++++++++++
 .../org/apache/hop/core/annotations/Transform.java |  3 ++
 .../ActionCheckDbConnections.java                  | 10 ++++-
 .../workflow/actions/pipeline/ActionPipeline.java  |  5 ++-
 .../apache/hop/workflow/actions/sql/ActionSql.java | 13 ++++--
 .../bulkloader/RedshiftBulkLoaderField.java        |  4 +-
 .../bulkloader/RedshiftBulkLoaderMeta.java         | 26 +++++++-----
 .../cratedbbulkloader/CrateDBBulkLoaderField.java  |  4 +-
 .../cratedbbulkloader/CrateDBBulkLoaderMeta.java   | 14 +++++--
 .../transforms/databasejoin/DatabaseJoinMeta.java  | 17 ++++++--
 .../databaselookup/DatabaseLookupMeta.java         |  9 +++-
 .../transforms/databaselookup/KeyField.java        |  4 +-
 .../pipeline/transforms/databaselookup/Lookup.java |  7 +++-
 .../pipeline/transforms/delete/DeleteKeyField.java |  4 +-
 .../transforms/delete/DeleteLookupField.java       | 11 ++++-
 .../hop/pipeline/transforms/delete/DeleteMeta.java |  8 +++-
 .../transforms/insertupdate/InsertUpdateMeta.java  |  8 +++-
 .../hop/pipeline/transforms/sql/ExecSqlMeta.java   | 13 ++++--
 .../transforms/tableinput/TableInputMeta.java      | 15 +++++--
 .../transforms/tableoutput/TableOutputField.java   |  4 +-
 .../transforms/tableoutput/TableOutputMeta.java    | 20 ++++++---
 .../hop/pipeline/transforms/update/UpdateMeta.java |  8 +++-
 25 files changed, 244 insertions(+), 53 deletions(-)

diff --git 
a/core/src/main/java/org/apache/hop/metadata/api/HopMetadataProperty.java 
b/core/src/main/java/org/apache/hop/metadata/api/HopMetadataProperty.java
index b32fee39c6..d110b37a85 100644
--- a/core/src/main/java/org/apache/hop/metadata/api/HopMetadataProperty.java
+++ b/core/src/main/java/org/apache/hop/metadata/api/HopMetadataProperty.java
@@ -144,4 +144,11 @@ public @interface HopMetadataProperty {
    */
   Class<? extends IStringObjectConverter> injectionStringObjectConverter() 
default
       IStringObjectConverter.None.class;
+
+  /**
+   * A HopMetadataPropertyType provides information about the purpose of a 
HopMetadataProperty.
+   *
+   * @return the type of metadata this property represents.
+   */
+  HopMetadataPropertyType hopMetadataPropertyType() default 
HopMetadataPropertyType.NONE;
 }
diff --git 
a/core/src/main/java/org/apache/hop/metadata/api/HopMetadataPropertyType.java 
b/core/src/main/java/org/apache/hop/metadata/api/HopMetadataPropertyType.java
new file mode 100644
index 0000000000..218f088d1d
--- /dev/null
+++ 
b/core/src/main/java/org/apache/hop/metadata/api/HopMetadataPropertyType.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.metadata.api;
+
+/** A HopMetadataPropertyType provides information about the purpose of a 
HopMetadataProperty. */
+public enum HopMetadataPropertyType {
+  NONE,
+  FIELD_LIST,
+  FILE_PATH,
+  FILE_REFERENCE,
+  FILE_NAME,
+  FILE_WILDCARD,
+  FILE_ENCODING,
+  FILE_FIELD,
+  FILE_SEPARATOR,
+  FILE_ENCLOSURE,
+  FILE_EXTENSION,
+  RDBMS_CONNECTION,
+  RDBMS_SCHEMA,
+  RDBMS_TABLE,
+  RDBMS_COLUMN,
+  RDBMS_SQL,
+  RDBMS_TRUNCATE,
+  RDBMS_SQL_SELECT,
+  RDBMS_SQL_INSERT,
+  RDBMS_SQL_UPDATE,
+  RDBMS_SQL_DELETE,
+  RDBMS_SQL_BULK,
+  GRAPH_CONNECTION,
+  GRAPH_QUERY,
+  GRAPH_NODE,
+  GRAPH_RELATIONSHIP
+}
diff --git a/engine/src/main/java/org/apache/hop/core/annotations/Action.java 
b/engine/src/main/java/org/apache/hop/core/annotations/Action.java
index 87c7b9f66a..4ba7703151 100644
--- a/engine/src/main/java/org/apache/hop/core/annotations/Action.java
+++ b/engine/src/main/java/org/apache/hop/core/annotations/Action.java
@@ -64,4 +64,7 @@ public @interface Action {
    * @return True if the JDBC drivers have to be loaded for this transform
    */
   boolean isIncludeJdbcDrivers() default false;
+
+  /** an Array of ActionTransformTypes for this action */
+  ActionTransformType[] actionTransformTypes() default {};
 }
diff --git 
a/engine/src/main/java/org/apache/hop/core/annotations/ActionTransformType.java 
b/engine/src/main/java/org/apache/hop/core/annotations/ActionTransformType.java
new file mode 100644
index 0000000000..dfa3fd4323
--- /dev/null
+++ 
b/engine/src/main/java/org/apache/hop/core/annotations/ActionTransformType.java
@@ -0,0 +1,32 @@
+/*
+ * 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.core.annotations;
+
+public enum ActionTransformType {
+  ENV_CHECK,
+  INPUT,
+  OUTPUT,
+  JOIN,
+  LOOKUP,
+  DELETE,
+  UPDATE,
+  FILE,
+  RDBMS,
+  GRAPH,
+  NOSQL
+}
diff --git 
a/engine/src/main/java/org/apache/hop/core/annotations/Transform.java 
b/engine/src/main/java/org/apache/hop/core/annotations/Transform.java
index c0040f74ad..5b8f89470b 100644
--- a/engine/src/main/java/org/apache/hop/core/annotations/Transform.java
+++ b/engine/src/main/java/org/apache/hop/core/annotations/Transform.java
@@ -82,4 +82,7 @@ public @interface Transform {
    * @return True if the JDBC drivers have to be loaded for this transform
    */
   boolean isIncludeJdbcDrivers() default false;
+
+  /** an Array of ActionTransformTypes for this transform */
+  ActionTransformType[] actionTransformTypes() default {};
 }
diff --git 
a/plugins/actions/checkdbconnection/src/main/java/org/apache/hop/workflow/actions/checkdbconnection/ActionCheckDbConnections.java
 
b/plugins/actions/checkdbconnection/src/main/java/org/apache/hop/workflow/actions/checkdbconnection/ActionCheckDbConnections.java
index d8f72a8859..a733167968 100644
--- 
a/plugins/actions/checkdbconnection/src/main/java/org/apache/hop/workflow/actions/checkdbconnection/ActionCheckDbConnections.java
+++ 
b/plugins/actions/checkdbconnection/src/main/java/org/apache/hop/workflow/actions/checkdbconnection/ActionCheckDbConnections.java
@@ -23,12 +23,14 @@ import org.apache.hop.core.Const;
 import org.apache.hop.core.ICheckResult;
 import org.apache.hop.core.Result;
 import org.apache.hop.core.annotations.Action;
+import org.apache.hop.core.annotations.ActionTransformType;
 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.variables.IVariables;
 import org.apache.hop.i18n.BaseMessages;
 import org.apache.hop.metadata.api.HopMetadataProperty;
+import org.apache.hop.metadata.api.HopMetadataPropertyType;
 import org.apache.hop.metadata.api.IEnumHasCodeAndDescription;
 import org.apache.hop.metadata.api.IHopMetadataProvider;
 import org.apache.hop.resource.ResourceEntry;
@@ -48,11 +50,15 @@ import 
org.apache.hop.workflow.action.validator.AndValidator;
     image = "CheckDbConnection.svg",
     categoryDescription = 
"i18n:org.apache.hop.workflow:ActionCategory.Category.Conditions",
     keywords = "i18n::ActionCheckDbConnections.keyword",
-    documentationUrl = "/workflow/actions/checkdbconnection.html")
+    documentationUrl = "/workflow/actions/checkdbconnection.html",
+    actionTransformTypes = {ActionTransformType.ENV_CHECK, 
ActionTransformType.RDBMS})
 public class ActionCheckDbConnections extends ActionBase implements Cloneable, 
IAction {
   private static final Class<?> PKG = ActionCheckDbConnections.class; // For 
Translator
 
-  @HopMetadataProperty(groupKey = "connections", key = "connection")
+  @HopMetadataProperty(
+      groupKey = "connections",
+      key = "connection",
+      hopMetadataPropertyType = HopMetadataPropertyType.RDBMS_CONNECTION)
   private List<CDConnection> connections;
 
   public ActionCheckDbConnections(String name) {
diff --git 
a/plugins/actions/pipeline/src/main/java/org/apache/hop/workflow/actions/pipeline/ActionPipeline.java
 
b/plugins/actions/pipeline/src/main/java/org/apache/hop/workflow/actions/pipeline/ActionPipeline.java
index 5d7c0f6c13..08793aa057 100644
--- 
a/plugins/actions/pipeline/src/main/java/org/apache/hop/workflow/actions/pipeline/ActionPipeline.java
+++ 
b/plugins/actions/pipeline/src/main/java/org/apache/hop/workflow/actions/pipeline/ActionPipeline.java
@@ -44,6 +44,7 @@ import org.apache.hop.core.variables.IVariables;
 import org.apache.hop.core.vfs.HopVfs;
 import org.apache.hop.i18n.BaseMessages;
 import org.apache.hop.metadata.api.HopMetadataProperty;
+import org.apache.hop.metadata.api.HopMetadataPropertyType;
 import org.apache.hop.metadata.api.IHopMetadataProvider;
 import org.apache.hop.pipeline.PipelineMeta;
 import org.apache.hop.pipeline.TransformWithMappingMeta;
@@ -149,7 +150,9 @@ public class ActionPipeline extends ActionBase implements 
Cloneable, IAction {
     }
   }
 
-  @HopMetadataProperty(key = "filename")
+  @HopMetadataProperty(
+      key = "filename",
+      hopMetadataPropertyType = HopMetadataPropertyType.FILE_REFERENCE)
   private String filename;
 
   @HopMetadataProperty(key = "params_from_previous")
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 3f102a0dfa..d4fc2b1006 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
@@ -27,6 +27,7 @@ import org.apache.hop.core.Const;
 import org.apache.hop.core.ICheckResult;
 import org.apache.hop.core.Result;
 import org.apache.hop.core.annotations.Action;
+import org.apache.hop.core.annotations.ActionTransformType;
 import org.apache.hop.core.database.Database;
 import org.apache.hop.core.database.DatabaseMeta;
 import org.apache.hop.core.exception.HopDatabaseException;
@@ -35,6 +36,7 @@ import org.apache.hop.core.variables.IVariables;
 import org.apache.hop.core.vfs.HopVfs;
 import org.apache.hop.i18n.BaseMessages;
 import org.apache.hop.metadata.api.HopMetadataProperty;
+import org.apache.hop.metadata.api.HopMetadataPropertyType;
 import org.apache.hop.metadata.api.IHopMetadataProvider;
 import org.apache.hop.resource.ResourceEntry;
 import org.apache.hop.resource.ResourceEntry.ResourceType;
@@ -53,14 +55,19 @@ import 
org.apache.hop.workflow.action.validator.AndValidator;
     image = "sql.svg",
     categoryDescription = 
"i18n:org.apache.hop.workflow:ActionCategory.Category.Scripting",
     keywords = "i18n::ActionSql.keyword",
-    documentationUrl = "/workflow/actions/sql.html")
+    documentationUrl = "/workflow/actions/sql.html",
+    actionTransformTypes = {ActionTransformType.RDBMS})
 public class ActionSql extends ActionBase implements Cloneable, IAction {
   private static final Class<?> PKG = ActionSql.class; // For Translator
 
-  @HopMetadataProperty(key = "sql")
+  @HopMetadataProperty(
+      key = "sql",
+      hopMetadataPropertyType = HopMetadataPropertyType.RDBMS_SQL_SELECT)
   private String sql;
 
-  @HopMetadataProperty(key = "connection")
+  @HopMetadataProperty(
+      key = "connection",
+      hopMetadataPropertyType = HopMetadataPropertyType.RDBMS_CONNECTION)
   private String connection;
 
   @HopMetadataProperty(key = "useVariableSubstitution")
diff --git 
a/plugins/tech/aws/src/main/java/org/apache/hop/pipeline/transforms/redshift/bulkloader/RedshiftBulkLoaderField.java
 
b/plugins/tech/aws/src/main/java/org/apache/hop/pipeline/transforms/redshift/bulkloader/RedshiftBulkLoaderField.java
index 36254cb54d..a3559c0aa5 100644
--- 
a/plugins/tech/aws/src/main/java/org/apache/hop/pipeline/transforms/redshift/bulkloader/RedshiftBulkLoaderField.java
+++ 
b/plugins/tech/aws/src/main/java/org/apache/hop/pipeline/transforms/redshift/bulkloader/RedshiftBulkLoaderField.java
@@ -19,6 +19,7 @@ package 
org.apache.hop.pipeline.transforms.redshift.bulkloader;
 
 import java.util.Objects;
 import org.apache.hop.metadata.api.HopMetadataProperty;
+import org.apache.hop.metadata.api.HopMetadataPropertyType;
 
 public class RedshiftBulkLoaderField {
 
@@ -38,7 +39,8 @@ public class RedshiftBulkLoaderField {
   @HopMetadataProperty(
       key = "column_name",
       injectionKey = "DATABASE_FIELDNAME",
-      injectionKeyDescription = "RedshiftBulkLoader.Inject.FIELDDATABASE")
+      injectionKeyDescription = "RedshiftBulkLoader.Inject.FIELDDATABASE",
+      hopMetadataPropertyType = HopMetadataPropertyType.RDBMS_COLUMN)
   private String databaseField;
 
   public String getStreamField() {
diff --git 
a/plugins/tech/aws/src/main/java/org/apache/hop/pipeline/transforms/redshift/bulkloader/RedshiftBulkLoaderMeta.java
 
b/plugins/tech/aws/src/main/java/org/apache/hop/pipeline/transforms/redshift/bulkloader/RedshiftBulkLoaderMeta.java
index 7ec9438d2f..97aa7978d7 100644
--- 
a/plugins/tech/aws/src/main/java/org/apache/hop/pipeline/transforms/redshift/bulkloader/RedshiftBulkLoaderMeta.java
+++ 
b/plugins/tech/aws/src/main/java/org/apache/hop/pipeline/transforms/redshift/bulkloader/RedshiftBulkLoaderMeta.java
@@ -23,6 +23,7 @@ import org.apache.hop.core.CheckResult;
 import org.apache.hop.core.Const;
 import org.apache.hop.core.ICheckResult;
 import org.apache.hop.core.SqlStatement;
+import org.apache.hop.core.annotations.ActionTransformType;
 import org.apache.hop.core.annotations.Transform;
 import org.apache.hop.core.database.Database;
 import org.apache.hop.core.database.DatabaseMeta;
@@ -35,6 +36,7 @@ import org.apache.hop.core.util.StringUtil;
 import org.apache.hop.core.variables.IVariables;
 import org.apache.hop.i18n.BaseMessages;
 import org.apache.hop.metadata.api.HopMetadataProperty;
+import org.apache.hop.metadata.api.HopMetadataPropertyType;
 import org.apache.hop.metadata.api.IHopMetadataProvider;
 import org.apache.hop.pipeline.DatabaseImpact;
 import org.apache.hop.pipeline.PipelineMeta;
@@ -49,7 +51,8 @@ import org.apache.hop.pipeline.transform.TransformMeta;
     categoryDescription = 
"i18n:org.apache.hop.pipeline.transform:BaseTransform.Category.Bulk",
     documentationUrl = "/pipeline/transforms/redshift-bulkloader.html",
     isIncludeJdbcDrivers = true,
-    classLoaderGroup = "redshift")
+    classLoaderGroup = "redshift",
+    actionTransformTypes = {ActionTransformType.OUTPUT, 
ActionTransformType.RDBMS})
 public class RedshiftBulkLoaderMeta
     extends BaseTransformMeta<RedshiftBulkLoader, RedshiftBulkLoaderData> {
   private static final Class<?> PKG = RedshiftBulkLoaderMeta.class;
@@ -62,19 +65,22 @@ public class RedshiftBulkLoaderMeta
   @HopMetadataProperty(
       key = "connection",
       injectionKey = "CONNECTIONNAME",
-      injectionKeyDescription = "RedshiftBulkLoader.Injection.CONNECTIONNAME")
+      injectionKeyDescription = "RedshiftBulkLoader.Injection.CONNECTIONNAME",
+      hopMetadataPropertyType = HopMetadataPropertyType.RDBMS_CONNECTION)
   private String connection;
 
   @HopMetadataProperty(
       key = "schema",
       injectionKey = "SCHEMANAME",
-      injectionKeyDescription = "RedshiftBulkLoader.Injection.SCHEMANAME")
+      injectionKeyDescription = "RedshiftBulkLoader.Injection.SCHEMANAME",
+      hopMetadataPropertyType = HopMetadataPropertyType.RDBMS_SCHEMA)
   private String schemaName;
 
   @HopMetadataProperty(
       key = "table",
       injectionKey = "TABLENAME",
-      injectionKeyDescription = "RedshiftBulkLoader.Injection.TABLENAME")
+      injectionKeyDescription = "RedshiftBulkLoader.Injection.TABLENAME",
+      hopMetadataPropertyType = HopMetadataPropertyType.RDBMS_TABLE)
   private String tablename;
 
   @HopMetadataProperty(
@@ -116,7 +122,8 @@ public class RedshiftBulkLoaderMeta
   @HopMetadataProperty(
       key = "truncate",
       injectionKey = "TRUNCATE_TABLE",
-      injectionKeyDescription = 
"RedshiftBulkLoader.Injection.TruncateTable.Field")
+      injectionKeyDescription = 
"RedshiftBulkLoader.Injection.TruncateTable.Field",
+      hopMetadataPropertyType = HopMetadataPropertyType.RDBMS_TRUNCATE)
   private boolean truncateTable;
 
   @HopMetadataProperty(
@@ -166,21 +173,18 @@ public class RedshiftBulkLoaderMeta
       injectionKeyDescription = "")
   private String copyFromFilename;
 
+  /** Fields containing the values in the input stream to insert */
   @HopMetadataProperty(
       groupKey = "fields",
       key = "field",
       injectionGroupKey = "FIELDS",
       injectionGroupDescription = "RedshiftBulkLoader.Injection.FIELDS",
       injectionKey = "FIELDSTREAM",
-      injectionKeyDescription = "RedshiftBulkLoader.Injection.FIELDSTREAM")
-  /** Fields containing the values in the input stream to insert */
+      injectionKeyDescription = "RedshiftBulkLoader.Injection.FIELDSTREAM",
+      hopMetadataPropertyType = HopMetadataPropertyType.FIELD_LIST)
   private List<RedshiftBulkLoaderField> fields;
 
   @HopMetadataProperty(
-      groupKey = "fields",
-      key = "field",
-      injectionGroupKey = "FIELDS",
-      injectionGroupDescription = "RedshiftBulkLoader.Injection.FIELDS",
       injectionKey = "FIELDDATABASE",
       injectionKeyDescription = "RedshiftBulkLoader.Injection.FIELDDATABASE")
   /** Fields in the table to insert */
diff --git 
a/plugins/transforms/cratedbbulkloader/src/main/java/org/apache/hop/pipeline/transforms/cratedbbulkloader/CrateDBBulkLoaderField.java
 
b/plugins/transforms/cratedbbulkloader/src/main/java/org/apache/hop/pipeline/transforms/cratedbbulkloader/CrateDBBulkLoaderField.java
index b0e6b3e480..cdbe36d258 100644
--- 
a/plugins/transforms/cratedbbulkloader/src/main/java/org/apache/hop/pipeline/transforms/cratedbbulkloader/CrateDBBulkLoaderField.java
+++ 
b/plugins/transforms/cratedbbulkloader/src/main/java/org/apache/hop/pipeline/transforms/cratedbbulkloader/CrateDBBulkLoaderField.java
@@ -19,6 +19,7 @@ package org.apache.hop.pipeline.transforms.cratedbbulkloader;
 
 import java.util.Objects;
 import org.apache.hop.metadata.api.HopMetadataProperty;
+import org.apache.hop.metadata.api.HopMetadataPropertyType;
 
 public class CrateDBBulkLoaderField {
 
@@ -38,7 +39,8 @@ public class CrateDBBulkLoaderField {
   @HopMetadataProperty(
       key = "column_name",
       injectionKey = "DATABASE_FIELDNAME",
-      injectionKeyDescription = "CrateDBBulkLoader.Inject.FIELDDATABASE")
+      injectionKeyDescription = "CrateDBBulkLoader.Inject.FIELDDATABASE",
+      hopMetadataPropertyType = HopMetadataPropertyType.RDBMS_COLUMN)
   private String databaseField;
 
   public String getStreamField() {
diff --git 
a/plugins/transforms/cratedbbulkloader/src/main/java/org/apache/hop/pipeline/transforms/cratedbbulkloader/CrateDBBulkLoaderMeta.java
 
b/plugins/transforms/cratedbbulkloader/src/main/java/org/apache/hop/pipeline/transforms/cratedbbulkloader/CrateDBBulkLoaderMeta.java
index a49913218f..f0987d0528 100644
--- 
a/plugins/transforms/cratedbbulkloader/src/main/java/org/apache/hop/pipeline/transforms/cratedbbulkloader/CrateDBBulkLoaderMeta.java
+++ 
b/plugins/transforms/cratedbbulkloader/src/main/java/org/apache/hop/pipeline/transforms/cratedbbulkloader/CrateDBBulkLoaderMeta.java
@@ -25,6 +25,7 @@ import org.apache.hop.core.Const;
 import org.apache.hop.core.ICheckResult;
 import org.apache.hop.core.IProvidesModelerMeta;
 import org.apache.hop.core.SqlStatement;
+import org.apache.hop.core.annotations.ActionTransformType;
 import org.apache.hop.core.annotations.Transform;
 import org.apache.hop.core.database.Database;
 import org.apache.hop.core.database.DatabaseMeta;
@@ -38,6 +39,7 @@ import org.apache.hop.core.util.StringUtil;
 import org.apache.hop.core.variables.IVariables;
 import org.apache.hop.i18n.BaseMessages;
 import org.apache.hop.metadata.api.HopMetadataProperty;
+import org.apache.hop.metadata.api.HopMetadataPropertyType;
 import org.apache.hop.metadata.api.IHopMetadataProvider;
 import org.apache.hop.pipeline.DatabaseImpact;
 import org.apache.hop.pipeline.PipelineMeta;
@@ -53,7 +55,8 @@ import org.apache.hop.pipeline.transform.TransformMeta;
     categoryDescription = 
"i18n:org.apache.hop.pipeline.transform:BaseTransform.Category.Bulk",
     documentationUrl = "/pipeline/transforms/cratedb-bulkloader.html",
     isIncludeJdbcDrivers = true,
-    classLoaderGroup = "crate-db")
+    classLoaderGroup = "crate-db",
+    actionTransformTypes = {ActionTransformType.RDBMS})
 public class CrateDBBulkLoaderMeta
     extends BaseTransformMeta<CrateDBBulkLoader, CrateDBBulkLoaderData>
     implements IProvidesModelerMeta {
@@ -67,19 +70,22 @@ public class CrateDBBulkLoaderMeta
   @HopMetadataProperty(
       key = "connection",
       injectionKey = "CONNECTIONNAME",
-      injectionKeyDescription = "CrateDBBulkLoader.Injection.CONNECTIONNAME")
+      injectionKeyDescription = "CrateDBBulkLoader.Injection.CONNECTIONNAME",
+      hopMetadataPropertyType = HopMetadataPropertyType.RDBMS_CONNECTION)
   private String connection;
 
   @HopMetadataProperty(
       key = "schema",
       injectionKey = "SCHEMANAME",
-      injectionKeyDescription = "CrateDBBulkLoader.Injection.SCHEMANAME")
+      injectionKeyDescription = "CrateDBBulkLoader.Injection.SCHEMANAME",
+      hopMetadataPropertyType = HopMetadataPropertyType.RDBMS_SCHEMA)
   private String schemaName;
 
   @HopMetadataProperty(
       key = "table",
       injectionKey = "TABLENAME",
-      injectionKeyDescription = "CrateDBBulkLoader.Injection.TABLENAME")
+      injectionKeyDescription = "CrateDBBulkLoader.Injection.TABLENAME",
+      hopMetadataPropertyType = HopMetadataPropertyType.RDBMS_TABLE)
   private String tablename;
 
   @HopMetadataProperty(
diff --git 
a/plugins/transforms/databasejoin/src/main/java/org/apache/hop/pipeline/transforms/databasejoin/DatabaseJoinMeta.java
 
b/plugins/transforms/databasejoin/src/main/java/org/apache/hop/pipeline/transforms/databasejoin/DatabaseJoinMeta.java
index e3312f8d98..df8478d889 100644
--- 
a/plugins/transforms/databasejoin/src/main/java/org/apache/hop/pipeline/transforms/databasejoin/DatabaseJoinMeta.java
+++ 
b/plugins/transforms/databasejoin/src/main/java/org/apache/hop/pipeline/transforms/databasejoin/DatabaseJoinMeta.java
@@ -22,6 +22,7 @@ import java.util.List;
 import org.apache.hop.core.CheckResult;
 import org.apache.hop.core.Const;
 import org.apache.hop.core.ICheckResult;
+import org.apache.hop.core.annotations.ActionTransformType;
 import org.apache.hop.core.annotations.Transform;
 import org.apache.hop.core.database.Database;
 import org.apache.hop.core.database.DatabaseMeta;
@@ -37,6 +38,7 @@ import org.apache.hop.core.row.value.ValueMetaNone;
 import org.apache.hop.core.variables.IVariables;
 import org.apache.hop.i18n.BaseMessages;
 import org.apache.hop.metadata.api.HopMetadataProperty;
+import org.apache.hop.metadata.api.HopMetadataPropertyType;
 import org.apache.hop.metadata.api.IHopMetadataProvider;
 import org.apache.hop.pipeline.DatabaseImpact;
 import org.apache.hop.pipeline.PipelineMeta;
@@ -50,14 +52,20 @@ import org.apache.hop.pipeline.transform.TransformMeta;
     description = "i18n::DatabaseJoin.Description",
     categoryDescription = 
"i18n:org.apache.hop.pipeline.transform:BaseTransform.Category.Lookup",
     keywords = "i18n::DatabaseJoinMeta.keyword",
-    documentationUrl = "/pipeline/transforms/databasejoin.html")
+    documentationUrl = "/pipeline/transforms/databasejoin.html",
+    actionTransformTypes = {
+      ActionTransformType.RDBMS,
+      ActionTransformType.LOOKUP,
+      ActionTransformType.JOIN
+    })
 public class DatabaseJoinMeta extends BaseTransformMeta<DatabaseJoin, 
DatabaseJoinData> {
 
   private static final Class<?> PKG = DatabaseJoinMeta.class; // For Translator
 
   @HopMetadataProperty(
       key = "connection",
-      injectionKeyDescription = "DatabaseJoinMeta.Injection.Connection")
+      injectionKeyDescription = "DatabaseJoinMeta.Injection.Connection",
+      hopMetadataPropertyType = HopMetadataPropertyType.RDBMS_CONNECTION)
   private String connection;
 
   @HopMetadataProperty(key = "cache", injectionKeyDescription = 
"DatabaseJoinMeta.Injection.Cache")
@@ -70,7 +78,10 @@ public class DatabaseJoinMeta extends 
BaseTransformMeta<DatabaseJoin, DatabaseJo
   private int cacheSize;
 
   /** SQL Statement */
-  @HopMetadataProperty(key = "sql", injectionKeyDescription = 
"DatabaseJoinMeta.Injection.SQL")
+  @HopMetadataProperty(
+      key = "sql",
+      injectionKeyDescription = "DatabaseJoinMeta.Injection.SQL",
+      hopMetadataPropertyType = HopMetadataPropertyType.RDBMS_SQL)
   private String sql;
 
   /** Number of rows to return (0=ALL) */
diff --git 
a/plugins/transforms/databaselookup/src/main/java/org/apache/hop/pipeline/transforms/databaselookup/DatabaseLookupMeta.java
 
b/plugins/transforms/databaselookup/src/main/java/org/apache/hop/pipeline/transforms/databaselookup/DatabaseLookupMeta.java
index ed4424f3ba..5821fc559a 100644
--- 
a/plugins/transforms/databaselookup/src/main/java/org/apache/hop/pipeline/transforms/databaselookup/DatabaseLookupMeta.java
+++ 
b/plugins/transforms/databaselookup/src/main/java/org/apache/hop/pipeline/transforms/databaselookup/DatabaseLookupMeta.java
@@ -21,6 +21,7 @@ import java.util.List;
 import org.apache.hop.core.CheckResult;
 import org.apache.hop.core.Const;
 import org.apache.hop.core.ICheckResult;
+import org.apache.hop.core.annotations.ActionTransformType;
 import org.apache.hop.core.annotations.Transform;
 import org.apache.hop.core.database.Database;
 import org.apache.hop.core.database.DatabaseMeta;
@@ -34,6 +35,7 @@ import org.apache.hop.core.util.Utils;
 import org.apache.hop.core.variables.IVariables;
 import org.apache.hop.i18n.BaseMessages;
 import org.apache.hop.metadata.api.HopMetadataProperty;
+import org.apache.hop.metadata.api.HopMetadataPropertyType;
 import org.apache.hop.metadata.api.IHopMetadataProvider;
 import org.apache.hop.pipeline.DatabaseImpact;
 import org.apache.hop.pipeline.PipelineMeta;
@@ -47,7 +49,8 @@ import org.apache.hop.pipeline.transform.TransformMeta;
     description = "i18n::DatabaseLookup.Description",
     categoryDescription = 
"i18n:org.apache.hop.pipeline.transform:BaseTransform.Category.Lookup",
     keywords = "i18n::DatabaseLookupMeta.keyword",
-    documentationUrl = "/pipeline/transforms/databaselookup.html")
+    documentationUrl = "/pipeline/transforms/databaselookup.html",
+    actionTransformTypes = {ActionTransformType.LOOKUP, 
ActionTransformType.RDBMS})
 public class DatabaseLookupMeta extends BaseTransformMeta<DatabaseLookup, 
DatabaseLookupData> {
 
   private static final Class<?> PKG = DatabaseLookupMeta.class; // For 
Translator
@@ -69,7 +72,9 @@ public class DatabaseLookupMeta extends 
BaseTransformMeta<DatabaseLookup, Databa
   public static final int CONDITION_IS_NOT_NULL = 9;
 
   /** database connection */
-  @HopMetadataProperty(injectionKeyDescription = 
"DatabaseLookupMeta.Injection.Connection")
+  @HopMetadataProperty(
+      injectionKeyDescription = "DatabaseLookupMeta.Injection.Connection",
+      hopMetadataPropertyType = HopMetadataPropertyType.RDBMS_CONNECTION)
   private String connection;
 
   /** ICache values we look up --> faster */
diff --git 
a/plugins/transforms/databaselookup/src/main/java/org/apache/hop/pipeline/transforms/databaselookup/KeyField.java
 
b/plugins/transforms/databaselookup/src/main/java/org/apache/hop/pipeline/transforms/databaselookup/KeyField.java
index 956ee8249a..6db01efeba 100644
--- 
a/plugins/transforms/databaselookup/src/main/java/org/apache/hop/pipeline/transforms/databaselookup/KeyField.java
+++ 
b/plugins/transforms/databaselookup/src/main/java/org/apache/hop/pipeline/transforms/databaselookup/KeyField.java
@@ -18,6 +18,7 @@
 package org.apache.hop.pipeline.transforms.databaselookup;
 
 import org.apache.hop.metadata.api.HopMetadataProperty;
+import org.apache.hop.metadata.api.HopMetadataPropertyType;
 
 public class KeyField {
   @HopMetadataProperty(
@@ -41,7 +42,8 @@ public class KeyField {
   @HopMetadataProperty(
       key = "field",
       injectionKey = "key_table_field",
-      injectionKeyDescription = "DatabaseLookupMeta.Injection.KeyTableField")
+      injectionKeyDescription = "DatabaseLookupMeta.Injection.KeyTableField",
+      hopMetadataPropertyType = HopMetadataPropertyType.RDBMS_COLUMN)
   private String tableField;
 
   public KeyField() {}
diff --git 
a/plugins/transforms/databaselookup/src/main/java/org/apache/hop/pipeline/transforms/databaselookup/Lookup.java
 
b/plugins/transforms/databaselookup/src/main/java/org/apache/hop/pipeline/transforms/databaselookup/Lookup.java
index 4fc22e91ac..066232a940 100644
--- 
a/plugins/transforms/databaselookup/src/main/java/org/apache/hop/pipeline/transforms/databaselookup/Lookup.java
+++ 
b/plugins/transforms/databaselookup/src/main/java/org/apache/hop/pipeline/transforms/databaselookup/Lookup.java
@@ -20,18 +20,21 @@ package org.apache.hop.pipeline.transforms.databaselookup;
 import java.util.ArrayList;
 import java.util.List;
 import org.apache.hop.metadata.api.HopMetadataProperty;
+import org.apache.hop.metadata.api.HopMetadataPropertyType;
 
 public class Lookup {
   /** what's the lookup schema name? */
   @HopMetadataProperty(
       key = "schema",
-      injectionKeyDescription = "DatabaseLookupMeta.Injection.SchemaName")
+      injectionKeyDescription = "DatabaseLookupMeta.Injection.SchemaName",
+      hopMetadataPropertyType = HopMetadataPropertyType.RDBMS_SCHEMA)
   private String schemaName;
 
   /** what's the lookup table? */
   @HopMetadataProperty(
       key = "table",
-      injectionKeyDescription = "DatabaseLookupMeta.Injection.TableName")
+      injectionKeyDescription = "DatabaseLookupMeta.Injection.TableName",
+      hopMetadataPropertyType = HopMetadataPropertyType.RDBMS_TABLE)
   private String tableName;
 
   @HopMetadataProperty(
diff --git 
a/plugins/transforms/delete/src/main/java/org/apache/hop/pipeline/transforms/delete/DeleteKeyField.java
 
b/plugins/transforms/delete/src/main/java/org/apache/hop/pipeline/transforms/delete/DeleteKeyField.java
index 541928d6db..ef6afd302b 100644
--- 
a/plugins/transforms/delete/src/main/java/org/apache/hop/pipeline/transforms/delete/DeleteKeyField.java
+++ 
b/plugins/transforms/delete/src/main/java/org/apache/hop/pipeline/transforms/delete/DeleteKeyField.java
@@ -19,6 +19,7 @@ package org.apache.hop.pipeline.transforms.delete;
 
 import java.util.Objects;
 import org.apache.hop.metadata.api.HopMetadataProperty;
+import org.apache.hop.metadata.api.HopMetadataPropertyType;
 
 public class DeleteKeyField {
 
@@ -31,7 +32,8 @@ public class DeleteKeyField {
   /** field in table */
   @HopMetadataProperty(
       key = "field",
-      injectionKeyDescription = "DeleteMeta.Injection.Field.KeyLookup")
+      injectionKeyDescription = "DeleteMeta.Injection.Field.KeyLookup",
+      hopMetadataPropertyType = HopMetadataPropertyType.RDBMS_COLUMN)
   private String keyLookup;
 
   /** Comparator: =, <>, BETWEEN, ... */
diff --git 
a/plugins/transforms/delete/src/main/java/org/apache/hop/pipeline/transforms/delete/DeleteLookupField.java
 
b/plugins/transforms/delete/src/main/java/org/apache/hop/pipeline/transforms/delete/DeleteLookupField.java
index be116a784e..52db89b145 100644
--- 
a/plugins/transforms/delete/src/main/java/org/apache/hop/pipeline/transforms/delete/DeleteLookupField.java
+++ 
b/plugins/transforms/delete/src/main/java/org/apache/hop/pipeline/transforms/delete/DeleteLookupField.java
@@ -21,6 +21,7 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.Objects;
 import org.apache.hop.metadata.api.HopMetadataProperty;
+import org.apache.hop.metadata.api.HopMetadataPropertyType;
 
 public class DeleteLookupField {
 
@@ -31,11 +32,17 @@ public class DeleteLookupField {
   private List<DeleteKeyField> fields;
 
   /** The lookup schema name */
-  @HopMetadataProperty(key = "schema", injectionKeyDescription = 
"DeleteMeta.Injection.SchemaName")
+  @HopMetadataProperty(
+      key = "schema",
+      injectionKeyDescription = "DeleteMeta.Injection.SchemaName",
+      hopMetadataPropertyType = HopMetadataPropertyType.RDBMS_SCHEMA)
   private String schemaName;
 
   /** The lookup table name */
-  @HopMetadataProperty(key = "table", injectionKeyDescription = 
"DeleteMeta.Injection.TableName")
+  @HopMetadataProperty(
+      key = "table",
+      injectionKeyDescription = "DeleteMeta.Injection.TableName",
+      hopMetadataPropertyType = HopMetadataPropertyType.RDBMS_TABLE)
   private String tableName;
 
   public DeleteLookupField() {
diff --git 
a/plugins/transforms/delete/src/main/java/org/apache/hop/pipeline/transforms/delete/DeleteMeta.java
 
b/plugins/transforms/delete/src/main/java/org/apache/hop/pipeline/transforms/delete/DeleteMeta.java
index ee6f200020..d7e1181df5 100644
--- 
a/plugins/transforms/delete/src/main/java/org/apache/hop/pipeline/transforms/delete/DeleteMeta.java
+++ 
b/plugins/transforms/delete/src/main/java/org/apache/hop/pipeline/transforms/delete/DeleteMeta.java
@@ -23,6 +23,7 @@ import org.apache.hop.core.CheckResult;
 import org.apache.hop.core.Const;
 import org.apache.hop.core.ICheckResult;
 import org.apache.hop.core.SqlStatement;
+import org.apache.hop.core.annotations.ActionTransformType;
 import org.apache.hop.core.annotations.Transform;
 import org.apache.hop.core.database.Database;
 import org.apache.hop.core.database.DatabaseMeta;
@@ -34,6 +35,7 @@ import org.apache.hop.core.util.Utils;
 import org.apache.hop.core.variables.IVariables;
 import org.apache.hop.i18n.BaseMessages;
 import org.apache.hop.metadata.api.HopMetadataProperty;
+import org.apache.hop.metadata.api.HopMetadataPropertyType;
 import org.apache.hop.metadata.api.IHopMetadataProvider;
 import org.apache.hop.pipeline.DatabaseImpact;
 import org.apache.hop.pipeline.PipelineMeta;
@@ -51,7 +53,8 @@ import org.apache.hop.pipeline.transform.TransformMeta;
     description = "i18n::Delete.Description",
     categoryDescription = 
"i18n:org.apache.hop.pipeline.transform:BaseTransform.Category.Output",
     keywords = "i18n::DeleteMeta.Keyword",
-    documentationUrl = "/pipeline/transforms/delete.html")
+    documentationUrl = "/pipeline/transforms/delete.html",
+    actionTransformTypes = {ActionTransformType.DELETE, 
ActionTransformType.RDBMS})
 public class DeleteMeta extends BaseTransformMeta<Delete, DeleteData> {
   private static final Class<?> PKG = DeleteMeta.class; // For Translator
 
@@ -62,7 +65,8 @@ public class DeleteMeta extends BaseTransformMeta<Delete, 
DeleteData> {
   /** database connection */
   @HopMetadataProperty(
       key = "connection",
-      injectionKeyDescription = "DeleteMeta.Injection.Connection")
+      injectionKeyDescription = "DeleteMeta.Injection.Connection",
+      hopMetadataPropertyType = HopMetadataPropertyType.RDBMS_CONNECTION)
   private String connection;
 
   /** Commit size for inserts/updates */
diff --git 
a/plugins/transforms/insertupdate/src/main/java/org/apache/hop/pipeline/transforms/insertupdate/InsertUpdateMeta.java
 
b/plugins/transforms/insertupdate/src/main/java/org/apache/hop/pipeline/transforms/insertupdate/InsertUpdateMeta.java
index 4cd4c2bbc7..961fc0fb79 100644
--- 
a/plugins/transforms/insertupdate/src/main/java/org/apache/hop/pipeline/transforms/insertupdate/InsertUpdateMeta.java
+++ 
b/plugins/transforms/insertupdate/src/main/java/org/apache/hop/pipeline/transforms/insertupdate/InsertUpdateMeta.java
@@ -23,6 +23,7 @@ import org.apache.hop.core.CheckResult;
 import org.apache.hop.core.Const;
 import org.apache.hop.core.ICheckResult;
 import org.apache.hop.core.SqlStatement;
+import org.apache.hop.core.annotations.ActionTransformType;
 import org.apache.hop.core.annotations.Transform;
 import org.apache.hop.core.database.Database;
 import org.apache.hop.core.database.DatabaseMeta;
@@ -34,6 +35,7 @@ import org.apache.hop.core.util.Utils;
 import org.apache.hop.core.variables.IVariables;
 import org.apache.hop.i18n.BaseMessages;
 import org.apache.hop.metadata.api.HopMetadataProperty;
+import org.apache.hop.metadata.api.HopMetadataPropertyType;
 import org.apache.hop.metadata.api.IHopMetadataProvider;
 import org.apache.hop.pipeline.DatabaseImpact;
 import org.apache.hop.pipeline.PipelineMeta;
@@ -48,7 +50,8 @@ import org.apache.hop.pipeline.transform.utils.RowMetaUtils;
     description = "i18n::InsertUpdate.Description",
     categoryDescription = 
"i18n:org.apache.hop.pipeline.transform:BaseTransform.Category.Output",
     keywords = "i18n::InsertUpdateMeta.keyword",
-    documentationUrl = "/pipeline/transforms/insertupdate.html")
+    documentationUrl = "/pipeline/transforms/insertupdate.html",
+    actionTransformTypes = {ActionTransformType.OUTPUT, 
ActionTransformType.RDBMS})
 public class InsertUpdateMeta extends BaseTransformMeta<InsertUpdate, 
InsertUpdateData> {
   private static final Class<?> PKG = InsertUpdateMeta.class; // For Translator
 
@@ -79,7 +82,8 @@ public class InsertUpdateMeta extends 
BaseTransformMeta<InsertUpdate, InsertUpda
   @HopMetadataProperty(
       key = "connection",
       injectionKeyDescription = "InsertUpdateMeta.Injection.CONNECTIONNAME",
-      injectionKey = "CONNECTIONNAME")
+      injectionKey = "CONNECTIONNAME",
+      hopMetadataPropertyType = HopMetadataPropertyType.RDBMS_CONNECTION)
   private String connection;
 
   public String getConnection() {
diff --git 
a/plugins/transforms/sql/src/main/java/org/apache/hop/pipeline/transforms/sql/ExecSqlMeta.java
 
b/plugins/transforms/sql/src/main/java/org/apache/hop/pipeline/transforms/sql/ExecSqlMeta.java
index e04c3f9508..ef57fe89db 100644
--- 
a/plugins/transforms/sql/src/main/java/org/apache/hop/pipeline/transforms/sql/ExecSqlMeta.java
+++ 
b/plugins/transforms/sql/src/main/java/org/apache/hop/pipeline/transforms/sql/ExecSqlMeta.java
@@ -24,6 +24,7 @@ import org.apache.hop.core.Const;
 import org.apache.hop.core.ICheckResult;
 import org.apache.hop.core.Result;
 import org.apache.hop.core.RowMetaAndData;
+import org.apache.hop.core.annotations.ActionTransformType;
 import org.apache.hop.core.annotations.Transform;
 import org.apache.hop.core.database.Database;
 import org.apache.hop.core.database.DatabaseMeta;
@@ -33,6 +34,7 @@ import org.apache.hop.core.row.IRowMeta;
 import org.apache.hop.core.variables.IVariables;
 import org.apache.hop.i18n.BaseMessages;
 import org.apache.hop.metadata.api.HopMetadataProperty;
+import org.apache.hop.metadata.api.HopMetadataPropertyType;
 import org.apache.hop.metadata.api.IHopMetadataProvider;
 import org.apache.hop.pipeline.DatabaseImpact;
 import org.apache.hop.pipeline.PipelineMeta;
@@ -50,16 +52,21 @@ import org.apache.hop.pipeline.transform.TransformMeta;
     description = "i18n::ExecSql.Description",
     categoryDescription = 
"i18n:org.apache.hop.pipeline.transform:BaseTransform.Category.Scripting",
     keywords = "i18n::ExecSqlMeta.keyword",
-    documentationUrl = "/pipeline/transforms/execsql.html")
+    documentationUrl = "/pipeline/transforms/execsql.html",
+    actionTransformTypes = {ActionTransformType.RDBMS})
 public class ExecSqlMeta extends BaseTransformMeta<ExecSql, ExecSqlData> {
   private static final Class<?> PKG = ExecSqlMeta.class; // For Translator
 
   @HopMetadataProperty(
       key = "connection",
-      injectionKeyDescription = "ExecSqlMeta.Injection.CONNECTIONNAME")
+      injectionKeyDescription = "ExecSqlMeta.Injection.CONNECTIONNAME",
+      hopMetadataPropertyType = HopMetadataPropertyType.RDBMS_CONNECTION)
   private String connection;
 
-  @HopMetadataProperty(injectionKeyDescription = "ExecSqlMeta.Injection.SQL", 
injectionKey = "SQL")
+  @HopMetadataProperty(
+      injectionKeyDescription = "ExecSqlMeta.Injection.SQL",
+      injectionKey = "SQL",
+      hopMetadataPropertyType = HopMetadataPropertyType.RDBMS_SQL)
   private String sql;
 
   @HopMetadataProperty(
diff --git 
a/plugins/transforms/tableinput/src/main/java/org/apache/hop/pipeline/transforms/tableinput/TableInputMeta.java
 
b/plugins/transforms/tableinput/src/main/java/org/apache/hop/pipeline/transforms/tableinput/TableInputMeta.java
index ce56373e0b..14ede651b3 100644
--- 
a/plugins/transforms/tableinput/src/main/java/org/apache/hop/pipeline/transforms/tableinput/TableInputMeta.java
+++ 
b/plugins/transforms/tableinput/src/main/java/org/apache/hop/pipeline/transforms/tableinput/TableInputMeta.java
@@ -21,6 +21,7 @@ import java.util.List;
 import org.apache.hop.core.CheckResult;
 import org.apache.hop.core.Const;
 import org.apache.hop.core.ICheckResult;
+import org.apache.hop.core.annotations.ActionTransformType;
 import org.apache.hop.core.annotations.Transform;
 import org.apache.hop.core.database.Database;
 import org.apache.hop.core.database.DatabaseMeta;
@@ -36,6 +37,7 @@ import org.apache.hop.core.util.Utils;
 import org.apache.hop.core.variables.IVariables;
 import org.apache.hop.i18n.BaseMessages;
 import org.apache.hop.metadata.api.HopMetadataProperty;
+import org.apache.hop.metadata.api.HopMetadataPropertyType;
 import org.apache.hop.metadata.api.IHopMetadataProvider;
 import org.apache.hop.pipeline.DatabaseImpact;
 import org.apache.hop.pipeline.PipelineMeta;
@@ -56,12 +58,16 @@ import org.w3c.dom.Node;
     description = "i18n::TableInput.Description",
     categoryDescription = 
"i18n:org.apache.hop.pipeline.transform:BaseTransform.Category.Input",
     documentationUrl = "/pipeline/transforms/tableinput.html",
-    keywords = "i18n::TableInputMeta.keyword")
+    keywords = "i18n::TableInputMeta.keyword",
+    actionTransformTypes = {ActionTransformType.INPUT, 
ActionTransformType.RDBMS})
 public class TableInputMeta extends BaseTransformMeta<TableInput, 
TableInputData> {
 
   private static final Class<?> PKG = TableInputMeta.class; // For Translator
 
-  @HopMetadataProperty(key = "sql", injectionKey = "SQL")
+  @HopMetadataProperty(
+      key = "sql",
+      injectionKey = "SQL",
+      hopMetadataPropertyType = HopMetadataPropertyType.RDBMS_SQL_SELECT)
   private String sql;
 
   @HopMetadataProperty(key = "limit", injectionKey = "LIMIT")
@@ -74,7 +80,10 @@ public class TableInputMeta extends 
BaseTransformMeta<TableInput, TableInputData
   @HopMetadataProperty(key = "variables_active", injectionKey = 
"REPLACE_VARIABLES")
   private boolean variableReplacementActive;
 
-  @HopMetadataProperty(key = "connection", injectionKey = "CONNECTIONNAME")
+  @HopMetadataProperty(
+      key = "connection",
+      injectionKey = "CONNECTIONNAME",
+      hopMetadataPropertyType = HopMetadataPropertyType.RDBMS_CONNECTION)
   private String connection;
 
   @HopMetadataProperty private String lookup;
diff --git 
a/plugins/transforms/tableoutput/src/main/java/org/apache/hop/pipeline/transforms/tableoutput/TableOutputField.java
 
b/plugins/transforms/tableoutput/src/main/java/org/apache/hop/pipeline/transforms/tableoutput/TableOutputField.java
index 0d93a74740..5c89c3d301 100644
--- 
a/plugins/transforms/tableoutput/src/main/java/org/apache/hop/pipeline/transforms/tableoutput/TableOutputField.java
+++ 
b/plugins/transforms/tableoutput/src/main/java/org/apache/hop/pipeline/transforms/tableoutput/TableOutputField.java
@@ -19,6 +19,7 @@ package org.apache.hop.pipeline.transforms.tableoutput;
 
 import java.util.Objects;
 import org.apache.hop.metadata.api.HopMetadataProperty;
+import org.apache.hop.metadata.api.HopMetadataPropertyType;
 
 public class TableOutputField {
 
@@ -45,7 +46,8 @@ public class TableOutputField {
   @HopMetadataProperty(
       key = "column_name",
       injectionKey = "DATABASE_FIELDNAME",
-      injectionKeyDescription = 
"TableOutputMeta.Injection.FieldDatabase.Field")
+      injectionKeyDescription = 
"TableOutputMeta.Injection.FieldDatabase.Field",
+      hopMetadataPropertyType = HopMetadataPropertyType.RDBMS_COLUMN)
   private String fieldDatabase;
 
   /**
diff --git 
a/plugins/transforms/tableoutput/src/main/java/org/apache/hop/pipeline/transforms/tableoutput/TableOutputMeta.java
 
b/plugins/transforms/tableoutput/src/main/java/org/apache/hop/pipeline/transforms/tableoutput/TableOutputMeta.java
index 41eb5cdb1a..2f41bfeeff 100644
--- 
a/plugins/transforms/tableoutput/src/main/java/org/apache/hop/pipeline/transforms/tableoutput/TableOutputMeta.java
+++ 
b/plugins/transforms/tableoutput/src/main/java/org/apache/hop/pipeline/transforms/tableoutput/TableOutputMeta.java
@@ -23,6 +23,7 @@ import org.apache.hop.core.CheckResult;
 import org.apache.hop.core.Const;
 import org.apache.hop.core.ICheckResult;
 import org.apache.hop.core.SqlStatement;
+import org.apache.hop.core.annotations.ActionTransformType;
 import org.apache.hop.core.annotations.Transform;
 import org.apache.hop.core.database.Database;
 import org.apache.hop.core.database.DatabaseMeta;
@@ -36,6 +37,7 @@ import org.apache.hop.core.util.Utils;
 import org.apache.hop.core.variables.IVariables;
 import org.apache.hop.i18n.BaseMessages;
 import org.apache.hop.metadata.api.HopMetadataProperty;
+import org.apache.hop.metadata.api.HopMetadataPropertyType;
 import org.apache.hop.metadata.api.IHopMetadataProvider;
 import org.apache.hop.pipeline.DatabaseImpact;
 import org.apache.hop.pipeline.PipelineMeta;
@@ -49,7 +51,8 @@ import org.apache.hop.pipeline.transform.TransformMeta;
     description = "i18n::TableOutput.Description",
     categoryDescription = 
"i18n:org.apache.hop.pipeline.transform:BaseTransform.Category.Output",
     keywords = "i18n::TableOutputMeta.keyword",
-    documentationUrl = "/pipeline/transforms/tableoutput.html")
+    documentationUrl = "/pipeline/transforms/tableoutput.html",
+    actionTransformTypes = {ActionTransformType.OUTPUT, 
ActionTransformType.RDBMS})
 public class TableOutputMeta extends BaseTransformMeta<TableOutput, 
TableOutputData> {
   private static final Class<?> PKG = TableOutputMeta.class; // For Translator
 
@@ -58,19 +61,22 @@ public class TableOutputMeta extends 
BaseTransformMeta<TableOutput, TableOutputD
 
   @HopMetadataProperty(
       key = "connection",
-      injectionKeyDescription = "TableOutputMeta.Injection.Connection")
+      injectionKeyDescription = "TableOutputMeta.Injection.Connection",
+      hopMetadataPropertyType = HopMetadataPropertyType.RDBMS_CONNECTION)
   private String connection;
 
   @HopMetadataProperty(
       key = "schema",
       injectionKey = "TARGET_SCHEMA",
-      injectionKeyDescription = "TableOutputMeta.Injection.SchemaName.Field")
+      injectionKeyDescription = "TableOutputMeta.Injection.SchemaName.Field",
+      hopMetadataPropertyType = HopMetadataPropertyType.RDBMS_SCHEMA)
   private String schemaName;
 
   @HopMetadataProperty(
       key = "table",
       injectionKey = "TARGET_TABLE",
-      injectionKeyDescription = "TableOutputMeta.Injection.TableName.Field")
+      injectionKeyDescription = "TableOutputMeta.Injection.TableName.Field",
+      hopMetadataPropertyType = HopMetadataPropertyType.RDBMS_TABLE)
   private String tableName;
 
   @HopMetadataProperty(
@@ -82,7 +88,8 @@ public class TableOutputMeta extends 
BaseTransformMeta<TableOutput, TableOutputD
   @HopMetadataProperty(
       key = "truncate",
       injectionKey = "TRUNCATE_TABLE",
-      injectionKeyDescription = 
"TableOutputMeta.Injection.TruncateTable.Field")
+      injectionKeyDescription = 
"TableOutputMeta.Injection.TruncateTable.Field",
+      hopMetadataPropertyType = HopMetadataPropertyType.RDBMS_TRUNCATE)
   private boolean truncateTable;
 
   @HopMetadataProperty(
@@ -170,7 +177,8 @@ public class TableOutputMeta extends 
BaseTransformMeta<TableOutput, TableOutputD
       injectionKey = "DATABASE_FIELD",
       injectionGroupKey = "DATABASE_FIELDS",
       injectionGroupDescription = "TableOutputMeta.Injection.Fields",
-      injectionKeyDescription = "TableOutputMeta.Injection.Field")
+      injectionKeyDescription = "TableOutputMeta.Injection.Field",
+      hopMetadataPropertyType = HopMetadataPropertyType.FIELD_LIST)
   private List<TableOutputField> fields;
 
   public List<TableOutputField> getFields() {
diff --git 
a/plugins/transforms/update/src/main/java/org/apache/hop/pipeline/transforms/update/UpdateMeta.java
 
b/plugins/transforms/update/src/main/java/org/apache/hop/pipeline/transforms/update/UpdateMeta.java
index d1b9c17e75..14e0b3810d 100644
--- 
a/plugins/transforms/update/src/main/java/org/apache/hop/pipeline/transforms/update/UpdateMeta.java
+++ 
b/plugins/transforms/update/src/main/java/org/apache/hop/pipeline/transforms/update/UpdateMeta.java
@@ -22,6 +22,7 @@ import org.apache.hop.core.CheckResult;
 import org.apache.hop.core.Const;
 import org.apache.hop.core.ICheckResult;
 import org.apache.hop.core.SqlStatement;
+import org.apache.hop.core.annotations.ActionTransformType;
 import org.apache.hop.core.annotations.Transform;
 import org.apache.hop.core.database.Database;
 import org.apache.hop.core.database.DatabaseMeta;
@@ -35,6 +36,7 @@ import org.apache.hop.core.util.Utils;
 import org.apache.hop.core.variables.IVariables;
 import org.apache.hop.i18n.BaseMessages;
 import org.apache.hop.metadata.api.HopMetadataProperty;
+import org.apache.hop.metadata.api.HopMetadataPropertyType;
 import org.apache.hop.metadata.api.IHopMetadataProvider;
 import org.apache.hop.pipeline.DatabaseImpact;
 import org.apache.hop.pipeline.PipelineMeta;
@@ -49,7 +51,8 @@ import org.apache.hop.pipeline.transform.utils.RowMetaUtils;
     description = "i18n::Update.Description",
     categoryDescription = 
"i18n:org.apache.hop.pipeline.transform:BaseTransform.Category.Output",
     keywords = "i18n::UpdateMeta.keyword",
-    documentationUrl = "/pipeline/transforms/update.html")
+    documentationUrl = "/pipeline/transforms/update.html",
+    actionTransformTypes = {ActionTransformType.RDBMS, 
ActionTransformType.OUTPUT})
 public class UpdateMeta extends BaseTransformMeta<Update, UpdateData> {
   private static final Class<?> PKG = UpdateMeta.class; // For Translator
 
@@ -101,7 +104,8 @@ public class UpdateMeta extends BaseTransformMeta<Update, 
UpdateData> {
   @HopMetadataProperty(
       key = "connection",
       injectionKeyDescription = "UpdateMeta.Injection.Connection",
-      injectionKey = "CONNECTIONNAME")
+      injectionKey = "CONNECTIONNAME",
+      hopMetadataPropertyType = HopMetadataPropertyType.RDBMS_CONNECTION)
   private String connection;
 
   public String getConnection() {

Reply via email to