diff --git a/blitline-image-client/src/main/java/com/blitline/image/Blitline.java b/blitline-image-client/src/main/java/com/blitline/image/Blitline.java index a74d7bb..0a59f8d 100644 --- a/blitline-image-client/src/main/java/com/blitline/image/Blitline.java +++ b/blitline-image-client/src/main/java/com/blitline/image/Blitline.java @@ -56,7 +56,7 @@ public class Blitline { /** * The API version this library will invoke. 1.21 added the ability to append arbitrary EXIF to saved images. */ - public static final String BLITLINE_API_VERSION = "1.21"; + public static final String BLITLINE_API_VERSION = "1.22"; private Blitline() { } diff --git a/blitline-image-client/src/main/java/com/blitline/image/BlitlineImageJob.java b/blitline-image-client/src/main/java/com/blitline/image/BlitlineImageJob.java index a539076..ac8e5ea 100644 --- a/blitline-image-client/src/main/java/com/blitline/image/BlitlineImageJob.java +++ b/blitline-image-client/src/main/java/com/blitline/image/BlitlineImageJob.java @@ -34,6 +34,7 @@ public class BlitlineImageJob implements Serializable { private final Boolean extendedMetadata; private final String postbackUrl; private final Map postbackHeaders; + private final Integer waitRetryDelay; private final List functions = new LinkedList(); public BlitlineImageJob(String applicationId, Object src, Boolean extendedMetadata, String postbackUrl) { @@ -42,6 +43,15 @@ public BlitlineImageJob(String applicationId, Object src, Boolean extendedMetada public BlitlineImageJob(String applicationId, Object src, Boolean extendedMetadata, String postbackUrl, Map postbackHeaders) { + this(applicationId, src, extendedMetadata, postbackUrl, postbackHeaders, null); + } + + public BlitlineImageJob(String applicationId, + Object src, + Boolean extendedMetadata, + String postbackUrl, + Map postbackHeaders, + Integer waitRetryDelay) { Validate.notNull(applicationId, "application ID must not be null"); this.applicationId = applicationId; @@ -53,7 +63,10 @@ public BlitlineImageJob(String applicationId, Object src, Boolean extendedMetada this.postbackUrl = postbackUrl; this.postbackHeaders = postbackHeaders == null ? null : Collections.unmodifiableMap(new HashMap( - postbackHeaders)); + postbackHeaders)); + + if (waitRetryDelay != null) Validate.inclusiveBetween(0, Integer.MAX_VALUE, waitRetryDelay); + this.waitRetryDelay = waitRetryDelay; } public String getApplicationId() { @@ -76,12 +89,22 @@ public Map getPostbackHeaders() { return postbackHeaders; } + /** + * Retrieve the value (in seconds) for wait_retry_delay which determines how long time Blitline will wait before it retries a failed job. + * If not set, then Blitline will not retry a failed job. + * + * @return The value (in seconds) for wait_retry_delay + */ + public Integer getWaitRetryDelay() { + return waitRetryDelay; + } + /** * Retrieve the value that will be set on the specified HTTP header on the job postback, or {@code null} if the named header is * not set. * * @param name the name of the HTTP header - * @return + * @return The value for the specified header (or null if the header is not set) */ public String getPostbackHeader(String name) { if (postbackHeaders == null) { @@ -124,6 +147,8 @@ public static class Builder { private Map postbackHeaders = new HashMap(); + private Integer waitRetryDelay; + /** * Constructs a {@code Builder} instance for a single {@code Job}. * @@ -249,6 +274,17 @@ public Builder withExtendedMetadata() { return this; } + /** + * Specifies that Blitline should retry a failed job after this amount of second. + * + * @param waitRetryDelay The wait retry delay in seconds + * @return this {@code Builder} object + */ + public Builder withWaitRetryDelay(Integer waitRetryDelay) { + this.waitRetryDelay = waitRetryDelay; + return this; + } + /** * Build the job and apply one or more functions. * @@ -258,7 +294,7 @@ public Builder withExtendedMetadata() { */ public BlitlineImageJob apply(Function... functions) { Map postbackHeaders = this.postbackHeaders.isEmpty() ? null : this.postbackHeaders; - BlitlineImageJob job = new BlitlineImageJob(applicationId, src, extendedMetadata, postbackUrl, postbackHeaders); + BlitlineImageJob job = new BlitlineImageJob(applicationId, src, extendedMetadata, postbackUrl, postbackHeaders, waitRetryDelay); job.apply(functions); return job; }