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 <jer...@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); } - }