You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2023/12/21 19:53:24 UTC

(camel) branch main updated: CAMEL-20275: components - Mark options that can are used for text inp… (#12551)

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

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


The following commit(s) were added to refs/heads/main by this push:
     new 7917bcb5965 CAMEL-20275: components - Mark options that can are used for text inp… (#12551)
7917bcb5965 is described below

commit 7917bcb5965ea9905e0e428eef82537374ade1b9
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Thu Dec 21 20:53:19 2023 +0100

    CAMEL-20275: components - Mark options that can are used for text inp… (#12551)
    
    * CAMEL-20275: components - Mark options that can are used for text inputs such as a SQL query
    
    * CAMEL-20275: components - Mark options that can are used for text inputs such as a SQL query
    
    * CAMEL-20275: components - Mark options that can are used for text inputs such as a SQL query
---
 .../camel/catalog/components/google-bigquery-sql.json  |  2 +-
 .../apache/camel/catalog/components/sql-stored.json    |  2 +-
 .../org/apache/camel/catalog/components/sql.json       |  2 +-
 .../google/bigquery/sql/google-bigquery-sql.json       |  2 +-
 .../bigquery/sql/GoogleBigQuerySQLConfiguration.java   |  2 +-
 .../resources/org/apache/camel/component/sql/sql.json  |  2 +-
 .../apache/camel/component/sql/stored/sql-stored.json  |  2 +-
 .../org/apache/camel/component/sql/SqlEndpoint.java    |  2 +-
 .../camel/component/sql/stored/SqlStoredEndpoint.java  |  2 +-
 .../generated/java/org/apache/camel/spi/Metadata.java  | 15 +++++++++++++++
 .../apache/camel/tooling/model/BaseOptionModel.java    | 18 ++++++++++++++++++
 .../org/apache/camel/tooling/model/JsonMapper.java     | 10 ++++++++++
 .../maven/packaging/EndpointSchemaGeneratorMojo.java   |  8 ++++++++
 .../src/main/java/org/apache/camel/spi/Metadata.java   | 15 +++++++++++++++
 14 files changed, 75 insertions(+), 9 deletions(-)

diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/google-bigquery-sql.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/google-bigquery-sql.json
index 4974a46f603..5a0a700e69e 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/google-bigquery-sql.json
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/google-bigquery-sql.json
@@ -33,7 +33,7 @@
   },
   "properties": {
     "projectId": { "index": 0, "kind": "path", "displayName": "Project Id", "group": "common", "label": "common", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.bigquery.sql.GoogleBigQuerySQLConfiguration", "configurationField": "configuration", "description": "Google Cloud Project Id" },
-    "queryString": { "index": 1, "kind": "path", "displayName": "Query String", "group": "common", "label": "common", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "supportFileReference": true, "configurationClass": "org.apache.camel.component.google.bigquery.sql.GoogleBigQuerySQLConfiguration", "configurationField": "configuration", "description": "BigQuery standard SQL query" },
+    "queryString": { "index": 1, "kind": "path", "displayName": "Query String", "group": "common", "label": "common", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "supportFileReference": true, "largeInput": true, "configurationClass": "org.apache.camel.component.google.bigquery.sql.GoogleBigQuerySQLConfiguration", "configurationField": "configuration", "description": "BigQuery standard [...]
     "connectionFactory": { "index": 2, "kind": "parameter", "displayName": "Connection Factory", "group": "producer", "label": "", "required": false, "type": "object", "javaType": "org.apache.camel.component.google.bigquery.GoogleBigQueryConnectionFactory", "deprecated": false, "deprecationNote": "", "autowired": true, "secret": false, "configurationClass": "org.apache.camel.component.google.bigquery.sql.GoogleBigQuerySQLConfiguration", "configurationField": "configuration", "description [...]
     "lazyStartProducer": { "index": 3, "kind": "parameter", "displayName": "Lazy Start Producer", "group": "producer (advanced)", "label": "producer,advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a produc [...]
     "serviceAccountKey": { "index": 4, "kind": "parameter", "displayName": "Service Account Key", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.bigquery.sql.GoogleBigQuerySQLConfiguration", "configurationField": "configuration", "description": "Service account key in json format to authen [...]
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/sql-stored.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/sql-stored.json
index 8dce1fcec9b..af4cb35b3a0 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/sql-stored.json
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/sql-stored.json
@@ -32,7 +32,7 @@
     "CamelSqlStoredUpdateCount": { "index": 2, "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The update count", "constantName": "org.apache.camel.component.sql.stored.SqlStoredConstants#SQL_STORED_UPDATE_COUNT" }
   },
   "properties": {
-    "template": { "index": 0, "kind": "path", "displayName": "Template", "group": "producer", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "supportFileReference": true, "description": "Sets the stored procedure template to perform. You can externalize the template by using file: or classpath: as prefix and specify the location of the file." },
+    "template": { "index": 0, "kind": "path", "displayName": "Template", "group": "producer", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "supportFileReference": true, "largeInput": true, "inputLanguage": "sql", "description": "Sets the stored procedure template to perform. You can externalize the template by using file: or classpath: as prefix and specify the location of [...]
     "batch": { "index": 1, "kind": "parameter", "displayName": "Batch", "group": "producer", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Enables or disables batch mode" },
     "dataSource": { "index": 2, "kind": "parameter", "displayName": "Data Source", "group": "producer", "label": "", "required": false, "type": "object", "javaType": "javax.sql.DataSource", "deprecated": false, "autowired": false, "secret": false, "description": "Sets the DataSource to use to communicate with the database." },
     "function": { "index": 3, "kind": "parameter", "displayName": "Function", "group": "producer", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether this call is for a function." },
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/sql.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/sql.json
index e2a1a32d991..5e46b5a68ed 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/sql.json
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/sql.json
@@ -42,7 +42,7 @@
     "CamelSqlParameters": { "index": 7, "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "Iterator", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The SQL parameters when using the option useMessageBodyForSql", "constantName": "org.apache.camel.component.sql.SqlConstants#SQL_PARAMETERS" }
   },
   "properties": {
-    "query": { "index": 0, "kind": "path", "displayName": "Query", "group": "common", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "supportFileReference": true, "description": "Sets the SQL query to perform. You can externalize the query by using file: or classpath: as prefix and specify the location of the file." },
+    "query": { "index": 0, "kind": "path", "displayName": "Query", "group": "common", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "supportFileReference": true, "largeInput": true, "inputLanguage": "sql", "description": "Sets the SQL query to perform. You can externalize the query by using file: or classpath: as prefix and specify the location of the file." },
     "allowNamedParameters": { "index": 1, "kind": "parameter", "displayName": "Allow Named Parameters", "group": "common", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Whether to allow using named parameters in the queries." },
     "dataSource": { "index": 2, "kind": "parameter", "displayName": "Data Source", "group": "common", "label": "", "required": false, "type": "object", "javaType": "javax.sql.DataSource", "deprecated": false, "deprecationNote": "", "autowired": true, "secret": false, "description": "Sets the DataSource to use to communicate with the database at endpoint level." },
     "outputClass": { "index": 3, "kind": "parameter", "displayName": "Output Class", "group": "common", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Specify the full package and class name to use as conversion when outputType=SelectOne." },
diff --git a/components/camel-google/camel-google-bigquery/src/generated/resources/org/apache/camel/component/google/bigquery/sql/google-bigquery-sql.json b/components/camel-google/camel-google-bigquery/src/generated/resources/org/apache/camel/component/google/bigquery/sql/google-bigquery-sql.json
index 4974a46f603..5a0a700e69e 100644
--- a/components/camel-google/camel-google-bigquery/src/generated/resources/org/apache/camel/component/google/bigquery/sql/google-bigquery-sql.json
+++ b/components/camel-google/camel-google-bigquery/src/generated/resources/org/apache/camel/component/google/bigquery/sql/google-bigquery-sql.json
@@ -33,7 +33,7 @@
   },
   "properties": {
     "projectId": { "index": 0, "kind": "path", "displayName": "Project Id", "group": "common", "label": "common", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.bigquery.sql.GoogleBigQuerySQLConfiguration", "configurationField": "configuration", "description": "Google Cloud Project Id" },
-    "queryString": { "index": 1, "kind": "path", "displayName": "Query String", "group": "common", "label": "common", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "supportFileReference": true, "configurationClass": "org.apache.camel.component.google.bigquery.sql.GoogleBigQuerySQLConfiguration", "configurationField": "configuration", "description": "BigQuery standard SQL query" },
+    "queryString": { "index": 1, "kind": "path", "displayName": "Query String", "group": "common", "label": "common", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "supportFileReference": true, "largeInput": true, "configurationClass": "org.apache.camel.component.google.bigquery.sql.GoogleBigQuerySQLConfiguration", "configurationField": "configuration", "description": "BigQuery standard [...]
     "connectionFactory": { "index": 2, "kind": "parameter", "displayName": "Connection Factory", "group": "producer", "label": "", "required": false, "type": "object", "javaType": "org.apache.camel.component.google.bigquery.GoogleBigQueryConnectionFactory", "deprecated": false, "deprecationNote": "", "autowired": true, "secret": false, "configurationClass": "org.apache.camel.component.google.bigquery.sql.GoogleBigQuerySQLConfiguration", "configurationField": "configuration", "description [...]
     "lazyStartProducer": { "index": 3, "kind": "parameter", "displayName": "Lazy Start Producer", "group": "producer (advanced)", "label": "producer,advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a produc [...]
     "serviceAccountKey": { "index": 4, "kind": "parameter", "displayName": "Service Account Key", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.bigquery.sql.GoogleBigQuerySQLConfiguration", "configurationField": "configuration", "description": "Service account key in json format to authen [...]
diff --git a/components/camel-google/camel-google-bigquery/src/main/java/org/apache/camel/component/google/bigquery/sql/GoogleBigQuerySQLConfiguration.java b/components/camel-google/camel-google-bigquery/src/main/java/org/apache/camel/component/google/bigquery/sql/GoogleBigQuerySQLConfiguration.java
index 855787bd109..1fb459216eb 100644
--- a/components/camel-google/camel-google-bigquery/src/main/java/org/apache/camel/component/google/bigquery/sql/GoogleBigQuerySQLConfiguration.java
+++ b/components/camel-google/camel-google-bigquery/src/main/java/org/apache/camel/component/google/bigquery/sql/GoogleBigQuerySQLConfiguration.java
@@ -27,7 +27,7 @@ import org.apache.camel.spi.UriPath;
 public class GoogleBigQuerySQLConfiguration implements Cloneable {
 
     @UriPath(label = "common", description = "BigQuery standard SQL query")
-    @Metadata(required = true, supportFileReference = true)
+    @Metadata(required = true, supportFileReference = true, largeInput = true)
     private String queryString;
 
     @UriParam(description = "ConnectionFactory to obtain connection to Bigquery Service. If not provided the default one will be used")
diff --git a/components/camel-sql/src/generated/resources/org/apache/camel/component/sql/sql.json b/components/camel-sql/src/generated/resources/org/apache/camel/component/sql/sql.json
index e2a1a32d991..5e46b5a68ed 100644
--- a/components/camel-sql/src/generated/resources/org/apache/camel/component/sql/sql.json
+++ b/components/camel-sql/src/generated/resources/org/apache/camel/component/sql/sql.json
@@ -42,7 +42,7 @@
     "CamelSqlParameters": { "index": 7, "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "Iterator", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The SQL parameters when using the option useMessageBodyForSql", "constantName": "org.apache.camel.component.sql.SqlConstants#SQL_PARAMETERS" }
   },
   "properties": {
-    "query": { "index": 0, "kind": "path", "displayName": "Query", "group": "common", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "supportFileReference": true, "description": "Sets the SQL query to perform. You can externalize the query by using file: or classpath: as prefix and specify the location of the file." },
+    "query": { "index": 0, "kind": "path", "displayName": "Query", "group": "common", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "supportFileReference": true, "largeInput": true, "inputLanguage": "sql", "description": "Sets the SQL query to perform. You can externalize the query by using file: or classpath: as prefix and specify the location of the file." },
     "allowNamedParameters": { "index": 1, "kind": "parameter", "displayName": "Allow Named Parameters", "group": "common", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Whether to allow using named parameters in the queries." },
     "dataSource": { "index": 2, "kind": "parameter", "displayName": "Data Source", "group": "common", "label": "", "required": false, "type": "object", "javaType": "javax.sql.DataSource", "deprecated": false, "deprecationNote": "", "autowired": true, "secret": false, "description": "Sets the DataSource to use to communicate with the database at endpoint level." },
     "outputClass": { "index": 3, "kind": "parameter", "displayName": "Output Class", "group": "common", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Specify the full package and class name to use as conversion when outputType=SelectOne." },
diff --git a/components/camel-sql/src/generated/resources/org/apache/camel/component/sql/stored/sql-stored.json b/components/camel-sql/src/generated/resources/org/apache/camel/component/sql/stored/sql-stored.json
index 8dce1fcec9b..af4cb35b3a0 100644
--- a/components/camel-sql/src/generated/resources/org/apache/camel/component/sql/stored/sql-stored.json
+++ b/components/camel-sql/src/generated/resources/org/apache/camel/component/sql/stored/sql-stored.json
@@ -32,7 +32,7 @@
     "CamelSqlStoredUpdateCount": { "index": 2, "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The update count", "constantName": "org.apache.camel.component.sql.stored.SqlStoredConstants#SQL_STORED_UPDATE_COUNT" }
   },
   "properties": {
-    "template": { "index": 0, "kind": "path", "displayName": "Template", "group": "producer", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "supportFileReference": true, "description": "Sets the stored procedure template to perform. You can externalize the template by using file: or classpath: as prefix and specify the location of the file." },
+    "template": { "index": 0, "kind": "path", "displayName": "Template", "group": "producer", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "supportFileReference": true, "largeInput": true, "inputLanguage": "sql", "description": "Sets the stored procedure template to perform. You can externalize the template by using file: or classpath: as prefix and specify the location of [...]
     "batch": { "index": 1, "kind": "parameter", "displayName": "Batch", "group": "producer", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Enables or disables batch mode" },
     "dataSource": { "index": 2, "kind": "parameter", "displayName": "Data Source", "group": "producer", "label": "", "required": false, "type": "object", "javaType": "javax.sql.DataSource", "deprecated": false, "autowired": false, "secret": false, "description": "Sets the DataSource to use to communicate with the database." },
     "function": { "index": 3, "kind": "parameter", "displayName": "Function", "group": "producer", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether this call is for a function." },
diff --git a/components/camel-sql/src/main/java/org/apache/camel/component/sql/SqlEndpoint.java b/components/camel-sql/src/main/java/org/apache/camel/component/sql/SqlEndpoint.java
index 938cf543f60..be0aad03b47 100644
--- a/components/camel-sql/src/main/java/org/apache/camel/component/sql/SqlEndpoint.java
+++ b/components/camel-sql/src/main/java/org/apache/camel/component/sql/SqlEndpoint.java
@@ -34,7 +34,7 @@ import org.apache.camel.util.UnsafeUriCharactersEncoder;
 public class SqlEndpoint extends DefaultSqlEndpoint {
 
     @UriPath(description = "Sets the SQL query to perform. You can externalize the query by using file: or classpath: as prefix and specify the location of the file.")
-    @Metadata(required = true, supportFileReference = true)
+    @Metadata(required = true, supportFileReference = true, largeInput = true, inputLanguage = "sql")
     private String query;
 
     public SqlEndpoint() {
diff --git a/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/SqlStoredEndpoint.java b/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/SqlStoredEndpoint.java
index 0f9b3622eb9..cbcb3bef458 100644
--- a/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/SqlStoredEndpoint.java
+++ b/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/SqlStoredEndpoint.java
@@ -44,7 +44,7 @@ public class SqlStoredEndpoint extends DefaultEndpoint {
     private JdbcTemplate jdbcTemplate;
 
     @UriPath(description = "Sets the stored procedure template to perform. You can externalize the template by using file: or classpath: as prefix and specify the location of the file.")
-    @Metadata(required = true, supportFileReference = true)
+    @Metadata(required = true, supportFileReference = true, largeInput = true, inputLanguage = "sql")
     private String template;
     @UriParam(description = "Sets the DataSource to use to communicate with the database.")
     private DataSource dataSource;
diff --git a/core/camel-api/src/generated/java/org/apache/camel/spi/Metadata.java b/core/camel-api/src/generated/java/org/apache/camel/spi/Metadata.java
index 53c0ce67c36..a8ae70fcded 100644
--- a/core/camel-api/src/generated/java/org/apache/camel/spi/Metadata.java
+++ b/core/camel-api/src/generated/java/org/apache/camel/spi/Metadata.java
@@ -155,4 +155,19 @@ public @interface Metadata {
      * file.
      */
     boolean supportFileReference() default false;
+
+    /**
+     * Whether the option can be large input such as a SQL query, XSLT template, or scripting code.
+     *
+     * This can be used to help tooling to provide an input form instead of a single input field to give better user
+     * experience.
+     */
+    boolean largeInput() default false;
+
+    /**
+     * If the option is some specific language such as SQL, XSLT, XML, JavaScript or something else.
+     *
+     * This can be used to help tooling to provide a better user experience.
+     */
+    String inputLanguage() default "";
 }
diff --git a/tooling/camel-tooling-model/src/main/java/org/apache/camel/tooling/model/BaseOptionModel.java b/tooling/camel-tooling-model/src/main/java/org/apache/camel/tooling/model/BaseOptionModel.java
index 663cce54943..574660ebe09 100644
--- a/tooling/camel-tooling-model/src/main/java/org/apache/camel/tooling/model/BaseOptionModel.java
+++ b/tooling/camel-tooling-model/src/main/java/org/apache/camel/tooling/model/BaseOptionModel.java
@@ -49,6 +49,8 @@ public abstract class BaseOptionModel {
     protected String description;
     protected String nestedType;  // optional and currently only used by configurer
     protected boolean supportFileReference;
+    protected boolean largeInput;
+    protected String inputLanguage;
 
     // todo: move this as a helper method
     protected boolean newGroup; // special for documentation rendering
@@ -285,6 +287,22 @@ public abstract class BaseOptionModel {
         this.supportFileReference = supportFileReference;
     }
 
+    public boolean isLargeInput() {
+        return largeInput;
+    }
+
+    public void setLargeInput(boolean largeInput) {
+        this.largeInput = largeInput;
+    }
+
+    public String getInputLanguage() {
+        return inputLanguage;
+    }
+
+    public void setInputLanguage(String inputLanguage) {
+        this.inputLanguage = inputLanguage;
+    }
+
     public String getShortGroup() {
         if (group != null && group.endsWith(" (advanced)")) {
             return group.substring(0, group.length() - 11);
diff --git a/tooling/camel-tooling-model/src/main/java/org/apache/camel/tooling/model/JsonMapper.java b/tooling/camel-tooling-model/src/main/java/org/apache/camel/tooling/model/JsonMapper.java
index 6c9df322e7f..68a85c4f0bc 100644
--- a/tooling/camel-tooling-model/src/main/java/org/apache/camel/tooling/model/JsonMapper.java
+++ b/tooling/camel-tooling-model/src/main/java/org/apache/camel/tooling/model/JsonMapper.java
@@ -458,6 +458,8 @@ public final class JsonMapper {
         option.setGetterMethod(mp.getString("getterMethod"));
         option.setSetterMethod(mp.getString("setterMethod"));
         option.setSupportFileReference(mp.getBooleanOrDefault("supportFileReference", false));
+        option.setLargeInput(mp.getBooleanOrDefault("largeInput", false));
+        option.setInputLanguage(mp.getString("inputLanguage"));
     }
 
     private static void parseGroup(JsonObject mp, MainGroupModel option) {
@@ -538,6 +540,14 @@ public final class JsonMapper {
             // only include if supported to not regen all files
             prop.put("supportFileReference", option.isSupportFileReference());
         }
+        if (option.isLargeInput()) {
+            // only include if supported to not regen all files
+            prop.put("largeInput", option.isLargeInput());
+        }
+        if (!Strings.isNullOrEmpty(option.getInputLanguage())) {
+            // only include if supported to not regen all files
+            prop.put("inputLanguage", option.getInputLanguage());
+        }
         prop.put("asPredicate", option.isAsPredicate());
         prop.put("configurationClass", option.getConfigurationClass());
         prop.put("configurationField", option.getConfigurationField());
diff --git a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/EndpointSchemaGeneratorMojo.java b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/EndpointSchemaGeneratorMojo.java
index c54443b9faf..ca05171c1a2 100644
--- a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/EndpointSchemaGeneratorMojo.java
+++ b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/EndpointSchemaGeneratorMojo.java
@@ -970,6 +970,8 @@ public class EndpointSchemaGeneratorMojo extends AbstractGeneratorMojo {
                 boolean secret = metadata != null && metadata.secret();
                 boolean autowired = metadata != null && metadata.autowired();
                 boolean supportFileReference = metadata != null && metadata.supportFileReference();
+                boolean largeInput = metadata != null && metadata.largeInput();
+                String inputLanguage = metadata != null ? metadata.inputLanguage() : null;
 
                 // we do not yet have default values / notes / as no annotation
                 // support yet
@@ -1086,6 +1088,8 @@ public class EndpointSchemaGeneratorMojo extends AbstractGeneratorMojo {
                     option.setConfigurationClass(nestedTypeName);
                     option.setConfigurationField(nestedFieldName);
                     option.setSupportFileReference(supportFileReference);
+                    option.setLargeInput(largeInput);
+                    option.setInputLanguage(inputLanguage);
                     componentModel.addComponentOption(option);
                 }
             }
@@ -1506,6 +1510,8 @@ public class EndpointSchemaGeneratorMojo extends AbstractGeneratorMojo {
             boolean isSecret = secret != null && secret || path.secret();
             boolean isAutowired = metadata != null && metadata.autowired();
             boolean supportFileReference = metadata != null && metadata.supportFileReference();
+            boolean largeInput = metadata != null && metadata.largeInput();
+            String inputLanguage = metadata != null ? metadata.inputLanguage() : null;
             String group = EndpointHelper.labelAsGroupName(label, componentModel.isConsumerOnly(),
                     componentModel.isProducerOnly());
 
@@ -1558,6 +1564,8 @@ public class EndpointSchemaGeneratorMojo extends AbstractGeneratorMojo {
             option.setConfigurationClass(nestedTypeName);
             option.setConfigurationField(nestedFieldName);
             option.setSupportFileReference(supportFileReference);
+            option.setLargeInput(largeInput);
+            option.setInputLanguage(inputLanguage);
             if (componentModel.getEndpointOptions().stream().noneMatch(opt -> name.equals(opt.getName()))) {
                 componentModel.addEndpointOption((EndpointOptionModel) option);
             }
diff --git a/tooling/spi-annotations/src/main/java/org/apache/camel/spi/Metadata.java b/tooling/spi-annotations/src/main/java/org/apache/camel/spi/Metadata.java
index 53c0ce67c36..a8ae70fcded 100644
--- a/tooling/spi-annotations/src/main/java/org/apache/camel/spi/Metadata.java
+++ b/tooling/spi-annotations/src/main/java/org/apache/camel/spi/Metadata.java
@@ -155,4 +155,19 @@ public @interface Metadata {
      * file.
      */
     boolean supportFileReference() default false;
+
+    /**
+     * Whether the option can be large input such as a SQL query, XSLT template, or scripting code.
+     *
+     * This can be used to help tooling to provide an input form instead of a single input field to give better user
+     * experience.
+     */
+    boolean largeInput() default false;
+
+    /**
+     * If the option is some specific language such as SQL, XSLT, XML, JavaScript or something else.
+     *
+     * This can be used to help tooling to provide a better user experience.
+     */
+    String inputLanguage() default "";
 }