CAMEL-8395: handles empty Salesforce picklists, also maps urn:address to String
Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/2dc15fa0 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/2dc15fa0 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/2dc15fa0 Branch: refs/heads/camel-2.12.x Commit: 2dc15fa04c4f2ca84a8cdebd69f9f2a2403f62d5 Parents: 1291695 Author: Dhiraj Bokde <dhira...@yahoo.com> Authored: Mon Feb 23 12:42:21 2015 -0800 Committer: Dhiraj Bokde <dhira...@yahoo.com> Committed: Fri Mar 20 14:24:45 2015 -0700 ---------------------------------------------------------------------- .../apache/camel/maven/CamelSalesforceMojo.java | 63 +++++++++++++------- .../src/main/resources/sobject-picklist.vm | 18 +++--- 2 files changed, 52 insertions(+), 29 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/2dc15fa0/components/camel-salesforce/camel-salesforce-maven-plugin/src/main/java/org/apache/camel/maven/CamelSalesforceMojo.java ---------------------------------------------------------------------- diff --git a/components/camel-salesforce/camel-salesforce-maven-plugin/src/main/java/org/apache/camel/maven/CamelSalesforceMojo.java b/components/camel-salesforce/camel-salesforce-maven-plugin/src/main/java/org/apache/camel/maven/CamelSalesforceMojo.java index dab9c70..d517f24 100644 --- a/components/camel-salesforce/camel-salesforce-maven-plugin/src/main/java/org/apache/camel/maven/CamelSalesforceMojo.java +++ b/components/camel-salesforce/camel-salesforce-maven-plugin/src/main/java/org/apache/camel/maven/CamelSalesforceMojo.java @@ -21,6 +21,9 @@ import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; import java.util.Date; import java.util.HashMap; import java.util.HashSet; @@ -28,6 +31,7 @@ import java.util.List; import java.util.Map; import java.util.Properties; import java.util.Set; +import java.util.TreeSet; import java.util.concurrent.TimeUnit; import java.util.regex.Pattern; @@ -212,7 +216,7 @@ public class CamelSalesforceMojo extends AbstractMojo { final ObjectMapper mapper = new ObjectMapper(); // call getGlobalObjects to get all SObjects - final Set<String> objectNames = new HashSet<String>(); + final Set<String> objectNames = new TreeSet<String>(); final SyncResponseCallback callback = new SyncResponseCallback(); try { getLog().info("Getting Salesforce Objects..."); @@ -307,23 +311,23 @@ public class CamelSalesforceMojo extends AbstractMojo { // for every accepted name, get SObject description final Set<SObjectDescription> descriptions = new HashSet<SObjectDescription>(); - try { - getLog().info("Retrieving Object descriptions..."); - for (String name : objectNames) { - callback.reset(); - restClient.getDescription(name, callback); - if (!callback.await(TIMEOUT, TimeUnit.MILLISECONDS)) { - throw new MojoExecutionException("Timeout waiting for getDescription for sObject " + name); - } - final SalesforceException ex = callback.getException(); - if (ex != null) { - throw ex; - } - descriptions.add(mapper.readValue(callback.getResponse(), SObjectDescription.class)); + getLog().info("Retrieving Object descriptions..."); + for (String name : objectNames) { + try { + callback.reset(); + restClient.getDescription(name, callback); + if (!callback.await(TIMEOUT, TimeUnit.MILLISECONDS)) { + throw new MojoExecutionException("Timeout waiting for getDescription for sObject " + name); + } + final SalesforceException ex = callback.getException(); + if (ex != null) { + throw ex; + } + descriptions.add(mapper.readValue(callback.getResponse(), SObjectDescription.class)); + } catch (Exception e) { + String msg = "Error getting SObject description for '" + name + "': " + e.getMessage(); + throw new MojoExecutionException(msg, e); } - } catch (Exception e) { - String msg = "Error getting SObject description " + e.getMessage(); - throw new MojoExecutionException(msg, e); } // create package directory @@ -494,6 +498,7 @@ public class CamelSalesforceMojo extends AbstractMojo { {"duration", "javax.xml.datatype.Duration"}, {"NOTATION", "javax.xml.namespace.QName"} */ + {"address", "String"} }; LOOKUP_MAP = new HashMap<String, String>(); for (String[] entry : typeMap) { @@ -556,9 +561,27 @@ public class CamelSalesforceMojo extends AbstractMojo { return false; } - public PickListValue getLastEntry(SObjectField field) { - final List<PickListValue> values = field.getPicklistValues(); - return values.get(values.size() - 1); + public List<PickListValue> getUniqueValues(SObjectField field) { + if (field.getPicklistValues().isEmpty()) { + return field.getPicklistValues(); + } + final List<PickListValue> result = new ArrayList<PickListValue>(); + final Set<String> literals = new HashSet<String>(); + for (PickListValue listValue : field.getPicklistValues()) { + final String value = listValue.getValue(); + if (!literals.contains(value)) { + literals.add(value); + result.add(listValue); + } + } + literals.clear(); + Collections.sort(result, new Comparator<PickListValue>() { + @Override + public int compare(PickListValue o1, PickListValue o2) { + return o1.getValue().compareTo(o2.getValue()); + } + }); + return result; } public boolean isPicklist(SObjectField field) { http://git-wip-us.apache.org/repos/asf/camel/blob/2dc15fa0/components/camel-salesforce/camel-salesforce-maven-plugin/src/main/resources/sobject-picklist.vm ---------------------------------------------------------------------- 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 8e23fdb..bb3a22f 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 @@ -29,18 +29,18 @@ import org.codehaus.jackson.annotate.JsonValue; * Salesforce Enumeration DTO for picklist $field.Name */ public enum $enumName { -## find the last entry -#set ( $lastEntry = $utility.getLastEntry($field) ) +#set ( $values = $utility.getUniqueValues($field) ) -#foreach ( $entry in $field.PicklistValues) -#set ( $value = $entry.Value ) -#if ( $entry == $lastEntry ) -#set ( $delim = ";" ) +## handle empty picklists +#if ( $values.isEmpty() ) + ; // empty picklist! #else -#set ( $delim = ",") -#end +#foreach ( $entry in $values) +#set ( $value = $entry.Value ) // $value - $utility.getEnumConstant($value)("$value")$delim + $utility.getEnumConstant($value)("$value")#if ( $foreach.hasNext ),#else;#end + +#end #end final String value;