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 2020/11/30 10:08:17 UTC

[camel] branch master updated: CAMEL-15856: camel-salesforce custom enum values (#4701)

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

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


The following commit(s) were added to refs/heads/master by this push:
     new 2a0abf8  CAMEL-15856: camel-salesforce custom enum values (#4701)
2a0abf8 is described below

commit 2a0abf84740b430a0b7c31c140cdfbb88693f59d
Author: Jeremy Ross <je...@jeremyross.org>
AuthorDate: Mon Nov 30 04:08:02 2020 -0600

    CAMEL-15856: camel-salesforce custom enum values (#4701)
    
    Ability to override picklist enum value generation.
---
 .../camel-salesforce-maven-plugin/README.md        | 14 +++++-
 .../java/org/apache/camel/maven/GenerateMojo.java  | 23 +++++++---
 .../src/main/resources/sobject-picklist.vm         |  4 +-
 .../maven/CamelSalesforceMojoIntegrationTest.java  |  1 -
 .../camel/maven/CamelSalesforceMojoOutputTest.java |  5 ++-
 .../src/test/resources/case.json                   | 51 ++++++++++++++++++++++
 .../src/test/resources/generated/Case.java         | 15 +++++++
 .../generated/Case_PickListAccentMarkEnum.java     |  2 -
 .../generated/Case_PickListQuotationMarkEnum.java  |  2 -
 .../generated/Case_PickListSlashEnum.java          |  2 -
 ...um.java => Case_PickListValueOverrideEnum.java} | 16 +++----
 11 files changed, 108 insertions(+), 27 deletions(-)

diff --git a/components/camel-salesforce/camel-salesforce-maven-plugin/README.md b/components/camel-salesforce/camel-salesforce-maven-plugin/README.md
index b3b4c35..c1a9d76 100644
--- a/components/camel-salesforce/camel-salesforce-maven-plugin/README.md
+++ b/components/camel-salesforce/camel-salesforce-maven-plugin/README.md
@@ -20,9 +20,19 @@ The plugin configuration has the following properties.
 * packageName - Java package name for generated DTOs, defaults to org.apache.camel.salesforce.dto.
 * customTypes - override default types in generated DTOs
 * useStringsForPicklists - Use strings instead of enumerations for picklists. Default is false.
-* childRelationshipNameSuffix - Suffix for child relationship property name. Necessary if an SObject 
+* childRelationshipNameSuffix - Suffix for child relationship property name. Necessary if an SObject
 has a lookup field with the same name as its Child Relationship Name. If setting to something other 
-than default, "List" is a sensible value. 
+than default, "List" is a sensible value.
+* enumerationOverrideProperties - Override picklist enum value generation via a java.util.Properties instance. 
+Property name format: `SObject.FieldName.PicklistValue`. Property value is the desired enum value. E.g.:
+    ```
+    <enumerationOverrideProperties>
+      <property>
+        <name>Student__c.FinalGrade__c.A-</name>
+        <value>AMinus</value>
+      </property>
+    </enumerationOverrideProperties>
+    ```
 
 Additonal properties to provide proxy information, if behind a firewall.
 
diff --git a/components/camel-salesforce/camel-salesforce-maven-plugin/src/main/java/org/apache/camel/maven/GenerateMojo.java b/components/camel-salesforce/camel-salesforce-maven-plugin/src/main/java/org/apache/camel/maven/GenerateMojo.java
index 60f1483..648c6c8 100644
--- a/components/camel-salesforce/camel-salesforce-maven-plugin/src/main/java/org/apache/camel/maven/GenerateMojo.java
+++ b/components/camel-salesforce/camel-salesforce-maven-plugin/src/main/java/org/apache/camel/maven/GenerateMojo.java
@@ -85,16 +85,21 @@ public class GenerateMojo extends AbstractSalesforceMojo {
             return descriptions.externalIdsOf(name);
         }
 
-        public String getEnumConstant(final String value) {
+        public String getEnumConstant(
+                final String objectName, final String fieldName,
+                final String picklistValue) {
+            final String key = String.join(".", objectName, fieldName, picklistValue);
+            if (enumerationOverrideProperties.containsKey(key)) {
+                return enumerationOverrideProperties.get(key).toString();
+            }
 
-            // TODO add support for supplementary characters
             final StringBuilder result = new StringBuilder();
             boolean changed = false;
-            if (!Character.isJavaIdentifierStart(value.charAt(0))) {
+            if (!Character.isJavaIdentifierStart(picklistValue.charAt(0))) {
                 result.append("_");
                 changed = true;
             }
-            for (final char c : value.toCharArray()) {
+            for (final char c : picklistValue.toCharArray()) {
                 if (Character.isJavaIdentifierPart(c)) {
                     result.append(c);
                 } else {
@@ -104,7 +109,7 @@ public class GenerateMojo extends AbstractSalesforceMojo {
                 }
             }
 
-            return changed ? result.toString().toUpperCase() : value.toUpperCase();
+            return changed ? result.toString().toUpperCase() : picklistValue.toUpperCase();
         }
 
         public String getFieldType(final SObjectDescription description, final SObjectField field) {
@@ -355,6 +360,13 @@ public class GenerateMojo extends AbstractSalesforceMojo {
     String childRelationshipNameSuffix;
 
     /**
+     * Override picklist enum value generation via a java.util.Properties instance. Property name format:
+     * `SObject.FieldName.PicklistValue`. Property value is the desired enum value.
+     */
+    @Parameter(property = "camelSalesforce.enumerationOverrideProperties")
+    Properties enumerationOverrideProperties = new Properties();
+
+    /**
      * Names of specific picklist/multipicklist fields, which should be converted to Enum (default case) if property
      * {@link this#useStringsForPicklists} is set to true. Format: SObjectApiName.FieldApiName (e.g. Account.DataSource)
      */
@@ -455,6 +467,7 @@ public class GenerateMojo extends AbstractSalesforceMojo {
                     final String enumFileName = enumName + JAVA_EXT;
                     final File enumFile = new File(pkgDir, enumFileName);
 
+                    context.put("sObjectName", description.getName());
                     context.put("field", field);
                     context.put("enumName", enumName);
                     final Template enumTemplate = engine.getTemplate(SOBJECT_PICKLIST_VM, UTF_8);
diff --git a/components/camel-salesforce/camel-salesforce-maven-plugin/src/main/resources/sobject-picklist.vm b/components/camel-salesforce/camel-salesforce-maven-plugin/src/main/resources/sobject-picklist.vm
index 29d542e..9ef6458 100644
--- a/components/camel-salesforce/camel-salesforce-maven-plugin/src/main/resources/sobject-picklist.vm
+++ b/components/camel-salesforce/camel-salesforce-maven-plugin/src/main/resources/sobject-picklist.vm
@@ -39,11 +39,10 @@ public enum $enumName {
 #foreach ( $entry in $values)
 #set ( $value = $entry.Value )
     // $value
-    $utility.getEnumConstant($value)("$esc.escapeJava($value)")#if ( $foreach.hasNext ),#else;#end
+    $utility.getEnumConstant($sObjectName, $field.name, $value)("$esc.escapeJava($value)")#if ( $foreach.hasNext ),#else;#end
 
 #end
 #end
-
     final String value;
 
     private $enumName(String value) {
@@ -65,5 +64,4 @@ public enum $enumName {
         }
         throw new IllegalArgumentException(value);
     }
-
 }
diff --git a/components/camel-salesforce/camel-salesforce-maven-plugin/src/test/java/org/apache/camel/maven/CamelSalesforceMojoIntegrationTest.java b/components/camel-salesforce/camel-salesforce-maven-plugin/src/test/java/org/apache/camel/maven/CamelSalesforceMojoIntegrationTest.java
index bf73206..5a5bd6e 100644
--- a/components/camel-salesforce/camel-salesforce-maven-plugin/src/test/java/org/apache/camel/maven/CamelSalesforceMojoIntegrationTest.java
+++ b/components/camel-salesforce/camel-salesforce-maven-plugin/src/test/java/org/apache/camel/maven/CamelSalesforceMojoIntegrationTest.java
@@ -80,5 +80,4 @@ public class CamelSalesforceMojoIntegrationTest {
 
         return mojo;
     }
-
 }
diff --git a/components/camel-salesforce/camel-salesforce-maven-plugin/src/test/java/org/apache/camel/maven/CamelSalesforceMojoOutputTest.java b/components/camel-salesforce/camel-salesforce-maven-plugin/src/test/java/org/apache/camel/maven/CamelSalesforceMojoOutputTest.java
index e084a6c..53d6669 100644
--- a/components/camel-salesforce/camel-salesforce-maven-plugin/src/test/java/org/apache/camel/maven/CamelSalesforceMojoOutputTest.java
+++ b/components/camel-salesforce/camel-salesforce-maven-plugin/src/test/java/org/apache/camel/maven/CamelSalesforceMojoOutputTest.java
@@ -78,6 +78,8 @@ public class CamelSalesforceMojoOutputTest {
 
         mojo.descriptions = new ObjectDescriptions(client, 0, null, null, null, null, mojo.getLog());
 
+        mojo.enumerationOverrideProperties.put("Case.PickListValueOverride.A+", "APlus");
+
         Set<String> sObjectNames = StreamSupport.stream(mojo.descriptions.fetched().spliterator(), false)
                 .map(SObjectDescription::getName).collect(Collectors.toSet());
 
@@ -102,7 +104,8 @@ public class CamelSalesforceMojoOutputTest {
         return Arrays.asList(testCase(TEST_CASE_FILE, "Case.java"),
                 testCase(TEST_CASE_FILE, "Case_PickListAccentMarkEnum.java"),
                 testCase(TEST_CASE_FILE, "Case_PickListQuotationMarkEnum.java"),
-                testCase(TEST_CASE_FILE, "Case_PickListSlashEnum.java"), //
+                testCase(TEST_CASE_FILE, "Case_PickListSlashEnum.java"),
+                testCase(TEST_CASE_FILE, "Case_PickListValueOverrideEnum.java"),
                 testCase(TEST_CASE_FILE, "QueryRecordsCase.java"),
                 testCase(TEST_CALCULATED_FORMULA_FILE, "ComplexCalculatedFormula.java"),
                 testCase(TEST_CALCULATED_FORMULA_FILE, "QueryRecordsComplexCalculatedFormula.java"),
diff --git a/components/camel-salesforce/camel-salesforce-maven-plugin/src/test/resources/case.json b/components/camel-salesforce/camel-salesforce-maven-plugin/src/test/resources/case.json
index 938744f..5e74348 100644
--- a/components/camel-salesforce/camel-salesforce-maven-plugin/src/test/resources/case.json
+++ b/components/camel-salesforce/camel-salesforce-maven-plugin/src/test/resources/case.json
@@ -190,6 +190,57 @@
             "highScaleNumber": false,
             "queryByDistance": false,
             "encrypted": false
+        },
+        {
+            "length": 255,
+            "name": "PickListValueOverride",
+            "type": "picklist",
+            "label": "ValueOverride",
+            "updateable": true,
+            "calculated": false,
+            "caseSensitive": false,
+            "unique": false,
+            "nillable": true,
+            "precision": 0,
+            "scale": 0,
+            "byteLength": 765,
+            "nameField": false,
+            "sortable": true,
+            "filterable": true,
+            "writeRequiresMasterRead": false,
+            "externalId": false,
+            "idLookup": false,
+            "inlineHelpText": "",
+            "createable": true,
+            "soapType": "xsd:string",
+            "autoNumber": false,
+            "restrictedPicklist": false,
+            "namePointing": false,
+            "custom": true,
+            "defaultedOnCreate": false,
+            "deprecatedAndHidden": false,
+            "htmlFormatted": false,
+            "picklistValues": [
+                {
+                    "value": "A+",
+                    "label": "A+",
+                    "active": true,
+                    "defaultValue": false
+                }
+            ],
+            "dependentPicklist": false,
+            "referenceTo": [
+
+            ],
+            "cascadeDelete": false,
+            "restrictedDelete": false,
+            "digits": "0",
+            "groupable": true,
+            "permissionable": true,
+            "displayLocationInDecimal": false,
+            "highScaleNumber": false,
+            "queryByDistance": false,
+            "encrypted": false
         }
     ]
 }
diff --git a/components/camel-salesforce/camel-salesforce-maven-plugin/src/test/resources/generated/Case.java b/components/camel-salesforce/camel-salesforce-maven-plugin/src/test/resources/generated/Case.java
index dd6f7a9..07470f3 100644
--- a/components/camel-salesforce/camel-salesforce-maven-plugin/src/test/resources/generated/Case.java
+++ b/components/camel-salesforce/camel-salesforce-maven-plugin/src/test/resources/generated/Case.java
@@ -76,6 +76,19 @@ public class Case extends AbstractDescribedSObjectBase {
         this.PickListQuotationMark = PickListQuotationMark;
     }
 
+    @XStreamConverter(PicklistEnumConverter.class)
+    private Case_PickListValueOverrideEnum PickListValueOverride;
+
+    @JsonProperty("PickListValueOverride")
+    public Case_PickListValueOverrideEnum getPickListValueOverride() {
+        return this.PickListValueOverride;
+    }
+
+    @JsonProperty("PickListValueOverride")
+    public void setPickListValueOverride(Case_PickListValueOverrideEnum PickListValueOverride) {
+        this.PickListValueOverride = PickListValueOverride;
+    }
+
  
     @Override
     public final SObjectDescription description() {
@@ -104,6 +117,8 @@ public class Case extends AbstractDescribedSObjectBase {
         fields1.add(sObjectField2);
         final SObjectField sObjectField3 = createField("PickListQuotationMark", "QuotationMark", "picklist", "xsd:string", 255, false, true, false, false, true, false, false);
         fields1.add(sObjectField3);
+        final SObjectField sObjectField4 = createField("PickListValueOverride", "ValueOverride", "picklist", "xsd:string", 255, false, true, false, false, true, false, false);
+        fields1.add(sObjectField4);
 
         description.setKeyPrefix("500");
         description.setLabel("Caso");
diff --git a/components/camel-salesforce/camel-salesforce-maven-plugin/src/test/resources/generated/Case_PickListAccentMarkEnum.java b/components/camel-salesforce/camel-salesforce-maven-plugin/src/test/resources/generated/Case_PickListAccentMarkEnum.java
index d134d8e..3d1f033 100644
--- a/components/camel-salesforce/camel-salesforce-maven-plugin/src/test/resources/generated/Case_PickListAccentMarkEnum.java
+++ b/components/camel-salesforce/camel-salesforce-maven-plugin/src/test/resources/generated/Case_PickListAccentMarkEnum.java
@@ -17,7 +17,6 @@ public enum Case_PickListAccentMarkEnum {
     // Audiencia de Conciliación
     AUDIENCIA_DE_CONCILIACIÓN("Audiencia de Conciliaci\u00F3n");
 
-
     final String value;
 
     private Case_PickListAccentMarkEnum(String value) {
@@ -38,5 +37,4 @@ public enum Case_PickListAccentMarkEnum {
         }
         throw new IllegalArgumentException(value);
     }
-
 }
diff --git a/components/camel-salesforce/camel-salesforce-maven-plugin/src/test/resources/generated/Case_PickListQuotationMarkEnum.java b/components/camel-salesforce/camel-salesforce-maven-plugin/src/test/resources/generated/Case_PickListQuotationMarkEnum.java
index 0b1f0f7..06be2be 100644
--- a/components/camel-salesforce/camel-salesforce-maven-plugin/src/test/resources/generated/Case_PickListQuotationMarkEnum.java
+++ b/components/camel-salesforce/camel-salesforce-maven-plugin/src/test/resources/generated/Case_PickListQuotationMarkEnum.java
@@ -17,7 +17,6 @@ public enum Case_PickListQuotationMarkEnum {
     // No apretar "miralo"
     NO_APRETAR__MIRALO_("No apretar \"miralo\"");
 
-
     final String value;
 
     private Case_PickListQuotationMarkEnum(String value) {
@@ -38,5 +37,4 @@ public enum Case_PickListQuotationMarkEnum {
         }
         throw new IllegalArgumentException(value);
     }
-
 }
diff --git a/components/camel-salesforce/camel-salesforce-maven-plugin/src/test/resources/generated/Case_PickListSlashEnum.java b/components/camel-salesforce/camel-salesforce-maven-plugin/src/test/resources/generated/Case_PickListSlashEnum.java
index a6c77bb..bf0e09b 100644
--- a/components/camel-salesforce/camel-salesforce-maven-plugin/src/test/resources/generated/Case_PickListSlashEnum.java
+++ b/components/camel-salesforce/camel-salesforce-maven-plugin/src/test/resources/generated/Case_PickListSlashEnum.java
@@ -17,7 +17,6 @@ public enum Case_PickListSlashEnum {
     // Acciones relacionadas con cotizaciones y/o avisos de entrega
     ACCIONES_RELACIONADAS_CON_COTIZACIONES_Y_O_AVISOS_DE_ENTREGA("Acciones relacionadas con cotizaciones y/o avisos de entrega");
 
-
     final String value;
 
     private Case_PickListSlashEnum(String value) {
@@ -38,5 +37,4 @@ public enum Case_PickListSlashEnum {
         }
         throw new IllegalArgumentException(value);
     }
-
 }
diff --git a/components/camel-salesforce/camel-salesforce-maven-plugin/src/test/resources/generated/Case_PickListQuotationMarkEnum.java b/components/camel-salesforce/camel-salesforce-maven-plugin/src/test/resources/generated/Case_PickListValueOverrideEnum.java
similarity index 60%
copy from components/camel-salesforce/camel-salesforce-maven-plugin/src/test/resources/generated/Case_PickListQuotationMarkEnum.java
copy to components/camel-salesforce/camel-salesforce-maven-plugin/src/test/resources/generated/Case_PickListValueOverrideEnum.java
index 0b1f0f7..a034ee6 100644
--- a/components/camel-salesforce/camel-salesforce-maven-plugin/src/test/resources/generated/Case_PickListQuotationMarkEnum.java
+++ b/components/camel-salesforce/camel-salesforce-maven-plugin/src/test/resources/generated/Case_PickListValueOverrideEnum.java
@@ -9,18 +9,17 @@ import com.fasterxml.jackson.annotation.JsonCreator;
 import com.fasterxml.jackson.annotation.JsonValue;
 
 /**
- * Salesforce Enumeration DTO for picklist PickListQuotationMark
+ * Salesforce Enumeration DTO for picklist PickListValueOverride
  */
 @Generated("org.apache.camel.maven.CamelSalesforceMojo")
-public enum Case_PickListQuotationMarkEnum {
-
-    // No apretar "miralo"
-    NO_APRETAR__MIRALO_("No apretar \"miralo\"");
+public enum Case_PickListValueOverrideEnum {
 
+    // A+
+    APlus("A+");
 
     final String value;
 
-    private Case_PickListQuotationMarkEnum(String value) {
+    private Case_PickListValueOverrideEnum(String value) {
         this.value = value;
     }
 
@@ -30,13 +29,12 @@ public enum Case_PickListQuotationMarkEnum {
     }
 
     @JsonCreator
-    public static Case_PickListQuotationMarkEnum fromValue(String value) {
-        for (Case_PickListQuotationMarkEnum e : Case_PickListQuotationMarkEnum.values()) {
+    public static Case_PickListValueOverrideEnum fromValue(String value) {
+        for (Case_PickListValueOverrideEnum e : Case_PickListValueOverrideEnum.values()) {
             if (e.value.equals(value)) {
                 return e;
             }
         }
         throw new IllegalArgumentException(value);
     }
-
 }