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

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

commit 54a79828eb329eb4786026279c2b5fda383a5aaf
Author: Andrea Cosentino <anco...@gmail.com>
AuthorDate: Wed Jan 17 16:18:41 2018 +0100

    CAMEL-12152 - Camel-AWS DDB: Add the ability to specify credentials and 
region at component level
---
 .../camel-aws/src/main/docs/aws-ddb-component.adoc |  14 +-
 .../camel/component/aws/ddb/DdbComponent.java      |  67 ++++++-
 .../camel/component/aws/ddb/DdbConfiguration.java  |  15 +-
 .../aws/ddb/DdbComponentConfigurationTest.java     |  52 +++++
 .../ddb/springboot/DdbComponentConfiguration.java  | 218 +++++++++++++++++++++
 5 files changed, 363 insertions(+), 3 deletions(-)

diff --git a/components/camel-aws/src/main/docs/aws-ddb-component.adoc 
b/components/camel-aws/src/main/docs/aws-ddb-component.adoc
index cc3145b..59eb6d2 100644
--- a/components/camel-aws/src/main/docs/aws-ddb-component.adoc
+++ b/components/camel-aws/src/main/docs/aws-ddb-component.adoc
@@ -25,7 +25,19 @@ You can append query options to the URI in the following 
format,
 
 
 // component options: START
-The AWS DynamoDB component has no options.
+The AWS DynamoDB component supports 5 options which are listed below.
+
+
+
+[width="100%",cols="2,5,^1,2",options="header"]
+|===
+| Name | Description | Default | Type
+| *configuration* (advanced) | The AWS DDB default configuration |  | 
DdbConfiguration
+| *accessKey* (producer) | Amazon AWS Access Key |  | String
+| *secretKey* (producer) | Amazon AWS Secret Key |  | String
+| *region* (producer) | The region in which DDB client needs to work |  | 
String
+| *resolveProperty Placeholders* (advanced) | Whether the component should 
resolve property placeholders on itself when starting. Only properties which 
are of String type can use property placeholders. | true | boolean
+|===
 // component options: END
 
 
diff --git 
a/components/camel-aws/src/main/java/org/apache/camel/component/aws/ddb/DdbComponent.java
 
b/components/camel-aws/src/main/java/org/apache/camel/component/aws/ddb/DdbComponent.java
index a49fae1..91c18a3 100644
--- 
a/components/camel-aws/src/main/java/org/apache/camel/component/aws/ddb/DdbComponent.java
+++ 
b/components/camel-aws/src/main/java/org/apache/camel/component/aws/ddb/DdbComponent.java
@@ -21,9 +21,20 @@ import java.util.Map;
 import org.apache.camel.CamelContext;
 import org.apache.camel.Endpoint;
 import org.apache.camel.impl.DefaultComponent;
+import org.apache.camel.spi.Metadata;
+import org.apache.camel.util.ObjectHelper;
 
 public class DdbComponent extends DefaultComponent {
 
+    @Metadata
+    private String accessKey;
+    @Metadata
+    private String secretKey;
+    @Metadata
+    private String region;
+    @Metadata(label = "advanced")    
+    private DdbConfiguration configuration;
+    
     public DdbComponent() {
         this(null);
     }
@@ -31,11 +42,12 @@ public class DdbComponent extends DefaultComponent {
     public DdbComponent(CamelContext context) {
         super(context);
         
+        this.configuration = new DdbConfiguration();
         registerExtension(new DdbComponentVerifierExtension());
     }
 
     protected Endpoint createEndpoint(String uri, String remaining, 
Map<String, Object> parameters) throws Exception {
-        DdbConfiguration configuration = new DdbConfiguration();
+        DdbConfiguration configuration = this.configuration.copy();
         setProperties(configuration, parameters);
 
         if (remaining == null || remaining.trim().length() == 0) {
@@ -43,6 +55,15 @@ public class DdbComponent extends DefaultComponent {
         }
         configuration.setTableName(remaining);
 
+        if (ObjectHelper.isEmpty(configuration.getAccessKey())) {
+            setAccessKey(accessKey);
+        }
+        if (ObjectHelper.isEmpty(configuration.getSecretKey())) {
+            setSecretKey(secretKey);
+        }
+        if (ObjectHelper.isEmpty(configuration.getRegion())) {
+            setRegion(region);
+        }
         if (configuration.getAmazonDDBClient() == null && 
(configuration.getAccessKey() == null || configuration.getSecretKey() == null)) 
{
             throw new IllegalArgumentException("amazonDDBClient or accessKey 
and secretKey must be specified");
         }
@@ -50,4 +71,48 @@ public class DdbComponent extends DefaultComponent {
         DdbEndpoint endpoint = new DdbEndpoint(uri, this, configuration);
         return endpoint;
     }
+    
+    public DdbConfiguration getConfiguration() {
+        return configuration;
+    }
+
+    /**
+     * The AWS DDB default configuration
+     */
+    public void setConfiguration(DdbConfiguration configuration) {
+        this.configuration = configuration;
+    }
+
+    public String getAccessKey() {
+        return configuration.getAccessKey();
+    }
+    
+    /**
+     * Amazon AWS Access Key
+     */
+    public void setAccessKey(String accessKey) {
+        configuration.setAccessKey(accessKey);
+    }
+
+    public String getSecretKey() {
+        return configuration.getSecretKey();
+    }
+
+    /**
+     * Amazon AWS Secret Key
+     */
+    public void setSecretKey(String secretKey) {
+        configuration.setSecretKey(secretKey);
+    }
+    
+    /**
+     * The region in which DDB client needs to work
+     */
+    public String getRegion() {
+        return configuration.getRegion();
+    }
+
+    public void setRegion(String region) {
+        configuration.setRegion(region);
+    }
 }
\ No newline at end of file
diff --git 
a/components/camel-aws/src/main/java/org/apache/camel/component/aws/ddb/DdbConfiguration.java
 
b/components/camel-aws/src/main/java/org/apache/camel/component/aws/ddb/DdbConfiguration.java
index f95fc7a..352b2a8 100644
--- 
a/components/camel-aws/src/main/java/org/apache/camel/component/aws/ddb/DdbConfiguration.java
+++ 
b/components/camel-aws/src/main/java/org/apache/camel/component/aws/ddb/DdbConfiguration.java
@@ -18,13 +18,14 @@ package org.apache.camel.component.aws.ddb;
 
 import com.amazonaws.services.dynamodbv2.AmazonDynamoDB;
 
+import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.spi.Metadata;
 import org.apache.camel.spi.UriParam;
 import org.apache.camel.spi.UriParams;
 import org.apache.camel.spi.UriPath;
 
 @UriParams
-public class DdbConfiguration {
+public class DdbConfiguration implements Cloneable {
 
     @UriPath @Metadata(required = "true")
     private String tableName;
@@ -208,4 +209,16 @@ public class DdbConfiguration {
     public void setRegion(String region) {
         this.region = region;
     }
+    
+    // *************************************************
+    //
+    // *************************************************
+
+    public DdbConfiguration copy() {
+        try {
+            return (DdbConfiguration)super.clone();
+        } catch (CloneNotSupportedException e) {
+            throw new RuntimeCamelException(e);
+        }
+    }
 }
diff --git 
a/components/camel-aws/src/test/java/org/apache/camel/component/aws/ddb/DdbComponentConfigurationTest.java
 
b/components/camel-aws/src/test/java/org/apache/camel/component/aws/ddb/DdbComponentConfigurationTest.java
new file mode 100644
index 0000000..56b9236
--- /dev/null
+++ 
b/components/camel-aws/src/test/java/org/apache/camel/component/aws/ddb/DdbComponentConfigurationTest.java
@@ -0,0 +1,52 @@
+/**
+ * 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.camel.component.aws.ddb;
+
+import com.amazonaws.regions.Regions;
+
+import org.apache.camel.test.junit4.CamelTestSupport;
+import org.junit.Test;
+
+public class DdbComponentConfigurationTest extends CamelTestSupport {
+    
+    @Test
+    public void createEndpointWithComponentElements() throws Exception {
+        DdbComponent component = new DdbComponent(context);
+        component.setAccessKey("XXX");
+        component.setSecretKey("YYY");
+        DdbEndpoint endpoint = 
(DdbEndpoint)component.createEndpoint("aws-ddb://myTable");
+        
+        assertEquals("myTable", endpoint.getConfiguration().getTableName());
+        assertEquals("XXX", endpoint.getConfiguration().getAccessKey());
+        assertEquals("YYY", endpoint.getConfiguration().getSecretKey());
+    }
+    
+    @Test
+    public void createEndpointWithComponentAndEndpointElements() throws 
Exception {
+        DdbComponent component = new DdbComponent(context);
+        component.setAccessKey("XXX");
+        component.setSecretKey("YYY");
+        component.setRegion(Regions.US_WEST_1.toString());
+        DdbEndpoint endpoint = 
(DdbEndpoint)component.createEndpoint("aws-myTable://myTable?accessKey=xxxxxx&secretKey=yyyyy&region=US_EAST_1");
+        
+        assertEquals("myTable", endpoint.getConfiguration().getTableName());
+        assertEquals("xxxxxx", endpoint.getConfiguration().getAccessKey());
+        assertEquals("yyyyy", endpoint.getConfiguration().getSecretKey());
+        assertEquals("US_EAST_1", endpoint.getConfiguration().getRegion());
+    }
+    
+}
\ No newline at end of file
diff --git 
a/platforms/spring-boot/components-starter/camel-aws-starter/src/main/java/org/apache/camel/component/aws/ddb/springboot/DdbComponentConfiguration.java
 
b/platforms/spring-boot/components-starter/camel-aws-starter/src/main/java/org/apache/camel/component/aws/ddb/springboot/DdbComponentConfiguration.java
index daa0de7..1beee46 100644
--- 
a/platforms/spring-boot/components-starter/camel-aws-starter/src/main/java/org/apache/camel/component/aws/ddb/springboot/DdbComponentConfiguration.java
+++ 
b/platforms/spring-boot/components-starter/camel-aws-starter/src/main/java/org/apache/camel/component/aws/ddb/springboot/DdbComponentConfiguration.java
@@ -17,6 +17,9 @@
 package org.apache.camel.component.aws.ddb.springboot;
 
 import javax.annotation.Generated;
+import com.amazonaws.services.dynamodbv2.AmazonDynamoDB;
+import org.apache.camel.component.aws.ddb.DdbComponent;
+import org.apache.camel.component.aws.ddb.DdbOperations;
 import org.apache.camel.spring.boot.ComponentConfigurationPropertiesCommon;
 import org.springframework.boot.context.properties.ConfigurationProperties;
 
@@ -33,12 +36,61 @@ public class DdbComponentConfiguration
             ComponentConfigurationPropertiesCommon {
 
     /**
+     * The AWS DDB default configuration
+     */
+    private DdbConfigurationNestedConfiguration configuration;
+    /**
+     * Amazon AWS Access Key
+     */
+    private String accessKey;
+    /**
+     * Amazon AWS Secret Key
+     */
+    private String secretKey;
+    /**
+     * The region in which DDB client needs to work
+     */
+    private String region;
+    /**
      * Whether the component should resolve property placeholders on itself 
when
      * starting. Only properties which are of String type can use property
      * placeholders.
      */
     private Boolean resolvePropertyPlaceholders = true;
 
+    public DdbConfigurationNestedConfiguration getConfiguration() {
+        return configuration;
+    }
+
+    public void setConfiguration(
+            DdbConfigurationNestedConfiguration configuration) {
+        this.configuration = configuration;
+    }
+
+    public String getAccessKey() {
+        return accessKey;
+    }
+
+    public void setAccessKey(String accessKey) {
+        this.accessKey = accessKey;
+    }
+
+    public String getSecretKey() {
+        return secretKey;
+    }
+
+    public void setSecretKey(String secretKey) {
+        this.secretKey = secretKey;
+    }
+
+    public String getRegion() {
+        return region;
+    }
+
+    public void setRegion(String region) {
+        this.region = region;
+    }
+
     public Boolean getResolvePropertyPlaceholders() {
         return resolvePropertyPlaceholders;
     }
@@ -47,4 +99,170 @@ public class DdbComponentConfiguration
             Boolean resolvePropertyPlaceholders) {
         this.resolvePropertyPlaceholders = resolvePropertyPlaceholders;
     }
+
+    public static class DdbConfigurationNestedConfiguration {
+        public static final Class CAMEL_NESTED_CLASS = 
org.apache.camel.component.aws.ddb.DdbConfiguration.class;
+        /**
+         * The endpoint with which the AWS-DDB client wants to work with.
+         */
+        private String amazonDdbEndpoint;
+        /**
+         * Amazon AWS Access Key
+         */
+        private String accessKey;
+        /**
+         * Amazon AWS Secret Key
+         */
+        private String secretKey;
+        /**
+         * To use the AmazonDynamoDB as the client
+         */
+        private AmazonDynamoDB amazonDDBClient;
+        /**
+         * The name of the table currently worked with.
+         */
+        private String tableName;
+        /**
+         * What operation to perform
+         */
+        private DdbOperations operation = DdbOperations.PutItem;
+        /**
+         * Determines whether or not strong consistency should be enforced when
+         * data is read.
+         */
+        private Boolean consistentRead = false;
+        /**
+         * The provisioned throughput to reserve for reading resources from 
your
+         * table
+         */
+        private Long readCapacity;
+        /**
+         * The provisioned throughput to reserved for writing resources to your
+         * table
+         */
+        private Long writeCapacity;
+        /**
+         * Attribute name when creating table
+         */
+        private String keyAttributeName;
+        /**
+         * Attribute type when creating table
+         */
+        private String keyAttributeType;
+        private String proxyHost;
+        private Integer proxyPort;
+        private String region;
+
+        public String getAmazonDdbEndpoint() {
+            return amazonDdbEndpoint;
+        }
+
+        public void setAmazonDdbEndpoint(String amazonDdbEndpoint) {
+            this.amazonDdbEndpoint = amazonDdbEndpoint;
+        }
+
+        public String getAccessKey() {
+            return accessKey;
+        }
+
+        public void setAccessKey(String accessKey) {
+            this.accessKey = accessKey;
+        }
+
+        public String getSecretKey() {
+            return secretKey;
+        }
+
+        public void setSecretKey(String secretKey) {
+            this.secretKey = secretKey;
+        }
+
+        public AmazonDynamoDB getAmazonDDBClient() {
+            return amazonDDBClient;
+        }
+
+        public void setAmazonDDBClient(AmazonDynamoDB amazonDDBClient) {
+            this.amazonDDBClient = amazonDDBClient;
+        }
+
+        public String getTableName() {
+            return tableName;
+        }
+
+        public void setTableName(String tableName) {
+            this.tableName = tableName;
+        }
+
+        public DdbOperations getOperation() {
+            return operation;
+        }
+
+        public void setOperation(DdbOperations operation) {
+            this.operation = operation;
+        }
+
+        public Boolean getConsistentRead() {
+            return consistentRead;
+        }
+
+        public void setConsistentRead(Boolean consistentRead) {
+            this.consistentRead = consistentRead;
+        }
+
+        public Long getReadCapacity() {
+            return readCapacity;
+        }
+
+        public void setReadCapacity(Long readCapacity) {
+            this.readCapacity = readCapacity;
+        }
+
+        public Long getWriteCapacity() {
+            return writeCapacity;
+        }
+
+        public void setWriteCapacity(Long writeCapacity) {
+            this.writeCapacity = writeCapacity;
+        }
+
+        public String getKeyAttributeName() {
+            return keyAttributeName;
+        }
+
+        public void setKeyAttributeName(String keyAttributeName) {
+            this.keyAttributeName = keyAttributeName;
+        }
+
+        public String getKeyAttributeType() {
+            return keyAttributeType;
+        }
+
+        public void setKeyAttributeType(String keyAttributeType) {
+            this.keyAttributeType = keyAttributeType;
+        }
+
+        public String getProxyHost() {
+            return proxyHost;
+        }
+
+        public void setProxyHost(String proxyHost) {
+            this.proxyHost = proxyHost;
+        }
+
+        public Integer getProxyPort() {
+            return proxyPort;
+        }
+
+        public void setProxyPort(Integer proxyPort) {
+            this.proxyPort = proxyPort;
+        }
+
+        public String getRegion() {
+            return region;
+        }
+
+        public void setRegion(String region) {
+            this.region = region;
+        }
+    }
 }
\ No newline at end of file

-- 
To stop receiving notification emails like this one, please contact
"commits@camel.apache.org" <commits@camel.apache.org>.

Reply via email to