Repository: camel Updated Branches: refs/heads/master 8203136ee -> f0a4852ba
CAMEL-10886: Support Limits API response from S... ...alesforce v39.0 Since version v39.0 (Spring 2017) the Limits API returns along with `max` and `remaining` additional JSON properties, per connected application, also containing `max` and `remaining`. This changes the deserialization of Limits JSON response to include those per-application Limits. Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/f0a4852b Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/f0a4852b Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/f0a4852b Branch: refs/heads/master Commit: f0a4852ba9c3b7b109613a2eb53a4359218c2c27 Parents: 8203136 Author: Zoran Regvart <zregv...@apache.org> Authored: Thu Feb 23 12:45:57 2017 +0100 Committer: Zoran Regvart <zregv...@apache.org> Committed: Thu Feb 23 12:45:57 2017 +0100 ---------------------------------------------------------------------- .../component/salesforce/api/dto/Limits.java | 29 +++++++++++++++++++- .../salesforce/api/dto/LimitsTest.java | 6 +++- .../component/salesforce/api/dto/limits.json | 12 ++++++-- 3 files changed, 43 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/f0a4852b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/Limits.java ---------------------------------------------------------------------- diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/Limits.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/Limits.java index d80bade..3c84dee 100644 --- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/Limits.java +++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/Limits.java @@ -18,9 +18,14 @@ package org.apache.camel.component.salesforce.api.dto; import java.io.IOException; import java.io.Serializable; +import java.util.Collections; +import java.util.HashMap; import java.util.Map; +import java.util.Optional; +import java.util.Set; import java.util.stream.Collectors; +import com.fasterxml.jackson.annotation.JsonAnySetter; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.core.JsonParser; @@ -95,17 +100,34 @@ public final class Limits implements Serializable { private final int remaining; + private final Map<String, Usage> perApplication = new HashMap<>(); + @JsonCreator Usage(@JsonProperty("Max") final int max, @JsonProperty("Remaining") final int remaining) { this.max = max; this.remaining = remaining; } + /** Returns {@link Usage} for application */ + public Optional<Usage> forApplication(final String application) { + return Optional.ofNullable(perApplication.get(application)); + } + + /** Further per application usage. */ + public Set<String> getApplications() { + return perApplication.keySet(); + } + /** Maximum allowed by the limit */ public int getMax() { return max; } + /** Returns usages per application */ + public Map<String, Usage> getPerApplicationUsage() { + return Collections.unmodifiableMap(perApplication); + } + /** Remaining invocations allowed */ public int getRemaining() { return remaining; @@ -121,7 +143,12 @@ public final class Limits implements Serializable { return "Undefined"; } - return "Max: " + max + ", Remaining: " + remaining; + return "Max: " + max + ", Remaining: " + remaining + ", per application: " + perApplication; + } + + @JsonAnySetter + void addApplicationUsage(final String application, final Usage usage) { + perApplication.put(application, usage); } } http://git-wip-us.apache.org/repos/asf/camel/blob/f0a4852b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/dto/LimitsTest.java ---------------------------------------------------------------------- diff --git a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/dto/LimitsTest.java b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/dto/LimitsTest.java index 6b7b0d3..7879b3c 100644 --- a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/dto/LimitsTest.java +++ b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/dto/LimitsTest.java @@ -36,6 +36,7 @@ import org.junit.Test; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.core.IsInstanceOf.instanceOf; import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; @@ -57,7 +58,10 @@ public class LimitsTest { final Limits limits = (Limits) read; - assertFalse("Should have some usage present", limits.getDailyApiRequests().isUnknown()); + final Usage dailyApiRequests = limits.getDailyApiRequests(); + assertFalse("Should have some usage present", dailyApiRequests.isUnknown()); + assertFalse("Per application usage should be present", dailyApiRequests.getPerApplicationUsage().isEmpty()); + assertNotNull("'Camel Salesman' application usage should be present", dailyApiRequests.forApplication("Camel Salesman")); } @Test http://git-wip-us.apache.org/repos/asf/camel/blob/f0a4852b/components/camel-salesforce/camel-salesforce-component/src/test/resources/org/apache/camel/component/salesforce/api/dto/limits.json ---------------------------------------------------------------------- diff --git a/components/camel-salesforce/camel-salesforce-component/src/test/resources/org/apache/camel/component/salesforce/api/dto/limits.json b/components/camel-salesforce/camel-salesforce-component/src/test/resources/org/apache/camel/component/salesforce/api/dto/limits.json index c355c74..15b466c 100644 --- a/components/camel-salesforce/camel-salesforce-component/src/test/resources/org/apache/camel/component/salesforce/api/dto/limits.json +++ b/components/camel-salesforce/camel-salesforce-component/src/test/resources/org/apache/camel/component/salesforce/api/dto/limits.json @@ -9,7 +9,11 @@ }, "DailyApiRequests" : { "Max" : 15000, - "Remaining" : 14998 + "Remaining" : 14998, + "Camel Salesman" : { + "Max" : 1, + "Remaining" : 2 + } }, "DailyAsyncApexExecutions" : { "Max" : 250000, @@ -17,7 +21,11 @@ }, "DailyBulkApiRequests" : { "Max" : 5000, - "Remaining" : 5000 + "Remaining" : 5000, + "Camel Salesman" : { + "Max": 3, + "Remaining" : 4 + } }, "DailyDurableGenericStreamingApiEvents" : { "Max" : 10000,