// use Jackson json
final ObjectMapper mapper = new ObjectMapper();
// call getGlobalObjects to get all SObjects
final Set<String> objectNames = new HashSet<String>();
final SyncResponseCallback callback = new SyncResponseCallback();
try {
getLog().info("Getting Salesforce Objects...");
restClient.getGlobalObjects(callback);
if (!callback.await(TIMEOUT, TimeUnit.MILLISECONDS)) {
throw new MojoExecutionException("Timeout waiting for getGlobalObjects!");
}
final SalesforceException ex = callback.getException();
if (ex != null) {
throw ex;
}
final GlobalObjects globalObjects = mapper.readValue(callback.getResponse(),
GlobalObjects.class);
// create a list of object names
for (SObject sObject : globalObjects.getSobjects()) {
objectNames.add(sObject.getName());
}
} catch (Exception e) {
String msg = "Error getting global Objects " + e.getMessage();
throw new MojoExecutionException(msg, e);
}
// check if we are generating POJOs for all objects or not
if ((includes != null && includes.length > 0)
|| (excludes != null && excludes.length > 0)
|| (includePattern != null && !includePattern.trim().isEmpty())
|| (excludePattern != null && !excludePattern.trim().isEmpty())) {
getLog().info("Looking for matching Object names...");
// create a list of accepted names
final Set<String> includedNames = new HashSet<String>();
if (includes != null && includes.length > 0) {
for (String name : includes) {
name = name.trim();
if (name.isEmpty()) {
throw new MojoExecutionException("Invalid empty name in includes");
}
includedNames.add(name);
}
}
final Set<String> excludedNames = new HashSet<String>();
if (excludes != null && excludes.length > 0) {
for (String name : excludes) {
name = name.trim();
if (name.isEmpty()) {
throw new MojoExecutionException("Invalid empty name in excludes");
}
excludedNames.add(name);
}
}
// check whether a pattern is in effect
Pattern incPattern;
if (includePattern != null && !includePattern.trim().isEmpty()) {
incPattern = Pattern.compile(includePattern.trim());
} else if (includedNames.isEmpty()) {
// include everything by default if no include names are set
incPattern = Pattern.compile(".*");
} else {
// include nothing by default if include names are set
incPattern = Pattern.compile("^$");
}
// check whether a pattern is in effect
Pattern excPattern;
if (excludePattern != null && !excludePattern.trim().isEmpty()) {
excPattern = Pattern.compile(excludePattern.trim());
} else {
// exclude nothing by default
excPattern = Pattern.compile("^$");
}
final Set<String> acceptedNames = new HashSet<String>();
for (String name : objectNames) {
// name is included, or matches include pattern
// and is not excluded and does not match exclude pattern
if ((includedNames.contains(name) || incPattern.matcher(name).matches())
&& !excludedNames.contains(name) && !excPattern.matcher(name).matches()) {
acceptedNames.add(name);
}
}
objectNames.clear();
objectNames.addAll(acceptedNames);
getLog().info(String.format("Found %s matching Objects", objectNames.size()));
} else {
getLog().warn(String.format("Generating Java classes for all %s Objects, this may take a while...", objectNames.size()));
}
// 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));
}
} catch (Exception e) {
String msg = "Error getting SObject description " + e.getMessage();
throw new MojoExecutionException(msg, e);
}