From f8ec7216eb191347a961ee14847d05adf9728ab0 Mon Sep 17 00:00:00 2001
From: Harish Gokavarapu
Date: Tue, 1 Aug 2017 12:02:22 -0700
Subject: [PATCH 1/8] t
---
src/main/java/com/box/sdk/utilities/BatchRequest.java | 7 +++++++
1 file changed, 7 insertions(+)
create mode 100644 src/main/java/com/box/sdk/utilities/BatchRequest.java
diff --git a/src/main/java/com/box/sdk/utilities/BatchRequest.java b/src/main/java/com/box/sdk/utilities/BatchRequest.java
new file mode 100644
index 000000000..9516755ba
--- /dev/null
+++ b/src/main/java/com/box/sdk/utilities/BatchRequest.java
@@ -0,0 +1,7 @@
+package com.box.sdk.utilities;
+
+/**
+ *
+ */
+public class BatchRequest {
+}
From 91c475ccd19d943efffeba11d0d872243d78a27e Mon Sep 17 00:00:00 2001
From: Harish Gokavarapu
Date: Mon, 14 Aug 2017 15:54:04 -0700
Subject: [PATCH 2/8] batch api initial support for list of BoxAPIRequests
---
.../box/sdk/example/BatchRequestExample.java | 86 +++++++++++++++++++
.../java/com/box/sdk/BatchAPIRequest.java | 83 ++++++++++++++++++
src/main/java/com/box/sdk/BoxAPIRequest.java | 32 +++++--
src/main/java/com/box/sdk/BoxAPIResponse.java | 10 +++
.../java/com/box/sdk/BoxAPIResponseEvent.java | 16 ++++
.../java/com/box/sdk/BoxCollaboration.java | 8 +-
src/main/java/com/box/sdk/BoxCollection.java | 4 +-
src/main/java/com/box/sdk/BoxComment.java | 4 +-
src/main/java/com/box/sdk/BoxDevicePin.java | 4 +-
src/main/java/com/box/sdk/BoxFile.java | 32 +++----
src/main/java/com/box/sdk/BoxFileVersion.java | 4 +-
.../com/box/sdk/BoxFileVersionLegalHold.java | 2 +-
.../com/box/sdk/BoxFileVersionRetention.java | 4 +-
src/main/java/com/box/sdk/BoxFolder.java | 24 +++---
src/main/java/com/box/sdk/BoxGroup.java | 10 +--
.../java/com/box/sdk/BoxGroupMembership.java | 2 +-
src/main/java/com/box/sdk/BoxItem.java | 4 +-
src/main/java/com/box/sdk/BoxJSONObject.java | 12 +++
src/main/java/com/box/sdk/BoxJSONRequest.java | 32 ++++++-
.../com/box/sdk/BoxLegalHoldAssignment.java | 4 +-
.../java/com/box/sdk/BoxLegalHoldPolicy.java | 8 +-
src/main/java/com/box/sdk/BoxRecents.java | 2 +-
.../java/com/box/sdk/BoxRetentionPolicy.java | 6 +-
.../box/sdk/BoxRetentionPolicyAssignment.java | 4 +-
src/main/java/com/box/sdk/BoxSearch.java | 2 +-
src/main/java/com/box/sdk/BoxTask.java | 6 +-
.../java/com/box/sdk/BoxTaskAssignment.java | 2 +-
src/main/java/com/box/sdk/BoxTrash.java | 10 +--
src/main/java/com/box/sdk/BoxUser.java | 14 +--
src/main/java/com/box/sdk/BoxWebHook.java | 4 +-
src/main/java/com/box/sdk/BoxWebLink.java | 4 +-
src/main/java/com/box/sdk/EventLog.java | 2 +-
src/main/java/com/box/sdk/EventStream.java | 2 +-
src/main/java/com/box/sdk/Metadata.java | 2 +-
.../java/com/box/sdk/MetadataTemplate.java | 6 +-
.../com/box/sdk/RealtimeServerConnection.java | 4 +-
src/main/java/com/box/sdk/URLTemplate.java | 6 +-
.../java/com/box/sdk/http/HttpHeaders.java | 5 ++
.../com/box/sdk/utilities/BatchRequest.java | 7 --
src/test/java/com/box/sdk/BoxGroupTest.java | 2 +-
40 files changed, 364 insertions(+), 111 deletions(-)
create mode 100644 src/example/java/com/box/sdk/example/BatchRequestExample.java
create mode 100644 src/main/java/com/box/sdk/BatchAPIRequest.java
create mode 100644 src/main/java/com/box/sdk/BoxAPIResponseEvent.java
delete mode 100644 src/main/java/com/box/sdk/utilities/BatchRequest.java
diff --git a/src/example/java/com/box/sdk/example/BatchRequestExample.java b/src/example/java/com/box/sdk/example/BatchRequestExample.java
new file mode 100644
index 000000000..4f02b0864
--- /dev/null
+++ b/src/example/java/com/box/sdk/example/BatchRequestExample.java
@@ -0,0 +1,86 @@
+package com.box.sdk.utilities;
+
+import java.io.FileReader;
+import java.io.IOException;
+import java.io.Reader;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import com.box.sdk.BatchAPIRequest;
+import com.box.sdk.BoxAPIRequest;
+import com.box.sdk.BoxAPIResponse;
+import com.box.sdk.BoxConfig;
+import com.box.sdk.BoxDeveloperEditionAPIConnection;
+import com.box.sdk.BoxFolder;
+import com.box.sdk.BoxJSONRequest;
+import com.box.sdk.BoxUser;
+import com.box.sdk.IAccessTokenCache;
+import com.box.sdk.InMemoryLRUAccessTokenCache;
+import com.box.sdk.http.HttpMethod;
+import com.eclipsesource.json.JsonObject;
+
+/**
+ *
+ */
+public class BatchRequestExample {
+
+ private static final int MAX_CACHE_ENTRIES = 100;
+ private static final String APP_USER_NAME = "BATCH-TEST-APP-USER-NAME";
+
+
+ public static void main(String[] args) throws IOException {
+ // Turn off logging to prevent polluting the output.
+ Logger.getLogger("com.box.sdk").setLevel(Level.OFF);
+
+
+ //It is a best practice to use an access token cache to prevent unneeded requests to Box for access tokens.
+ //For production applications it is recommended to use a distributed cache like Memcached or Redis, and to
+ //implement IAccessTokenCache to store and retrieve access tokens appropriately for your environment.
+ IAccessTokenCache accessTokenCache = new InMemoryLRUAccessTokenCache(MAX_CACHE_ENTRIES);
+
+ Reader reader = new FileReader("src/example/config/config2.json");
+ BoxConfig boxConfig = BoxConfig.readFrom(reader);
+
+ BoxDeveloperEditionAPIConnection api = BoxDeveloperEditionAPIConnection.getAppEnterpriseConnection(
+ boxConfig, accessTokenCache);
+
+ List requests = new ArrayList();
+
+ //Get current user request
+ URL getMeURL = BoxUser.GET_ME_URL.build(api.getBaseURL());
+ BoxAPIRequest getMeRequest = new BoxAPIRequest(getMeURL, HttpMethod.GET);
+ requests.add(getMeRequest);
+
+ //Create App User Request
+ URL createUserURL = BoxUser.USERS_URL_TEMPLATE.build(api.getBaseURL());
+ BoxJSONRequest createAppUserRequest = new BoxJSONRequest(createUserURL, HttpMethod.POST);
+ JsonObject requestJSON = new JsonObject();
+ requestJSON.add("name", APP_USER_NAME);
+ requestJSON.add("is_platform_access_only", true);
+ createAppUserRequest.setBody(requestJSON.toString());
+ requests.add(createAppUserRequest);
+
+ //Get Root Folder Request
+ URL getRootFolderURL = BoxFolder.FOLDER_INFO_URL_TEMPLATE.build(api.getBaseURL(), 0);
+ BoxAPIRequest getRootFolderRequest = new BoxAPIRequest(getRootFolderURL, HttpMethod.GET);
+ requests.add(getRootFolderRequest);
+
+ BatchAPIRequest batchRequest = new BatchAPIRequest(api);
+ List responses = batchRequest.execute(requests);
+
+ System.out.println("GET ME RESPONSE:");
+ System.out.println("Response Code: " + responses.get(0).getResponseCode());
+ System.out.println("Response: " + responses.get(0).getBodyAsString());
+
+ System.out.println("CREATE APP USER RESPONSE:");
+ System.out.println("Response Code: " + responses.get(1).getResponseCode());
+ System.out.println("Response: " + responses.get(1).getBodyAsString());
+
+ System.out.println("GET ROOT FOLDER RESPONSE:");
+ System.out.println("Response Code: " + responses.get(2).getResponseCode());
+ System.out.println("Response: " + responses.get(2).getBodyAsString());
+ }
+}
diff --git a/src/main/java/com/box/sdk/BatchAPIRequest.java b/src/main/java/com/box/sdk/BatchAPIRequest.java
new file mode 100644
index 000000000..b3121bf3a
--- /dev/null
+++ b/src/main/java/com/box/sdk/BatchAPIRequest.java
@@ -0,0 +1,83 @@
+package com.box.sdk;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.logging.Logger;
+
+import com.box.sdk.http.HttpHeaders;
+import com.box.sdk.http.HttpMethod;
+import com.eclipsesource.json.JsonArray;
+import com.eclipsesource.json.JsonObject;
+import com.eclipsesource.json.JsonValue;
+import org.jose4j.json.internal.json_simple.JSONArray;
+import org.jose4j.json.internal.json_simple.JSONObject;
+
+/**
+ *
+ */
+public class BatchAPIRequest extends BoxJSONRequest{
+ private static final Logger LOGGER = Logger.getLogger(BoxAPIRequest.class.getName());
+ public static final URLTemplate RECENTS_URL_TEMPLATE = new URLTemplate("batch");
+ private final BoxAPIConnection api;
+
+ /**
+ * Constructs an authenticated BatchRequest using a provided BoxAPIConnection.
+ * @param api an API connection for authenticating the request.
+ */
+ public BatchAPIRequest(BoxAPIConnection api) {
+ super(api, RECENTS_URL_TEMPLATE.build(api.getBaseURL()), HttpMethod.GET);
+ this.api = api;
+ }
+
+ /**
+ * Execute a set of API calls as batch request
+ * @return
+ */
+ public List execute(List requests) {
+ JsonObject body = new JsonObject();
+ JsonArray requestsJSONArray = new JsonArray();
+ for(BoxAPIRequest request: requests) {
+ JsonObject batchRequest = new JsonObject();
+ batchRequest.add("method", request.getMethod());
+ batchRequest.add("relative_url", request.getUrl().toString().substring(this.api.getBaseURL().length()-1));
+ //If the actual request has a JSON body then add it to vatch request
+ if (request instanceof BoxJSONRequest) {
+ BoxJSONRequest jsonRequest = (BoxJSONRequest) request;
+ batchRequest.add("body", jsonRequest.getBodyAsJsonObject());
+ }
+ //Add any headers that are in the request, except Authorization
+ if (request.getHeaders() != null) {
+ JsonObject batchRequestHeaders = new JsonObject();
+ for(RequestHeader header: request.getHeaders()) {
+ if (header.getKey() != null && !header.getKey().isEmpty()
+ && HttpHeaders.AUTHORIZATION.equals(header.getKey())) {
+ batchRequestHeaders.add(header.getKey(), header.getValue());
+ }
+ }
+ batchRequest.add("headers", batchRequestHeaders);
+ }
+
+ //Add the request to array
+ requestsJSONArray.add(batchRequest);
+ }
+ //Add the requests array to body
+ body.add("requests", requestsJSONArray);
+ super.setBody(body);
+
+ BoxJSONResponse batchResponse = (BoxJSONResponse) super.send();
+ JsonObject responseJSON = JsonObject.readFrom(batchResponse.getJSON());
+ List responses = new ArrayList();
+ Iterator iterator = responseJSON.get("responses").asArray().iterator();
+ while(iterator.hasNext()) {
+ JsonObject jsonResponse = iterator.next().asObject();
+ BoxAPIResponse response =
+ new BoxAPIResponse(jsonResponse.get("status").asInt(), jsonResponse.get("response").toString());
+ responses.add(response);
+ }
+ return responses;
+ }
+}
diff --git a/src/main/java/com/box/sdk/BoxAPIRequest.java b/src/main/java/com/box/sdk/BoxAPIRequest.java
index e921bb50f..3b7acd679 100644
--- a/src/main/java/com/box/sdk/BoxAPIRequest.java
+++ b/src/main/java/com/box/sdk/BoxAPIRequest.java
@@ -14,6 +14,7 @@
import java.util.logging.Level;
import java.util.logging.Logger;
+import com.box.sdk.http.HttpHeaders;
import com.box.sdk.http.HttpMethod;
/**
@@ -81,11 +82,20 @@ public BoxAPIRequest(BoxAPIConnection api, URL url, String method) {
/**
* Constructs an authenticated BoxAPIRequest using a provided BoxAPIConnection.
* @param api an API connection for authenticating the request.
- * @param uploadPartEndpoint the URL of the request.
+ * @param url the URL of the request.
* @param method the HTTP method of the request.
*/
- public BoxAPIRequest(BoxAPIConnection api, URL uploadPartEndpoint, HttpMethod method) {
- this(api, uploadPartEndpoint, method.name());
+ public BoxAPIRequest(BoxAPIConnection api, URL url, HttpMethod method) {
+ this(api, url, method.name());
+ }
+
+ /**
+ * Constructs an authenticated BoxAPIRequest
+ * @param url the URL of the request.
+ * @param method the HTTP method of the request.
+ */
+ public BoxAPIRequest(URL url, HttpMethod method) {
+ this(url, method.name());
}
/**
@@ -182,6 +192,18 @@ public URL getUrl() {
return this.url;
}
+ /**
+ * Gets the http method of the request.
+ *
+ * @return
+ */
+ public String getMethod() {
+ return method;
+ }
+
+ public List getHeaders() {
+ return this.headers;
+ }
/**
* Sends this request and returns a BoxAPIResponse containing the server's response.
*
@@ -377,7 +399,7 @@ private BoxAPIResponse trySend(ProgressListener listener) {
if (this.api != null) {
if (this.shouldAuthenticate) {
- connection.addRequestProperty("Authorization", "Bearer " + this.api.lockAccessToken());
+ connection.addRequestProperty(HttpHeaders.AUTHORIZATION, "Bearer " + this.api.lockAccessToken());
}
connection.setRequestProperty("User-Agent", this.api.getUserAgent());
if (this.api.getProxy() != null) {
@@ -533,7 +555,7 @@ private static boolean isResponseRedirect(int responseCode) {
return (responseCode == 301 || responseCode == 302);
}
- private final class RequestHeader {
+ public final class RequestHeader {
private final String key;
private final String value;
diff --git a/src/main/java/com/box/sdk/BoxAPIResponse.java b/src/main/java/com/box/sdk/BoxAPIResponse.java
index 424ae94b5..8f9abce6e 100644
--- a/src/main/java/com/box/sdk/BoxAPIResponse.java
+++ b/src/main/java/com/box/sdk/BoxAPIResponse.java
@@ -50,6 +50,12 @@ public BoxAPIResponse() {
this.connection = null;
}
+ public BoxAPIResponse(int responseCode, String body) {
+ this.connection = null;
+ this.responseCode = responseCode;
+ this.bodyString = body;
+ }
+
/**
* Constructs a BoxAPIResponse using an HttpURLConnection.
* @param connection a connection that has already sent a request to the API.
@@ -106,6 +112,10 @@ public InputStream getBody() {
return this.getBody(null);
}
+ public String getBodyAsString() {
+ return this.bodyString;
+ }
+
/**
* Gets an InputStream for reading this response's body which will report its read progress to a ProgressListener.
* @param listener a listener for monitoring the read progress of the body.
diff --git a/src/main/java/com/box/sdk/BoxAPIResponseEvent.java b/src/main/java/com/box/sdk/BoxAPIResponseEvent.java
new file mode 100644
index 000000000..6648b9a02
--- /dev/null
+++ b/src/main/java/com/box/sdk/BoxAPIResponseEvent.java
@@ -0,0 +1,16 @@
+package com.box.sdk;
+
+/**
+ *
+ */
+public interface BoxAPIResponseEvent {
+ /**
+ * Called on success
+ */
+ void onSuccess();
+
+ /**
+ * Called on failure
+ */
+ void onFailure();
+}
diff --git a/src/main/java/com/box/sdk/BoxCollaboration.java b/src/main/java/com/box/sdk/BoxCollaboration.java
index 0fa86e36c..aadf43e7f 100644
--- a/src/main/java/com/box/sdk/BoxCollaboration.java
+++ b/src/main/java/com/box/sdk/BoxCollaboration.java
@@ -20,10 +20,10 @@
*/
@BoxResourceType("collaboration")
public class BoxCollaboration extends BoxResource {
- private static final URLTemplate COLLABORATIONS_URL_TEMPLATE = new URLTemplate("collaborations");
- private static final URLTemplate PENDING_COLLABORATIONS_URL = new URLTemplate("collaborations?status=pending");
- private static final URLTemplate COLLABORATION_URL_TEMPLATE = new URLTemplate("collaborations/%s");
- private static final URLTemplate GET_ALL_FILE_COLLABORATIONS_URL = new URLTemplate("files/%s/collaborations/");
+ public static final URLTemplate COLLABORATIONS_URL_TEMPLATE = new URLTemplate("collaborations");
+ public static final URLTemplate PENDING_COLLABORATIONS_URL = new URLTemplate("collaborations?status=pending");
+ public static final URLTemplate COLLABORATION_URL_TEMPLATE = new URLTemplate("collaborations/%s");
+ public static final URLTemplate GET_ALL_FILE_COLLABORATIONS_URL = new URLTemplate("files/%s/collaborations/");
/**
* Constructs a BoxCollaboration for a collaboration with a given ID.
diff --git a/src/main/java/com/box/sdk/BoxCollection.java b/src/main/java/com/box/sdk/BoxCollection.java
index 08cd23294..ab4ffad07 100644
--- a/src/main/java/com/box/sdk/BoxCollection.java
+++ b/src/main/java/com/box/sdk/BoxCollection.java
@@ -18,8 +18,8 @@
@BoxResourceType("collection")
public class BoxCollection extends BoxResource implements Iterable {
- private static final URLTemplate GET_COLLECTIONS_URL_TEMPLATE = new URLTemplate("collections/");
- private static final URLTemplate GET_COLLECTION_ITEMS_URL = new URLTemplate("collections/%s/items/");
+ public static final URLTemplate GET_COLLECTIONS_URL_TEMPLATE = new URLTemplate("collections/");
+ public static final URLTemplate GET_COLLECTION_ITEMS_URL = new URLTemplate("collections/%s/items/");
/**
* Constructs a BoxCollection for a collection with a given ID.
diff --git a/src/main/java/com/box/sdk/BoxComment.java b/src/main/java/com/box/sdk/BoxComment.java
index c72475ec3..5a7ddae23 100644
--- a/src/main/java/com/box/sdk/BoxComment.java
+++ b/src/main/java/com/box/sdk/BoxComment.java
@@ -19,8 +19,8 @@
@BoxResourceType("comment")
public class BoxComment extends BoxResource {
private static final Pattern MENTION_REGEX = Pattern.compile("@\\[.+:.+\\]");
- private static final URLTemplate ADD_COMMENT_URL_TEMPLATE = new URLTemplate("comments");
- private static final URLTemplate COMMENT_URL_TEMPLATE = new URLTemplate("comments/%s");
+ public static final URLTemplate ADD_COMMENT_URL_TEMPLATE = new URLTemplate("comments");
+ public static final URLTemplate COMMENT_URL_TEMPLATE = new URLTemplate("comments/%s");
/**
* Constructs a BoxComment for a comment with a given ID.
diff --git a/src/main/java/com/box/sdk/BoxDevicePin.java b/src/main/java/com/box/sdk/BoxDevicePin.java
index 27184be06..4eaf94eef 100644
--- a/src/main/java/com/box/sdk/BoxDevicePin.java
+++ b/src/main/java/com/box/sdk/BoxDevicePin.java
@@ -20,12 +20,12 @@ public class BoxDevicePin extends BoxResource {
/**
* The URL template used for operation with the device pin.
*/
- private static final URLTemplate DEVICE_PIN_URL_TEMPLATE = new URLTemplate("device_pinners/%s");
+ public static final URLTemplate DEVICE_PIN_URL_TEMPLATE = new URLTemplate("device_pinners/%s");
/**
* The URL template used to get all the device pins within a given enterprise.
*/
- private static final URLTemplate ENTERPRISE_DEVICE_PINS_TEMPLATE = new URLTemplate("enterprises/%s/device_pinners");
+ public static final URLTemplate ENTERPRISE_DEVICE_PINS_TEMPLATE = new URLTemplate("enterprises/%s/device_pinners");
/**
* Default limit of the device info entries per one response page.
diff --git a/src/main/java/com/box/sdk/BoxFile.java b/src/main/java/com/box/sdk/BoxFile.java
index 14c5797c0..525d67e90 100644
--- a/src/main/java/com/box/sdk/BoxFile.java
+++ b/src/main/java/com/box/sdk/BoxFile.java
@@ -55,24 +55,24 @@ public enum ThumbnailFileType {
JPG
}
- private static final URLTemplate FILE_URL_TEMPLATE = new URLTemplate("files/%s");
- private static final URLTemplate CONTENT_URL_TEMPLATE = new URLTemplate("files/%s/content");
- private static final URLTemplate VERSIONS_URL_TEMPLATE = new URLTemplate("files/%s/versions");
- private static final URLTemplate COPY_URL_TEMPLATE = new URLTemplate("files/%s/copy");
- private static final URLTemplate ADD_COMMENT_URL_TEMPLATE = new URLTemplate("comments");
- private static final URLTemplate GET_COMMENTS_URL_TEMPLATE = new URLTemplate("files/%s/comments");
- private static final URLTemplate METADATA_URL_TEMPLATE = new URLTemplate("files/%s/metadata/%s/%s");
- private static final URLTemplate ADD_TASK_URL_TEMPLATE = new URLTemplate("tasks");
- private static final URLTemplate GET_TASKS_URL_TEMPLATE = new URLTemplate("files/%s/tasks");
- private static final URLTemplate GET_THUMBNAIL_PNG_TEMPLATE = new URLTemplate("files/%s/thumbnail.png");
- private static final URLTemplate GET_THUMBNAIL_JPG_TEMPLATE = new URLTemplate("files/%s/thumbnail.jpg");
- private static final URLTemplate UPLOAD_SESSION_URL_TEMPLATE = new URLTemplate("files/%s/upload_sessions");
- private static final URLTemplate UPLOAD_SESSION_STATUS_URL_TEMPLATE = new URLTemplate(
+ public static final URLTemplate FILE_URL_TEMPLATE = new URLTemplate("files/%s");
+ public static final URLTemplate CONTENT_URL_TEMPLATE = new URLTemplate("files/%s/content");
+ public static final URLTemplate VERSIONS_URL_TEMPLATE = new URLTemplate("files/%s/versions");
+ public static final URLTemplate COPY_URL_TEMPLATE = new URLTemplate("files/%s/copy");
+ public static final URLTemplate ADD_COMMENT_URL_TEMPLATE = new URLTemplate("comments");
+ public static final URLTemplate GET_COMMENTS_URL_TEMPLATE = new URLTemplate("files/%s/comments");
+ public static final URLTemplate METADATA_URL_TEMPLATE = new URLTemplate("files/%s/metadata/%s/%s");
+ public static final URLTemplate ADD_TASK_URL_TEMPLATE = new URLTemplate("tasks");
+ public static final URLTemplate GET_TASKS_URL_TEMPLATE = new URLTemplate("files/%s/tasks");
+ public static final URLTemplate GET_THUMBNAIL_PNG_TEMPLATE = new URLTemplate("files/%s/thumbnail.png");
+ public static final URLTemplate GET_THUMBNAIL_JPG_TEMPLATE = new URLTemplate("files/%s/thumbnail.jpg");
+ public static final URLTemplate UPLOAD_SESSION_URL_TEMPLATE = new URLTemplate("files/%s/upload_sessions");
+ public static final URLTemplate UPLOAD_SESSION_STATUS_URL_TEMPLATE = new URLTemplate(
"files/upload_sessions/%s/status");
- private static final URLTemplate ABORT_UPLOAD_SESSION_URL_TEMPLATE = new URLTemplate("files/upload_sessions/%s");
+ public static final URLTemplate ABORT_UPLOAD_SESSION_URL_TEMPLATE = new URLTemplate("files/upload_sessions/%s");
- private static final URLTemplate ADD_COLLABORATION_URL = new URLTemplate("collaborations");
- private static final URLTemplate GET_ALL_FILE_COLLABORATIONS_URL = new URLTemplate("files/%s/collaborations");
+ public static final URLTemplate ADD_COLLABORATION_URL = new URLTemplate("collaborations");
+ public static final URLTemplate GET_ALL_FILE_COLLABORATIONS_URL = new URLTemplate("files/%s/collaborations");
private static final int BUFFER_SIZE = 8192;
private static final int GET_COLLABORATORS_PAGE_SIZE = 1000;
diff --git a/src/main/java/com/box/sdk/BoxFileVersion.java b/src/main/java/com/box/sdk/BoxFileVersion.java
index e5792ea00..059efe848 100644
--- a/src/main/java/com/box/sdk/BoxFileVersion.java
+++ b/src/main/java/com/box/sdk/BoxFileVersion.java
@@ -15,8 +15,8 @@
*/
@BoxResourceType("file_version")
public class BoxFileVersion extends BoxResource {
- private static final URLTemplate CONTENT_URL_TEMPLATE = new URLTemplate("files/%s/content?version=%s");
- private static final URLTemplate VERSION_URL_TEMPLATE = new URLTemplate("files/%s/versions/%s");
+ public static final URLTemplate CONTENT_URL_TEMPLATE = new URLTemplate("files/%s/content?version=%s");
+ public static final URLTemplate VERSION_URL_TEMPLATE = new URLTemplate("files/%s/versions/%s");
private static final int BUFFER_SIZE = 8192;
private String fileID;
diff --git a/src/main/java/com/box/sdk/BoxFileVersionLegalHold.java b/src/main/java/com/box/sdk/BoxFileVersionLegalHold.java
index 4afd48cd3..6766fa05f 100644
--- a/src/main/java/com/box/sdk/BoxFileVersionLegalHold.java
+++ b/src/main/java/com/box/sdk/BoxFileVersionLegalHold.java
@@ -21,7 +21,7 @@ public class BoxFileVersionLegalHold extends BoxResource {
* The URL template used for operation with file version legal hold with given ID.
* @see #getInfo(String...)
*/
- private static final URLTemplate FILE_VERSION_HOLD_URL_TEMPLATE = new URLTemplate("file_version_legal_holds/%s");
+ public static final URLTemplate FILE_VERSION_HOLD_URL_TEMPLATE = new URLTemplate("file_version_legal_holds/%s");
/**
* Constructs a file version legal hold with a given ID.
diff --git a/src/main/java/com/box/sdk/BoxFileVersionRetention.java b/src/main/java/com/box/sdk/BoxFileVersionRetention.java
index a2615473c..b477991a9 100644
--- a/src/main/java/com/box/sdk/BoxFileVersionRetention.java
+++ b/src/main/java/com/box/sdk/BoxFileVersionRetention.java
@@ -25,12 +25,12 @@ public class BoxFileVersionRetention extends BoxResource {
/**
* @see #getInfo(String...)
*/
- private static final URLTemplate RETENTION_URL_TEMPLATE = new URLTemplate("file_version_retentions/%s");
+ public static final URLTemplate RETENTION_URL_TEMPLATE = new URLTemplate("file_version_retentions/%s");
/**
* The URL template used for operation with file version retentions.
*/
- private static final URLTemplate ALL_RETENTIONS_URL_TEMPLATE = new URLTemplate("file_version_retentions");
+ public static final URLTemplate ALL_RETENTIONS_URL_TEMPLATE = new URLTemplate("file_version_retentions");
/**
* The default limit of entries per response.
diff --git a/src/main/java/com/box/sdk/BoxFolder.java b/src/main/java/com/box/sdk/BoxFolder.java
index 3b9c9a4a4..57c8e3036 100644
--- a/src/main/java/com/box/sdk/BoxFolder.java
+++ b/src/main/java/com/box/sdk/BoxFolder.java
@@ -33,18 +33,18 @@ public class BoxFolder extends BoxItem implements Iterable {
"item_status", "item_collection", "sync_state", "has_collaborations", "permissions", "tags",
"can_non_owners_invite", "collections", "watermark_info"};
- private static final URLTemplate CREATE_FOLDER_URL = new URLTemplate("folders");
- private static final URLTemplate CREATE_WEB_LINK_URL = new URLTemplate("web_links");
- private static final URLTemplate COPY_FOLDER_URL = new URLTemplate("folders/%s/copy");
- private static final URLTemplate DELETE_FOLDER_URL = new URLTemplate("folders/%s?recursive=%b");
- private static final URLTemplate FOLDER_INFO_URL_TEMPLATE = new URLTemplate("folders/%s");
- private static final URLTemplate UPLOAD_FILE_URL = new URLTemplate("files/content");
- private static final URLTemplate ADD_COLLABORATION_URL = new URLTemplate("collaborations");
- private static final URLTemplate GET_COLLABORATIONS_URL = new URLTemplate("folders/%s/collaborations");
- private static final URLTemplate GET_ITEMS_URL = new URLTemplate("folders/%s/items/");
- private static final URLTemplate SEARCH_URL_TEMPLATE = new URLTemplate("search");
- private static final URLTemplate METADATA_URL_TEMPLATE = new URLTemplate("folders/%s/metadata/%s/%s");
- private static final URLTemplate UPLOAD_SESSION_URL_TEMPLATE = new URLTemplate("files/upload_sessions");
+ public static final URLTemplate CREATE_FOLDER_URL = new URLTemplate("folders");
+ public static final URLTemplate CREATE_WEB_LINK_URL = new URLTemplate("web_links");
+ public static final URLTemplate COPY_FOLDER_URL = new URLTemplate("folders/%s/copy");
+ public static final URLTemplate DELETE_FOLDER_URL = new URLTemplate("folders/%s?recursive=%b");
+ public static final URLTemplate FOLDER_INFO_URL_TEMPLATE = new URLTemplate("folders/%s");
+ public static final URLTemplate UPLOAD_FILE_URL = new URLTemplate("files/content");
+ public static final URLTemplate ADD_COLLABORATION_URL = new URLTemplate("collaborations");
+ public static final URLTemplate GET_COLLABORATIONS_URL = new URLTemplate("folders/%s/collaborations");
+ public static final URLTemplate GET_ITEMS_URL = new URLTemplate("folders/%s/items/");
+ public static final URLTemplate SEARCH_URL_TEMPLATE = new URLTemplate("search");
+ public static final URLTemplate METADATA_URL_TEMPLATE = new URLTemplate("folders/%s/metadata/%s/%s");
+ public static final URLTemplate UPLOAD_SESSION_URL_TEMPLATE = new URLTemplate("files/upload_sessions");
/**
* Constructs a BoxFolder for a folder with a given ID.
diff --git a/src/main/java/com/box/sdk/BoxGroup.java b/src/main/java/com/box/sdk/BoxGroup.java
index b8f110973..62e78ab25 100644
--- a/src/main/java/com/box/sdk/BoxGroup.java
+++ b/src/main/java/com/box/sdk/BoxGroup.java
@@ -23,27 +23,27 @@ public class BoxGroup extends BoxCollaborator {
/**
* @see #getAllGroups(BoxAPIConnection, String...)
*/
- private static final URLTemplate GROUPS_URL_TEMPLATE = new URLTemplate("groups");
+ public static final URLTemplate GROUPS_URL_TEMPLATE = new URLTemplate("groups");
/**
* @see #getInfo()
*/
- private static final URLTemplate GROUP_URL_TEMPLATE = new URLTemplate("groups/%s");
+ public static final URLTemplate GROUP_URL_TEMPLATE = new URLTemplate("groups/%s");
/**
* @see #getMemberships()
*/
- private static final URLTemplate MEMBERSHIPS_URL_TEMPLATE = new URLTemplate("groups/%s/memberships");
+ public static final URLTemplate MEMBERSHIPS_URL_TEMPLATE = new URLTemplate("groups/%s/memberships");
/**
* @see #addMembership(BoxUser)
*/
- private static final URLTemplate ADD_MEMBERSHIP_URL_TEMPLATE = new URLTemplate("group_memberships");
+ public static final URLTemplate ADD_MEMBERSHIP_URL_TEMPLATE = new URLTemplate("group_memberships");
/**
* @see #getCollaborations()
*/
- private static final URLTemplate COLLABORATIONS_URL_TEMPLATE = new URLTemplate("groups/%s/collaborations");
+ public static final URLTemplate COLLABORATIONS_URL_TEMPLATE = new URLTemplate("groups/%s/collaborations");
/**
* Constructs a BoxGroup for a group with a given ID.
diff --git a/src/main/java/com/box/sdk/BoxGroupMembership.java b/src/main/java/com/box/sdk/BoxGroupMembership.java
index 8d4781867..2ef92b251 100644
--- a/src/main/java/com/box/sdk/BoxGroupMembership.java
+++ b/src/main/java/com/box/sdk/BoxGroupMembership.java
@@ -21,7 +21,7 @@ public class BoxGroupMembership extends BoxResource {
* The URL template for all group membership requests.
* @see #getInfo()
*/
- private static final URLTemplate MEMBERSHIP_URL_TEMPLATE = new URLTemplate("group_memberships/%s");
+ public static final URLTemplate MEMBERSHIP_URL_TEMPLATE = new URLTemplate("group_memberships/%s");
/**
* Constructs a BoxGroupMembership for a group membership with a given ID.
diff --git a/src/main/java/com/box/sdk/BoxItem.java b/src/main/java/com/box/sdk/BoxItem.java
index dd1174b76..a5692ccbc 100644
--- a/src/main/java/com/box/sdk/BoxItem.java
+++ b/src/main/java/com/box/sdk/BoxItem.java
@@ -26,12 +26,12 @@ public abstract class BoxItem extends BoxResource {
"folder_upload_email", "item_collection", "sync_state", "has_collaborations", "can_non_owners_invite",
"file_version", "collections"};
- private static final URLTemplate SHARED_ITEM_URL_TEMPLATE = new URLTemplate("shared_items");
+ public static final URLTemplate SHARED_ITEM_URL_TEMPLATE = new URLTemplate("shared_items");
/**
* Url template for operations with watermarks.
*/
- private static final URLTemplate WATERMARK_URL_TEMPLATE = new URLTemplate("/watermark");
+ public static final URLTemplate WATERMARK_URL_TEMPLATE = new URLTemplate("/watermark");
/**
* Constructs a BoxItem for an item with a given ID.
diff --git a/src/main/java/com/box/sdk/BoxJSONObject.java b/src/main/java/com/box/sdk/BoxJSONObject.java
index 09bd9294e..f380eb504 100644
--- a/src/main/java/com/box/sdk/BoxJSONObject.java
+++ b/src/main/java/com/box/sdk/BoxJSONObject.java
@@ -72,6 +72,18 @@ public String getPendingChanges() {
return jsonObject.toString();
}
+ /**
+ * Gets a JSON string containing any pending changes to this object that can be sent back to the Box API.
+ * @return a JSON string containing the pending changes.
+ */
+ public JsonObject getPendingChangesAsJsonObject() {
+ JsonObject jsonObject = this.getPendingJSONObject();
+ if (jsonObject == null) {
+ return null;
+ }
+ return jsonObject;
+ }
+
/**
* Invoked with a JSON member whenever this object is updated or created from a JSON object.
*
diff --git a/src/main/java/com/box/sdk/BoxJSONRequest.java b/src/main/java/com/box/sdk/BoxJSONRequest.java
index 1c86b1241..9c3c2e991 100644
--- a/src/main/java/com/box/sdk/BoxJSONRequest.java
+++ b/src/main/java/com/box/sdk/BoxJSONRequest.java
@@ -3,6 +3,7 @@
import java.net.URL;
import com.box.sdk.http.HttpMethod;
+import com.eclipsesource.json.JsonObject;
/**
* Used to make HTTP requests containing JSON to the Box API.
@@ -11,7 +12,7 @@
* automatically sets the appropriate "Content-Type" HTTP headers and allows the JSON in the request to be logged.
*/
public class BoxJSONRequest extends BoxAPIRequest {
- private String json;
+ private JsonObject json;
/**
* Constructs an authenticated BoxJSONRequest using a provided BoxAPIConnection.
@@ -21,7 +22,6 @@ public class BoxJSONRequest extends BoxAPIRequest {
*/
public BoxJSONRequest(BoxAPIConnection api, URL url, String method) {
super(api, url, method);
-
this.addHeader("Content-Type", "application/json");
}
@@ -33,7 +33,16 @@ public BoxJSONRequest(BoxAPIConnection api, URL url, String method) {
*/
public BoxJSONRequest(BoxAPIConnection api, URL url, HttpMethod method) {
super(api, url, method);
+ this.addHeader("Content-Type", "application/json");
+ }
+ /**
+ * Constructs an authenticated BoxJSONRequest
+ * @param url the URL of the request.
+ * @param method the HTTP method of the request.
+ */
+ public BoxJSONRequest(URL url, HttpMethod method) {
+ super(url, method);
this.addHeader("Content-Type", "application/json");
}
@@ -44,11 +53,28 @@ public BoxJSONRequest(BoxAPIConnection api, URL url, HttpMethod method) {
@Override
public void setBody(String body) {
super.setBody(body);
+ this.json = JsonObject.readFrom(body);
+ }
+
+ /**
+ * Sets the body of this request to a given JsonObject.
+ * @param body the JsonObject to use as the body.
+ */
+ public void setBody(JsonObject body) {
+ super.setBody(body.toString());
this.json = body;
}
+ /**
+ *
+ * @return
+ */
+ public JsonObject getBodyAsJsonObject() {
+ return this.json;
+ }
+
@Override
protected String bodyToString() {
- return this.json;
+ return this.json.asString();
}
}
diff --git a/src/main/java/com/box/sdk/BoxLegalHoldAssignment.java b/src/main/java/com/box/sdk/BoxLegalHoldAssignment.java
index 1c24c6305..b312c1a6c 100644
--- a/src/main/java/com/box/sdk/BoxLegalHoldAssignment.java
+++ b/src/main/java/com/box/sdk/BoxLegalHoldAssignment.java
@@ -43,12 +43,12 @@ public class BoxLegalHoldAssignment extends BoxResource {
/**
* The URL template used for operation with legal hold policy assignments.
*/
- private static final URLTemplate ASSIGNMENTS_URL_TEMPLATE = new URLTemplate("legal_hold_policy_assignments");
+ public static final URLTemplate ASSIGNMENTS_URL_TEMPLATE = new URLTemplate("legal_hold_policy_assignments");
/**
* The URL template used for operation with legal hold policy assignment with given ID.
*/
- private static final URLTemplate LEGAL_HOLD_ASSIGNMENT_URL_TEMPLATE
+ public static final URLTemplate LEGAL_HOLD_ASSIGNMENT_URL_TEMPLATE
= new URLTemplate("legal_hold_policy_assignments/%s");
/**
diff --git a/src/main/java/com/box/sdk/BoxLegalHoldPolicy.java b/src/main/java/com/box/sdk/BoxLegalHoldPolicy.java
index 1a8bb1957..85ed9c62a 100644
--- a/src/main/java/com/box/sdk/BoxLegalHoldPolicy.java
+++ b/src/main/java/com/box/sdk/BoxLegalHoldPolicy.java
@@ -20,11 +20,11 @@
@BoxResourceType("legal_hold")
public class BoxLegalHoldPolicy extends BoxResource {
- private static final URLTemplate LEGAL_HOLD_URL_TEMPLATE = new URLTemplate("legal_hold_policies/%s");
- private static final URLTemplate ALL_LEGAL_HOLD_URL_TEMPLATE = new URLTemplate("legal_hold_policies");
- private static final URLTemplate LEGAL_HOLD_ASSIGNMENTS_URL_TEMPLATE
+ public static final URLTemplate LEGAL_HOLD_URL_TEMPLATE = new URLTemplate("legal_hold_policies/%s");
+ public static final URLTemplate ALL_LEGAL_HOLD_URL_TEMPLATE = new URLTemplate("legal_hold_policies");
+ public static final URLTemplate LEGAL_HOLD_ASSIGNMENTS_URL_TEMPLATE
= new URLTemplate("legal_hold_policies/%s/assignments");
- private static final URLTemplate LIST_OF_FILE_VERSION_HOLDS_URL_TEMPLATE
+ public static final URLTemplate LIST_OF_FILE_VERSION_HOLDS_URL_TEMPLATE
= new URLTemplate("file_version_legal_holds");
private static final int DEFAULT_LIMIT = 100;
diff --git a/src/main/java/com/box/sdk/BoxRecents.java b/src/main/java/com/box/sdk/BoxRecents.java
index ee7d64ef2..74d075f6a 100644
--- a/src/main/java/com/box/sdk/BoxRecents.java
+++ b/src/main/java/com/box/sdk/BoxRecents.java
@@ -8,7 +8,7 @@
*/
public final class BoxRecents {
- private static final URLTemplate RECENTS_URL_TEMPLATE = new URLTemplate("recent_items");
+ public static final URLTemplate RECENTS_URL_TEMPLATE = new URLTemplate("recent_items");
//Constructor is not allowed
private BoxRecents() {
diff --git a/src/main/java/com/box/sdk/BoxRetentionPolicy.java b/src/main/java/com/box/sdk/BoxRetentionPolicy.java
index e0481014e..b54183507 100644
--- a/src/main/java/com/box/sdk/BoxRetentionPolicy.java
+++ b/src/main/java/com/box/sdk/BoxRetentionPolicy.java
@@ -60,17 +60,17 @@ public class BoxRetentionPolicy extends BoxResource {
/**
* The URL template used for operation with retention policies.
*/
- private static final URLTemplate RETENTION_POLICIES_URL_TEMPLATE = new URLTemplate("retention_policies");
+ public static final URLTemplate RETENTION_POLICIES_URL_TEMPLATE = new URLTemplate("retention_policies");
/**
* The URL template used for operation with retention policy with given ID.
*/
- private static final URLTemplate POLICY_URL_TEMPLATE = new URLTemplate("retention_policies/%s");
+ public static final URLTemplate POLICY_URL_TEMPLATE = new URLTemplate("retention_policies/%s");
/**
* The URL template used for operation with retention policy assignments.
*/
- private static final URLTemplate ASSIGNMENTS_URL_TEMPLATE = new URLTemplate("retention_policies/%s/assignments");
+ public static final URLTemplate ASSIGNMENTS_URL_TEMPLATE = new URLTemplate("retention_policies/%s/assignments");
/**
* Constructs a retention policy for a resource with a given ID.
diff --git a/src/main/java/com/box/sdk/BoxRetentionPolicyAssignment.java b/src/main/java/com/box/sdk/BoxRetentionPolicyAssignment.java
index 945125f7b..883b32198 100644
--- a/src/main/java/com/box/sdk/BoxRetentionPolicyAssignment.java
+++ b/src/main/java/com/box/sdk/BoxRetentionPolicyAssignment.java
@@ -30,12 +30,12 @@ public class BoxRetentionPolicyAssignment extends BoxResource {
/**
* The URL template used for operation with retention policy assignments.
*/
- private static final URLTemplate ASSIGNMENTS_URL_TEMPLATE = new URLTemplate("retention_policy_assignments");
+ public static final URLTemplate ASSIGNMENTS_URL_TEMPLATE = new URLTemplate("retention_policy_assignments");
/**
* The URL template used for operation with retention policy assignment with given ID.
*/
- private static final URLTemplate RETENTION_POLICY_ASSIGNMENT_URL_TEMPLATE
+ public static final URLTemplate RETENTION_POLICY_ASSIGNMENT_URL_TEMPLATE
= new URLTemplate("retention_policy_assignments/%s");
/**
diff --git a/src/main/java/com/box/sdk/BoxSearch.java b/src/main/java/com/box/sdk/BoxSearch.java
index dffa6fc32..522c2a424 100644
--- a/src/main/java/com/box/sdk/BoxSearch.java
+++ b/src/main/java/com/box/sdk/BoxSearch.java
@@ -14,7 +14,7 @@
*/
public class BoxSearch {
- private static final URLTemplate SEARCH_URL_TEMPLATE = new URLTemplate("search");
+ public static final URLTemplate SEARCH_URL_TEMPLATE = new URLTemplate("search");
private final BoxAPIConnection api;
/**
diff --git a/src/main/java/com/box/sdk/BoxTask.java b/src/main/java/com/box/sdk/BoxTask.java
index 115a50ce2..74ec69ee8 100644
--- a/src/main/java/com/box/sdk/BoxTask.java
+++ b/src/main/java/com/box/sdk/BoxTask.java
@@ -17,9 +17,9 @@
@BoxResourceType("task")
public class BoxTask extends BoxResource {
- private static final URLTemplate TASK_URL_TEMPLATE = new URLTemplate("tasks/%s");
- private static final URLTemplate GET_ASSIGNMENTS_URL_TEMPLATE = new URLTemplate("tasks/%s/assignments");
- private static final URLTemplate ADD_TASK_ASSIGNMENT_URL_TEMPLATE = new URLTemplate("task_assignments");
+ public static final URLTemplate TASK_URL_TEMPLATE = new URLTemplate("tasks/%s");
+ public static final URLTemplate GET_ASSIGNMENTS_URL_TEMPLATE = new URLTemplate("tasks/%s/assignments");
+ public static final URLTemplate ADD_TASK_ASSIGNMENT_URL_TEMPLATE = new URLTemplate("task_assignments");
/**
* Constructs a BoxTask for a task with a given ID.
diff --git a/src/main/java/com/box/sdk/BoxTaskAssignment.java b/src/main/java/com/box/sdk/BoxTaskAssignment.java
index 46f354e86..728cfa9df 100644
--- a/src/main/java/com/box/sdk/BoxTaskAssignment.java
+++ b/src/main/java/com/box/sdk/BoxTaskAssignment.java
@@ -14,7 +14,7 @@
@BoxResourceType("task_assignment")
public class BoxTaskAssignment extends BoxResource {
- private static final URLTemplate TASK_ASSIGNMENT_URL_TEMPLATE = new URLTemplate("task_assignments/%s");
+ public static final URLTemplate TASK_ASSIGNMENT_URL_TEMPLATE = new URLTemplate("task_assignments/%s");
/**
* Constructs a BoxTaskAssignment for a task assignment with a given ID.
diff --git a/src/main/java/com/box/sdk/BoxTrash.java b/src/main/java/com/box/sdk/BoxTrash.java
index a7814c898..ff4bd9e27 100644
--- a/src/main/java/com/box/sdk/BoxTrash.java
+++ b/src/main/java/com/box/sdk/BoxTrash.java
@@ -14,11 +14,11 @@
*/
public class BoxTrash implements Iterable {
private static final long LIMIT = 1000;
- private static final URLTemplate GET_ITEMS_URL = new URLTemplate("folders/trash/items/");
- private static final URLTemplate FOLDER_INFO_URL_TEMPLATE = new URLTemplate("folders/%s/trash");
- private static final URLTemplate FILE_INFO_URL_TEMPLATE = new URLTemplate("files/%s/trash");
- private static final URLTemplate RESTORE_FILE_URL_TEMPLATE = new URLTemplate("files/%s");
- private static final URLTemplate RESTORE_FOLDER_URL_TEMPLATE = new URLTemplate("folders/%s");
+ public static final URLTemplate GET_ITEMS_URL = new URLTemplate("folders/trash/items/");
+ public static final URLTemplate FOLDER_INFO_URL_TEMPLATE = new URLTemplate("folders/%s/trash");
+ public static final URLTemplate FILE_INFO_URL_TEMPLATE = new URLTemplate("files/%s/trash");
+ public static final URLTemplate RESTORE_FILE_URL_TEMPLATE = new URLTemplate("files/%s");
+ public static final URLTemplate RESTORE_FOLDER_URL_TEMPLATE = new URLTemplate("folders/%s");
private final BoxAPIConnection api;
diff --git a/src/main/java/com/box/sdk/BoxUser.java b/src/main/java/com/box/sdk/BoxUser.java
index 8de344c2d..3575f2f0f 100644
--- a/src/main/java/com/box/sdk/BoxUser.java
+++ b/src/main/java/com/box/sdk/BoxUser.java
@@ -29,13 +29,13 @@ public class BoxUser extends BoxCollaborator {
"address", "avatar_url", "is_exempt_from_device_limits", "is_exempt_from_login_verification", "enterprise",
"my_tags", "hostname", "is_platform_access_only", "external_app_user_id"};
- private static final URLTemplate USER_URL_TEMPLATE = new URLTemplate("users/%s");
- private static final URLTemplate GET_ME_URL = new URLTemplate("users/me");
- private static final URLTemplate USERS_URL_TEMPLATE = new URLTemplate("users");
- private static final URLTemplate USER_MEMBERSHIPS_URL_TEMPLATE = new URLTemplate("users/%s/memberships");
- private static final URLTemplate EMAIL_ALIAS_URL_TEMPLATE = new URLTemplate("users/%s/email_aliases/%s");
- private static final URLTemplate EMAIL_ALIASES_URL_TEMPLATE = new URLTemplate("users/%s/email_aliases");
- private static final URLTemplate MOVE_FOLDER_TO_USER_TEMPLATE = new URLTemplate("users/%s/folders/%s");
+ public static final URLTemplate USER_URL_TEMPLATE = new URLTemplate("users/%s");
+ public static final URLTemplate GET_ME_URL = new URLTemplate("users/me");
+ public static final URLTemplate USERS_URL_TEMPLATE = new URLTemplate("users");
+ public static final URLTemplate USER_MEMBERSHIPS_URL_TEMPLATE = new URLTemplate("users/%s/memberships");
+ public static final URLTemplate EMAIL_ALIAS_URL_TEMPLATE = new URLTemplate("users/%s/email_aliases/%s");
+ public static final URLTemplate EMAIL_ALIASES_URL_TEMPLATE = new URLTemplate("users/%s/email_aliases");
+ public static final URLTemplate MOVE_FOLDER_TO_USER_TEMPLATE = new URLTemplate("users/%s/folders/%s");
/**
* Constructs a BoxUser for a user with a given ID.
diff --git a/src/main/java/com/box/sdk/BoxWebHook.java b/src/main/java/com/box/sdk/BoxWebHook.java
index 266548bfe..f866a204f 100644
--- a/src/main/java/com/box/sdk/BoxWebHook.java
+++ b/src/main/java/com/box/sdk/BoxWebHook.java
@@ -68,11 +68,11 @@ public class BoxWebHook extends BoxResource {
/**
* {@link URLTemplate} for {@link BoxWebHook}s resource.
*/
- private static final URLTemplate WEBHOOKS_URL_TEMPLATE = new URLTemplate("webhooks");
+ public static final URLTemplate WEBHOOKS_URL_TEMPLATE = new URLTemplate("webhooks");
/**
* {@link URLTemplate} for single {@link BoxWebHook} resource.
*/
- private static final URLTemplate WEBHOOK_URL_TEMPLATE = new URLTemplate("webhooks/%s");
+ public static final URLTemplate WEBHOOK_URL_TEMPLATE = new URLTemplate("webhooks/%s");
/**
* Maps a {@link Trigger} to its {@link Trigger#getValue()}.
diff --git a/src/main/java/com/box/sdk/BoxWebLink.java b/src/main/java/com/box/sdk/BoxWebLink.java
index bb18d77ac..3da2fbe67 100644
--- a/src/main/java/com/box/sdk/BoxWebLink.java
+++ b/src/main/java/com/box/sdk/BoxWebLink.java
@@ -26,8 +26,8 @@ public class BoxWebLink extends BoxItem {
"path_collection", "created_at", "modified_at", "trashed_at", "purged_at", "created_by", "modified_by",
"owned_by", "shared_link", "parent", "item_status", "collections"};
- private static final URLTemplate COPY_URL_TEMPLATE = new URLTemplate("web_links/%s/copy");
- private static final URLTemplate WEB_LINK_URL_TEMPLATE = new URLTemplate("web_links/%s");
+ public static final URLTemplate COPY_URL_TEMPLATE = new URLTemplate("web_links/%s/copy");
+ public static final URLTemplate WEB_LINK_URL_TEMPLATE = new URLTemplate("web_links/%s");
/**
* Constructs a BoxWebLink for a weblink with a given ID.
diff --git a/src/main/java/com/box/sdk/EventLog.java b/src/main/java/com/box/sdk/EventLog.java
index 618867f4c..77dc47fa9 100644
--- a/src/main/java/com/box/sdk/EventLog.java
+++ b/src/main/java/com/box/sdk/EventLog.java
@@ -20,7 +20,7 @@
*/
public class EventLog implements Iterable {
private static final int ENTERPRISE_LIMIT = 500;
- private static final URLTemplate ENTERPRISE_EVENT_URL_TEMPLATE = new URLTemplate("events?stream_type=admin_logs&"
+ public static final URLTemplate ENTERPRISE_EVENT_URL_TEMPLATE = new URLTemplate("events?stream_type=admin_logs&"
+ "limit=" + ENTERPRISE_LIMIT);
private final int chunkSize;
diff --git a/src/main/java/com/box/sdk/EventStream.java b/src/main/java/com/box/sdk/EventStream.java
index 471c2412d..3bbc110a3 100644
--- a/src/main/java/com/box/sdk/EventStream.java
+++ b/src/main/java/com/box/sdk/EventStream.java
@@ -20,7 +20,7 @@
*/
public class EventStream {
private static final int LIMIT = 800;
- private static final URLTemplate EVENT_URL = new URLTemplate("events?limit=" + LIMIT + "&stream_position=%s");
+ public static final URLTemplate EVENT_URL = new URLTemplate("events?limit=" + LIMIT + "&stream_position=%s");
private static final int STREAM_POSITION_NOW = -1;
private final BoxAPIConnection api;
diff --git a/src/main/java/com/box/sdk/Metadata.java b/src/main/java/com/box/sdk/Metadata.java
index 02f446450..7f8e499e2 100644
--- a/src/main/java/com/box/sdk/Metadata.java
+++ b/src/main/java/com/box/sdk/Metadata.java
@@ -38,7 +38,7 @@ public class Metadata {
/**
* URL template for all metadata associated with item.
*/
- private static final URLTemplate GET_ALL_METADATA_URL_TEMPLATE = new URLTemplate("/metadata");
+ public static final URLTemplate GET_ALL_METADATA_URL_TEMPLATE = new URLTemplate("/metadata");
/**
* Values contained by the metadata object.
diff --git a/src/main/java/com/box/sdk/MetadataTemplate.java b/src/main/java/com/box/sdk/MetadataTemplate.java
index e38c26c14..86ac90435 100644
--- a/src/main/java/com/box/sdk/MetadataTemplate.java
+++ b/src/main/java/com/box/sdk/MetadataTemplate.java
@@ -21,19 +21,19 @@ public class MetadataTemplate extends BoxJSONObject {
/**
* @see #getMetadataTemplate(BoxAPIConnection)
*/
- private static final URLTemplate METADATA_TEMPLATE_URL_TEMPLATE
+ public static final URLTemplate METADATA_TEMPLATE_URL_TEMPLATE
= new URLTemplate("metadata_templates/%s/%s/schema");
/**
* @see #createMetadataTemplate(BoxAPIConnection, String, String, String, boolean, List)
*/
- private static final URLTemplate METADATA_TEMPLATE_SCHEMA_URL_TEMPLATE
+ public static final URLTemplate METADATA_TEMPLATE_SCHEMA_URL_TEMPLATE
= new URLTemplate("metadata_templates/schema");
/**
* @see #getEnterpriseMetadataTemplates(String, int, BoxAPIConnection, String...)
*/
- private static final URLTemplate ENTERPRISE_METADATA_URL_TEMPLATE = new URLTemplate("metadata_templates/%s");
+ public static final URLTemplate ENTERPRISE_METADATA_URL_TEMPLATE = new URLTemplate("metadata_templates/%s");
/**
* Default metadata type to be used in query.
diff --git a/src/main/java/com/box/sdk/RealtimeServerConnection.java b/src/main/java/com/box/sdk/RealtimeServerConnection.java
index 82e461ef0..47faaa682 100644
--- a/src/main/java/com/box/sdk/RealtimeServerConnection.java
+++ b/src/main/java/com/box/sdk/RealtimeServerConnection.java
@@ -7,8 +7,8 @@
import com.eclipsesource.json.JsonObject;
class RealtimeServerConnection {
- private static final URLTemplate EVENT_URL = new URLTemplate("events");
- private static final URLTemplate EVENT_POSITION_URL = new URLTemplate("events?stream_position=%s");
+ public static final URLTemplate EVENT_URL = new URLTemplate("events");
+ public static final URLTemplate EVENT_POSITION_URL = new URLTemplate("events?stream_position=%s");
private final BoxAPIConnection api;
private final int timeout;
diff --git a/src/main/java/com/box/sdk/URLTemplate.java b/src/main/java/com/box/sdk/URLTemplate.java
index 15208de52..fb5b4b5e9 100644
--- a/src/main/java/com/box/sdk/URLTemplate.java
+++ b/src/main/java/com/box/sdk/URLTemplate.java
@@ -3,14 +3,14 @@
import java.net.MalformedURLException;
import java.net.URL;
-class URLTemplate {
+public class URLTemplate {
private String template;
URLTemplate(String template) {
this.template = template;
}
- URL build(String base, Object... values) {
+ public URL build(String base, Object... values) {
String urlString = String.format(base + this.template, values);
URL url = null;
@@ -23,7 +23,7 @@ URL build(String base, Object... values) {
return url;
}
- URL buildWithQuery(String base, String queryString, Object... values) {
+ public URL buildWithQuery(String base, String queryString, Object... values) {
String urlString = String.format(base + this.template, values) + queryString;
URL url = null;
try {
diff --git a/src/main/java/com/box/sdk/http/HttpHeaders.java b/src/main/java/com/box/sdk/http/HttpHeaders.java
index aac67afeb..ae8e20084 100644
--- a/src/main/java/com/box/sdk/http/HttpHeaders.java
+++ b/src/main/java/com/box/sdk/http/HttpHeaders.java
@@ -40,6 +40,11 @@ public final class HttpHeaders {
*/
public static final String X_BOX_PART_ID = "X-Box-Part-Id";
+ /**
+ * HTTP header key X-Box-Part-Id.
+ */
+ public static final String AUTHORIZATION = "Authorization";
+
//Prevents instantiation
private HttpHeaders() {
}
diff --git a/src/main/java/com/box/sdk/utilities/BatchRequest.java b/src/main/java/com/box/sdk/utilities/BatchRequest.java
deleted file mode 100644
index 9516755ba..000000000
--- a/src/main/java/com/box/sdk/utilities/BatchRequest.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package com.box.sdk.utilities;
-
-/**
- *
- */
-public class BatchRequest {
-}
diff --git a/src/test/java/com/box/sdk/BoxGroupTest.java b/src/test/java/com/box/sdk/BoxGroupTest.java
index 9dc9cc89b..4a3e071e2 100644
--- a/src/test/java/com/box/sdk/BoxGroupTest.java
+++ b/src/test/java/com/box/sdk/BoxGroupTest.java
@@ -39,7 +39,7 @@
*/
public class BoxGroupTest {
- private static final URLTemplate GROUPS_URL_TEMPLATE = new URLTemplate("groups");
+ public static final URLTemplate GROUPS_URL_TEMPLATE = new URLTemplate("groups");
/**
* Wiremock
From 2cf6632008cfcd13f4566ddd6871d4fdc400a170 Mon Sep 17 00:00:00 2001
From: Harish Gokavarapu
Date: Wed, 23 Aug 2017 13:58:29 -0700
Subject: [PATCH 3/8] making it more user friendly and better exception
handling
---
.../box/sdk/example/BatchRequestExample.java | 12 +++-
.../java/com/box/sdk/BatchAPIRequest.java | 39 ++++++++----
src/main/java/com/box/sdk/BoxAPIRequest.java | 6 +-
src/main/java/com/box/sdk/BoxAPIResponse.java | 26 +++++---
.../java/com/box/sdk/BoxAPIResponseEvent.java | 16 -----
src/main/java/com/box/sdk/BoxFolder.java | 2 +-
src/main/java/com/box/sdk/BoxJSONRequest.java | 4 +-
.../java/com/box/sdk/BoxJSONResponse.java | 59 +++++++++++++------
.../java/com/box/sdk/http/HttpHeaders.java | 2 +-
9 files changed, 106 insertions(+), 60 deletions(-)
delete mode 100644 src/main/java/com/box/sdk/BoxAPIResponseEvent.java
diff --git a/src/example/java/com/box/sdk/example/BatchRequestExample.java b/src/example/java/com/box/sdk/example/BatchRequestExample.java
index 4f02b0864..901a3afa2 100644
--- a/src/example/java/com/box/sdk/example/BatchRequestExample.java
+++ b/src/example/java/com/box/sdk/example/BatchRequestExample.java
@@ -14,8 +14,11 @@
import com.box.sdk.BoxAPIResponse;
import com.box.sdk.BoxConfig;
import com.box.sdk.BoxDeveloperEditionAPIConnection;
+import com.box.sdk.BoxFile;
import com.box.sdk.BoxFolder;
import com.box.sdk.BoxJSONRequest;
+import com.box.sdk.BoxJSONResponse;
+import com.box.sdk.BoxResource;
import com.box.sdk.BoxUser;
import com.box.sdk.IAccessTokenCache;
import com.box.sdk.InMemoryLRUAccessTokenCache;
@@ -73,14 +76,17 @@ public static void main(String[] args) throws IOException {
System.out.println("GET ME RESPONSE:");
System.out.println("Response Code: " + responses.get(0).getResponseCode());
- System.out.println("Response: " + responses.get(0).getBodyAsString());
+ System.out.println("Response: " + ((BoxJSONResponse) responses.get(1)).getJSON());
System.out.println("CREATE APP USER RESPONSE:");
System.out.println("Response Code: " + responses.get(1).getResponseCode());
- System.out.println("Response: " + responses.get(1).getBodyAsString());
+ System.out.println("Response: " + ((BoxJSONResponse) responses.get(1)).getJSON());
System.out.println("GET ROOT FOLDER RESPONSE:");
System.out.println("Response Code: " + responses.get(2).getResponseCode());
- System.out.println("Response: " + responses.get(2).getBodyAsString());
+ BoxJSONResponse rootFolderResponse = (BoxJSONResponse) responses.get(1);
+ BoxFolder.Info rootFolderInfo = new BoxFolder(api, rootFolderResponse.getJsonObject().get("id").asString())
+ .new Info(rootFolderResponse.getJsonObject());
+ System.out.println("Root Folder Created At: " + rootFolderInfo.getCreatedAt());
}
}
diff --git a/src/main/java/com/box/sdk/BatchAPIRequest.java b/src/main/java/com/box/sdk/BatchAPIRequest.java
index b3121bf3a..266c4e564 100644
--- a/src/main/java/com/box/sdk/BatchAPIRequest.java
+++ b/src/main/java/com/box/sdk/BatchAPIRequest.java
@@ -5,7 +5,6 @@
import java.util.Iterator;
import java.util.List;
import java.util.Map;
-import java.util.Set;
import java.util.logging.Logger;
import com.box.sdk.http.HttpHeaders;
@@ -13,8 +12,6 @@
import com.eclipsesource.json.JsonArray;
import com.eclipsesource.json.JsonObject;
import com.eclipsesource.json.JsonValue;
-import org.jose4j.json.internal.json_simple.JSONArray;
-import org.jose4j.json.internal.json_simple.JSONObject;
/**
*
@@ -34,8 +31,8 @@ public BatchAPIRequest(BoxAPIConnection api) {
}
/**
- * Execute a set of API calls as batch request
- * @return
+ * Execute a set of API calls as batch request.
+ * @return list of BoxAPIResponse's
*/
public List execute(List requests) {
JsonObject body = new JsonObject();
@@ -71,11 +68,33 @@ public List execute(List requests) {
BoxJSONResponse batchResponse = (BoxJSONResponse) super.send();
JsonObject responseJSON = JsonObject.readFrom(batchResponse.getJSON());
List responses = new ArrayList();
- Iterator iterator = responseJSON.get("responses").asArray().iterator();
- while(iterator.hasNext()) {
- JsonObject jsonResponse = iterator.next().asObject();
- BoxAPIResponse response =
- new BoxAPIResponse(jsonResponse.get("status").asInt(), jsonResponse.get("response").toString());
+ Iterator responseIterator = responseJSON.get("responses").asArray().iterator();
+ while(responseIterator.hasNext()) {
+ JsonObject jsonResponse = responseIterator.next().asObject();
+ BoxAPIResponse response = null;
+
+ //Gather headers
+ Map responseHeaders = new HashMap();
+
+ if(jsonResponse.get("headers") != null) {
+ JsonObject batchResponseHeadersObject = jsonResponse.get("headers").asObject();
+ for (JsonObject.Member member : batchResponseHeadersObject) {
+ String headerName = member.getName();
+ String headerValue = member.getValue().asString();
+ responseHeaders.put(headerName, headerValue);
+ }
+ }
+
+ //Construct a BoxAPIResponse when response is null, or a BoxJSONResponse when there's a response
+ // (not anticipating any other response as per current APIs. Ideally we should do it based on response header)
+ if(jsonResponse.get("response") == null) {
+ response =
+ new BoxAPIResponse(jsonResponse.get("status").asInt(), responseHeaders);
+ } else {
+ response =
+ new BoxJSONResponse(jsonResponse.get("status").asInt(), responseHeaders,
+ jsonResponse.get("response").asObject());
+ }
responses.add(response);
}
return responses;
diff --git a/src/main/java/com/box/sdk/BoxAPIRequest.java b/src/main/java/com/box/sdk/BoxAPIRequest.java
index 3b7acd679..267a8c752 100644
--- a/src/main/java/com/box/sdk/BoxAPIRequest.java
+++ b/src/main/java/com/box/sdk/BoxAPIRequest.java
@@ -90,7 +90,7 @@ public BoxAPIRequest(BoxAPIConnection api, URL url, HttpMethod method) {
}
/**
- * Constructs an authenticated BoxAPIRequest
+ * Constructs an request, using URL and HttpMethod.
* @param url the URL of the request.
* @param method the HTTP method of the request.
*/
@@ -193,9 +193,9 @@ public URL getUrl() {
}
/**
- * Gets the http method of the request.
+ * Gets the http method from the request.
*
- * @return
+ * @return http method
*/
public String getMethod() {
return method;
diff --git a/src/main/java/com/box/sdk/BoxAPIResponse.java b/src/main/java/com/box/sdk/BoxAPIResponse.java
index 8f9abce6e..16b65acf5 100644
--- a/src/main/java/com/box/sdk/BoxAPIResponse.java
+++ b/src/main/java/com/box/sdk/BoxAPIResponse.java
@@ -27,6 +27,7 @@ public class BoxAPIResponse {
private static final int BUFFER_SIZE = 8192;
private final HttpURLConnection connection;
+ private final Map headers;
private int responseCode;
private String bodyString;
@@ -48,12 +49,17 @@ public class BoxAPIResponse {
*/
public BoxAPIResponse() {
this.connection = null;
+ this.headers = null;
}
- public BoxAPIResponse(int responseCode, String body) {
+ /**
+ * Constructs a BoxAPIResponse with a http response code and response headers.
+ * @param responseCode
+ */
+ public BoxAPIResponse(int responseCode, Map headers) {
this.connection = null;
this.responseCode = responseCode;
- this.bodyString = body;
+ this.headers = headers;
}
/**
@@ -62,6 +68,7 @@ public BoxAPIResponse(int responseCode, String body) {
*/
public BoxAPIResponse(HttpURLConnection connection) {
this.connection = connection;
+ this.headers = null;
this.inputStream = null;
try {
@@ -101,7 +108,16 @@ public long getContentLength() {
* @return value of the header.
*/
public String getHeaderField(String fieldName) {
- return this.connection.getHeaderField(fieldName);
+ //Whenever headers map is null, try to get the headers from the connection
+ if(headers == null) {
+ if (this.connection != null) {
+ return this.connection.getHeaderField(fieldName);
+ } else {
+ return null;
+ }
+ } else {
+ return headers.get(fieldName);
+ }
}
/**
@@ -112,10 +128,6 @@ public InputStream getBody() {
return this.getBody(null);
}
- public String getBodyAsString() {
- return this.bodyString;
- }
-
/**
* Gets an InputStream for reading this response's body which will report its read progress to a ProgressListener.
* @param listener a listener for monitoring the read progress of the body.
diff --git a/src/main/java/com/box/sdk/BoxAPIResponseEvent.java b/src/main/java/com/box/sdk/BoxAPIResponseEvent.java
deleted file mode 100644
index 6648b9a02..000000000
--- a/src/main/java/com/box/sdk/BoxAPIResponseEvent.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package com.box.sdk;
-
-/**
- *
- */
-public interface BoxAPIResponseEvent {
- /**
- * Called on success
- */
- void onSuccess();
-
- /**
- * Called on failure
- */
- void onFailure();
-}
diff --git a/src/main/java/com/box/sdk/BoxFolder.java b/src/main/java/com/box/sdk/BoxFolder.java
index 57c8e3036..7fd9f171f 100644
--- a/src/main/java/com/box/sdk/BoxFolder.java
+++ b/src/main/java/com/box/sdk/BoxFolder.java
@@ -902,7 +902,7 @@ public Info(String json) {
* Constructs an Info object using an already parsed JSON object.
* @param jsonObject the parsed JSON object.
*/
- Info(JsonObject jsonObject) {
+ public Info(JsonObject jsonObject) {
super(jsonObject);
}
diff --git a/src/main/java/com/box/sdk/BoxJSONRequest.java b/src/main/java/com/box/sdk/BoxJSONRequest.java
index 9c3c2e991..9cfb7d1f1 100644
--- a/src/main/java/com/box/sdk/BoxJSONRequest.java
+++ b/src/main/java/com/box/sdk/BoxJSONRequest.java
@@ -66,8 +66,8 @@ public void setBody(JsonObject body) {
}
/**
- *
- * @return
+ * Gets the body of this request as a JsonObject.
+ * @return body represented as JsonObject.
*/
public JsonObject getBodyAsJsonObject() {
return this.json;
diff --git a/src/main/java/com/box/sdk/BoxJSONResponse.java b/src/main/java/com/box/sdk/BoxJSONResponse.java
index de61a1743..f50c59727 100644
--- a/src/main/java/com/box/sdk/BoxJSONResponse.java
+++ b/src/main/java/com/box/sdk/BoxJSONResponse.java
@@ -3,6 +3,9 @@
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
+import java.util.Map;
+
+import com.eclipsesource.json.JsonObject;
/**
* Used to read HTTP responses containing JSON from the Box API.
@@ -12,7 +15,7 @@
*/
public class BoxJSONResponse extends BoxAPIResponse {
private static final int BUFFER_SIZE = 8192;
-
+ private JsonObject jsonObject;
private String json;
/**
@@ -30,6 +33,25 @@ public BoxJSONResponse(HttpURLConnection connection) {
super(connection);
}
+ /**
+ * Constructs a BoxAPIResponse with an http response code and response body
+ * @param responseCode
+ * @param body
+ */
+ public BoxJSONResponse(int responseCode, Map httpHeaders, JsonObject body) {
+ super(responseCode, httpHeaders);
+ this.jsonObject = body;
+ this.json = body.toString();
+ }
+
+ public JsonObject getJsonObject() {
+ if (this.jsonObject != null) {
+ return this.jsonObject;
+ } else {
+ return JsonObject.readFrom(this.getJSON());
+ }
+ }
+
/**
* Gets the body of the response as a JSON string. When this method is called, the response's body will be read and
* the response will be disconnected, meaning that the stream returned by {@link #getBody} can no longer be used.
@@ -38,26 +60,29 @@ public BoxJSONResponse(HttpURLConnection connection) {
public String getJSON() {
if (this.json != null) {
return this.json;
- }
+ } else if (this.jsonObject != null) {
+ return this.jsonObject.toString();
+ } else {
- InputStreamReader reader = new InputStreamReader(this.getBody(), StandardCharsets.UTF_8);
- StringBuilder builder = new StringBuilder();
- char[] buffer = new char[BUFFER_SIZE];
+ InputStreamReader reader = new InputStreamReader(this.getBody(), StandardCharsets.UTF_8);
+ StringBuilder builder = new StringBuilder();
+ char[] buffer = new char[BUFFER_SIZE];
- try {
- int read = reader.read(buffer, 0, BUFFER_SIZE);
- while (read != -1) {
- builder.append(buffer, 0, read);
- read = reader.read(buffer, 0, BUFFER_SIZE);
- }
+ try {
+ int read = reader.read(buffer, 0, BUFFER_SIZE);
+ while (read != -1) {
+ builder.append(buffer, 0, read);
+ read = reader.read(buffer, 0, BUFFER_SIZE);
+ }
- this.disconnect();
- reader.close();
- } catch (IOException e) {
- throw new BoxAPIException("Couldn't connect to the Box API due to a network error.", e);
+ this.disconnect();
+ reader.close();
+ } catch (IOException e) {
+ throw new BoxAPIException("Couldn't connect to the Box API due to a network error.", e);
+ }
+ this.json = builder.toString();
+ return this.json;
}
- this.json = builder.toString();
- return this.json;
}
@Override
diff --git a/src/main/java/com/box/sdk/http/HttpHeaders.java b/src/main/java/com/box/sdk/http/HttpHeaders.java
index ae8e20084..6def10f46 100644
--- a/src/main/java/com/box/sdk/http/HttpHeaders.java
+++ b/src/main/java/com/box/sdk/http/HttpHeaders.java
@@ -41,7 +41,7 @@ public final class HttpHeaders {
public static final String X_BOX_PART_ID = "X-Box-Part-Id";
/**
- * HTTP header key X-Box-Part-Id.
+ * HTTP header key Authorization.
*/
public static final String AUTHORIZATION = "Authorization";
From 8867f0b0d8177671c097450e626306c01f3340b6 Mon Sep 17 00:00:00 2001
From: Harish Gokavarapu
Date: Thu, 24 Aug 2017 14:33:43 -0700
Subject: [PATCH 4/8] checkstyle
---
config/checkstyle/suppressions.xml | 4 ++
.../java/com/box/sdk/BatchAPIRequest.java | 38 +++++++++-----
src/main/java/com/box/sdk/BoxAPIRequest.java | 25 +++++++++-
src/main/java/com/box/sdk/BoxAPIResponse.java | 7 +--
.../java/com/box/sdk/BoxCollaboration.java | 12 +++++
src/main/java/com/box/sdk/BoxCollection.java | 6 +++
src/main/java/com/box/sdk/BoxComment.java | 10 +++-
src/main/java/com/box/sdk/BoxFile.java | 50 ++++++++++++++++++-
src/main/java/com/box/sdk/BoxFileVersion.java | 6 +++
src/main/java/com/box/sdk/BoxFolder.java | 36 +++++++++++++
src/main/java/com/box/sdk/BoxItem.java | 4 +-
src/main/java/com/box/sdk/BoxJSONRequest.java | 2 +-
.../java/com/box/sdk/BoxJSONResponse.java | 11 ++--
.../java/com/box/sdk/BoxLegalHoldPolicy.java | 13 ++++-
src/main/java/com/box/sdk/BoxRecents.java | 3 ++
.../java/com/box/sdk/BoxRetentionPolicy.java | 29 ++++++-----
src/main/java/com/box/sdk/BoxSearch.java | 3 ++
src/main/java/com/box/sdk/BoxTask.java | 9 ++++
.../java/com/box/sdk/BoxTaskAssignment.java | 3 ++
src/main/java/com/box/sdk/BoxTrash.java | 18 ++++++-
src/main/java/com/box/sdk/BoxUser.java | 21 ++++++++
src/main/java/com/box/sdk/BoxWebHook.java | 18 +++----
src/main/java/com/box/sdk/BoxWebLink.java | 6 +++
src/main/java/com/box/sdk/EventLog.java | 5 +-
src/main/java/com/box/sdk/EventStream.java | 7 ++-
src/main/java/com/box/sdk/URLTemplate.java | 22 +++++++-
26 files changed, 313 insertions(+), 55 deletions(-)
diff --git a/config/checkstyle/suppressions.xml b/config/checkstyle/suppressions.xml
index 92ee3f784..7dab151a0 100644
--- a/config/checkstyle/suppressions.xml
+++ b/config/checkstyle/suppressions.xml
@@ -11,4 +11,8 @@
files="example.*\.java"/>
+
+
diff --git a/src/main/java/com/box/sdk/BatchAPIRequest.java b/src/main/java/com/box/sdk/BatchAPIRequest.java
index 266c4e564..a398baeea 100644
--- a/src/main/java/com/box/sdk/BatchAPIRequest.java
+++ b/src/main/java/com/box/sdk/BatchAPIRequest.java
@@ -16,9 +16,12 @@
/**
*
*/
-public class BatchAPIRequest extends BoxJSONRequest{
+public class BatchAPIRequest extends BoxJSONRequest {
+ /**
+ * Batch URL Template.
+ */
+ public static final URLTemplate BATCH_URL_TEMPLATE = new URLTemplate("batch");
private static final Logger LOGGER = Logger.getLogger(BoxAPIRequest.class.getName());
- public static final URLTemplate RECENTS_URL_TEMPLATE = new URLTemplate("batch");
private final BoxAPIConnection api;
/**
@@ -26,21 +29,28 @@ public class BatchAPIRequest extends BoxJSONRequest{
* @param api an API connection for authenticating the request.
*/
public BatchAPIRequest(BoxAPIConnection api) {
- super(api, RECENTS_URL_TEMPLATE.build(api.getBaseURL()), HttpMethod.GET);
+ super(api, BATCH_URL_TEMPLATE.build(api.getBaseURL()), HttpMethod.GET);
this.api = api;
}
/**
* Execute a set of API calls as batch request.
- * @return list of BoxAPIResponse's
+ * @param requests list of api requests that has to be executed in batch.
+ * @return list of BoxAPIResponses
*/
public List execute(List requests) {
+ this.prepareRequest(requests);
+ BoxJSONResponse batchResponse = (BoxJSONResponse) super.send();
+ return this.parseResponse(batchResponse);
+ }
+
+ private void prepareRequest(List requests) {
JsonObject body = new JsonObject();
JsonArray requestsJSONArray = new JsonArray();
- for(BoxAPIRequest request: requests) {
+ for (BoxAPIRequest request: requests) {
JsonObject batchRequest = new JsonObject();
batchRequest.add("method", request.getMethod());
- batchRequest.add("relative_url", request.getUrl().toString().substring(this.api.getBaseURL().length()-1));
+ batchRequest.add("relative_url", request.getUrl().toString().substring(this.api.getBaseURL().length() - 1));
//If the actual request has a JSON body then add it to vatch request
if (request instanceof BoxJSONRequest) {
BoxJSONRequest jsonRequest = (BoxJSONRequest) request;
@@ -49,7 +59,7 @@ public List execute(List requests) {
//Add any headers that are in the request, except Authorization
if (request.getHeaders() != null) {
JsonObject batchRequestHeaders = new JsonObject();
- for(RequestHeader header: request.getHeaders()) {
+ for (RequestHeader header: request.getHeaders()) {
if (header.getKey() != null && !header.getKey().isEmpty()
&& HttpHeaders.AUTHORIZATION.equals(header.getKey())) {
batchRequestHeaders.add(header.getKey(), header.getValue());
@@ -64,19 +74,20 @@ public List execute(List requests) {
//Add the requests array to body
body.add("requests", requestsJSONArray);
super.setBody(body);
+ }
- BoxJSONResponse batchResponse = (BoxJSONResponse) super.send();
+ private List parseResponse(BoxJSONResponse batchResponse) {
JsonObject responseJSON = JsonObject.readFrom(batchResponse.getJSON());
List responses = new ArrayList();
Iterator responseIterator = responseJSON.get("responses").asArray().iterator();
- while(responseIterator.hasNext()) {
+ while (responseIterator.hasNext()) {
JsonObject jsonResponse = responseIterator.next().asObject();
BoxAPIResponse response = null;
//Gather headers
Map responseHeaders = new HashMap();
- if(jsonResponse.get("headers") != null) {
+ if (jsonResponse.get("headers") != null) {
JsonObject batchResponseHeadersObject = jsonResponse.get("headers").asObject();
for (JsonObject.Member member : batchResponseHeadersObject) {
String headerName = member.getName();
@@ -85,9 +96,10 @@ public List execute(List requests) {
}
}
- //Construct a BoxAPIResponse when response is null, or a BoxJSONResponse when there's a response
- // (not anticipating any other response as per current APIs. Ideally we should do it based on response header)
- if(jsonResponse.get("response") == null) {
+ // Construct a BoxAPIResponse when response is null, or a BoxJSONResponse when there's a response
+ // (not anticipating any other response as per current APIs.
+ // Ideally we should do it based on response header)
+ if (jsonResponse.get("response") == null) {
response =
new BoxAPIResponse(jsonResponse.get("status").asInt(), responseHeaders);
} else {
diff --git a/src/main/java/com/box/sdk/BoxAPIRequest.java b/src/main/java/com/box/sdk/BoxAPIRequest.java
index 267a8c752..9f2121928 100644
--- a/src/main/java/com/box/sdk/BoxAPIRequest.java
+++ b/src/main/java/com/box/sdk/BoxAPIRequest.java
@@ -198,12 +198,17 @@ public URL getUrl() {
* @return http method
*/
public String getMethod() {
- return method;
+ return this.method;
}
- public List getHeaders() {
+ /**
+ * Get headers as list of RequestHeader objects.
+ * @return headers as list of RequestHeader objects
+ */
+ protected List getHeaders() {
return this.headers;
}
+
/**
* Sends this request and returns a BoxAPIResponse containing the server's response.
*
@@ -555,19 +560,35 @@ private static boolean isResponseRedirect(int responseCode) {
return (responseCode == 301 || responseCode == 302);
}
+ /**
+ * Class for mapping a request header and value.
+ */
public final class RequestHeader {
private final String key;
private final String value;
+ /**
+ * Construct a request header from header key and value.
+ * @param key header name
+ * @param value header value
+ */
public RequestHeader(String key, String value) {
this.key = key;
this.value = value;
}
+ /**
+ * Get header key.
+ * @return http header name
+ */
public String getKey() {
return this.key;
}
+ /**
+ * Get header value.
+ * @return http header value
+ */
public String getValue() {
return this.value;
}
diff --git a/src/main/java/com/box/sdk/BoxAPIResponse.java b/src/main/java/com/box/sdk/BoxAPIResponse.java
index 16b65acf5..0488b3880 100644
--- a/src/main/java/com/box/sdk/BoxAPIResponse.java
+++ b/src/main/java/com/box/sdk/BoxAPIResponse.java
@@ -54,7 +54,8 @@ public BoxAPIResponse() {
/**
* Constructs a BoxAPIResponse with a http response code and response headers.
- * @param responseCode
+ * @param responseCode http response code
+ * @param headers map of headers
*/
public BoxAPIResponse(int responseCode, Map headers) {
this.connection = null;
@@ -109,14 +110,14 @@ public long getContentLength() {
*/
public String getHeaderField(String fieldName) {
//Whenever headers map is null, try to get the headers from the connection
- if(headers == null) {
+ if (this.headers == null) {
if (this.connection != null) {
return this.connection.getHeaderField(fieldName);
} else {
return null;
}
} else {
- return headers.get(fieldName);
+ return this.headers.get(fieldName);
}
}
diff --git a/src/main/java/com/box/sdk/BoxCollaboration.java b/src/main/java/com/box/sdk/BoxCollaboration.java
index aadf43e7f..1f008d1fc 100644
--- a/src/main/java/com/box/sdk/BoxCollaboration.java
+++ b/src/main/java/com/box/sdk/BoxCollaboration.java
@@ -20,9 +20,21 @@
*/
@BoxResourceType("collaboration")
public class BoxCollaboration extends BoxResource {
+ /**
+ * Collaborations URL Template.
+ */
public static final URLTemplate COLLABORATIONS_URL_TEMPLATE = new URLTemplate("collaborations");
+ /**
+ * Pending Collaborations URL.
+ */
public static final URLTemplate PENDING_COLLABORATIONS_URL = new URLTemplate("collaborations?status=pending");
+ /**
+ * Collaboration URL Template.
+ */
public static final URLTemplate COLLABORATION_URL_TEMPLATE = new URLTemplate("collaborations/%s");
+ /**
+ * Get All File Collaboations URL.
+ */
public static final URLTemplate GET_ALL_FILE_COLLABORATIONS_URL = new URLTemplate("files/%s/collaborations/");
/**
diff --git a/src/main/java/com/box/sdk/BoxCollection.java b/src/main/java/com/box/sdk/BoxCollection.java
index ab4ffad07..482625532 100644
--- a/src/main/java/com/box/sdk/BoxCollection.java
+++ b/src/main/java/com/box/sdk/BoxCollection.java
@@ -18,7 +18,13 @@
@BoxResourceType("collection")
public class BoxCollection extends BoxResource implements Iterable {
+ /**
+ * Get Collections URL Template.
+ */
public static final URLTemplate GET_COLLECTIONS_URL_TEMPLATE = new URLTemplate("collections/");
+ /**
+ * Get Collection Items URL Template.
+ */
public static final URLTemplate GET_COLLECTION_ITEMS_URL = new URLTemplate("collections/%s/items/");
/**
diff --git a/src/main/java/com/box/sdk/BoxComment.java b/src/main/java/com/box/sdk/BoxComment.java
index 5a7ddae23..ab7b8ae8b 100644
--- a/src/main/java/com/box/sdk/BoxComment.java
+++ b/src/main/java/com/box/sdk/BoxComment.java
@@ -18,10 +18,18 @@
*/
@BoxResourceType("comment")
public class BoxComment extends BoxResource {
- private static final Pattern MENTION_REGEX = Pattern.compile("@\\[.+:.+\\]");
+
+ /**
+ * Add Comment URL Template.
+ */
public static final URLTemplate ADD_COMMENT_URL_TEMPLATE = new URLTemplate("comments");
+ /**
+ * Comment URL Template.
+ */
public static final URLTemplate COMMENT_URL_TEMPLATE = new URLTemplate("comments/%s");
+ private static final Pattern MENTION_REGEX = Pattern.compile("@\\[.+:.+\\]");
+
/**
* Constructs a BoxComment for a comment with a given ID.
* @param api the API connection to be used with the comment.
diff --git a/src/main/java/com/box/sdk/BoxFile.java b/src/main/java/com/box/sdk/BoxFile.java
index 525d67e90..7d549696c 100644
--- a/src/main/java/com/box/sdk/BoxFile.java
+++ b/src/main/java/com/box/sdk/BoxFile.java
@@ -55,25 +55,71 @@ public enum ThumbnailFileType {
JPG
}
+ /**
+ * File URL Template.
+ */
public static final URLTemplate FILE_URL_TEMPLATE = new URLTemplate("files/%s");
+ /**
+ * Content URL Template.
+ */
public static final URLTemplate CONTENT_URL_TEMPLATE = new URLTemplate("files/%s/content");
+ /**
+ * Versions URL Template.
+ */
public static final URLTemplate VERSIONS_URL_TEMPLATE = new URLTemplate("files/%s/versions");
+ /**
+ * Copy URL Template.
+ */
public static final URLTemplate COPY_URL_TEMPLATE = new URLTemplate("files/%s/copy");
+ /**
+ * Add Comment URL Template.
+ */
public static final URLTemplate ADD_COMMENT_URL_TEMPLATE = new URLTemplate("comments");
+ /**
+ * Get Comments URL Template.
+ */
public static final URLTemplate GET_COMMENTS_URL_TEMPLATE = new URLTemplate("files/%s/comments");
+ /**
+ * Metadata URL Template.
+ */
public static final URLTemplate METADATA_URL_TEMPLATE = new URLTemplate("files/%s/metadata/%s/%s");
+ /**
+ * Add Task URL Template.
+ */
public static final URLTemplate ADD_TASK_URL_TEMPLATE = new URLTemplate("tasks");
+ /**
+ * Get Tasks URL Template.
+ */
public static final URLTemplate GET_TASKS_URL_TEMPLATE = new URLTemplate("files/%s/tasks");
+ /**
+ * Get Thumbnail PNG Template.
+ */
public static final URLTemplate GET_THUMBNAIL_PNG_TEMPLATE = new URLTemplate("files/%s/thumbnail.png");
+ /**
+ * Get Thumbnail JPG Template.
+ */
public static final URLTemplate GET_THUMBNAIL_JPG_TEMPLATE = new URLTemplate("files/%s/thumbnail.jpg");
+ /**
+ * Upload Session URL Template.
+ */
public static final URLTemplate UPLOAD_SESSION_URL_TEMPLATE = new URLTemplate("files/%s/upload_sessions");
+ /**
+ * Upload Session Status URL Template.
+ */
public static final URLTemplate UPLOAD_SESSION_STATUS_URL_TEMPLATE = new URLTemplate(
"files/upload_sessions/%s/status");
+ /**
+ * Abort Upload Session URL Template.
+ */
public static final URLTemplate ABORT_UPLOAD_SESSION_URL_TEMPLATE = new URLTemplate("files/upload_sessions/%s");
-
+ /**
+ * Add Collaborations URL Template.
+ */
public static final URLTemplate ADD_COLLABORATION_URL = new URLTemplate("collaborations");
+ /**
+ * Get All File Collaborations URL Template.
+ */
public static final URLTemplate GET_ALL_FILE_COLLABORATIONS_URL = new URLTemplate("files/%s/collaborations");
-
private static final int BUFFER_SIZE = 8192;
private static final int GET_COLLABORATORS_PAGE_SIZE = 1000;
diff --git a/src/main/java/com/box/sdk/BoxFileVersion.java b/src/main/java/com/box/sdk/BoxFileVersion.java
index 059efe848..865490399 100644
--- a/src/main/java/com/box/sdk/BoxFileVersion.java
+++ b/src/main/java/com/box/sdk/BoxFileVersion.java
@@ -15,7 +15,13 @@
*/
@BoxResourceType("file_version")
public class BoxFileVersion extends BoxResource {
+ /**
+ * Content URL Template.
+ */
public static final URLTemplate CONTENT_URL_TEMPLATE = new URLTemplate("files/%s/content?version=%s");
+ /**
+ * Version URL Template.
+ */
public static final URLTemplate VERSION_URL_TEMPLATE = new URLTemplate("files/%s/versions/%s");
private static final int BUFFER_SIZE = 8192;
diff --git a/src/main/java/com/box/sdk/BoxFolder.java b/src/main/java/com/box/sdk/BoxFolder.java
index 7fd9f171f..2c0d2a0c7 100644
--- a/src/main/java/com/box/sdk/BoxFolder.java
+++ b/src/main/java/com/box/sdk/BoxFolder.java
@@ -33,17 +33,53 @@ public class BoxFolder extends BoxItem implements Iterable {
"item_status", "item_collection", "sync_state", "has_collaborations", "permissions", "tags",
"can_non_owners_invite", "collections", "watermark_info"};
+ /**
+ * Create Folder URL Template.
+ */
public static final URLTemplate CREATE_FOLDER_URL = new URLTemplate("folders");
+ /**
+ * Create Web Link URL Template.
+ */
public static final URLTemplate CREATE_WEB_LINK_URL = new URLTemplate("web_links");
+ /**
+ * Copy Folder URL Template.
+ */
public static final URLTemplate COPY_FOLDER_URL = new URLTemplate("folders/%s/copy");
+ /**
+ * Delete Folder URL Template.
+ */
public static final URLTemplate DELETE_FOLDER_URL = new URLTemplate("folders/%s?recursive=%b");
+ /**
+ * Folder Info URL Template.
+ */
public static final URLTemplate FOLDER_INFO_URL_TEMPLATE = new URLTemplate("folders/%s");
+ /**
+ * Upload File URL Template.
+ */
public static final URLTemplate UPLOAD_FILE_URL = new URLTemplate("files/content");
+ /**
+ * Add Collaboration URL Template.
+ */
public static final URLTemplate ADD_COLLABORATION_URL = new URLTemplate("collaborations");
+ /**
+ * Get Collaborations URL Template.
+ */
public static final URLTemplate GET_COLLABORATIONS_URL = new URLTemplate("folders/%s/collaborations");
+ /**
+ * Get Items URL Template.
+ */
public static final URLTemplate GET_ITEMS_URL = new URLTemplate("folders/%s/items/");
+ /**
+ * Search URL Template.
+ */
public static final URLTemplate SEARCH_URL_TEMPLATE = new URLTemplate("search");
+ /**
+ * Metadata URL Template.
+ */
public static final URLTemplate METADATA_URL_TEMPLATE = new URLTemplate("folders/%s/metadata/%s/%s");
+ /**
+ * Upload Session URL Template.
+ */
public static final URLTemplate UPLOAD_SESSION_URL_TEMPLATE = new URLTemplate("files/upload_sessions");
/**
diff --git a/src/main/java/com/box/sdk/BoxItem.java b/src/main/java/com/box/sdk/BoxItem.java
index a5692ccbc..dad8de9b8 100644
--- a/src/main/java/com/box/sdk/BoxItem.java
+++ b/src/main/java/com/box/sdk/BoxItem.java
@@ -25,7 +25,9 @@ public abstract class BoxItem extends BoxResource {
"version_number", "comment_count", "permissions", "tags", "lock", "extension", "is_package",
"folder_upload_email", "item_collection", "sync_state", "has_collaborations", "can_non_owners_invite",
"file_version", "collections"};
-
+ /**
+ * Shared Item URL Template.
+ */
public static final URLTemplate SHARED_ITEM_URL_TEMPLATE = new URLTemplate("shared_items");
/**
diff --git a/src/main/java/com/box/sdk/BoxJSONRequest.java b/src/main/java/com/box/sdk/BoxJSONRequest.java
index 9cfb7d1f1..aabfaf823 100644
--- a/src/main/java/com/box/sdk/BoxJSONRequest.java
+++ b/src/main/java/com/box/sdk/BoxJSONRequest.java
@@ -37,7 +37,7 @@ public BoxJSONRequest(BoxAPIConnection api, URL url, HttpMethod method) {
}
/**
- * Constructs an authenticated BoxJSONRequest
+ * Constructs an authenticated BoxJSONRequest.
* @param url the URL of the request.
* @param method the HTTP method of the request.
*/
diff --git a/src/main/java/com/box/sdk/BoxJSONResponse.java b/src/main/java/com/box/sdk/BoxJSONResponse.java
index f50c59727..88b1f98f0 100644
--- a/src/main/java/com/box/sdk/BoxJSONResponse.java
+++ b/src/main/java/com/box/sdk/BoxJSONResponse.java
@@ -34,9 +34,10 @@ public BoxJSONResponse(HttpURLConnection connection) {
}
/**
- * Constructs a BoxAPIResponse with an http response code and response body
- * @param responseCode
- * @param body
+ * Constructs a BoxAPIResponse with an http response code and response body.
+ * @param responseCode http response code
+ * @param httpHeaders map of http headers
+ * @param body response body as Json Object
*/
public BoxJSONResponse(int responseCode, Map httpHeaders, JsonObject body) {
super(responseCode, httpHeaders);
@@ -44,6 +45,10 @@ public BoxJSONResponse(int responseCode, Map httpHeaders, JsonOb
this.json = body.toString();
}
+ /**
+ * Get response as Json Object.
+ * @return response as JsonObject
+ */
public JsonObject getJsonObject() {
if (this.jsonObject != null) {
return this.jsonObject;
diff --git a/src/main/java/com/box/sdk/BoxLegalHoldPolicy.java b/src/main/java/com/box/sdk/BoxLegalHoldPolicy.java
index 85ed9c62a..df8da1026 100644
--- a/src/main/java/com/box/sdk/BoxLegalHoldPolicy.java
+++ b/src/main/java/com/box/sdk/BoxLegalHoldPolicy.java
@@ -19,11 +19,22 @@
*/
@BoxResourceType("legal_hold")
public class BoxLegalHoldPolicy extends BoxResource {
-
+ /**
+ * Legal Hold URL Template.
+ */
public static final URLTemplate LEGAL_HOLD_URL_TEMPLATE = new URLTemplate("legal_hold_policies/%s");
+ /**
+ * All Legal Hold URL Template.
+ */
public static final URLTemplate ALL_LEGAL_HOLD_URL_TEMPLATE = new URLTemplate("legal_hold_policies");
+ /**
+ * Legal Hold Assignments URL Template.
+ */
public static final URLTemplate LEGAL_HOLD_ASSIGNMENTS_URL_TEMPLATE
= new URLTemplate("legal_hold_policies/%s/assignments");
+ /**
+ * List of File Version Holds URL Template.
+ */
public static final URLTemplate LIST_OF_FILE_VERSION_HOLDS_URL_TEMPLATE
= new URLTemplate("file_version_legal_holds");
private static final int DEFAULT_LIMIT = 100;
diff --git a/src/main/java/com/box/sdk/BoxRecents.java b/src/main/java/com/box/sdk/BoxRecents.java
index 74d075f6a..decc6cf7e 100644
--- a/src/main/java/com/box/sdk/BoxRecents.java
+++ b/src/main/java/com/box/sdk/BoxRecents.java
@@ -8,6 +8,9 @@
*/
public final class BoxRecents {
+ /**
+ * Recents URL Template.
+ */
public static final URLTemplate RECENTS_URL_TEMPLATE = new URLTemplate("recent_items");
//Constructor is not allowed
diff --git a/src/main/java/com/box/sdk/BoxRetentionPolicy.java b/src/main/java/com/box/sdk/BoxRetentionPolicy.java
index b54183507..65c50ad43 100644
--- a/src/main/java/com/box/sdk/BoxRetentionPolicy.java
+++ b/src/main/java/com/box/sdk/BoxRetentionPolicy.java
@@ -20,6 +20,20 @@
*/
@BoxResourceType("retention_policy")
public class BoxRetentionPolicy extends BoxResource {
+ /**
+ * The URL template used for operation with retention policies.
+ */
+ public static final URLTemplate RETENTION_POLICIES_URL_TEMPLATE = new URLTemplate("retention_policies");
+
+ /**
+ * The URL template used for operation with retention policy with given ID.
+ */
+ public static final URLTemplate POLICY_URL_TEMPLATE = new URLTemplate("retention_policies/%s");
+
+ /**
+ * The URL template used for operation with retention policy assignments.
+ */
+ public static final URLTemplate ASSIGNMENTS_URL_TEMPLATE = new URLTemplate("retention_policies/%s/assignments");
/**
* Will cause the content retained by the policy to be permanently deleted.
@@ -57,21 +71,6 @@ public class BoxRetentionPolicy extends BoxResource {
*/
private static final int DEFAULT_LIMIT = 100;
- /**
- * The URL template used for operation with retention policies.
- */
- public static final URLTemplate RETENTION_POLICIES_URL_TEMPLATE = new URLTemplate("retention_policies");
-
- /**
- * The URL template used for operation with retention policy with given ID.
- */
- public static final URLTemplate POLICY_URL_TEMPLATE = new URLTemplate("retention_policies/%s");
-
- /**
- * The URL template used for operation with retention policy assignments.
- */
- public static final URLTemplate ASSIGNMENTS_URL_TEMPLATE = new URLTemplate("retention_policies/%s/assignments");
-
/**
* Constructs a retention policy for a resource with a given ID.
*
diff --git a/src/main/java/com/box/sdk/BoxSearch.java b/src/main/java/com/box/sdk/BoxSearch.java
index 522c2a424..49351382b 100644
--- a/src/main/java/com/box/sdk/BoxSearch.java
+++ b/src/main/java/com/box/sdk/BoxSearch.java
@@ -14,6 +14,9 @@
*/
public class BoxSearch {
+ /**
+ * Search URL Template.
+ */
public static final URLTemplate SEARCH_URL_TEMPLATE = new URLTemplate("search");
private final BoxAPIConnection api;
diff --git a/src/main/java/com/box/sdk/BoxTask.java b/src/main/java/com/box/sdk/BoxTask.java
index 74ec69ee8..7be0b3ee6 100644
--- a/src/main/java/com/box/sdk/BoxTask.java
+++ b/src/main/java/com/box/sdk/BoxTask.java
@@ -17,8 +17,17 @@
@BoxResourceType("task")
public class BoxTask extends BoxResource {
+ /**
+ * Task URL Template.
+ */
public static final URLTemplate TASK_URL_TEMPLATE = new URLTemplate("tasks/%s");
+ /**
+ * Get Assignments URL Template.
+ */
public static final URLTemplate GET_ASSIGNMENTS_URL_TEMPLATE = new URLTemplate("tasks/%s/assignments");
+ /**
+ * Add Task Assignment URL Template.
+ */
public static final URLTemplate ADD_TASK_ASSIGNMENT_URL_TEMPLATE = new URLTemplate("task_assignments");
/**
diff --git a/src/main/java/com/box/sdk/BoxTaskAssignment.java b/src/main/java/com/box/sdk/BoxTaskAssignment.java
index 728cfa9df..82e2ab31b 100644
--- a/src/main/java/com/box/sdk/BoxTaskAssignment.java
+++ b/src/main/java/com/box/sdk/BoxTaskAssignment.java
@@ -14,6 +14,9 @@
@BoxResourceType("task_assignment")
public class BoxTaskAssignment extends BoxResource {
+ /**
+ * Task Assignment URL Template.
+ */
public static final URLTemplate TASK_ASSIGNMENT_URL_TEMPLATE = new URLTemplate("task_assignments/%s");
/**
diff --git a/src/main/java/com/box/sdk/BoxTrash.java b/src/main/java/com/box/sdk/BoxTrash.java
index ff4bd9e27..6479cd968 100644
--- a/src/main/java/com/box/sdk/BoxTrash.java
+++ b/src/main/java/com/box/sdk/BoxTrash.java
@@ -13,13 +13,29 @@
* handling for errors related to the Box REST API, you should capture this exception explicitly.
*/
public class BoxTrash implements Iterable {
- private static final long LIMIT = 1000;
+
+ /**
+ * Get Item URL Template.
+ */
public static final URLTemplate GET_ITEMS_URL = new URLTemplate("folders/trash/items/");
+ /**
+ * Folder Info URL Template.
+ */
public static final URLTemplate FOLDER_INFO_URL_TEMPLATE = new URLTemplate("folders/%s/trash");
+ /**
+ * File Info URL Template.
+ */
public static final URLTemplate FILE_INFO_URL_TEMPLATE = new URLTemplate("files/%s/trash");
+ /**
+ * Restore File URL Template.
+ */
public static final URLTemplate RESTORE_FILE_URL_TEMPLATE = new URLTemplate("files/%s");
+ /**
+ * Restore Folder URL Template.
+ */
public static final URLTemplate RESTORE_FOLDER_URL_TEMPLATE = new URLTemplate("folders/%s");
+ private static final long LIMIT = 1000;
private final BoxAPIConnection api;
/**
diff --git a/src/main/java/com/box/sdk/BoxUser.java b/src/main/java/com/box/sdk/BoxUser.java
index 3575f2f0f..78b889fe6 100644
--- a/src/main/java/com/box/sdk/BoxUser.java
+++ b/src/main/java/com/box/sdk/BoxUser.java
@@ -29,12 +29,33 @@ public class BoxUser extends BoxCollaborator {
"address", "avatar_url", "is_exempt_from_device_limits", "is_exempt_from_login_verification", "enterprise",
"my_tags", "hostname", "is_platform_access_only", "external_app_user_id"};
+ /**
+ * User URL Template.
+ */
public static final URLTemplate USER_URL_TEMPLATE = new URLTemplate("users/%s");
+ /**
+ * Get Me URL Template.
+ */
public static final URLTemplate GET_ME_URL = new URLTemplate("users/me");
+ /**
+ * Users URL Template.
+ */
public static final URLTemplate USERS_URL_TEMPLATE = new URLTemplate("users");
+ /**
+ * User Memberships URL Template.
+ */
public static final URLTemplate USER_MEMBERSHIPS_URL_TEMPLATE = new URLTemplate("users/%s/memberships");
+ /**
+ * E-Mail Alias URL Template.
+ */
public static final URLTemplate EMAIL_ALIAS_URL_TEMPLATE = new URLTemplate("users/%s/email_aliases/%s");
+ /**
+ * E-Mail Aliases URL Template.
+ */
public static final URLTemplate EMAIL_ALIASES_URL_TEMPLATE = new URLTemplate("users/%s/email_aliases");
+ /**
+ * Move Folder To User Template.
+ */
public static final URLTemplate MOVE_FOLDER_TO_USER_TEMPLATE = new URLTemplate("users/%s/folders/%s");
/**
diff --git a/src/main/java/com/box/sdk/BoxWebHook.java b/src/main/java/com/box/sdk/BoxWebHook.java
index f866a204f..df21af4eb 100644
--- a/src/main/java/com/box/sdk/BoxWebHook.java
+++ b/src/main/java/com/box/sdk/BoxWebHook.java
@@ -25,6 +25,15 @@
@BoxResourceType("webhook")
public class BoxWebHook extends BoxResource {
+ /**
+ * {@link URLTemplate} for {@link BoxWebHook}s resource.
+ */
+ public static final URLTemplate WEBHOOKS_URL_TEMPLATE = new URLTemplate("webhooks");
+ /**
+ * {@link URLTemplate} for single {@link BoxWebHook} resource.
+ */
+ public static final URLTemplate WEBHOOK_URL_TEMPLATE = new URLTemplate("webhooks/%s");
+
/**
* JSON Key for {@link BoxWebHook} {@link #getID()}.
*/
@@ -65,15 +74,6 @@ public class BoxWebHook extends BoxResource {
*/
private static final String JSON_KEY_CREATED_AT = "created_at";
- /**
- * {@link URLTemplate} for {@link BoxWebHook}s resource.
- */
- public static final URLTemplate WEBHOOKS_URL_TEMPLATE = new URLTemplate("webhooks");
- /**
- * {@link URLTemplate} for single {@link BoxWebHook} resource.
- */
- public static final URLTemplate WEBHOOK_URL_TEMPLATE = new URLTemplate("webhooks/%s");
-
/**
* Maps a {@link Trigger} to its {@link Trigger#getValue()}.
*/
diff --git a/src/main/java/com/box/sdk/BoxWebLink.java b/src/main/java/com/box/sdk/BoxWebLink.java
index 3da2fbe67..e701a8109 100644
--- a/src/main/java/com/box/sdk/BoxWebLink.java
+++ b/src/main/java/com/box/sdk/BoxWebLink.java
@@ -26,7 +26,13 @@ public class BoxWebLink extends BoxItem {
"path_collection", "created_at", "modified_at", "trashed_at", "purged_at", "created_by", "modified_by",
"owned_by", "shared_link", "parent", "item_status", "collections"};
+ /**
+ * Copy URL Template.
+ */
public static final URLTemplate COPY_URL_TEMPLATE = new URLTemplate("web_links/%s/copy");
+ /**
+ * Web Link URL Template.
+ */
public static final URLTemplate WEB_LINK_URL_TEMPLATE = new URLTemplate("web_links/%s");
/**
diff --git a/src/main/java/com/box/sdk/EventLog.java b/src/main/java/com/box/sdk/EventLog.java
index 77dc47fa9..af794aed0 100644
--- a/src/main/java/com/box/sdk/EventLog.java
+++ b/src/main/java/com/box/sdk/EventLog.java
@@ -19,10 +19,13 @@
*
*/
public class EventLog implements Iterable {
+
private static final int ENTERPRISE_LIMIT = 500;
+ /**
+ * Enterprise Event URL Template.
+ */
public static final URLTemplate ENTERPRISE_EVENT_URL_TEMPLATE = new URLTemplate("events?stream_type=admin_logs&"
+ "limit=" + ENTERPRISE_LIMIT);
-
private final int chunkSize;
private final int limit;
private final String nextStreamPosition;
diff --git a/src/main/java/com/box/sdk/EventStream.java b/src/main/java/com/box/sdk/EventStream.java
index 3bbc110a3..16ff821d4 100644
--- a/src/main/java/com/box/sdk/EventStream.java
+++ b/src/main/java/com/box/sdk/EventStream.java
@@ -19,10 +19,15 @@
*
*/
public class EventStream {
+
private static final int LIMIT = 800;
- public static final URLTemplate EVENT_URL = new URLTemplate("events?limit=" + LIMIT + "&stream_position=%s");
private static final int STREAM_POSITION_NOW = -1;
+ /**
+ * Events URL.
+ */
+ public static final URLTemplate EVENT_URL = new URLTemplate("events?limit=" + LIMIT + "&stream_position=%s");
+
private final BoxAPIConnection api;
private final long startingPosition;
private final Collection listeners;
diff --git a/src/main/java/com/box/sdk/URLTemplate.java b/src/main/java/com/box/sdk/URLTemplate.java
index fb5b4b5e9..d33ffd53a 100644
--- a/src/main/java/com/box/sdk/URLTemplate.java
+++ b/src/main/java/com/box/sdk/URLTemplate.java
@@ -3,13 +3,26 @@
import java.net.MalformedURLException;
import java.net.URL;
+/**
+ * A template class to build URLs from base URL, path, URL parameters and Query String.
+ */
public class URLTemplate {
private String template;
- URLTemplate(String template) {
+ /**
+ * Construct an URL Template object from path.
+ * @param template path
+ */
+ public URLTemplate(String template) {
this.template = template;
}
+ /**
+ * Build a URL with URL Parameters.
+ * @param base base URL
+ * @param values URL parameters
+ * @return URL
+ */
public URL build(String base, Object... values) {
String urlString = String.format(base + this.template, values);
@@ -23,6 +36,13 @@ public URL build(String base, Object... values) {
return url;
}
+ /**
+ * Build a URL with Query String and URL Parameters.
+ * @param base base URL
+ * @param queryString query string
+ * @param values URL Parameters
+ * @return URL
+ */
public URL buildWithQuery(String base, String queryString, Object... values) {
String urlString = String.format(base + this.template, values) + queryString;
URL url = null;
From ff0715683656a7e45954ddbe52fad66b8486dbb7 Mon Sep 17 00:00:00 2001
From: Harish Gokavarapu
Date: Fri, 25 Aug 2017 13:25:50 -0700
Subject: [PATCH 5/8] batch example and unit tests
---
build.gradle | 24 ++--
.../box/sdk/example/BatchRequestExample.java | 17 +--
.../java/com/box/sdk/BatchAPIRequest.java | 15 +-
.../java/com/box/sdk/BatchAPIRequestTest.java | 130 ++++++++++++++++++
4 files changed, 163 insertions(+), 23 deletions(-)
create mode 100644 src/test/java/com/box/sdk/BatchAPIRequestTest.java
diff --git a/build.gradle b/build.gradle
index 8c72c1335..ce89b85ca 100644
--- a/build.gradle
+++ b/build.gradle
@@ -15,6 +15,15 @@ repositories {
mavenCentral()
}
+sourceSets {
+ example {
+ java {
+ compileClasspath += main.output
+ runtimeClasspath += main.runtimeClasspath
+ }
+ }
+}
+
dependencies {
compile 'com.eclipsesource.minimal-json:minimal-json:0.9.1'
compile 'org.bitbucket.b_c:jose4j:0.4.4'
@@ -26,6 +35,7 @@ dependencies {
testCompile 'org.mockito:mockito-core:1.9.5'
testCompile 'org.slf4j:slf4j-api:1.7.7'
testCompile 'org.slf4j:slf4j-nop:1.7.7'
+ exampleCompile 'com.eclipsesource.minimal-json:minimal-json:0.9.1'
}
compileJava {
@@ -52,15 +62,6 @@ javadoc {
checkstyleMain { classpath += configurations.compile }
checkstyleTest { classpath += configurations.compile }
-sourceSets {
- example {
- java {
- compileClasspath += main.output
- runtimeClasspath += main.runtimeClasspath
- }
- }
-}
-
task runExample(type: JavaExec, dependsOn: 'exampleClasses') {
classpath = sourceSets.example.runtimeClasspath
main = 'com.box.sdk.example.Main'
@@ -76,6 +77,11 @@ task runAccessAsAppUser(type: JavaExec, dependsOn: 'exampleClasses') {
main = 'com.box.sdk.example.AccessAsAppUser'
}
+task runBatchExample(type: JavaExec, dependsOn: 'exampleClasses') {
+ classpath = sourceSets.example.runtimeClasspath
+ main = 'com.box.sdk.example.BatchRequestExample'
+}
+
task javadocJar(type: Jar) {
classifier = 'javadoc'
from javadoc
diff --git a/src/example/java/com/box/sdk/example/BatchRequestExample.java b/src/example/java/com/box/sdk/example/BatchRequestExample.java
index 901a3afa2..e375c39ab 100644
--- a/src/example/java/com/box/sdk/example/BatchRequestExample.java
+++ b/src/example/java/com/box/sdk/example/BatchRequestExample.java
@@ -1,4 +1,4 @@
-package com.box.sdk.utilities;
+package com.box.sdk.example;
import java.io.FileReader;
import java.io.IOException;
@@ -14,25 +14,23 @@
import com.box.sdk.BoxAPIResponse;
import com.box.sdk.BoxConfig;
import com.box.sdk.BoxDeveloperEditionAPIConnection;
-import com.box.sdk.BoxFile;
import com.box.sdk.BoxFolder;
import com.box.sdk.BoxJSONRequest;
import com.box.sdk.BoxJSONResponse;
-import com.box.sdk.BoxResource;
import com.box.sdk.BoxUser;
import com.box.sdk.IAccessTokenCache;
import com.box.sdk.InMemoryLRUAccessTokenCache;
import com.box.sdk.http.HttpMethod;
-import com.eclipsesource.json.JsonObject;
/**
*
*/
-public class BatchRequestExample {
+public final class BatchRequestExample {
private static final int MAX_CACHE_ENTRIES = 100;
- private static final String APP_USER_NAME = "BATCH-TEST-APP-USER-NAME";
+ private static final String APP_USER_NAME = "BATCH-TEST-APP-USER-NAME";
+ private BatchRequestExample() { }
public static void main(String[] args) throws IOException {
// Turn off logging to prevent polluting the output.
@@ -44,7 +42,7 @@ public static void main(String[] args) throws IOException {
//implement IAccessTokenCache to store and retrieve access tokens appropriately for your environment.
IAccessTokenCache accessTokenCache = new InMemoryLRUAccessTokenCache(MAX_CACHE_ENTRIES);
- Reader reader = new FileReader("src/example/config/config2.json");
+ Reader reader = new FileReader("src/example/config/config.json");
BoxConfig boxConfig = BoxConfig.readFrom(reader);
BoxDeveloperEditionAPIConnection api = BoxDeveloperEditionAPIConnection.getAppEnterpriseConnection(
@@ -60,10 +58,7 @@ public static void main(String[] args) throws IOException {
//Create App User Request
URL createUserURL = BoxUser.USERS_URL_TEMPLATE.build(api.getBaseURL());
BoxJSONRequest createAppUserRequest = new BoxJSONRequest(createUserURL, HttpMethod.POST);
- JsonObject requestJSON = new JsonObject();
- requestJSON.add("name", APP_USER_NAME);
- requestJSON.add("is_platform_access_only", true);
- createAppUserRequest.setBody(requestJSON.toString());
+ createAppUserRequest.setBody("{\"name\":\"" + APP_USER_NAME + "\",\"is_platform_access_only\":true}");
requests.add(createAppUserRequest);
//Get Root Folder Request
diff --git a/src/main/java/com/box/sdk/BatchAPIRequest.java b/src/main/java/com/box/sdk/BatchAPIRequest.java
index a398baeea..0ba5f7d88 100644
--- a/src/main/java/com/box/sdk/BatchAPIRequest.java
+++ b/src/main/java/com/box/sdk/BatchAPIRequest.java
@@ -40,11 +40,15 @@ public BatchAPIRequest(BoxAPIConnection api) {
*/
public List execute(List requests) {
this.prepareRequest(requests);
- BoxJSONResponse batchResponse = (BoxJSONResponse) super.send();
+ BoxJSONResponse batchResponse = (BoxJSONResponse) send();
return this.parseResponse(batchResponse);
}
- private void prepareRequest(List requests) {
+ /**
+ * Prepare a batch api request using list of individual reuests.
+ * @param requests list of api requests that has to be executed in batch.
+ */
+ protected void prepareRequest(List requests) {
JsonObject body = new JsonObject();
JsonArray requestsJSONArray = new JsonArray();
for (BoxAPIRequest request: requests) {
@@ -76,7 +80,12 @@ private void prepareRequest(List requests) {
super.setBody(body);
}
- private List parseResponse(BoxJSONResponse batchResponse) {
+ /**
+ * Parses btch api response to create a list of BoxAPIResponse objects.
+ * @param batchResponse response of a batch api request
+ * @return list of BoxAPIResponses
+ */
+ protected List parseResponse(BoxJSONResponse batchResponse) {
JsonObject responseJSON = JsonObject.readFrom(batchResponse.getJSON());
List responses = new ArrayList();
Iterator responseIterator = responseJSON.get("responses").asArray().iterator();
diff --git a/src/test/java/com/box/sdk/BatchAPIRequestTest.java b/src/test/java/com/box/sdk/BatchAPIRequestTest.java
new file mode 100644
index 000000000..a8a072198
--- /dev/null
+++ b/src/test/java/com/box/sdk/BatchAPIRequestTest.java
@@ -0,0 +1,130 @@
+package com.box.sdk;
+
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
+
+import com.box.sdk.http.HttpMethod;
+import com.eclipsesource.json.JsonArray;
+import com.eclipsesource.json.JsonObject;
+import com.eclipsesource.json.JsonValue;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+
+/**
+ *
+ */
+public class BatchAPIRequestTest {
+ @Test
+ @Category(UnitTest.class)
+ public void testThatBodyHasAllRequiredFieldsInEachResponse() {
+ try {
+ final String anyClientID = "";
+ final String anyClientSecret = "";
+ final String anyAccessToken = "";
+ final String anyRefreshToken = "";
+
+ BoxAPIConnection api = new BoxAPIConnection(anyClientID, anyClientSecret, anyAccessToken, anyRefreshToken);
+
+ List requests = new ArrayList();
+
+ //Get current user request
+ URL getMeURL = BoxUser.GET_ME_URL.build(api.getBaseURL());
+ BoxAPIRequest getMeRequest = new BoxAPIRequest(getMeURL, HttpMethod.GET);
+ requests.add(getMeRequest);
+
+ //Create App User Request
+ URL createUserURL = BoxUser.USERS_URL_TEMPLATE.build(api.getBaseURL());
+ BoxJSONRequest createAppUserRequest = new BoxJSONRequest(createUserURL, HttpMethod.POST);
+ createAppUserRequest.setBody("{\"name\":\"some-name\","
+ + "\"is_platform_access_only\":true}");
+ requests.add(createAppUserRequest);
+
+ //Get Root Folder Request
+ URL getRootFolderURL = BoxFolder.FOLDER_INFO_URL_TEMPLATE.build(api.getBaseURL(), 0);
+ BoxAPIRequest getRootFolderRequest = new BoxAPIRequest(getRootFolderURL, HttpMethod.GET);
+ requests.add(getRootFolderRequest);
+
+ BatchAPIRequest batchRequest = new BatchAPIRequest(api);
+ batchRequest.prepareRequest(requests);
+
+ assertTrue("requests field should be an array",
+ (batchRequest.getBodyAsJsonObject().get("requests").isArray()));
+
+ JsonArray requestsArray = batchRequest.getBodyAsJsonObject().get("requests").asArray();
+ for (JsonValue request : requestsArray) {
+ assertTrue("each request should be an object",
+ (request.isObject()));
+ assertTrue("each request should have a relative_url that is string",
+ (((JsonObject) request).get("relative_url").isString()));
+ assertTrue("each request should have a method that is string",
+ (((JsonObject) request).get("method").isString()));
+ assertTrue("each request should have headers as object",
+ (((JsonObject) request).get("headers").isObject()));
+ if (((JsonObject) request).get("method").asString().equals(HttpMethod.POST)) {
+ assertTrue("request should have body when method is POST",
+ (((JsonObject) request).get("body").isObject()));
+ }
+ }
+
+ } catch (Exception e) {
+ fail("Exception during test execution " + e);
+ }
+ }
+
+ @Test
+ @Category(UnitTest.class)
+ public void testTheParsingResponseWorksAsIntended() {
+ try {
+ final String anyClientID = "";
+ final String anyClientSecret = "";
+ final String anyAccessToken = "";
+ final String anyRefreshToken = "";
+
+ BoxAPIConnection api = new BoxAPIConnection(anyClientID, anyClientSecret, anyAccessToken, anyRefreshToken);
+ BatchAPIRequest batchRequest = new BatchAPIRequest(api);
+ String stringResponse = "{\n"
+ + "\t\"responses\": [{\n"
+ + "\t\t\t\"status\": 201,\n"
+ + "\t\t\t\"response\": {\n"
+ + "\t\t\t\t\"type\": \"collaboration\",\n"
+ + "\t\t\t\t\"id\": \"123\"\n"
+ + "\t\t\t}\n"
+ + "\t\t},\n"
+ + "\t\t{\n"
+ + "\t\t\t\"status\": 404,\n"
+ + "\t\t\t\"response\": {\n"
+ + "\t\t\t\t\"type\": \"error\",\n"
+ + "\t\t\t\t\"status\": 404,\n"
+ + "\t\t\t\t\"code\": \"not_found\",\n"
+ + "\t\t\t\t\"message\": \"Not Found\",\n"
+ + "\t\t\t\t\"request_id\": \"139334760758014ea2935ab\"\n"
+ + "\t\t\t}\n"
+ + "\t\t},\n"
+ + "\t\t{\n"
+ + "\t\t\t\"status\": 200,\n"
+ + "\t\t\t\"response\": {\n"
+ + "\t\t\t\t\"type\": \"collaboration\",\n"
+ + "\t\t\t\t\"id\": \"456\"\n"
+ + "\t\t\t}\n"
+ + "\t\t}\n"
+ + "\t]\n"
+ + "}";
+ JsonObject responseJson = JsonObject.readFrom(stringResponse);
+ BoxJSONResponse batchResponse = new BoxJSONResponse(200, null, responseJson);
+ List responses = batchRequest.parseResponse(batchResponse);
+
+ assertTrue("There should be three responses", responses.size() == 3);
+ for (BoxAPIResponse response: responses) {
+ assertTrue("Always has response body", ((BoxJSONResponse) response).getJsonObject() != null);
+ }
+
+ } catch (Exception e) {
+ fail("Exception during test execution " + e);
+ }
+ }
+
+}
From 947c80b3906474797f2459d13f282cade23451c6 Mon Sep 17 00:00:00 2001
From: Harish Gokavarapu
Date: Fri, 25 Aug 2017 13:30:06 -0700
Subject: [PATCH 6/8] example details
---
README.md | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/README.md b/README.md
index 9dfe53c2e..2f008218f 100644
--- a/README.md
+++ b/README.md
@@ -120,6 +120,12 @@ Then just invoke `gradle runAccessAsAppUser` to run the AccessAsAppUser example!
Note: The JCE bundled with oracle JRE supports keys upto 128 bit length only. To use larger cryptographic keys, install [JCE Unlimited Strength Jurisdiction Policy Files](http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html).
+#### BatchRequestExample
+
+There migt be cases where you want a bunch of requests to be executed as a single request. This example will show you how to do that
+
+Just invoke `gradle runBatchExample` to run the BatchRequestExample example!
+
Building
--------
From 1f78f147520a075f7f3c0bc5f544f555e868b4d5 Mon Sep 17 00:00:00 2001
From: Harish Gokavarapu
Date: Fri, 25 Aug 2017 13:51:04 -0700
Subject: [PATCH 7/8] relative path for suppressing checkstyle. documentation
for BatchAPIRequest class
---
config/checkstyle/suppressions.xml | 2 +-
src/main/java/com/box/sdk/BatchAPIRequest.java | 7 +++++--
2 files changed, 6 insertions(+), 3 deletions(-)
diff --git a/config/checkstyle/suppressions.xml b/config/checkstyle/suppressions.xml
index 7dab151a0..58d445bbd 100644
--- a/config/checkstyle/suppressions.xml
+++ b/config/checkstyle/suppressions.xml
@@ -14,5 +14,5 @@
+ files="main/java/com/box/sdk/EventLog.java"/>
diff --git a/src/main/java/com/box/sdk/BatchAPIRequest.java b/src/main/java/com/box/sdk/BatchAPIRequest.java
index 0ba5f7d88..88871bcfe 100644
--- a/src/main/java/com/box/sdk/BatchAPIRequest.java
+++ b/src/main/java/com/box/sdk/BatchAPIRequest.java
@@ -5,7 +5,6 @@
import java.util.Iterator;
import java.util.List;
import java.util.Map;
-import java.util.logging.Logger;
import com.box.sdk.http.HttpHeaders;
import com.box.sdk.http.HttpMethod;
@@ -14,14 +13,18 @@
import com.eclipsesource.json.JsonValue;
/**
+ * Used to make a bunch of HTTP Requests as a batch. Currently the number of requests that can be batched at once
+ * is capped at 20 by the API layer. Also there are certain requests which cannot be performed
+ * by Batch API. Check API documentation for more information.
*
+ * The request itself is a BoxJSONRequest but extends it to provide additional functionality for aggregating
+ * a bunch of requests and responding with multiple responses as if the requests were called individually
*/
public class BatchAPIRequest extends BoxJSONRequest {
/**
* Batch URL Template.
*/
public static final URLTemplate BATCH_URL_TEMPLATE = new URLTemplate("batch");
- private static final Logger LOGGER = Logger.getLogger(BoxAPIRequest.class.getName());
private final BoxAPIConnection api;
/**
From 70de9a64f09a3a882bb61dccc67aedca15462288 Mon Sep 17 00:00:00 2001
From: Harish Gokavarapu
Date: Mon, 28 Aug 2017 13:05:32 -0700
Subject: [PATCH 8/8] feedback
---
src/main/java/com/box/sdk/BoxAPIResponse.java | 3 ++-
src/main/java/com/box/sdk/BoxJSONRequest.java | 10 +++++-----
src/main/java/com/box/sdk/BoxJSONResponse.java | 11 +++--------
3 files changed, 10 insertions(+), 14 deletions(-)
diff --git a/src/main/java/com/box/sdk/BoxAPIResponse.java b/src/main/java/com/box/sdk/BoxAPIResponse.java
index 0488b3880..c136aa4f9 100644
--- a/src/main/java/com/box/sdk/BoxAPIResponse.java
+++ b/src/main/java/com/box/sdk/BoxAPIResponse.java
@@ -27,6 +27,7 @@ public class BoxAPIResponse {
private static final int BUFFER_SIZE = 8192;
private final HttpURLConnection connection;
+ //Batch API Response will have headers in response body
private final Map headers;
private int responseCode;
@@ -109,7 +110,7 @@ public long getContentLength() {
* @return value of the header.
*/
public String getHeaderField(String fieldName) {
- //Whenever headers map is null, try to get the headers from the connection
+ // headers map is null for all regular response calls except when made as a batch request
if (this.headers == null) {
if (this.connection != null) {
return this.connection.getHeaderField(fieldName);
diff --git a/src/main/java/com/box/sdk/BoxJSONRequest.java b/src/main/java/com/box/sdk/BoxJSONRequest.java
index aabfaf823..105f34a95 100644
--- a/src/main/java/com/box/sdk/BoxJSONRequest.java
+++ b/src/main/java/com/box/sdk/BoxJSONRequest.java
@@ -12,7 +12,7 @@
* automatically sets the appropriate "Content-Type" HTTP headers and allows the JSON in the request to be logged.
*/
public class BoxJSONRequest extends BoxAPIRequest {
- private JsonObject json;
+ private JsonObject jsonObject;
/**
* Constructs an authenticated BoxJSONRequest using a provided BoxAPIConnection.
@@ -53,7 +53,7 @@ public BoxJSONRequest(URL url, HttpMethod method) {
@Override
public void setBody(String body) {
super.setBody(body);
- this.json = JsonObject.readFrom(body);
+ this.jsonObject = JsonObject.readFrom(body);
}
/**
@@ -62,7 +62,7 @@ public void setBody(String body) {
*/
public void setBody(JsonObject body) {
super.setBody(body.toString());
- this.json = body;
+ this.jsonObject = body;
}
/**
@@ -70,11 +70,11 @@ public void setBody(JsonObject body) {
* @return body represented as JsonObject.
*/
public JsonObject getBodyAsJsonObject() {
- return this.json;
+ return this.jsonObject;
}
@Override
protected String bodyToString() {
- return this.json.asString();
+ return this.jsonObject.toString();
}
}
diff --git a/src/main/java/com/box/sdk/BoxJSONResponse.java b/src/main/java/com/box/sdk/BoxJSONResponse.java
index 88b1f98f0..082e7aea9 100644
--- a/src/main/java/com/box/sdk/BoxJSONResponse.java
+++ b/src/main/java/com/box/sdk/BoxJSONResponse.java
@@ -16,7 +16,6 @@
public class BoxJSONResponse extends BoxAPIResponse {
private static final int BUFFER_SIZE = 8192;
private JsonObject jsonObject;
- private String json;
/**
* Constructs a BoxJSONResponse without an associated HttpURLConnection.
@@ -42,7 +41,6 @@ public BoxJSONResponse(HttpURLConnection connection) {
public BoxJSONResponse(int responseCode, Map httpHeaders, JsonObject body) {
super(responseCode, httpHeaders);
this.jsonObject = body;
- this.json = body.toString();
}
/**
@@ -63,12 +61,9 @@ public JsonObject getJsonObject() {
* @return the body of the response as a JSON string.
*/
public String getJSON() {
- if (this.json != null) {
- return this.json;
- } else if (this.jsonObject != null) {
+ if (this.jsonObject != null) {
return this.jsonObject.toString();
} else {
-
InputStreamReader reader = new InputStreamReader(this.getBody(), StandardCharsets.UTF_8);
StringBuilder builder = new StringBuilder();
char[] buffer = new char[BUFFER_SIZE];
@@ -85,8 +80,8 @@ public String getJSON() {
} catch (IOException e) {
throw new BoxAPIException("Couldn't connect to the Box API due to a network error.", e);
}
- this.json = builder.toString();
- return this.json;
+ this.jsonObject = JsonObject.readFrom(builder.toString());
+ return builder.toString();
}
}