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 f2f0e8e4e047ba7e154b5fbad584d7dbae68fd07
Author: Andrea Cosentino <[email protected]>
AuthorDate: Fri Dec 1 10:58:38 2023 +0100

    Camel-AWS-Config: Add a Put Conformance Pack operation to producer
    
    Signed-off-by: Andrea Cosentino <[email protected]>
---
 .../camel/component/aws/config/aws-config.json     |  9 ++--
 .../component/aws/config/AWSConfigConstants.java   |  9 ++++
 .../component/aws/config/AWSConfigOperations.java  |  3 +-
 .../component/aws/config/AWSConfigProducer.java    | 54 ++++++++++++++++++++++
 4 files changed, 71 insertions(+), 4 deletions(-)

diff --git 
a/components/camel-aws/camel-aws-config/src/generated/resources/org/apache/camel/component/aws/config/aws-config.json
 
b/components/camel-aws/camel-aws-config/src/generated/resources/org/apache/camel/component/aws/config/aws-config.json
index f71b893bb71..6f425a2a828 100644
--- 
a/components/camel-aws/camel-aws-config/src/generated/resources/org/apache/camel/component/aws/config/aws-config.json
+++ 
b/components/camel-aws/camel-aws-config/src/generated/resources/org/apache/camel/component/aws/config/aws-config.json
@@ -24,7 +24,7 @@
   "componentProperties": {
     "configuration": { "index": 0, "kind": "property", "displayName": 
"Configuration", "group": "producer", "label": "", "required": false, "type": 
"object", "javaType": 
"org.apache.camel.component.aws.config.AWSConfigConfiguration", "deprecated": 
false, "autowired": false, "secret": false, "description": "Component 
configuration" },
     "lazyStartProducer": { "index": 1, "kind": "property", "displayName": 
"Lazy Start Producer", "group": "producer", "label": "producer", "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 producer may otherwise fail [...]
-    "operation": { "index": 2, "kind": "property", "displayName": "Operation", 
"group": "producer", "label": "", "required": true, "type": "object", 
"javaType": "org.apache.camel.component.aws.config.AWSConfigOperations", 
"enum": [ "putConfigRule", "removeConfigRule", "describeRuleCompliance" ], 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "configurationClass": 
"org.apache.camel.component.aws.config.AWSConfigConfiguration", 
"configurationField": "confi [...]
+    "operation": { "index": 2, "kind": "property", "displayName": "Operation", 
"group": "producer", "label": "", "required": true, "type": "object", 
"javaType": "org.apache.camel.component.aws.config.AWSConfigOperations", 
"enum": [ "putConfigRule", "removeConfigRule", "describeRuleCompliance", 
"putConformancePack" ], "deprecated": false, "deprecationNote": "", 
"autowired": false, "secret": false, "configurationClass": 
"org.apache.camel.component.aws.config.AWSConfigConfiguration", "confi [...]
     "overrideEndpoint": { "index": 3, "kind": "property", "displayName": 
"Override Endpoint", "group": "producer", "label": "", "required": false, 
"type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": false, "configurationClass": 
"org.apache.camel.component.aws.config.AWSConfigConfiguration", 
"configurationField": "configuration", "description": "Set the need for 
overidding the endpoint. This option needs to be used in combina [...]
     "pojoRequest": { "index": 4, "kind": "property", "displayName": "Pojo 
Request", "group": "producer", "label": "", "required": false, "type": 
"boolean", "javaType": "boolean", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": false, "configurationClass": 
"org.apache.camel.component.aws.config.AWSConfigConfiguration", 
"configurationField": "configuration", "description": "If we want to use a POJO 
request as body or not" },
     "region": { "index": 5, "kind": "property", "displayName": "Region", 
"group": "producer", "label": "", "required": false, "type": "string", 
"javaType": "java.lang.String", "enum": [ "ap-south-2", "ap-south-1", 
"eu-south-1", "eu-south-2", "us-gov-east-1", "me-central-1", "il-central-1", 
"ca-central-1", "eu-central-1", "us-iso-west-1", "eu-central-2", "us-west-1", 
"us-west-2", "af-south-1", "eu-north-1", "eu-west-3", "eu-west-2", "eu-west-1", 
"ap-northeast-3", "ap-northeast-2", "ap-nor [...]
@@ -47,11 +47,14 @@
     "CamelAwsConfigOperation": { "index": 0, "kind": "header", "displayName": 
"", "group": "producer", "label": "", "required": false, "javaType": "String", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "The operation we want to perform", "constantName": 
"org.apache.camel.component.aws.config.AWSConfigConstants#OPERATION" },
     "CamelAwsConfigRuleSourceIdentifier": { "index": 1, "kind": "header", 
"displayName": "", "group": "producer", "label": "", "required": false, 
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "description": "The Managed rule source identifier", 
"constantName": 
"org.apache.camel.component.aws.config.AWSConfigConstants#RULE_SOURCE_IDENTIFIER"
 },
     "CamelAwsConfigRuleSource": { "index": 2, "kind": "header", "displayName": 
"", "group": "producer", "label": "", "required": false, "javaType": "String", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "The source object for the rule. The owner of the rule 
could be AWS, CUSTOM_LAMBDA or CUSTOM_POLICY", "constantName": 
"org.apache.camel.component.aws.config.AWSConfigConstants#SOURCE" },
-    "CamelAwsConfigRuleName": { "index": 3, "kind": "header", "displayName": 
"", "group": "producer", "label": "", "required": false, "javaType": "String", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "The Managed rule name", "constantName": 
"org.apache.camel.component.aws.config.AWSConfigConstants#RULE_NAME" }
+    "CamelAwsConfigRuleName": { "index": 3, "kind": "header", "displayName": 
"", "group": "producer", "label": "", "required": false, "javaType": "String", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "The Managed rule name", "constantName": 
"org.apache.camel.component.aws.config.AWSConfigConstants#RULE_NAME" },
+    "CamelAwsConformancePackName": { "index": 4, "kind": "header", 
"displayName": "", "group": "producer", "label": "", "required": false, 
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "description": "The Conformance pack name", 
"constantName": 
"org.apache.camel.component.aws.config.AWSConfigConstants#CONFORMACE_PACK_NAME" 
},
+    "CamelAwsConfigConformacePackS3TemplateURI": { "index": 5, "kind": 
"header", "displayName": "", "group": "producer", "label": "", "required": 
false, "javaType": "String", "deprecated": false, "deprecationNote": "", 
"autowired": false, "secret": false, "description": "The location of the file 
containing the template body in S3", "constantName": 
"org.apache.camel.component.aws.config.AWSConfigConstants#CONFORMACE_PACK_S3_TEMPLATE_URI"
 },
+    "CamelAwsConfigConformacePackTemplateBody": { "index": 6, "kind": 
"header", "displayName": "", "group": "producer", "label": "", "required": 
false, "javaType": "String", "deprecated": false, "deprecationNote": "", 
"autowired": false, "secret": false, "description": "A string containing the 
full conformance pack template body", "constantName": 
"org.apache.camel.component.aws.config.AWSConfigConstants#CONFORMACE_PACK_TEMPLATE_BODY"
 }
   },
   "properties": {
     "label": { "index": 0, "kind": "path", "displayName": "Label", "group": 
"producer", "label": "", "required": true, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "configurationClass": 
"org.apache.camel.component.aws.config.AWSConfigConfiguration", 
"configurationField": "configuration", "description": "Logical name" },
-    "operation": { "index": 1, "kind": "parameter", "displayName": 
"Operation", "group": "producer", "label": "", "required": true, "type": 
"object", "javaType": 
"org.apache.camel.component.aws.config.AWSConfigOperations", "enum": [ 
"putConfigRule", "removeConfigRule", "describeRuleCompliance" ], "deprecated": 
false, "deprecationNote": "", "autowired": false, "secret": false, 
"configurationClass": 
"org.apache.camel.component.aws.config.AWSConfigConfiguration", 
"configurationField": "conf [...]
+    "operation": { "index": 1, "kind": "parameter", "displayName": 
"Operation", "group": "producer", "label": "", "required": true, "type": 
"object", "javaType": 
"org.apache.camel.component.aws.config.AWSConfigOperations", "enum": [ 
"putConfigRule", "removeConfigRule", "describeRuleCompliance", 
"putConformancePack" ], "deprecated": false, "deprecationNote": "", 
"autowired": false, "secret": false, "configurationClass": 
"org.apache.camel.component.aws.config.AWSConfigConfiguration", "conf [...]
     "overrideEndpoint": { "index": 2, "kind": "parameter", "displayName": 
"Override Endpoint", "group": "producer", "label": "", "required": false, 
"type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": false, "configurationClass": 
"org.apache.camel.component.aws.config.AWSConfigConfiguration", 
"configurationField": "configuration", "description": "Set the need for 
overidding the endpoint. This option needs to be used in combin [...]
     "pojoRequest": { "index": 3, "kind": "parameter", "displayName": "Pojo 
Request", "group": "producer", "label": "", "required": false, "type": 
"boolean", "javaType": "boolean", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": false, "configurationClass": 
"org.apache.camel.component.aws.config.AWSConfigConfiguration", 
"configurationField": "configuration", "description": "If we want to use a POJO 
request as body or not" },
     "region": { "index": 4, "kind": "parameter", "displayName": "Region", 
"group": "producer", "label": "", "required": false, "type": "string", 
"javaType": "java.lang.String", "enum": [ "ap-south-2", "ap-south-1", 
"eu-south-1", "eu-south-2", "us-gov-east-1", "me-central-1", "il-central-1", 
"ca-central-1", "eu-central-1", "us-iso-west-1", "eu-central-2", "us-west-1", 
"us-west-2", "af-south-1", "eu-north-1", "eu-west-3", "eu-west-2", "eu-west-1", 
"ap-northeast-3", "ap-northeast-2", "ap-no [...]
diff --git 
a/components/camel-aws/camel-aws-config/src/main/java/org/apache/camel/component/aws/config/AWSConfigConstants.java
 
b/components/camel-aws/camel-aws-config/src/main/java/org/apache/camel/component/aws/config/AWSConfigConstants.java
index 0a5a902dfb2..f9973b0d5fa 100644
--- 
a/components/camel-aws/camel-aws-config/src/main/java/org/apache/camel/component/aws/config/AWSConfigConstants.java
+++ 
b/components/camel-aws/camel-aws-config/src/main/java/org/apache/camel/component/aws/config/AWSConfigConstants.java
@@ -31,4 +31,13 @@ public interface AWSConfigConstants {
     String SOURCE = "CamelAwsConfigRuleSource";
     @Metadata(description = "The Managed rule name", javaType = "String")
     String RULE_NAME = "CamelAwsConfigRuleName";
+
+    @Metadata(description = "The Conformance pack name", javaType = "String")
+    String CONFORMACE_PACK_NAME = "CamelAwsConformancePackName";
+
+    @Metadata(description = "The location of the file containing the template 
body in S3", javaType = "String")
+    String CONFORMACE_PACK_S3_TEMPLATE_URI = 
"CamelAwsConfigConformacePackS3TemplateURI";
+
+    @Metadata(description = "A string containing the full conformance pack 
template body", javaType = "String")
+    String CONFORMACE_PACK_TEMPLATE_BODY = 
"CamelAwsConfigConformacePackTemplateBody";
 }
diff --git 
a/components/camel-aws/camel-aws-config/src/main/java/org/apache/camel/component/aws/config/AWSConfigOperations.java
 
b/components/camel-aws/camel-aws-config/src/main/java/org/apache/camel/component/aws/config/AWSConfigOperations.java
index 6c002bc7e71..7c215d10b4e 100644
--- 
a/components/camel-aws/camel-aws-config/src/main/java/org/apache/camel/component/aws/config/AWSConfigOperations.java
+++ 
b/components/camel-aws/camel-aws-config/src/main/java/org/apache/camel/component/aws/config/AWSConfigOperations.java
@@ -20,6 +20,7 @@ public enum AWSConfigOperations {
 
     putConfigRule,
     removeConfigRule,
+    describeRuleCompliance,
+    putConformancePack
 
-    describeRuleCompliance
 }
diff --git 
a/components/camel-aws/camel-aws-config/src/main/java/org/apache/camel/component/aws/config/AWSConfigProducer.java
 
b/components/camel-aws/camel-aws-config/src/main/java/org/apache/camel/component/aws/config/AWSConfigProducer.java
index cc63c42e314..f59031c940f 100644
--- 
a/components/camel-aws/camel-aws-config/src/main/java/org/apache/camel/component/aws/config/AWSConfigProducer.java
+++ 
b/components/camel-aws/camel-aws-config/src/main/java/org/apache/camel/component/aws/config/AWSConfigProducer.java
@@ -60,6 +60,9 @@ public class AWSConfigProducer extends DefaultProducer {
             case describeRuleCompliance:
                 describeRuleCompliance(getEndpoint().getConfigClient(), 
exchange);
                 break;
+            case putConformancePack:
+                putConformancePack(getEndpoint().getConfigClient(), exchange);
+                break;
             default:
                 throw new IllegalArgumentException("Unsupported operation");
         }
@@ -209,6 +212,57 @@ public class AWSConfigProducer extends DefaultProducer {
         }
     }
 
+    private void putConformancePack(ConfigClient configClient, Exchange 
exchange) throws InvalidPayloadException {
+        if (getConfiguration().isPojoRequest()) {
+            Object payload = exchange.getIn().getMandatoryBody();
+            if (payload instanceof PutConformancePackRequest) {
+                PutConformancePackResponse result;
+                try {
+                    PutConformancePackRequest request = 
(PutConformancePackRequest) payload;
+                    result = configClient.putConformancePack(request);
+                } catch (AwsServiceException ase) {
+                    LOG.trace("Put Conformance Pack command returned the error 
code {}", ase.awsErrorDetails().errorCode());
+                    throw ase;
+                }
+                Message message = getMessageForResponse(exchange);
+                message.setBody(result);
+            }
+        } else {
+            PutConformancePackRequest.Builder builder = 
PutConformancePackRequest.builder();
+            if 
(ObjectHelper.isNotEmpty(exchange.getIn().getHeader(AWSConfigConstants.CONFORMACE_PACK_NAME)))
 {
+                String conformancePackName = 
exchange.getIn().getHeader(AWSConfigConstants.CONFORMACE_PACK_NAME, 
String.class);
+                builder.conformancePackName(conformancePackName);
+            } else {
+                throw new IllegalArgumentException("Rule Name must be 
specified");
+            }
+            String conformancePackS3TemplateUri = null;
+            String conformancePackTemplateBody = null;
+            if 
(ObjectHelper.isNotEmpty(exchange.getIn().getHeader(AWSConfigConstants.CONFORMACE_PACK_S3_TEMPLATE_URI)))
 {
+                conformancePackS3TemplateUri
+                        = 
exchange.getIn().getHeader(AWSConfigConstants.CONFORMACE_PACK_S3_TEMPLATE_URI, 
String.class);
+                builder.templateS3Uri(conformancePackS3TemplateUri);
+            }
+            if 
(ObjectHelper.isNotEmpty(exchange.getIn().getHeader(AWSConfigConstants.CONFORMACE_PACK_TEMPLATE_BODY)))
 {
+                conformancePackTemplateBody
+                        = 
exchange.getIn().getHeader(AWSConfigConstants.CONFORMACE_PACK_TEMPLATE_BODY, 
String.class);
+                builder.templateBody(conformancePackTemplateBody);
+            }
+            if (ObjectHelper.isEmpty(conformancePackS3TemplateUri) && 
ObjectHelper.isEmpty(conformancePackTemplateBody)) {
+                throw new IllegalArgumentException("One of Conformace Pack S3 
Template URI or Template Body must be specified");
+            }
+            PutConformancePackResponse result;
+            try {
+                PutConformancePackRequest request = builder.build();
+                result = configClient.putConformancePack(request);
+            } catch (AwsServiceException ase) {
+                LOG.trace("Put Conformance Pack command returned the error 
code {}", ase.awsErrorDetails().errorCode());
+                throw ase;
+            }
+            Message message = getMessageForResponse(exchange);
+            message.setBody(result);
+        }
+    }
+
     public static Message getMessageForResponse(final Exchange exchange) {
         return exchange.getMessage();
     }

Reply via email to