You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ac...@apache.org on 2023/02/02 13:46:47 UTC

[camel] 01/05: CAMEL-18996 - Camel-CassandraQL: Adding a parameter to pass a list of ExtraTypesCodec to SessionBuilder

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

acosentino pushed a commit to branch camel-3.20.x
in repository https://gitbox.apache.org/repos/asf/camel.git

commit fe4634ca3e8af2bd1dbc8ea365725113e2c3a505
Author: Andrea Cosentino <an...@gmail.com>
AuthorDate: Thu Feb 2 14:11:23 2023 +0100

    CAMEL-18996 - Camel-CassandraQL: Adding a parameter to pass a list of ExtraTypesCodec to SessionBuilder
    
    Signed-off-by: Andrea Cosentino <an...@gmail.com>
---
 .../cassandra/CassandraEndpointConfigurer.java     |  6 ++++
 .../cassandra/CassandraEndpointUriFactory.java     |  3 +-
 .../org/apache/camel/component/cassandra/cql.json  |  1 +
 .../component/cassandra/CassandraEndpoint.java     | 31 ++++++++++++++++++++
 .../utils/cassandra/CassandraExtraCodecs.java      | 34 ++++++++++++++++++++++
 5 files changed, 74 insertions(+), 1 deletion(-)

diff --git a/components/camel-cassandraql/src/generated/java/org/apache/camel/component/cassandra/CassandraEndpointConfigurer.java b/components/camel-cassandraql/src/generated/java/org/apache/camel/component/cassandra/CassandraEndpointConfigurer.java
index 0e608905113..1182a55d7a1 100644
--- a/components/camel-cassandraql/src/generated/java/org/apache/camel/component/cassandra/CassandraEndpointConfigurer.java
+++ b/components/camel-cassandraql/src/generated/java/org/apache/camel/component/cassandra/CassandraEndpointConfigurer.java
@@ -40,6 +40,8 @@ public class CassandraEndpointConfigurer extends PropertyConfigurerSupport imple
         case "exceptionHandler": target.setExceptionHandler(property(camelContext, org.apache.camel.spi.ExceptionHandler.class, value)); return true;
         case "exchangepattern":
         case "exchangePattern": target.setExchangePattern(property(camelContext, org.apache.camel.ExchangePattern.class, value)); return true;
+        case "extratypecodecs":
+        case "extraTypeCodecs": target.setExtraTypeCodecs(property(camelContext, java.lang.String.class, value)); return true;
         case "greedy": target.setGreedy(property(camelContext, boolean.class, value)); return true;
         case "initialdelay":
         case "initialDelay": target.setInitialDelay(property(camelContext, long.class, value)); return true;
@@ -99,6 +101,8 @@ public class CassandraEndpointConfigurer extends PropertyConfigurerSupport imple
         case "exceptionHandler": return org.apache.camel.spi.ExceptionHandler.class;
         case "exchangepattern":
         case "exchangePattern": return org.apache.camel.ExchangePattern.class;
+        case "extratypecodecs":
+        case "extraTypeCodecs": return java.lang.String.class;
         case "greedy": return boolean.class;
         case "initialdelay":
         case "initialDelay": return long.class;
@@ -159,6 +163,8 @@ public class CassandraEndpointConfigurer extends PropertyConfigurerSupport imple
         case "exceptionHandler": return target.getExceptionHandler();
         case "exchangepattern":
         case "exchangePattern": return target.getExchangePattern();
+        case "extratypecodecs":
+        case "extraTypeCodecs": return target.getExtraTypeCodecs();
         case "greedy": return target.isGreedy();
         case "initialdelay":
         case "initialDelay": return target.getInitialDelay();
diff --git a/components/camel-cassandraql/src/generated/java/org/apache/camel/component/cassandra/CassandraEndpointUriFactory.java b/components/camel-cassandraql/src/generated/java/org/apache/camel/component/cassandra/CassandraEndpointUriFactory.java
index c4cce3a244d..c46eebc9112 100644
--- a/components/camel-cassandraql/src/generated/java/org/apache/camel/component/cassandra/CassandraEndpointUriFactory.java
+++ b/components/camel-cassandraql/src/generated/java/org/apache/camel/component/cassandra/CassandraEndpointUriFactory.java
@@ -21,7 +21,7 @@ public class CassandraEndpointUriFactory extends org.apache.camel.support.compon
     private static final Set<String> SECRET_PROPERTY_NAMES;
     private static final Set<String> MULTI_VALUE_PREFIXES;
     static {
-        Set<String> props = new HashSet<>(34);
+        Set<String> props = new HashSet<>(35);
         props.add("backoffErrorThreshold");
         props.add("backoffIdleThreshold");
         props.add("backoffMultiplier");
@@ -34,6 +34,7 @@ public class CassandraEndpointUriFactory extends org.apache.camel.support.compon
         props.add("delay");
         props.add("exceptionHandler");
         props.add("exchangePattern");
+        props.add("extraTypeCodecs");
         props.add("greedy");
         props.add("hosts");
         props.add("initialDelay");
diff --git a/components/camel-cassandraql/src/generated/resources/org/apache/camel/component/cassandra/cql.json b/components/camel-cassandraql/src/generated/resources/org/apache/camel/component/cassandra/cql.json
index 709af634b71..550b4ea101e 100644
--- a/components/camel-cassandraql/src/generated/resources/org/apache/camel/component/cassandra/cql.json
+++ b/components/camel-cassandraql/src/generated/resources/org/apache/camel/component/cassandra/cql.json
@@ -39,6 +39,7 @@
     "consistencyLevel": { "kind": "parameter", "displayName": "Consistency Level", "group": "common", "label": "", "required": false, "type": "object", "javaType": "com.datastax.oss.driver.api.core.DefaultConsistencyLevel", "enum": [ "ANY", "ONE", "TWO", "THREE", "QUORUM", "ALL", "LOCAL_ONE", "LOCAL_QUORUM", "EACH_QUORUM", "SERIAL", "LOCAL_SERIAL" ], "deprecated": false, "autowired": false, "secret": false, "description": "Consistency level to use" },
     "cql": { "kind": "parameter", "displayName": "Cql", "group": "common", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "CQL query to perform. Can be overridden with the message header with key CamelCqlQuery." },
     "datacenter": { "kind": "parameter", "displayName": "Datacenter", "group": "common", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "datacenter1", "description": "Datacenter to use" },
+    "extraTypeCodecs": { "kind": "parameter", "displayName": "Extra Type Codecs", "group": "common", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "To use a specific comma separated list of Extra Type codecs" },
     "loadBalancingPolicyClass": { "kind": "parameter", "displayName": "Load Balancing Policy Class", "group": "common", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "To use a specific LoadBalancingPolicyClass" },
     "password": { "kind": "parameter", "displayName": "Password", "group": "common", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Password for session authentication" },
     "prepareStatements": { "kind": "parameter", "displayName": "Prepare Statements", "group": "common", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Whether to use PreparedStatements or regular Statements" },
diff --git a/components/camel-cassandraql/src/main/java/org/apache/camel/component/cassandra/CassandraEndpoint.java b/components/camel-cassandraql/src/main/java/org/apache/camel/component/cassandra/CassandraEndpoint.java
index 2c1f8d5d565..82fd51dccae 100644
--- a/components/camel-cassandraql/src/main/java/org/apache/camel/component/cassandra/CassandraEndpoint.java
+++ b/components/camel-cassandraql/src/main/java/org/apache/camel/component/cassandra/CassandraEndpoint.java
@@ -17,6 +17,8 @@
 package org.apache.camel.component.cassandra;
 
 import java.net.InetSocketAddress;
+import java.util.ArrayList;
+import java.util.List;
 
 import com.datastax.oss.driver.api.core.ConsistencyLevel;
 import com.datastax.oss.driver.api.core.CqlSession;
@@ -27,6 +29,10 @@ import com.datastax.oss.driver.api.core.config.DriverConfigLoader;
 import com.datastax.oss.driver.api.core.cql.PreparedStatement;
 import com.datastax.oss.driver.api.core.cql.ResultSet;
 import com.datastax.oss.driver.api.core.cql.SimpleStatement;
+import com.datastax.oss.driver.api.core.session.SessionBuilder;
+import com.datastax.oss.driver.api.core.type.codec.ExtraTypeCodecs;
+import com.datastax.oss.driver.api.core.type.codec.TypeCodec;
+import com.datastax.oss.driver.api.core.type.codec.TypeCodecs;
 import org.apache.camel.Category;
 import org.apache.camel.Component;
 import org.apache.camel.Consumer;
@@ -37,7 +43,9 @@ import org.apache.camel.spi.UriEndpoint;
 import org.apache.camel.spi.UriParam;
 import org.apache.camel.spi.UriPath;
 import org.apache.camel.support.CamelContextHelper;
+import org.apache.camel.support.ObjectHelper;
 import org.apache.camel.support.ScheduledPollEndpoint;
+import org.apache.camel.utils.cassandra.CassandraExtraCodecs;
 import org.apache.camel.utils.cassandra.CassandraSessionHolder;
 
 /**
@@ -78,6 +86,8 @@ public class CassandraEndpoint extends ScheduledPollEndpoint {
     private String loadBalancingPolicyClass;
     @UriParam
     private ResultSetConversionStrategy resultSetConversionStrategy = ResultSetConversionStrategies.all();
+    @UriParam
+    private String extraTypeCodecs;
 
     public CassandraEndpoint(String endpointUri, Component component) {
         super(endpointUri, component);
@@ -159,6 +169,17 @@ public class CassandraEndpoint extends ScheduledPollEndpoint {
             sessionBuilder.withClassLoader(classLoader);
         }
 
+        if (extraTypeCodecs != null) {
+            String[] c = extraTypeCodecs.split(",");
+            System.err.println(c.toString());
+            for (String codec: c
+                 ) {
+                if (CassandraExtraCodecs.valueOf(codec).codec() != null) {
+                    sessionBuilder.addTypeCodecs(CassandraExtraCodecs.valueOf(codec).codec());
+                }
+            }
+        }
+
         return sessionBuilder;
     }
 
@@ -355,4 +376,14 @@ public class CassandraEndpoint extends ScheduledPollEndpoint {
         this.loadBalancingPolicyClass = loadBalancingPolicyClass;
     }
 
+    /**
+     * To use a specific comma separated list of Extra Type codecs
+     */
+    public String getExtraTypeCodecs() {
+        return extraTypeCodecs;
+    }
+
+    public void setExtraTypeCodecs(String extraTypeCodecs) {
+        this.extraTypeCodecs = extraTypeCodecs;
+    }
 }
diff --git a/components/camel-cassandraql/src/main/java/org/apache/camel/utils/cassandra/CassandraExtraCodecs.java b/components/camel-cassandraql/src/main/java/org/apache/camel/utils/cassandra/CassandraExtraCodecs.java
new file mode 100644
index 00000000000..53b3b7b8df4
--- /dev/null
+++ b/components/camel-cassandraql/src/main/java/org/apache/camel/utils/cassandra/CassandraExtraCodecs.java
@@ -0,0 +1,34 @@
+package org.apache.camel.utils.cassandra;
+
+import com.datastax.oss.driver.api.core.type.codec.ExtraTypeCodecs;
+import com.datastax.oss.driver.api.core.type.codec.TypeCodec;
+
+public enum CassandraExtraCodecs {
+
+    BLOB_TO_ARRAY(ExtraTypeCodecs.BLOB_TO_ARRAY),
+    BOOLEAN_LIST_TO_ARRAY(ExtraTypeCodecs.BOOLEAN_LIST_TO_ARRAY),
+    BYTE_LIST_TO_ARRAY(ExtraTypeCodecs.BYTE_LIST_TO_ARRAY),
+    SHORT_LIST_TO_ARRAY(ExtraTypeCodecs.SHORT_LIST_TO_ARRAY),
+    INT_LIST_TO_ARRAY(ExtraTypeCodecs.INT_LIST_TO_ARRAY),
+    LONG_LIST_TO_ARRAY(ExtraTypeCodecs.LONG_LIST_TO_ARRAY),
+    FLOAT_LIST_TO_ARRAY(ExtraTypeCodecs.FLOAT_LIST_TO_ARRAY),
+    DOUBLE_LIST_TO_ARRAY(ExtraTypeCodecs.DOUBLE_LIST_TO_ARRAY),
+    TIMESTAMP_UTC(ExtraTypeCodecs.TIMESTAMP_UTC),
+    TIMESTAMP_MILLIS_SYSTEM(ExtraTypeCodecs.TIMESTAMP_MILLIS_SYSTEM),
+    TIMESTAMP_MILLIS_UTC(ExtraTypeCodecs.TIMESTAMP_MILLIS_UTC),
+    ZONED_TIMESTAMP_SYSTEM(ExtraTypeCodecs.ZONED_TIMESTAMP_SYSTEM),
+    ZONED_TIMESTAMP_UTC(ExtraTypeCodecs.ZONED_TIMESTAMP_UTC),
+    ZONED_TIMESTAMP_PERSISTED(ExtraTypeCodecs.ZONED_TIMESTAMP_PERSISTED),
+    LOCAL_TIMESTAMP_SYSTEM(ExtraTypeCodecs.LOCAL_TIMESTAMP_SYSTEM),
+    LOCAL_TIMESTAMP_UTC(ExtraTypeCodecs.LOCAL_TIMESTAMP_UTC);
+
+    private final TypeCodec codec;
+
+    private CassandraExtraCodecs(TypeCodec codec){
+        this.codec = codec;
+    }
+
+    public TypeCodec codec() {
+        return codec;
+    }
+}