This is an automated email from the ASF dual-hosted git repository. acosentino pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/camel.git
commit 141b6617363b7a3c77d64a9eae365c180021ed68 Author: Andrea Cosentino <anco...@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 <anco...@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 6edd5780b4e..31796953312 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; + } +}