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 2016/11/23 08:45:24 UTC
[1/3] camel git commit: Regenrate code
Repository: camel
Updated Branches:
refs/heads/master a52ab3cdc -> 1b7ddbefc
Regenrate code
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/1b7ddbef
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/1b7ddbef
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/1b7ddbef
Branch: refs/heads/master
Commit: 1b7ddbefc338c205e0c5d614d29d963ce78d95cb
Parents: 679b099
Author: Claus Ibsen <da...@apache.org>
Authored: Wed Nov 23 09:43:54 2016 +0100
Committer: Claus Ibsen <da...@apache.org>
Committed: Wed Nov 23 09:44:01 2016 +0100
----------------------------------------------------------------------
.../camel-spring-boot-dependencies/pom.xml | 78 ++++++++++----------
1 file changed, 39 insertions(+), 39 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/1b7ddbef/platforms/spring-boot/spring-boot-dm/camel-spring-boot-dependencies/pom.xml
----------------------------------------------------------------------
diff --git a/platforms/spring-boot/spring-boot-dm/camel-spring-boot-dependencies/pom.xml b/platforms/spring-boot/spring-boot-dm/camel-spring-boot-dependencies/pom.xml
index b0255af..d23ed18 100644
--- a/platforms/spring-boot/spring-boot-dm/camel-spring-boot-dependencies/pom.xml
+++ b/platforms/spring-boot/spring-boot-dm/camel-spring-boot-dependencies/pom.xml
@@ -2882,223 +2882,223 @@
<dependency>
<groupId>org.optaplanner</groupId>
<artifactId>optaplanner-benchmark</artifactId>
- <version>6.4.0.Final</version>
+ <version>6.5.0.Final</version>
</dependency>
<dependency>
<groupId>org.optaplanner</groupId>
<artifactId>optaplanner-benchmark</artifactId>
- <version>6.4.0.Final</version>
+ <version>6.5.0.Final</version>
<classifier>sources</classifier>
</dependency>
<dependency>
<groupId>org.optaplanner</groupId>
<artifactId>optaplanner-benchmark</artifactId>
- <version>6.4.0.Final</version>
+ <version>6.5.0.Final</version>
<type>test-jar</type>
</dependency>
<dependency>
<groupId>org.optaplanner</groupId>
<artifactId>optaplanner-benchmark</artifactId>
- <version>6.4.0.Final</version>
+ <version>6.5.0.Final</version>
<classifier>javadoc</classifier>
</dependency>
<dependency>
<groupId>org.optaplanner</groupId>
<artifactId>optaplanner-core</artifactId>
- <version>6.4.0.Final</version>
+ <version>6.5.0.Final</version>
</dependency>
<dependency>
<groupId>org.optaplanner</groupId>
<artifactId>optaplanner-core</artifactId>
- <version>6.4.0.Final</version>
+ <version>6.5.0.Final</version>
<classifier>sources</classifier>
</dependency>
<dependency>
<groupId>org.optaplanner</groupId>
<artifactId>optaplanner-core</artifactId>
- <version>6.4.0.Final</version>
+ <version>6.5.0.Final</version>
<type>test-jar</type>
</dependency>
<dependency>
<groupId>org.optaplanner</groupId>
<artifactId>optaplanner-core</artifactId>
- <version>6.4.0.Final</version>
+ <version>6.5.0.Final</version>
<classifier>javadoc</classifier>
</dependency>
<dependency>
<groupId>org.optaplanner</groupId>
<artifactId>optaplanner-distribution</artifactId>
- <version>6.4.0.Final</version>
+ <version>6.5.0.Final</version>
<type>zip</type>
</dependency>
<dependency>
<groupId>org.optaplanner</groupId>
<artifactId>optaplanner-docs</artifactId>
- <version>6.4.0.Final</version>
+ <version>6.5.0.Final</version>
<type>jdocbook</type>
</dependency>
<dependency>
<groupId>org.optaplanner</groupId>
<artifactId>optaplanner-examples</artifactId>
- <version>6.4.0.Final</version>
+ <version>6.5.0.Final</version>
</dependency>
<dependency>
<groupId>org.optaplanner</groupId>
<artifactId>optaplanner-examples</artifactId>
- <version>6.4.0.Final</version>
+ <version>6.5.0.Final</version>
<classifier>sources</classifier>
</dependency>
<dependency>
<groupId>org.optaplanner</groupId>
<artifactId>optaplanner-examples</artifactId>
- <version>6.4.0.Final</version>
+ <version>6.5.0.Final</version>
<type>test-jar</type>
</dependency>
<dependency>
<groupId>org.optaplanner</groupId>
<artifactId>optaplanner-persistence-common</artifactId>
- <version>6.4.0.Final</version>
+ <version>6.5.0.Final</version>
</dependency>
<dependency>
<groupId>org.optaplanner</groupId>
<artifactId>optaplanner-persistence-common</artifactId>
- <version>6.4.0.Final</version>
+ <version>6.5.0.Final</version>
<classifier>sources</classifier>
</dependency>
<dependency>
<groupId>org.optaplanner</groupId>
<artifactId>optaplanner-persistence-common</artifactId>
- <version>6.4.0.Final</version>
+ <version>6.5.0.Final</version>
<type>test-jar</type>
</dependency>
<dependency>
<groupId>org.optaplanner</groupId>
<artifactId>optaplanner-persistence-common</artifactId>
- <version>6.4.0.Final</version>
+ <version>6.5.0.Final</version>
<classifier>javadoc</classifier>
</dependency>
<dependency>
<groupId>org.optaplanner</groupId>
<artifactId>optaplanner-persistence-jpa</artifactId>
- <version>6.4.0.Final</version>
+ <version>6.5.0.Final</version>
</dependency>
<dependency>
<groupId>org.optaplanner</groupId>
<artifactId>optaplanner-persistence-jpa</artifactId>
- <version>6.4.0.Final</version>
+ <version>6.5.0.Final</version>
<classifier>sources</classifier>
</dependency>
<dependency>
<groupId>org.optaplanner</groupId>
<artifactId>optaplanner-persistence-jpa</artifactId>
- <version>6.4.0.Final</version>
+ <version>6.5.0.Final</version>
<type>test-jar</type>
</dependency>
<dependency>
<groupId>org.optaplanner</groupId>
<artifactId>optaplanner-persistence-jpa</artifactId>
- <version>6.4.0.Final</version>
+ <version>6.5.0.Final</version>
<classifier>javadoc</classifier>
</dependency>
<dependency>
<groupId>org.optaplanner</groupId>
<artifactId>optaplanner-persistence-xstream</artifactId>
- <version>6.4.0.Final</version>
+ <version>6.5.0.Final</version>
</dependency>
<dependency>
<groupId>org.optaplanner</groupId>
<artifactId>optaplanner-persistence-xstream</artifactId>
- <version>6.4.0.Final</version>
+ <version>6.5.0.Final</version>
<classifier>sources</classifier>
</dependency>
<dependency>
<groupId>org.optaplanner</groupId>
<artifactId>optaplanner-persistence-xstream</artifactId>
- <version>6.4.0.Final</version>
+ <version>6.5.0.Final</version>
<type>test-jar</type>
</dependency>
<dependency>
<groupId>org.optaplanner</groupId>
<artifactId>optaplanner-persistence-xstream</artifactId>
- <version>6.4.0.Final</version>
+ <version>6.5.0.Final</version>
<classifier>javadoc</classifier>
</dependency>
<dependency>
<groupId>org.optaplanner</groupId>
<artifactId>optaplanner-wb-domain-editor-api</artifactId>
- <version>6.4.0.Final</version>
+ <version>6.5.0.Final</version>
</dependency>
<dependency>
<groupId>org.optaplanner</groupId>
<artifactId>optaplanner-wb-domain-editor-api</artifactId>
- <version>6.4.0.Final</version>
+ <version>6.5.0.Final</version>
<classifier>sources</classifier>
</dependency>
<dependency>
<groupId>org.optaplanner</groupId>
<artifactId>optaplanner-wb-domain-editor-backend</artifactId>
- <version>6.4.0.Final</version>
+ <version>6.5.0.Final</version>
</dependency>
<dependency>
<groupId>org.optaplanner</groupId>
<artifactId>optaplanner-wb-domain-editor-backend</artifactId>
- <version>6.4.0.Final</version>
+ <version>6.5.0.Final</version>
<classifier>sources</classifier>
</dependency>
<dependency>
<groupId>org.optaplanner</groupId>
<artifactId>optaplanner-wb-domain-editor-client</artifactId>
- <version>6.4.0.Final</version>
+ <version>6.5.0.Final</version>
</dependency>
<dependency>
<groupId>org.optaplanner</groupId>
<artifactId>optaplanner-wb-domain-editor-client</artifactId>
- <version>6.4.0.Final</version>
+ <version>6.5.0.Final</version>
<classifier>sources</classifier>
</dependency>
<dependency>
<groupId>org.optaplanner</groupId>
<artifactId>optaplanner-wb-solver-editor-api</artifactId>
- <version>6.4.0.Final</version>
+ <version>6.5.0.Final</version>
</dependency>
<dependency>
<groupId>org.optaplanner</groupId>
<artifactId>optaplanner-wb-solver-editor-api</artifactId>
- <version>6.4.0.Final</version>
+ <version>6.5.0.Final</version>
<classifier>sources</classifier>
</dependency>
<dependency>
<groupId>org.optaplanner</groupId>
<artifactId>optaplanner-wb-solver-editor-backend</artifactId>
- <version>6.4.0.Final</version>
+ <version>6.5.0.Final</version>
</dependency>
<dependency>
<groupId>org.optaplanner</groupId>
<artifactId>optaplanner-wb-solver-editor-backend</artifactId>
- <version>6.4.0.Final</version>
+ <version>6.5.0.Final</version>
<classifier>sources</classifier>
</dependency>
<dependency>
<groupId>org.optaplanner</groupId>
<artifactId>optaplanner-wb-solver-editor-client</artifactId>
- <version>6.4.0.Final</version>
+ <version>6.5.0.Final</version>
</dependency>
<dependency>
<groupId>org.optaplanner</groupId>
<artifactId>optaplanner-wb-solver-editor-client</artifactId>
- <version>6.4.0.Final</version>
+ <version>6.5.0.Final</version>
<classifier>sources</classifier>
</dependency>
<dependency>
<groupId>org.optaplanner</groupId>
<artifactId>optaplanner-webexamples</artifactId>
- <version>6.4.0.Final</version>
+ <version>6.5.0.Final</version>
<type>war</type>
</dependency>
<dependency>
<groupId>org.optaplanner</groupId>
<artifactId>optaplanner-webexamples</artifactId>
- <version>6.4.0.Final</version>
+ <version>6.5.0.Final</version>
<classifier>sources</classifier>
</dependency>
<dependency>
[2/3] camel git commit: CAMEL-10472 Update Salesforce component to
support recent items REST API
Posted by da...@apache.org.
CAMEL-10472 Update Salesforce component to support recent items REST API
- added documentation.
- updates by
camel-package-maven-plugin:prepare-spring-boot-auto-configuration to the
SalesforceComponentConfiguration.java.
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/679b0998
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/679b0998
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/679b0998
Branch: refs/heads/master
Commit: 679b09982d889ad5de6a24a0baf9ad916f4fd3b7
Parents: 4e3b2f7
Author: Zoran Regvart <zo...@regvart.com>
Authored: Tue Nov 22 18:48:41 2016 +0100
Committer: Claus Ibsen <da...@apache.org>
Committed: Wed Nov 23 09:44:01 2016 +0100
----------------------------------------------------------------------
.../SalesforceComponentConfiguration.java | 15 +++++++++++++++
.../src/main/docs/salesforce-component.adoc | 20 +++++++++++++++++++-
2 files changed, 34 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/679b0998/components-starter/camel-salesforce-starter/src/main/java/org/apache/camel/component/salesforce/springboot/SalesforceComponentConfiguration.java
----------------------------------------------------------------------
diff --git a/components-starter/camel-salesforce-starter/src/main/java/org/apache/camel/component/salesforce/springboot/SalesforceComponentConfiguration.java b/components-starter/camel-salesforce-starter/src/main/java/org/apache/camel/component/salesforce/springboot/SalesforceComponentConfiguration.java
index 30b68c5..91f478c 100644
--- a/components-starter/camel-salesforce-starter/src/main/java/org/apache/camel/component/salesforce/springboot/SalesforceComponentConfiguration.java
+++ b/components-starter/camel-salesforce-starter/src/main/java/org/apache/camel/component/salesforce/springboot/SalesforceComponentConfiguration.java
@@ -394,6 +394,13 @@ public class SalesforceComponentConfiguration {
* Replay IDs to start from per channel name.
*/
private Map initialReplayIdMap;
+ /**
+ * Limit on number of returned records. Applicable to some of the API,
+ * check the Salesforce documentation.
+ *
+ * @param limit
+ */
+ private Integer limit;
public PayloadFormat getFormat() {
return format;
@@ -676,6 +683,14 @@ public class SalesforceComponentConfiguration {
public void setInitialReplayIdMap(Map initialReplayIdMap) {
this.initialReplayIdMap = initialReplayIdMap;
}
+
+ public Integer getLimit() {
+ return limit;
+ }
+
+ public void setLimit(Integer limit) {
+ this.limit = limit;
+ }
}
public static class SalesforceLoginConfigNestedConfiguration {
http://git-wip-us.apache.org/repos/asf/camel/blob/679b0998/components/camel-salesforce/camel-salesforce-component/src/main/docs/salesforce-component.adoc
----------------------------------------------------------------------
diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/docs/salesforce-component.adoc b/components/camel-salesforce/camel-salesforce-component/src/main/docs/salesforce-component.adoc
index a3d062f..089ca7c 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/main/docs/salesforce-component.adoc
+++ b/components/camel-salesforce/camel-salesforce-component/src/main/docs/salesforce-component.adoc
@@ -68,6 +68,7 @@ field
results) using result link returned from the 'query' API
* search - Runs a Salesforce SOSL query
* limits - fetching organization API usage limits
+* recent - fetching recent items
For example, the following producer endpoint uses the upsertSObject API,
with the sObjectIdName parameter specifying 'Name' as the external id
@@ -218,6 +219,22 @@ from("direct:querySalesforce")
.endChoice()
-----------------------------------------------------------------------------------------------------
+[[Salesforce-RecentItems]]
+Using Salesforce Recent Items API
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+To fetch the recent items use `salesforce:recent` operation. This operation returns an `java.util.List` of
+`org.apache.camel.component.salesforce.api.dto.RecentItem` objects (`List<RecentItem>`) that in turn contain
+the `Id`, `Name` and `Attributes` (with `type` and `url` properties). You can limit the number of returned items
+by specifying `limit` parameter set to maximum number of records to return. For example:
+
+[source,java]
+-----------------------------------------------------------------------------------------------------
+from("direct:fetchRecentItems")
+ to("salesforce:recent")
+ .split().body()
+ .log("${body.name} at ${body.attributes.url}");
+-----------------------------------------------------------------------------------------------------
[[Salesforce-CamelSalesforceMavenPlugin]]
Camel Salesforce Maven Plugin
@@ -275,7 +292,7 @@ The Salesforce component supports 16 options which are listed below.
// endpoint options: START
-The Salesforce component supports 41 endpoint options which are listed below:
+The Salesforce component supports 42 endpoint options which are listed below:
{% raw %}
[width="100%",cols="2,1,1m,1m,5",options="header"]
@@ -297,6 +314,7 @@ The Salesforce component supports 41 endpoint options which are listed below:
| initialReplayIdMap | common | | Map | Replay IDs to start from per channel name.
| instanceId | common | | String | Salesforce1 Analytics report execution instance ID
| jobId | common | | String | Bulk API Job ID
+| limit | common | | Integer | Limit on number of returned records. Applicable to some of the API check the Salesforce documentation.
| maxBackoff | common | | long | Maximum backoff interval for Streaming connection restart attempts for failures beyond CometD auto-reconnect.
| notifyForFields | common | | NotifyForFieldsEnum | Notify for fields options are ALL REFERENCED SELECT WHERE
| notifyForOperationCreate | common | | Boolean | Notify for create operation defaults to false (API version = 29.0)
[3/3] camel git commit: CAMEL-10472 Update Salesforce component to
support recent items REST API
Posted by da...@apache.org.
CAMEL-10472 Update Salesforce component to support recent items REST API
This commit adds support for getting recent items via Salesforce REST API[1].
New operation `recent` was added and can be used like:
...to("salesforce:recent")
.split().body()
.log("${body.name} at ${body.attributes.url}");
Number of items returned can be limited by the `limit` parameter in URI,
body or headers.
[1] https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/resources_recent_items.htm
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/4e3b2f7a
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/4e3b2f7a
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/4e3b2f7a
Branch: refs/heads/master
Commit: 4e3b2f7af9ed3d7c99fcfd32f0c84c37838ea19f
Parents: a52ab3c
Author: Zoran Regvart <zo...@regvart.com>
Authored: Tue Nov 22 18:24:32 2016 +0100
Committer: Claus Ibsen <da...@apache.org>
Committed: Wed Nov 23 09:44:01 2016 +0100
----------------------------------------------------------------------
.../salesforce/SalesforceEndpointConfig.java | 17 +++
.../salesforce/api/TypeReferences.java | 4 +
.../salesforce/internal/OperationName.java | 1 +
.../internal/client/DefaultRestClient.java | 13 ++
.../salesforce/internal/client/RestClient.java | 12 ++
.../processor/AbstractRestProcessor.java | 10 ++
.../internal/processor/JsonRestProcessor.java | 5 +
.../salesforce/RecentIntegrationTest.java | 140 +++++++++++++++++++
.../salesforce/api/dto/RecentItemTest.java | 65 +++++++++
9 files changed, 267 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/4e3b2f7a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceEndpointConfig.java
----------------------------------------------------------------------
diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceEndpointConfig.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceEndpointConfig.java
index ad18aab..3d59a19 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceEndpointConfig.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceEndpointConfig.java
@@ -56,6 +56,7 @@ public class SalesforceEndpointConfig implements Cloneable {
public static final String SOBJECT_SEARCH = "sObjectSearch";
public static final String APEX_METHOD = "apexMethod";
public static final String APEX_URL = "apexUrl";
+ public static final String LIMIT = "limit";
// prefix for parameters in headers
public static final String APEX_QUERY_PARAM_PREFIX = "apexQueryParam.";
@@ -173,6 +174,9 @@ public class SalesforceEndpointConfig implements Cloneable {
@UriParam
private long maxBackoff = DEFAULT_MAX_BACKOFF;
+ @UriParam
+ private Integer limit;
+
public SalesforceEndpointConfig copy() {
try {
final SalesforceEndpointConfig copy = (SalesforceEndpointConfig) super.clone();
@@ -563,6 +567,7 @@ public class SalesforceEndpointConfig implements Cloneable {
valueMap.put(SOBJECT_SEARCH, sObjectSearch);
valueMap.put(APEX_METHOD, apexMethod);
valueMap.put(APEX_URL, apexUrl);
+ valueMap.put(LIMIT, limit);
// apexQueryParams are handled explicitly in AbstractRestProcessor
// add bulk API properties
@@ -608,4 +613,16 @@ public class SalesforceEndpointConfig implements Cloneable {
public void setInitialReplayIdMap(Map<String, Integer> initialReplayIdMap) {
this.initialReplayIdMap = initialReplayIdMap;
}
+
+ public Integer getLimit() {
+ return limit;
+ }
+
+ /**
+ * Limit on number of returned records. Applicable to some of the API, check the Salesforce documentation.
+ * @param limit
+ */
+ public void setLimit(final Integer limit) {
+ this.limit = limit;
+ }
}
http://git-wip-us.apache.org/repos/asf/camel/blob/4e3b2f7a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/TypeReferences.java
----------------------------------------------------------------------
diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/TypeReferences.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/TypeReferences.java
index 42f022d..7128312 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/TypeReferences.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/TypeReferences.java
@@ -23,6 +23,7 @@ import com.fasterxml.jackson.core.type.TypeReference;
import org.apache.camel.component.salesforce.api.dto.Limits.Operation;
import org.apache.camel.component.salesforce.api.dto.Limits.Usage;
+import org.apache.camel.component.salesforce.api.dto.RecentItem;
import org.apache.camel.component.salesforce.api.dto.RestError;
import org.apache.camel.component.salesforce.api.dto.SearchResult;
import org.apache.camel.component.salesforce.api.dto.Version;
@@ -55,6 +56,9 @@ public final class TypeReferences {
public static final TypeReference<List<SearchResult>> SEARCH_RESULT_TYPE = new TypeReference<List<SearchResult>>() {
};
+ public static final TypeReference<List<RecentItem>> RECENT_ITEM_LIST_TYPE = new TypeReference<List<RecentItem>>() {
+ };
+
private TypeReferences() {
// not meant for instantiation, only for TypeReference constants
}
http://git-wip-us.apache.org/repos/asf/camel/blob/4e3b2f7a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/OperationName.java
----------------------------------------------------------------------
diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/OperationName.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/OperationName.java
index 15fdf0b..7570374 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/OperationName.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/OperationName.java
@@ -37,6 +37,7 @@ public enum OperationName {
QUERY_ALL("queryAll"),
SEARCH("search"),
APEX_CALL("apexCall"),
+ RECENT("recent"),
// bulk API
CREATE_JOB("createJob"),
http://git-wip-us.apache.org/repos/asf/camel/blob/4e3b2f7a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/DefaultRestClient.java
----------------------------------------------------------------------
diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/DefaultRestClient.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/DefaultRestClient.java
index d1a5394..f604312 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/DefaultRestClient.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/DefaultRestClient.java
@@ -23,6 +23,7 @@ import java.net.URISyntaxException;
import java.net.URLEncoder;
import java.util.List;
import java.util.Map;
+import java.util.Optional;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
@@ -403,6 +404,18 @@ public class DefaultRestClient extends AbstractClientBase implements RestClient
}
@Override
+ public void recent(final Integer limit, final ResponseCallback responseCallback) {
+ final String param = Optional.ofNullable(limit).map(v -> "?limit=" + v).orElse("");
+
+ final Request get = getRequest(HttpMethod.GET, versionUrl() + "recent/" + param);
+
+ // requires authorization token
+ setAccessToken(get);
+
+ doHttpRequest(get, new DelegatingClientCallback(responseCallback));
+ }
+
+ @Override
public void limits(final ResponseCallback responseCallback) {
final Request get = getRequest(HttpMethod.GET, versionUrl() + "limits/");
http://git-wip-us.apache.org/repos/asf/camel/blob/4e3b2f7a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/RestClient.java
----------------------------------------------------------------------
diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/RestClient.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/RestClient.java
index 470aa33..55764d0 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/RestClient.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/RestClient.java
@@ -195,6 +195,18 @@ public interface RestClient {
ResponseCallback callback);
/**
+ * Fetches recently viewed records.
+ *
+ * @param limit
+ * optional limit that specifies the maximum number of records to be returned. If this parameter is not
+ * specified, the default maximum number of records returned is the maximum number of entries in
+ * RecentlyViewed, which is 200 records per object.
+ * @param responseCallback
+ * {@link ResponseCallback} to handle response or exception
+ */
+ void recent(Integer limit, ResponseCallback responseCallback);
+
+ /**
* Fetches Organization Limits.
*
* @param responseCallback {@link ResponseCallback} to handle response or exception
http://git-wip-us.apache.org/repos/asf/camel/blob/4e3b2f7a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/AbstractRestProcessor.java
----------------------------------------------------------------------
diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/AbstractRestProcessor.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/AbstractRestProcessor.java
index 35e0aff..6636ada 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/AbstractRestProcessor.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/AbstractRestProcessor.java
@@ -29,6 +29,7 @@ import java.util.regex.Pattern;
import org.apache.camel.AsyncCallback;
import org.apache.camel.Exchange;
import org.apache.camel.component.salesforce.SalesforceEndpoint;
+import org.apache.camel.component.salesforce.SalesforceEndpointConfig;
import org.apache.camel.component.salesforce.api.SalesforceException;
import org.apache.camel.component.salesforce.api.dto.AbstractSObjectBase;
import org.apache.camel.component.salesforce.internal.PayloadFormat;
@@ -152,6 +153,9 @@ public abstract class AbstractRestProcessor extends AbstractSalesforceProcessor
case APEX_CALL:
processApexCall(exchange, callback);
break;
+ case RECENT:
+ processRecent(exchange, callback);
+ break;
case LIMITS:
processLimits(exchange, callback);
break;
@@ -564,6 +568,12 @@ public abstract class AbstractRestProcessor extends AbstractSalesforceProcessor
return apexUrl;
}
+ private void processRecent(Exchange exchange, AsyncCallback callback) throws SalesforceException {
+ final Integer limit = getParameter(SalesforceEndpointConfig.LIMIT, exchange, true, true, Integer.class);
+
+ restClient.recent(limit, (response, exception) -> processResponse(exchange, response, exception, callback));
+ }
+
private void processLimits(Exchange exchange, AsyncCallback callback) {
restClient.limits((response, exception) -> processResponse(exchange, response, exception, callback));
}
http://git-wip-us.apache.org/repos/asf/camel/blob/4e3b2f7a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/JsonRestProcessor.java
----------------------------------------------------------------------
diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/JsonRestProcessor.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/JsonRestProcessor.java
index 5fe991f..a0c50b3 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/JsonRestProcessor.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/JsonRestProcessor.java
@@ -103,6 +103,11 @@ public class JsonRestProcessor extends AbstractRestProcessor {
exchange.setProperty(RESPONSE_TYPE, TypeReferences.SEARCH_RESULT_TYPE);
break;
+ case RECENT:
+ // handle known response type
+ exchange.setProperty(RESPONSE_TYPE, TypeReferences.RECENT_ITEM_LIST_TYPE);
+ break;
+
case LIMITS:
// handle known response type
exchange.setProperty(RESPONSE_CLASS, Limits.class);
http://git-wip-us.apache.org/repos/asf/camel/blob/4e3b2f7a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/RecentIntegrationTest.java
----------------------------------------------------------------------
diff --git a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/RecentIntegrationTest.java b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/RecentIntegrationTest.java
new file mode 100644
index 0000000..3774295
--- /dev/null
+++ b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/RecentIntegrationTest.java
@@ -0,0 +1,140 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.salesforce;
+
+import java.util.List;
+import java.util.stream.Collectors;
+import java.util.stream.IntStream;
+
+import com.thoughtworks.xstream.annotations.XStreamImplicit;
+
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.salesforce.api.dto.AbstractQueryRecordsBase;
+import org.apache.camel.component.salesforce.api.dto.RecentItem;
+import org.apache.camel.component.salesforce.dto.generated.Account;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+public class RecentIntegrationTest extends AbstractSalesforceTestBase {
+
+ public static class Accounts extends AbstractQueryRecordsBase {
+ @XStreamImplicit
+ private List<Account> records;
+
+ public List<Account> getRecords() {
+ return records;
+ }
+
+ public void setRecords(final List<Account> records) {
+ this.records = records;
+ }
+
+ }
+
+ private static final Object NOT_USED = null;
+
+ static Account account(final int ord) {
+ final Account account = new Account();
+ account.setName("recent-" + ord);
+
+ return account;
+ }
+
+ static void assertRecentItemsSize(final List<RecentItem> items, final int expected) {
+ final List<RecentItem> recentItems = items.stream().filter(i -> i.getName().startsWith("recent-"))
+ .collect(Collectors.toList());
+
+ assertListSize("Expected " + expected + " items named `recent-N` in recent items", recentItems, expected);
+ }
+
+ @After
+ public void deleteRecords() {
+ template.sendBody("direct:delete-recent", NOT_USED);
+ }
+
+ @Before
+ public void setupTenRecentItems() {
+ final List<Account> accounts = IntStream.range(0, 10).mapToObj(RecentIntegrationTest::account)
+ .collect(Collectors.toList());
+
+ template.sendBody("direct:create-recent", accounts);
+ }
+
+ @Test
+ public void shouldFetchRecentItems() {
+ @SuppressWarnings("unchecked")
+ final List<RecentItem> items = template.requestBody("direct:test-recent", NOT_USED, List.class);
+
+ assertRecentItemsSize(items, 10);
+ }
+
+ @Test
+ public void shouldFetchRecentItemsLimitingByHeaderParam() {
+ @SuppressWarnings("unchecked")
+ final List<RecentItem> items = template.requestBody("direct:test-recent-with-header-limit-param", NOT_USED,
+ List.class);
+
+ assertRecentItemsSize(items, 5);
+ }
+
+ @Test
+ public void shouldFetchRecentItemsLimitingByParamInBody() {
+ @SuppressWarnings("unchecked")
+ final List<RecentItem> items = template.requestBody("direct:test-recent-with-body-limit-param", NOT_USED,
+ List.class);
+
+ assertRecentItemsSize(items, 5);
+ }
+
+ @Test
+ public void shouldFetchRecentItemsLimitingByUriParam() {
+ @SuppressWarnings("unchecked")
+ final List<RecentItem> items = template.requestBody("direct:test-recent-with-limit-uri-param", NOT_USED,
+ List.class);
+
+ assertRecentItemsSize(items, 5);
+ }
+
+ @Override
+ protected RouteBuilder doCreateRouteBuilder() throws Exception {
+ return new RouteBuilder() {
+ @Override
+ public void configure() throws Exception {
+ from("direct:create-recent").split().body().to("salesforce:createSObject?sObjectName=Account").end()
+ .to("salesforce:query?sObjectClass=" + Accounts.class.getName()
+ + "&sObjectQuery=SELECT Id FROM Account WHERE Name LIKE 'recent-%' FOR VIEW");
+
+ from("direct:delete-recent")
+ .to("salesforce:query?sObjectClass=" + Accounts.class.getName()
+ + "&sObjectQuery=SELECT Id FROM Account WHERE Name LIKE 'recent-%'")
+ .transform(simple("${body.records}")).split().body()
+ .setHeader(SalesforceEndpointConfig.SOBJECT_ID).simple("${body.id}")
+ .to("salesforce:deleteSObject?sObjectName=Account");
+
+ from("direct:test-recent").to("salesforce:recent");
+
+ from("direct:test-recent-with-limit-uri-param").to("salesforce:recent?limit=5");
+
+ from("direct:test-recent-with-header-limit-param").setHeader(SalesforceEndpointConfig.LIMIT).constant(5)
+ .to("salesforce:recent");
+
+ from("direct:test-recent-with-body-limit-param").setBody(constant(5)).to("salesforce:recent");
+ }
+ };
+ }
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/4e3b2f7a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/dto/RecentItemTest.java
----------------------------------------------------------------------
diff --git a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/dto/RecentItemTest.java b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/dto/RecentItemTest.java
new file mode 100644
index 0000000..3fc16ee
--- /dev/null
+++ b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/dto/RecentItemTest.java
@@ -0,0 +1,65 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.salesforce.api.dto;
+
+import java.io.IOException;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+import org.junit.Test;
+
+import static org.hamcrest.core.IsInstanceOf.instanceOf;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertThat;
+
+public class RecentItemTest {
+
+ @Test
+ public void shouldDeserializeFromJSON() throws JsonProcessingException, IOException {
+ final ObjectMapper mapper = new ObjectMapper();
+
+ final Object read = mapper.readerFor(RecentItem.class)
+ .readValue("{ \n" + //
+ " \"attributes\" : \n" + //
+ " { \n" + //
+ " \"type\" : \"Account\", \n" + //
+ " \"url\" : \"/services/data/v28.0/sobjects/Account/a06U000000CelH0IAJ\" \n" + //
+ " }, \n" + //
+ " \"Id\" : \"a06U000000CelH0IAJ\", \n" + //
+ " \"Name\" : \"Acme\" \n" + //
+ "}");
+
+ assertThat("RecentItem should deserialize from JSON", read, instanceOf(RecentItem.class));
+
+ RecentItem recentItem = (RecentItem) read;
+
+ assertEquals("RecentItem.Id should be deserialized", recentItem.getId(), "a06U000000CelH0IAJ");
+
+ assertEquals("RecentItem.Name should be deserialized", recentItem.getName(), "Acme");
+
+ assertNotNull("RecentItem.attributes should be deserialized", recentItem.getAttributes());
+
+ assertEquals("RecentItem.attributes.type should be deserialized", recentItem.getAttributes().getType(),
+ "Account");
+
+ assertEquals("RecentItem.attributes.url should be deserialized", recentItem.getAttributes().getUrl(),
+ "/services/data/v28.0/sobjects/Account/a06U000000CelH0IAJ");
+
+ }
+}