From a608752516682a74fdaba13350d297c7350556f4 Mon Sep 17 00:00:00 2001 From: GIlyazitdinov Raphael Date: Mon, 26 Oct 2015 16:26:51 -0400 Subject: [PATCH 01/17] Update org.apache.httpcomponents dependency 4.2.2>4.5.1 --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 35592fe..3a14d26 100644 --- a/pom.xml +++ b/pom.xml @@ -64,12 +64,12 @@ org.apache.httpcomponents httpclient - 4.2.2 + 4.5.1 org.apache.httpcomponents httpmime - 4.2.2 + 4.5.1 com.fasterxml.jackson.core From e86fa31d333f9e33f4e826335673cc9b990208ff Mon Sep 17 00:00:00 2001 From: GIlyazitdinov Raphael Date: Mon, 26 Oct 2015 17:17:17 -0400 Subject: [PATCH 02/17] Replaced deprecated PoolingClientConnectionManager with PoolingHttpClientConnectionManager, DefaultHttpClient with CloseableHttpClient and HttpResponse with CloseableHttpResponse. This fixes #7 , fixes #1. --- src/main/java/com/uploadcare/api/Client.java | 57 ++++--- .../com/uploadcare/api/RequestHelper.java | 149 ++++++++++-------- 2 files changed, 124 insertions(+), 82 deletions(-) diff --git a/src/main/java/com/uploadcare/api/Client.java b/src/main/java/com/uploadcare/api/Client.java index 68196e3..538ea4b 100644 --- a/src/main/java/com/uploadcare/api/Client.java +++ b/src/main/java/com/uploadcare/api/Client.java @@ -1,29 +1,29 @@ package com.uploadcare.api; -import java.io.UnsupportedEncodingException; -import java.net.URI; -import java.net.URISyntaxException; -import java.util.ArrayList; -import java.util.List; - +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.PropertyNamingStrategy; +import com.uploadcare.data.CopyFileData; +import com.uploadcare.data.FileData; +import com.uploadcare.data.ProjectData; import com.uploadcare.exceptions.UploadcareApiException; +import com.uploadcare.urls.Urls; + import org.apache.http.NameValuePair; -import org.apache.http.client.HttpClient; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpDelete; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; -import org.apache.http.impl.client.DefaultHttpClient; -import org.apache.http.impl.conn.PoolingClientConnectionManager; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; import org.apache.http.message.BasicNameValuePair; -import com.fasterxml.jackson.databind.DeserializationFeature; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.PropertyNamingStrategy; -import com.uploadcare.data.CopyFileData; -import com.uploadcare.data.FileData; -import com.uploadcare.data.ProjectData; -import com.uploadcare.urls.Urls; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.net.URI; +import java.util.ArrayList; +import java.util.List; /** * Uploadcare API client. @@ -39,7 +39,7 @@ public class Client { private final String privateKey; private final boolean simpleAuth; - private final HttpClient httpClient; + private final CloseableHttpClient httpClient; private final ObjectMapper objectMapper; private final RequestHelperProvider requestHelperProvider; @@ -77,7 +77,12 @@ public Client( objectMapper = null; } else { this.requestHelperProvider = new DefaultRequestHelperProvider(); - httpClient = new DefaultHttpClient(new PoolingClientConnectionManager()); + PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager(); + cm.setMaxTotal(200); + cm.setDefaultMaxPerRoute(20); + httpClient = HttpClients.custom() + .setConnectionManager(cm) + .build(); objectMapper = new ObjectMapper(); objectMapper.setPropertyNamingStrategy(PropertyNamingStrategy.CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES); objectMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES); @@ -124,7 +129,7 @@ public boolean isSimpleAuth() { return simpleAuth; } - HttpClient getHttpClient() { + CloseableHttpClient getHttpClient() { return httpClient; } @@ -195,6 +200,20 @@ public void saveFile(String fileId) { requestHelper.executeCommand(new HttpPost(url), true); } + /** + * Closes client. + * + * Ensures that all connections kept alive by the manager get closed and system resources allocated by those connections are released. + */ + public void close() { + if(httpClient!=null){ + try { + httpClient.close(); + } catch (IOException e) { + throw new UploadcareApiException("Error during closing CloseableHttpClient", e); + } + } + } /** * * @param fileId Resource UUID diff --git a/src/main/java/com/uploadcare/api/RequestHelper.java b/src/main/java/com/uploadcare/api/RequestHelper.java index 36fcdf0..189845f 100644 --- a/src/main/java/com/uploadcare/api/RequestHelper.java +++ b/src/main/java/com/uploadcare/api/RequestHelper.java @@ -7,18 +7,17 @@ import com.uploadcare.exceptions.UploadcareInvalidRequestException; import com.uploadcare.exceptions.UploadcareNetworkException; import com.uploadcare.urls.UrlParameter; + import org.apache.commons.codec.binary.Hex; import org.apache.commons.codec.digest.DigestUtils; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; -import org.apache.http.StatusLine; +import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpUriRequest; import org.apache.http.client.utils.URIBuilder; import org.apache.http.util.EntityUtils; -import javax.crypto.Mac; -import javax.crypto.spec.SecretKeySpec; import java.io.IOException; import java.io.InputStream; import java.net.URI; @@ -26,7 +25,15 @@ import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import java.text.SimpleDateFormat; -import java.util.*; +import java.util.Calendar; +import java.util.Date; +import java.util.GregorianCalendar; +import java.util.Iterator; +import java.util.List; +import java.util.TimeZone; + +import javax.crypto.Mac; +import javax.crypto.spec.SecretKeySpec; import static com.uploadcare.urls.UrlUtils.trustedBuild; @@ -40,8 +47,11 @@ public class RequestHelper { private final Client client; public static final String DATE_FORMAT = "EEE, dd MMM yyyy HH:mm:ss Z"; + public static final TimeZone UTC = TimeZone.getTimeZone("UTC"); + private static final String EMPTY_MD5 = DigestUtils.md5Hex(""); + private static final String JSON_CONTENT_TYPE = "application/json"; RequestHelper(Client client) { @@ -75,12 +85,13 @@ public void setApiHeaders(HttpUriRequest request) { Calendar calendar = new GregorianCalendar(UTC); String formattedDate = rfc2822(calendar.getTime()); - request.setHeader("Accept", "application/vnd.uploadcare-v0.3+json"); - request.setHeader("Date", formattedDate); + request.setHeader("Accept", "application/vnd.uploadcare-v0.3+json"); + request.setHeader("Date", formattedDate); String authorization; if (client.isSimpleAuth()) { - authorization = "Uploadcare.Simple " + client.getPublicKey() + ":" + client.getPrivateKey(); + authorization = "Uploadcare.Simple " + client.getPublicKey() + ":" + client + .getPrivateKey(); } else { try { String signature = makeSignature(request, formattedDate); @@ -97,13 +108,15 @@ public T executeQuery(HttpUriRequest request, boolean apiHeaders, Class d setApiHeaders(request); } try { - HttpResponse response = client.getHttpClient().execute(request); - - checkResponseStatus(response); - - HttpEntity entity = response.getEntity(); - String data = EntityUtils.toString(entity); - return client.getObjectMapper().readValue(data, dataClass); + CloseableHttpResponse response = client.getHttpClient().execute(request); + checkResponseStatus(response); + try { + HttpEntity entity = response.getEntity(); + String data = EntityUtils.toString(entity); + return client.getObjectMapper().readValue(data, dataClass); + } finally { + response.close(); + } } catch (IOException e) { throw new UploadcareNetworkException(e); } @@ -125,7 +138,9 @@ public Iterable executePaginatedQuery( public Iterator iterator() { return new Iterator() { private int page = 0; + private boolean more; + private Iterator pageIterator; { @@ -137,7 +152,8 @@ private void getNext() { setQueryParameters(builder, urlParameters); builder.setParameter("page", Integer.toString(++page)); URI pageUrl = trustedBuild(builder); - PageData pageData = executeQuery(new HttpGet(pageUrl), apiHeaders, dataClass); + PageData pageData = executeQuery(new HttpGet(pageUrl), apiHeaders, + dataClass); more = pageData.hasMore(); pageIterator = pageData.getResults().iterator(); } @@ -165,62 +181,69 @@ public void remove() { }; } - /** - * Executes the request et the Uploadcare API and return the HTTP Response object. - * - * The existence of this method(and it's return type) enables the end user to extend the functionality of the - * Uploadcare API client by creating a subclass of {@link com.uploadcare.api.Client}. - * - * @param request request to be sent to the API - * @param apiHeaders TRUE if the default API headers should be set - * - * @return HTTP Response object - */ + /** + * Executes the request et the Uploadcare API and return the HTTP Response object. + * + * The existence of this method(and it's return type) enables the end user to extend the + * functionality of the + * Uploadcare API client by creating a subclass of {@link com.uploadcare.api.Client}. + * + * @param request request to be sent to the API + * @param apiHeaders TRUE if the default API headers should be set + * @return HTTP Response object + */ public HttpResponse executeCommand(HttpUriRequest request, boolean apiHeaders) { if (apiHeaders) { setApiHeaders(request); } try { - HttpResponse response = client.getHttpClient().execute(request); - - checkResponseStatus(response); - - return response; - } catch (IOException e) { + CloseableHttpResponse response = client.getHttpClient().execute(request); + try { + checkResponseStatus(response); + return response; + }finally { + response.close(); + } + } catch (IOException e) { throw new UploadcareNetworkException(e); } } - /** - * Verifies that the response status codes are within acceptable boundaries and throws corresponding exceptions - * otherwise. - * - * @param response The response object to be checked - * @throws IOException - */ - private void checkResponseStatus(HttpResponse response) throws IOException { - - int statusCode = response.getStatusLine().getStatusCode(); - - if(statusCode >= 200 && statusCode < 300) { - return; - } else if(statusCode == 401 || statusCode == 403) { - throw new UploadcareAuthenticationException(streamToString(response.getEntity().getContent())); - } else if(statusCode == 400 || statusCode == 404) { - throw new UploadcareInvalidRequestException(streamToString(response.getEntity().getContent())); - } else { - throw new UploadcareApiException("Unknown exception during an API call, response:" + streamToString(response.getEntity().getContent())); - } - } - - /** - * Convert an InputStream into a String object. Method taken from http://stackoverflow.com/a/5445161/521535 - * @param is The stream to be converted - * @return The resulting String - */ - private static String streamToString(InputStream is) { - java.util.Scanner s = new java.util.Scanner(is, "UTF-8").useDelimiter("\\A"); - return s.hasNext() ? s.next() : ""; - } + /** + * Verifies that the response status codes are within acceptable boundaries and throws + * corresponding exceptions + * otherwise. + * + * @param response The response object to be checked + */ + private void checkResponseStatus(HttpResponse response) throws IOException { + + int statusCode = response.getStatusLine().getStatusCode(); + + if (statusCode >= 200 && statusCode < 300) { + return; + } else if (statusCode == 401 || statusCode == 403) { + throw new UploadcareAuthenticationException( + streamToString(response.getEntity().getContent())); + } else if (statusCode == 400 || statusCode == 404) { + throw new UploadcareInvalidRequestException( + streamToString(response.getEntity().getContent())); + } else { + throw new UploadcareApiException( + "Unknown exception during an API call, response:" + streamToString( + response.getEntity().getContent())); + } + } + + /** + * Convert an InputStream into a String object. Method taken from http://stackoverflow.com/a/5445161/521535 + * + * @param is The stream to be converted + * @return The resulting String + */ + private static String streamToString(InputStream is) { + java.util.Scanner s = new java.util.Scanner(is, "UTF-8").useDelimiter("\\A"); + return s.hasNext() ? s.next() : ""; + } } From cf601fa3ab63c4492dfb376fe299df6a3cb55b71 Mon Sep 17 00:00:00 2001 From: GIlyazitdinov Raphael Date: Fri, 30 Oct 2015 15:37:23 +0300 Subject: [PATCH 03/17] Updated Authors. --- AUTHORS.md | 1 + pom.xml | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/AUTHORS.md b/AUTHORS.md index e5ec099..1c64d12 100644 --- a/AUTHORS.md +++ b/AUTHORS.md @@ -1,3 +1,4 @@ 1. Alexander Tchernin @alchernin 2. Dimitry Solovyov @dimituri 3. Yervand Aghababyan @dnavre +4. Raphael Gilyazitdinov @raphaelnew diff --git a/pom.xml b/pom.xml index 3a14d26..3229a19 100644 --- a/pom.xml +++ b/pom.xml @@ -58,6 +58,11 @@ dnavre yervand.aghababyan@gmail.com + + Raphael Gilyazitdinov + raphaelnew + rafa@irafa.ru + From 52b91b50733e7f8626adcb215809d000e21d5864 Mon Sep 17 00:00:00 2001 From: GIlyazitdinov Raphael Date: Fri, 30 Oct 2015 15:46:37 +0300 Subject: [PATCH 04/17] Updated pagination to API-v4. Added 'limit', 'from', 'to' parameters to Files resource filtering. --- .../com/uploadcare/api/FilesQueryBuilder.java | 34 +++++++++++++++++++ .../com/uploadcare/api/RequestHelper.java | 18 +++++++--- .../com/uploadcare/data/FilePageData.java | 10 +++--- .../java/com/uploadcare/data/PageData.java | 2 +- .../uploadcare/urls/FilesFromParameter.java | 22 ++++++++++++ .../uploadcare/urls/FilesLimitParameter.java | 18 ++++++++++ .../com/uploadcare/urls/FilesToParameter.java | 22 ++++++++++++ 7 files changed, 116 insertions(+), 10 deletions(-) create mode 100644 src/main/java/com/uploadcare/urls/FilesFromParameter.java create mode 100644 src/main/java/com/uploadcare/urls/FilesLimitParameter.java create mode 100644 src/main/java/com/uploadcare/urls/FilesToParameter.java diff --git a/src/main/java/com/uploadcare/api/FilesQueryBuilder.java b/src/main/java/com/uploadcare/api/FilesQueryBuilder.java index 962dc8f..bda6d3c 100644 --- a/src/main/java/com/uploadcare/api/FilesQueryBuilder.java +++ b/src/main/java/com/uploadcare/api/FilesQueryBuilder.java @@ -1,13 +1,17 @@ package com.uploadcare.api; import com.uploadcare.data.FilePageData; +import com.uploadcare.urls.FilesFromParameter; +import com.uploadcare.urls.FilesLimitParameter; import com.uploadcare.urls.FilesRemovedParameter; import com.uploadcare.urls.FilesStoredParameter; +import com.uploadcare.urls.FilesToParameter; import com.uploadcare.urls.UrlParameter; import com.uploadcare.urls.Urls; import java.net.URI; import java.util.ArrayList; +import java.util.Date; import java.util.List; /** @@ -49,6 +53,36 @@ public FilesQueryBuilder stored(boolean stored) { return this; } + /** + * Adds a filter for amount of files in one response. + * + * @param limit Amount of files in response. Default is 100, maximum is 1000. + */ + public FilesQueryBuilder limit(int limit) { + parameters.add(new FilesLimitParameter(limit)); + return this; + } + + /** + * Adds a filter for datetime from objects will be returned. + * + * @param from A uploading datetime from which objects will be returned. + */ + public FilesQueryBuilder from(Date from) { + parameters.add(new FilesFromParameter(from)); + return this; + } + + /** + * Adds a filter for datetime to which objects will be returned. + * + * @param to A uploading datetime to which objects will be returned. + */ + public FilesQueryBuilder to(Date to) { + parameters.add(new FilesToParameter(to)); + return this; + } + public Iterable asIterable() { URI url = Urls.apiFiles(); RequestHelper requestHelper = client.getRequestHelper(); diff --git a/src/main/java/com/uploadcare/api/RequestHelper.java b/src/main/java/com/uploadcare/api/RequestHelper.java index 189845f..8a9bcd8 100644 --- a/src/main/java/com/uploadcare/api/RequestHelper.java +++ b/src/main/java/com/uploadcare/api/RequestHelper.java @@ -38,7 +38,7 @@ import static com.uploadcare.urls.UrlUtils.trustedBuild; /** - * A helper class for doing API calls to the Uploadcare API. Supports API version 0.3. + * A helper class for doing API calls to the Uploadcare API. Supports API version 0.4. * * TODO Support of throttled requests needs to be added */ @@ -48,6 +48,8 @@ public class RequestHelper { public static final String DATE_FORMAT = "EEE, dd MMM yyyy HH:mm:ss Z"; + public static final String DATE_FORMAT_ISO_8601 = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"; + public static final TimeZone UTC = TimeZone.getTimeZone("UTC"); private static final String EMPTY_MD5 = DigestUtils.md5Hex(""); @@ -64,6 +66,12 @@ public static String rfc2822(Date date) { return dateFormat.format(date); } + public static String iso8601(Date date) { + SimpleDateFormat dateFormat = new SimpleDateFormat(RequestHelper.DATE_FORMAT_ISO_8601); + dateFormat.setTimeZone(UTC); + return dateFormat.format(date); + } + public String makeSignature(HttpUriRequest request, String date) throws NoSuchAlgorithmException, InvalidKeyException { StringBuilder sb = new StringBuilder(); @@ -85,7 +93,7 @@ public void setApiHeaders(HttpUriRequest request) { Calendar calendar = new GregorianCalendar(UTC); String formattedDate = rfc2822(calendar.getTime()); - request.setHeader("Accept", "application/vnd.uploadcare-v0.3+json"); + request.setHeader("Accept", "application/vnd.uploadcare-v0.4+json"); request.setHeader("Date", formattedDate); String authorization; @@ -137,10 +145,9 @@ public Iterable executePaginatedQuery( return new Iterable() { public Iterator iterator() { return new Iterator() { - private int page = 0; + private int offset = 0; private boolean more; - private Iterator pageIterator; { @@ -150,11 +157,12 @@ public Iterator iterator() { private void getNext() { URIBuilder builder = new URIBuilder(url); setQueryParameters(builder, urlParameters); - builder.setParameter("page", Integer.toString(++page)); + builder.setParameter("offset", Integer.toString(offset)); URI pageUrl = trustedBuild(builder); PageData pageData = executeQuery(new HttpGet(pageUrl), apiHeaders, dataClass); more = pageData.hasMore(); + offset += pageData.getResults().size(); pageIterator = pageData.getResults().iterator(); } diff --git a/src/main/java/com/uploadcare/data/FilePageData.java b/src/main/java/com/uploadcare/data/FilePageData.java index 38ce452..b15e529 100644 --- a/src/main/java/com/uploadcare/data/FilePageData.java +++ b/src/main/java/com/uploadcare/data/FilePageData.java @@ -1,11 +1,13 @@ package com.uploadcare.data; +import java.net.URI; import java.util.List; public class FilePageData implements PageData { - - public int page; - public int pages; + public URI next; + public URI previous; + public int total; + public int perPage; public List results; public List getResults() { @@ -13,7 +15,7 @@ public List getResults() { } public boolean hasMore() { - return page < pages; + return next!=null; } } diff --git a/src/main/java/com/uploadcare/data/PageData.java b/src/main/java/com/uploadcare/data/PageData.java index 3fe55ac..9edc02c 100644 --- a/src/main/java/com/uploadcare/data/PageData.java +++ b/src/main/java/com/uploadcare/data/PageData.java @@ -5,6 +5,6 @@ public interface PageData { List getResults(); - boolean hasMore(); + boolean hasMore(); } diff --git a/src/main/java/com/uploadcare/urls/FilesFromParameter.java b/src/main/java/com/uploadcare/urls/FilesFromParameter.java new file mode 100644 index 0000000..fa29895 --- /dev/null +++ b/src/main/java/com/uploadcare/urls/FilesFromParameter.java @@ -0,0 +1,22 @@ +package com.uploadcare.urls; + +import com.uploadcare.api.RequestHelper; + +import java.util.Date; + +public class FilesFromParameter implements UrlParameter { + + private final Date from; + + public FilesFromParameter(Date from) { + this.from = from; + } + + public String getParam() { + return "from"; + } + + public String getValue() { + return RequestHelper.iso8601(from); + } +} diff --git a/src/main/java/com/uploadcare/urls/FilesLimitParameter.java b/src/main/java/com/uploadcare/urls/FilesLimitParameter.java new file mode 100644 index 0000000..c3848d7 --- /dev/null +++ b/src/main/java/com/uploadcare/urls/FilesLimitParameter.java @@ -0,0 +1,18 @@ +package com.uploadcare.urls; + +public class FilesLimitParameter implements UrlParameter { + + private final int limit; + + public FilesLimitParameter(int limit) { + this.limit = limit; + } + + public String getParam() { + return "limit"; + } + + public String getValue() { + return Integer.toString(this.limit); + } +} diff --git a/src/main/java/com/uploadcare/urls/FilesToParameter.java b/src/main/java/com/uploadcare/urls/FilesToParameter.java new file mode 100644 index 0000000..9543f94 --- /dev/null +++ b/src/main/java/com/uploadcare/urls/FilesToParameter.java @@ -0,0 +1,22 @@ +package com.uploadcare.urls; + +import com.uploadcare.api.RequestHelper; + +import java.util.Date; + +public class FilesToParameter implements UrlParameter { + + private final Date to; + + public FilesToParameter(Date to) { + this.to = to; + } + + public String getParam() { + return "to"; + } + + public String getValue() { + return RequestHelper.iso8601(to); + } +} \ No newline at end of file From 103117073232166f4ac95fe69141bb8c920d4b4f Mon Sep 17 00:00:00 2001 From: GIlyazitdinov Raphael Date: Sat, 7 Nov 2015 06:13:11 +0300 Subject: [PATCH 05/17] removed unused 'limit' parameter. --- .../java/com/uploadcare/api/FilesQueryBuilder.java | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/src/main/java/com/uploadcare/api/FilesQueryBuilder.java b/src/main/java/com/uploadcare/api/FilesQueryBuilder.java index bda6d3c..3796e17 100644 --- a/src/main/java/com/uploadcare/api/FilesQueryBuilder.java +++ b/src/main/java/com/uploadcare/api/FilesQueryBuilder.java @@ -2,7 +2,6 @@ import com.uploadcare.data.FilePageData; import com.uploadcare.urls.FilesFromParameter; -import com.uploadcare.urls.FilesLimitParameter; import com.uploadcare.urls.FilesRemovedParameter; import com.uploadcare.urls.FilesStoredParameter; import com.uploadcare.urls.FilesToParameter; @@ -53,16 +52,6 @@ public FilesQueryBuilder stored(boolean stored) { return this; } - /** - * Adds a filter for amount of files in one response. - * - * @param limit Amount of files in response. Default is 100, maximum is 1000. - */ - public FilesQueryBuilder limit(int limit) { - parameters.add(new FilesLimitParameter(limit)); - return this; - } - /** * Adds a filter for datetime from objects will be returned. * From 8fc7d35c549b3668557a5e870bb4e0e1f862f053 Mon Sep 17 00:00:00 2001 From: GIlyazitdinov Raphael Date: Sat, 7 Nov 2015 06:22:01 +0300 Subject: [PATCH 06/17] Added support to store the file upon uploading in FileUploader and UrlUploader. --- .../com/uploadcare/upload/FileUploader.java | 25 +++++++++++++++---- .../java/com/uploadcare/upload/Uploader.java | 3 +++ .../com/uploadcare/upload/UrlUploader.java | 14 ++++++++++- src/main/java/com/uploadcare/urls/Urls.java | 6 +++-- 4 files changed, 40 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/uploadcare/upload/FileUploader.java b/src/main/java/com/uploadcare/upload/FileUploader.java index d5f8a68..e3ae4d1 100644 --- a/src/main/java/com/uploadcare/upload/FileUploader.java +++ b/src/main/java/com/uploadcare/upload/FileUploader.java @@ -1,6 +1,9 @@ package com.uploadcare.upload; -import java.net.URI; +import com.uploadcare.api.Client; +import com.uploadcare.api.File; +import com.uploadcare.data.UploadBaseData; +import com.uploadcare.urls.Urls; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.mime.MultipartEntity; @@ -8,10 +11,7 @@ import org.apache.http.entity.mime.content.FileBody; import org.apache.http.entity.mime.content.StringBody; -import com.uploadcare.api.Client; -import com.uploadcare.api.File; -import com.uploadcare.data.UploadBaseData; -import com.uploadcare.urls.Urls; +import java.net.URI; /** * Uploadcare uploader for files and binary data. @@ -22,6 +22,7 @@ public class FileUploader implements Uploader { private final java.io.File file; private final byte[] bytes; private final String filename; + private String store = "auto"; /** * Creates a new uploader from a file on disk @@ -65,7 +66,9 @@ public File upload() throws UploadFailureException { MultipartEntity entity = new MultipartEntity(); StringBody pubKeyBody = StringBody.create(client.getPublicKey(), "text/plain", null); + StringBody storeBody = StringBody.create(store, "text/plain", null); entity.addPart("UPLOADCARE_PUB_KEY", pubKeyBody); + entity.addPart("UPLOADCARE_STORE", storeBody); if (file != null) { entity.addPart("file", new FileBody(file)); } else { @@ -76,4 +79,16 @@ public File upload() throws UploadFailureException { String fileId = client.getRequestHelper().executeQuery(request, false, UploadBaseData.class).file; return client.getFile(fileId); } + + /** + * Store the file upon uploading. + * + * @param store is set true - store the file upon uploading. Requires “automatic file storing” + * setting to be enabled. + * is set false - do not store file upon uploading. + */ + public FileUploader store(boolean store) { + this.store = store ? String.valueOf(1) : String.valueOf(0); + return this; + } } diff --git a/src/main/java/com/uploadcare/upload/Uploader.java b/src/main/java/com/uploadcare/upload/Uploader.java index 7693b2a..dc6ec1d 100644 --- a/src/main/java/com/uploadcare/upload/Uploader.java +++ b/src/main/java/com/uploadcare/upload/Uploader.java @@ -3,5 +3,8 @@ import com.uploadcare.api.File; public interface Uploader { + File upload() throws UploadFailureException; + + Uploader store(boolean store); } diff --git a/src/main/java/com/uploadcare/upload/UrlUploader.java b/src/main/java/com/uploadcare/upload/UrlUploader.java index 0e36234..ed9d219 100644 --- a/src/main/java/com/uploadcare/upload/UrlUploader.java +++ b/src/main/java/com/uploadcare/upload/UrlUploader.java @@ -17,6 +17,7 @@ public class UrlUploader implements Uploader { private final Client client; private final String sourceUrl; + private String store = "auto"; /** * Create a new uploader from a URL. @@ -42,6 +43,17 @@ public File upload() throws UploadFailureException { return upload(500); } + /** + * Store the file upon uploading. + * + * @param store is set true - store the file upon uploading. Requires “automatic file storing” setting to be enabled. + * is set false - do not store file upon uploading. + */ + public UrlUploader store(boolean store) { + this.store = store ? String.valueOf(1) : String.valueOf(0); + return this; + } + /** * Synchronously uploads the file to Uploadcare. * @@ -53,7 +65,7 @@ public File upload() throws UploadFailureException { */ public File upload(int pollingInterval) throws UploadFailureException { RequestHelper requestHelper = client.getRequestHelper(); - URI uploadUrl = Urls.uploadFromUrl(sourceUrl, client.getPublicKey()); + URI uploadUrl = Urls.uploadFromUrl(sourceUrl, client.getPublicKey(),store); String token = requestHelper.executeQuery(new HttpGet(uploadUrl), false, UploadFromUrlData.class).token; URI statusUrl = Urls.uploadFromUrlStatus(token); while (true) { diff --git a/src/main/java/com/uploadcare/urls/Urls.java b/src/main/java/com/uploadcare/urls/Urls.java index 46fa073..ae54224 100644 --- a/src/main/java/com/uploadcare/urls/Urls.java +++ b/src/main/java/com/uploadcare/urls/Urls.java @@ -78,14 +78,16 @@ public static URI uploadBase() { * * @param sourceUrl URL to upload from * @param pubKey Public key + * @param store Store the file upon uploading. * * @see com.uploadcare.upload.UrlUploader */ - public static URI uploadFromUrl(String sourceUrl, String pubKey) { + public static URI uploadFromUrl(String sourceUrl, String pubKey, String store) { URIBuilder builder = new URIBuilder(URI.create(UPLOAD_BASE)); builder.setPath("/from_url/") .setParameter("source_url", sourceUrl) - .setParameter("pub_key", pubKey); + .setParameter("pub_key", pubKey) + .setParameter("store", store); return trustedBuild(builder); } From f2bbc8a33933925da895fa976ff5efa619b196e4 Mon Sep 17 00:00:00 2001 From: GIlyazitdinov Raphael Date: Sat, 7 Nov 2015 07:02:22 +0300 Subject: [PATCH 07/17] Updated library version to 3.0. Added changelog to History. --- HISTORY.md | 5 +++++ README.md | 2 +- pom.xml | 2 +- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/HISTORY.md b/HISTORY.md index 8f88c02..1d6e817 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -1,5 +1,10 @@ # History +## 3.0 +- Support Uploadcare REST API v0.4 +- Fixed Threading problem with HttpClient. +- Updated some of deprecated classes. + ## 2.0 - Support Uploadcare REST API v0.3 - Improve error handling diff --git a/README.md b/README.md index 230a295..537eda8 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,7 @@ of the project's pom.xml file: com.uploadcare uploadcare - 2.0 + 3.0 ``` diff --git a/pom.xml b/pom.xml index 3229a19..78f4e5c 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.uploadcare uploadcare - 2.0 + 3.0 jar From 33e91668d4ccb4d87ce1e21d8740d56b37e1ba35 Mon Sep 17 00:00:00 2001 From: GIlyazitdinov Raphael Date: Sat, 7 Nov 2015 07:03:07 +0300 Subject: [PATCH 08/17] Added 'User-Agent' header to requests with library version and public key. --- src/main/java/com/uploadcare/api/RequestHelper.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/com/uploadcare/api/RequestHelper.java b/src/main/java/com/uploadcare/api/RequestHelper.java index 8a9bcd8..c0d2be6 100644 --- a/src/main/java/com/uploadcare/api/RequestHelper.java +++ b/src/main/java/com/uploadcare/api/RequestHelper.java @@ -46,6 +46,8 @@ public class RequestHelper { private final Client client; + public static final String LIBRARY_VERSION = "3.0"; + public static final String DATE_FORMAT = "EEE, dd MMM yyyy HH:mm:ss Z"; public static final String DATE_FORMAT_ISO_8601 = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"; @@ -95,6 +97,7 @@ public void setApiHeaders(HttpUriRequest request) { request.setHeader("Accept", "application/vnd.uploadcare-v0.4+json"); request.setHeader("Date", formattedDate); + request.setHeader("User-Agent",String.format("javauploadcare/{0}/{1}",LIBRARY_VERSION,client.getPublicKey())); String authorization; if (client.isSimpleAuth()) { From 648969997f6d254140d19b2a5f8c3da3c88db5b9 Mon Sep 17 00:00:00 2001 From: GIlyazitdinov Raphael Date: Sat, 7 Nov 2015 07:10:59 +0300 Subject: [PATCH 09/17] Updated 'User-Agent' header. --- src/main/java/com/uploadcare/api/RequestHelper.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/uploadcare/api/RequestHelper.java b/src/main/java/com/uploadcare/api/RequestHelper.java index c0d2be6..8cc89f6 100644 --- a/src/main/java/com/uploadcare/api/RequestHelper.java +++ b/src/main/java/com/uploadcare/api/RequestHelper.java @@ -97,7 +97,7 @@ public void setApiHeaders(HttpUriRequest request) { request.setHeader("Accept", "application/vnd.uploadcare-v0.4+json"); request.setHeader("Date", formattedDate); - request.setHeader("User-Agent",String.format("javauploadcare/{0}/{1}",LIBRARY_VERSION,client.getPublicKey())); + request.setHeader("User-Agent",String.format("javauploadcare/%s/%s",LIBRARY_VERSION,client.getPublicKey())); String authorization; if (client.isSimpleAuth()) { From 927380e19354ea460d17fbc03192e8a2c73bcc7b Mon Sep 17 00:00:00 2001 From: GIlyazitdinov Raphael Date: Sat, 7 Nov 2015 07:18:16 +0300 Subject: [PATCH 10/17] Update Readme to version 3.0 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 537eda8..e9cc3b4 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ This is a Java library for Uploadcare. Supported features: -- Complete file and project API v0.3 +- Complete file and project API v0.4 - Paginated resources fetched as `List` - CDN path builder - File uploads from disk, byte array, and URL From 7c7fd84c0fbd88b5ff81409b05ccd8f9fc92f3a8 Mon Sep 17 00:00:00 2001 From: GIlyazitdinov Raphael Date: Sun, 8 Nov 2015 07:14:23 +0300 Subject: [PATCH 11/17] Update pagination. --- .../java/com/uploadcare/api/RequestHelper.java | 17 +++++++++++------ .../java/com/uploadcare/data/FilePageData.java | 11 ++++++++++- src/main/java/com/uploadcare/data/PageData.java | 3 +++ 3 files changed, 24 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/uploadcare/api/RequestHelper.java b/src/main/java/com/uploadcare/api/RequestHelper.java index 8cc89f6..ebc5875 100644 --- a/src/main/java/com/uploadcare/api/RequestHelper.java +++ b/src/main/java/com/uploadcare/api/RequestHelper.java @@ -148,7 +148,7 @@ public Iterable executePaginatedQuery( return new Iterable() { public Iterator iterator() { return new Iterator() { - private int offset = 0; + private URI next =null; private boolean more; private Iterator pageIterator; @@ -158,14 +158,19 @@ public Iterator iterator() { } private void getNext() { - URIBuilder builder = new URIBuilder(url); - setQueryParameters(builder, urlParameters); - builder.setParameter("offset", Integer.toString(offset)); - URI pageUrl = trustedBuild(builder); + URI pageUrl; + if(next==null) { + URIBuilder builder = new URIBuilder(url); + setQueryParameters(builder, urlParameters); + + pageUrl = trustedBuild(builder); + }else{ + pageUrl = next; + } PageData pageData = executeQuery(new HttpGet(pageUrl), apiHeaders, dataClass); more = pageData.hasMore(); - offset += pageData.getResults().size(); + next = pageData.getNext(); pageIterator = pageData.getResults().iterator(); } diff --git a/src/main/java/com/uploadcare/data/FilePageData.java b/src/main/java/com/uploadcare/data/FilePageData.java index b15e529..2ae453e 100644 --- a/src/main/java/com/uploadcare/data/FilePageData.java +++ b/src/main/java/com/uploadcare/data/FilePageData.java @@ -4,10 +4,15 @@ import java.util.List; public class FilePageData implements PageData { + public URI next; + public URI previous; + public int total; + public int perPage; + public List results; public List getResults() { @@ -15,7 +20,11 @@ public List getResults() { } public boolean hasMore() { - return next!=null; + return next != null; + } + + public URI getNext() { + return next; } } diff --git a/src/main/java/com/uploadcare/data/PageData.java b/src/main/java/com/uploadcare/data/PageData.java index 9edc02c..7f86a3d 100644 --- a/src/main/java/com/uploadcare/data/PageData.java +++ b/src/main/java/com/uploadcare/data/PageData.java @@ -1,5 +1,6 @@ package com.uploadcare.data; +import java.net.URI; import java.util.List; public interface PageData { @@ -7,4 +8,6 @@ public interface PageData { List getResults(); boolean hasMore(); + + URI getNext(); } From 9eceb3167ce192bb18c59349ef9feedd2c5ebb47 Mon Sep 17 00:00:00 2001 From: GIlyazitdinov Raphael Date: Sun, 8 Nov 2015 08:39:33 +0300 Subject: [PATCH 12/17] Added Image Operations to CdnPathBuilder: blur, sharp, preview, format, quality. --- .../com/uploadcare/urls/CdnPathBuilder.java | 141 +++++++++++++++++- 1 file changed, 136 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/uploadcare/urls/CdnPathBuilder.java b/src/main/java/com/uploadcare/urls/CdnPathBuilder.java index ee98c31..299c50e 100644 --- a/src/main/java/com/uploadcare/urls/CdnPathBuilder.java +++ b/src/main/java/com/uploadcare/urls/CdnPathBuilder.java @@ -6,6 +6,50 @@ public class CdnPathBuilder { + public enum ImageFormat { + FORMAT_JPEG { + public String toString() { + return "jpeg"; + } + }, + + FORMAT_PNG { + public String toString() { + return "png"; + } + } + } + + public enum ImageQuality { + QUALITY_NORMAL { + public String toString() { + return "normal"; + } + }, + + QUALITY_BETTER { + public String toString() { + return "better"; + } + }, + QUALITY_BEST { + public String toString() { + return "best"; + } + }, + + QUALITY_LIGHTER { + public String toString() { + return "lighter"; + } + }, + QUALITY_LIGHTEST { + public String toString() { + return "lightest"; + } + } + } + private final StringBuilder sb = new StringBuilder("/"); /** @@ -20,8 +64,8 @@ public CdnPathBuilder(File file) { } private void dimensionGuard(int dim) { - if (dim < 1 || dim > 1024) { - throw new IllegalArgumentException("Dimensions must be in the range 1-1024"); + if (dim < 1 || dim > 2048) { + throw new IllegalArgumentException("Dimensions must be in the range 1-2048"); } } @@ -182,7 +226,7 @@ public CdnPathBuilder scaleCropCenter(int width, int height) { * Flips the image. */ public CdnPathBuilder flip() { - sb.append("/-/effect/flip"); + sb.append("/-/flip"); return this; } @@ -190,7 +234,7 @@ public CdnPathBuilder flip() { * Adds a grayscale effect. */ public CdnPathBuilder grayscale() { - sb.append("/-/effect/grayscale"); + sb.append("/-/grayscale"); return this; } @@ -198,7 +242,7 @@ public CdnPathBuilder grayscale() { * Inverts colors. */ public CdnPathBuilder invert() { - sb.append("/-/effect/invert"); + sb.append("/-/invert"); return this; } @@ -210,6 +254,93 @@ public CdnPathBuilder mirror() { return this; } + /** + * Performs Gaussian blur on result image. + */ + public CdnPathBuilder blur() { + sb.append("/-/blur"); + return this; + } + + /** + * Performs Gaussian blur on result image. + * + * @param strength Strength is standard deviation (aka blur radius) multiplied by ten. Strength + * can be up to 5000. Default is 10. + */ + public CdnPathBuilder blur(int strength) { + if (strength < 0 || strength > 5000) { + strength = 10; + } + sb.append("/-/blur/") + .append(strength); + return this; + } + + /** + * Performs sharpening on result image. This can be useful after scaling down. + */ + public CdnPathBuilder sharp() { + sb.append("/-/blur"); + return this; + } + + /** + * Performs sharpening on result image. This can be useful after scaling down. + * + * @param strength Strength can be from 0 to 20. Default is 5. + */ + public CdnPathBuilder sharp(int strength) { + if (strength < 0 || strength > 20) { + strength = 5; + } + sb.append("/-/sharp/") + .append(strength); + return this; + } + + /** + * Reduces an image proportionally in order to fit it into given dimensions. + * + * @param width New width + * @param height New height + */ + public CdnPathBuilder preview(int width, int height) { + dimensionsGuard(width, height); + sb.append("/-/preview/") + .append(width) + .append("x") + .append(height); + return this; + } + + /** + * Turn an image to one of the following formats: FORMAT_JPEG or FORMAT_PNG. + * + * @param format @link ImageFormat. + */ + public CdnPathBuilder format(ImageFormat format) { + sb.append("/-/format/") + .append(format.toString()); + return this; + } + + /** + * Image quality affects size of image and loading speed. Has no effect on non-JPEG images, but does not force format to JPEG. + * + * @param quality @link ImageQuality + * QUALITY_NORMAL – used by default. Fine in most cases. + * QUALITY_BETTER – can be used on relatively small previews with lots of details. ≈125% file size compared to normal image. + * QUALITY_BEST – useful if you're a photography god and you want to get perfect quality without paying attention to size. ≈170% file size. + * QUALITY_LIGHTER – can be used on relatively large images to save traffic without significant quality loss. ≈80% file size. + * QUALITY_LIGHTEST — useful for retina resolutions, when you don't wory about quality of each pixel. ≈50% file size. + */ + public CdnPathBuilder quality(ImageQuality quality) { + sb.append("/-/quality/") + .append(quality.toString()); + return this; + } + /** * Returns the current CDN path as a string. * From 1c6c9ff150844ec0ce1030a0947fdecb65ded3a6 Mon Sep 17 00:00:00 2001 From: GIlyazitdinov Raphael Date: Sun, 8 Nov 2015 08:40:11 +0300 Subject: [PATCH 13/17] Updated changelog. --- HISTORY.md | 1 + 1 file changed, 1 insertion(+) diff --git a/HISTORY.md b/HISTORY.md index 1d6e817..c37e9ab 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -4,6 +4,7 @@ - Support Uploadcare REST API v0.4 - Fixed Threading problem with HttpClient. - Updated some of deprecated classes. +- Added Image Operations to CdnPathBuilder: blur, sharp, preview, format, quality. ## 2.0 - Support Uploadcare REST API v0.3 From 9f39adcef2170b7657eada4a7229af1f50cf148d Mon Sep 17 00:00:00 2001 From: GIlyazitdinov Raphael Date: Sun, 8 Nov 2015 18:08:45 +0300 Subject: [PATCH 14/17] Fixed blur and mirror effects paths. Updated CdnPAthBuilder unit tests. --- .../com/uploadcare/urls/CdnPathBuilder.java | 4 +-- .../uploadcare/urls/CdnPathBuilderTest.java | 27 ++++++++++++++----- 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/uploadcare/urls/CdnPathBuilder.java b/src/main/java/com/uploadcare/urls/CdnPathBuilder.java index 299c50e..a92acd0 100644 --- a/src/main/java/com/uploadcare/urls/CdnPathBuilder.java +++ b/src/main/java/com/uploadcare/urls/CdnPathBuilder.java @@ -250,7 +250,7 @@ public CdnPathBuilder invert() { * Horizontally mirror image. */ public CdnPathBuilder mirror() { - sb.append("/-/effect/mirror"); + sb.append("/-/mirror"); return this; } @@ -281,7 +281,7 @@ public CdnPathBuilder blur(int strength) { * Performs sharpening on result image. This can be useful after scaling down. */ public CdnPathBuilder sharp() { - sb.append("/-/blur"); + sb.append("/-/sharp"); return this; } diff --git a/src/test/java/com/uploadcare/urls/CdnPathBuilderTest.java b/src/test/java/com/uploadcare/urls/CdnPathBuilderTest.java index 8d13ff0..8cd5d2f 100644 --- a/src/test/java/com/uploadcare/urls/CdnPathBuilderTest.java +++ b/src/test/java/com/uploadcare/urls/CdnPathBuilderTest.java @@ -1,6 +1,7 @@ package com.uploadcare.urls; import com.uploadcare.api.File; + import org.junit.Before; import org.junit.Test; @@ -46,6 +47,13 @@ public void test_allOperations() { .grayscale() .invert() .mirror() + .blur() + .blur(5500) + .sharp() + .sharp(25) + .preview(100,150) + .format(CdnPathBuilder.ImageFormat.FORMAT_JPEG) + .quality(CdnPathBuilder.ImageQuality.QUALITY_BEST) .build(); assertEquals("/" + FILE_ID + "/-/crop/100x110" + @@ -57,10 +65,17 @@ public void test_allOperations() { "/-/resize/x130" + "/-/scale_crop/100x110" + "/-/scale_crop/120x130/center" + - "/-/effect/flip" + - "/-/effect/grayscale" + - "/-/effect/invert" + - "/-/effect/mirror" + + "/-/flip" + + "/-/grayscale" + + "/-/invert" + + "/-/mirror" + + "/-/blur" + + "/-/blur/10" + + "/-/sharp" + + "/-/sharp/5" + + "/-/preview/100x150" + + "/-/format/jpeg" + + "/-/quality/best" + "/", path ); @@ -69,12 +84,12 @@ public void test_allOperations() { @Test public void test_dimensionGuard() { builder.resizeWidth(1); - builder.resizeWidth(1024); + builder.resizeWidth(2048); try { builder.resizeWidth(0); } catch (IllegalArgumentException e1) { try { - builder.resizeWidth(1025); + builder.resizeWidth(2049); } catch (IllegalArgumentException e2) { return; } From 4d70cab791579f9bcf4c7170058d443e3a24dfab Mon Sep 17 00:00:00 2001 From: GIlyazitdinov Raphael Date: Sun, 8 Nov 2015 18:15:45 +0300 Subject: [PATCH 15/17] Handle 3xx http errors. --- src/main/java/com/uploadcare/api/RequestHelper.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/com/uploadcare/api/RequestHelper.java b/src/main/java/com/uploadcare/api/RequestHelper.java index ebc5875..5a84a1a 100644 --- a/src/main/java/com/uploadcare/api/RequestHelper.java +++ b/src/main/java/com/uploadcare/api/RequestHelper.java @@ -239,6 +239,8 @@ private void checkResponseStatus(HttpResponse response) throws IOException { if (statusCode >= 200 && statusCode < 300) { return; + } else if (statusCode >= 300 && statusCode < 400) { + throw new UploadcareInvalidRequestException(streamToString(response.getEntity().getContent())); } else if (statusCode == 401 || statusCode == 403) { throw new UploadcareAuthenticationException( streamToString(response.getEntity().getContent())); From b9e6c023d2db7be691455907446162391c7eee52 Mon Sep 17 00:00:00 2001 From: GIlyazitdinov Raphael Date: Sun, 8 Nov 2015 18:20:08 +0300 Subject: [PATCH 16/17] Updated code formating. --- src/main/java/com/uploadcare/api/Client.java | 10 +++++----- .../java/com/uploadcare/api/RequestHelper.java | 15 +++++++++------ .../java/com/uploadcare/upload/FileUploader.java | 14 +++++++++----- 3 files changed, 23 insertions(+), 16 deletions(-) diff --git a/src/main/java/com/uploadcare/api/Client.java b/src/main/java/com/uploadcare/api/Client.java index 538ea4b..2297af2 100644 --- a/src/main/java/com/uploadcare/api/Client.java +++ b/src/main/java/com/uploadcare/api/Client.java @@ -203,10 +203,11 @@ public void saveFile(String fileId) { /** * Closes client. * - * Ensures that all connections kept alive by the manager get closed and system resources allocated by those connections are released. + * Ensures that all connections kept alive by the manager get closed and system resources + * allocated by those connections are released. */ public void close() { - if(httpClient!=null){ + if (httpClient != null) { try { httpClient.close(); } catch (IOException e) { @@ -214,11 +215,10 @@ public void close() { } } } + /** - * - * @param fileId Resource UUID + * @param fileId Resource UUID * @param storage Target storage name - * * @return An object containing the results of the copy request */ public CopyFileData copyFile(String fileId, String storage) { diff --git a/src/main/java/com/uploadcare/api/RequestHelper.java b/src/main/java/com/uploadcare/api/RequestHelper.java index 5a84a1a..86afe11 100644 --- a/src/main/java/com/uploadcare/api/RequestHelper.java +++ b/src/main/java/com/uploadcare/api/RequestHelper.java @@ -97,7 +97,8 @@ public void setApiHeaders(HttpUriRequest request) { request.setHeader("Accept", "application/vnd.uploadcare-v0.4+json"); request.setHeader("Date", formattedDate); - request.setHeader("User-Agent",String.format("javauploadcare/%s/%s",LIBRARY_VERSION,client.getPublicKey())); + request.setHeader("User-Agent", + String.format("javauploadcare/%s/%s", LIBRARY_VERSION, client.getPublicKey())); String authorization; if (client.isSimpleAuth()) { @@ -148,9 +149,10 @@ public Iterable executePaginatedQuery( return new Iterable() { public Iterator iterator() { return new Iterator() { - private URI next =null; + private URI next = null; private boolean more; + private Iterator pageIterator; { @@ -159,12 +161,12 @@ public Iterator iterator() { private void getNext() { URI pageUrl; - if(next==null) { + if (next == null) { URIBuilder builder = new URIBuilder(url); setQueryParameters(builder, urlParameters); pageUrl = trustedBuild(builder); - }else{ + } else { pageUrl = next; } PageData pageData = executeQuery(new HttpGet(pageUrl), apiHeaders, @@ -218,7 +220,7 @@ public HttpResponse executeCommand(HttpUriRequest request, boolean apiHeaders) { try { checkResponseStatus(response); return response; - }finally { + } finally { response.close(); } } catch (IOException e) { @@ -240,7 +242,8 @@ private void checkResponseStatus(HttpResponse response) throws IOException { if (statusCode >= 200 && statusCode < 300) { return; } else if (statusCode >= 300 && statusCode < 400) { - throw new UploadcareInvalidRequestException(streamToString(response.getEntity().getContent())); + throw new UploadcareInvalidRequestException( + streamToString(response.getEntity().getContent())); } else if (statusCode == 401 || statusCode == 403) { throw new UploadcareAuthenticationException( streamToString(response.getEntity().getContent())); diff --git a/src/main/java/com/uploadcare/upload/FileUploader.java b/src/main/java/com/uploadcare/upload/FileUploader.java index e3ae4d1..52599db 100644 --- a/src/main/java/com/uploadcare/upload/FileUploader.java +++ b/src/main/java/com/uploadcare/upload/FileUploader.java @@ -19,9 +19,13 @@ public class FileUploader implements Uploader { private final Client client; + private final java.io.File file; + private final byte[] bytes; + private final String filename; + private String store = "auto"; /** @@ -29,7 +33,7 @@ public class FileUploader implements Uploader { * (not to be confused with a file resource from Uploadcare API). * * @param client Uploadcare client - * @param file File on disk + * @param file File on disk */ public FileUploader(Client client, java.io.File file) { this.client = client; @@ -41,8 +45,8 @@ public FileUploader(Client client, java.io.File file) { /** * Creates a new uploader from binary data. * - * @param client Uploadcare client - * @param bytes File contents as binary data + * @param client Uploadcare client + * @param bytes File contents as binary data * @param filename Original filename */ public FileUploader(Client client, byte[] bytes, String filename) { @@ -58,7 +62,6 @@ public FileUploader(Client client, byte[] bytes, String filename) { * The calling thread will be busy until the upload is finished. * * @return An Uploadcare file - * @throws UploadFailureException */ public File upload() throws UploadFailureException { URI uploadUrl = Urls.uploadBase(); @@ -76,7 +79,8 @@ public File upload() throws UploadFailureException { } request.setEntity(entity); - String fileId = client.getRequestHelper().executeQuery(request, false, UploadBaseData.class).file; + String fileId = client.getRequestHelper() + .executeQuery(request, false, UploadBaseData.class).file; return client.getFile(fileId); } From 7348054e2c5c29e7cc26ad2a5c25223a414bd774 Mon Sep 17 00:00:00 2001 From: GIlyazitdinov Raphael Date: Mon, 9 Nov 2015 11:56:15 +0300 Subject: [PATCH 17/17] Removed check responses for 3xx status. --- src/main/java/com/uploadcare/api/RequestHelper.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/main/java/com/uploadcare/api/RequestHelper.java b/src/main/java/com/uploadcare/api/RequestHelper.java index 86afe11..4857657 100644 --- a/src/main/java/com/uploadcare/api/RequestHelper.java +++ b/src/main/java/com/uploadcare/api/RequestHelper.java @@ -241,9 +241,6 @@ private void checkResponseStatus(HttpResponse response) throws IOException { if (statusCode >= 200 && statusCode < 300) { return; - } else if (statusCode >= 300 && statusCode < 400) { - throw new UploadcareInvalidRequestException( - streamToString(response.getEntity().getContent())); } else if (statusCode == 401 || statusCode == 403) { throw new UploadcareAuthenticationException( streamToString(response.getEntity().getContent()));