From 6d1e2d043478652a81dd57782b275801a087ef63 Mon Sep 17 00:00:00 2001 From: davigonz Date: Thu, 7 Jun 2018 15:43:33 +0200 Subject: [PATCH] Implement remove share using the new wrapper methods --- .../common/http/nonwebdav/DeleteMethod.java | 50 +++++++++++++++ .../lib/common/http/nonwebdav/PutMethod.java | 50 +++++++++++++++ .../shares/CreateRemoteShareOperation.java | 6 +- .../shares/GetRemoteShareOperation.java | 2 +- .../shares/RemoveRemoteShareOperation.java | 61 ++++++++++--------- .../shares/UpdateRemoteShareOperation.java | 2 +- 6 files changed, 137 insertions(+), 34 deletions(-) create mode 100644 src/com/owncloud/android/lib/common/http/nonwebdav/DeleteMethod.java create mode 100644 src/com/owncloud/android/lib/common/http/nonwebdav/PutMethod.java diff --git a/src/com/owncloud/android/lib/common/http/nonwebdav/DeleteMethod.java b/src/com/owncloud/android/lib/common/http/nonwebdav/DeleteMethod.java new file mode 100644 index 00000000..61e9aa1d --- /dev/null +++ b/src/com/owncloud/android/lib/common/http/nonwebdav/DeleteMethod.java @@ -0,0 +1,50 @@ +/* ownCloud Android Library is available under MIT license + * Copyright (C) 2018 ownCloud GmbH. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + */ + +package com.owncloud.android.lib.common.http.nonwebdav; + +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; + +/** + * OkHttp delete calls wrapper + * @author David González Verdugo + */ +public class DeleteMethod extends HttpMethod{ + + public DeleteMethod(OkHttpClient okHttpClient, Request baseRequest) { + super(okHttpClient, baseRequest); + } + + @Override + public Response execute() throws Exception { + mRequest = mBaseRequest + .newBuilder() + .delete() + .build(); + + return mOkHttpClient.newCall(mRequest).execute(); + } +} \ No newline at end of file diff --git a/src/com/owncloud/android/lib/common/http/nonwebdav/PutMethod.java b/src/com/owncloud/android/lib/common/http/nonwebdav/PutMethod.java new file mode 100644 index 00000000..39dcfc8e --- /dev/null +++ b/src/com/owncloud/android/lib/common/http/nonwebdav/PutMethod.java @@ -0,0 +1,50 @@ +/* ownCloud Android Library is available under MIT license + * Copyright (C) 2018 ownCloud GmbH. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + */ + +package com.owncloud.android.lib.common.http.nonwebdav; + +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.RequestBody; +import okhttp3.Response; + +public class PutMethod extends HttpMethod{ + + private RequestBody mRequestBody; + + public PutMethod(OkHttpClient okHttpClient, Request baseRequest, RequestBody requestBody){ + super(okHttpClient, baseRequest); + mRequestBody = requestBody; + } + + @Override + public Response execute() throws Exception { + mRequest = mBaseRequest + .newBuilder() + .put(mRequestBody) + .build(); + + return mOkHttpClient.newCall(mRequest).execute(); + } +} \ No newline at end of file diff --git a/src/com/owncloud/android/lib/resources/shares/CreateRemoteShareOperation.java b/src/com/owncloud/android/lib/resources/shares/CreateRemoteShareOperation.java index 921aafea..7361fa84 100644 --- a/src/com/owncloud/android/lib/resources/shares/CreateRemoteShareOperation.java +++ b/src/com/owncloud/android/lib/resources/shares/CreateRemoteShareOperation.java @@ -204,10 +204,10 @@ public class CreateRemoteShareOperation extends RemoteOperation { Uri.Builder uriBuilder = requestUri.buildUpon(); uriBuilder.appendEncodedPath(ShareUtils.SHARING_API_PATH); - final Request request = new Request.Builder() + Request request = new Request.Builder() .url(uriBuilder.build().toString()) - .header("Content-Type", "application/x-www-form-urlencoded; " + - "charset=utf-8") + .header("Content-Type", + "application/x-www-form-urlencoded; charset=utf-8") .addHeader(OCS_API_HEADER, OCS_API_HEADER_VALUE) .build(); diff --git a/src/com/owncloud/android/lib/resources/shares/GetRemoteShareOperation.java b/src/com/owncloud/android/lib/resources/shares/GetRemoteShareOperation.java index 8ae1b74f..e1e5443c 100644 --- a/src/com/owncloud/android/lib/resources/shares/GetRemoteShareOperation.java +++ b/src/com/owncloud/android/lib/resources/shares/GetRemoteShareOperation.java @@ -77,7 +77,7 @@ public class GetRemoteShareOperation extends RemoteOperation { if (isSuccess(response.code())) { // Parse xml response and obtain the list of shares ShareToRemoteOperationResultParser parser = new ShareToRemoteOperationResultParser( - new ShareXMLParser() + new ShareXMLParser() ); parser.setOneOrMoreSharesRequired(true); parser.setOwnCloudVersion(client.getOwnCloudVersion()); diff --git a/src/com/owncloud/android/lib/resources/shares/RemoveRemoteShareOperation.java b/src/com/owncloud/android/lib/resources/shares/RemoveRemoteShareOperation.java index 9654d43a..8e2fb4d1 100644 --- a/src/com/owncloud/android/lib/resources/shares/RemoveRemoteShareOperation.java +++ b/src/com/owncloud/android/lib/resources/shares/RemoveRemoteShareOperation.java @@ -3,23 +3,23 @@ * @author David A. Velasco * @author David González Verdugo * Copyright (C) 2018 ownCloud GmbH. - * + * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: - * + * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS - * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * @@ -30,15 +30,21 @@ package com.owncloud.android.lib.resources.shares; import android.net.Uri; import com.owncloud.android.lib.common.OwnCloudClient; +import com.owncloud.android.lib.common.http.HttpConstants; +import com.owncloud.android.lib.common.http.nonwebdav.DeleteMethod; import com.owncloud.android.lib.common.operations.RemoteOperation; import com.owncloud.android.lib.common.operations.RemoteOperationResult; import com.owncloud.android.lib.common.utils.Log_OC; -import org.apache.commons.httpclient.HttpStatus; -import org.apache.jackrabbit.webdav.client.methods.DeleteMethod; +import okhttp3.Request; +import okhttp3.Response; /** * Remove a share + * + * @author masensio + * @author David A. Velasco + * @author David González Verdugo */ public class RemoveRemoteShareOperation extends RemoteOperation { @@ -55,55 +61,52 @@ public class RemoveRemoteShareOperation extends RemoteOperation { public RemoveRemoteShareOperation(int remoteShareId) { mRemoteShareId = remoteShareId; - } @Override protected RemoteOperationResult run(OwnCloudClient client) { RemoteOperationResult result; - int status; - - DeleteMethod delete = null; try { + String id = "/" + String.valueOf(mRemoteShareId); + Uri requestUri = client.getBaseUri(); Uri.Builder uriBuilder = requestUri.buildUpon(); uriBuilder.appendEncodedPath(ShareUtils.SHARING_API_PATH); - uriBuilder.appendEncodedPath(String.valueOf(mRemoteShareId)); + uriBuilder.appendEncodedPath(String.valueOf(id)); - delete = new DeleteMethod(uriBuilder.build().toString()); + Request request = new Request.Builder() + .url(uriBuilder.build().toString()) + .addHeader(OCS_API_HEADER, OCS_API_HEADER_VALUE) + .build(); - delete.addRequestHeader(OCS_API_HEADER, OCS_API_HEADER_VALUE); + DeleteMethod deleteMethod = new DeleteMethod(client.getOkHttpClient(), request); - status = client.executeMethod(delete); + Response response = client.executeHttpMethod(deleteMethod); - if (isSuccess(status)) { - String response = delete.getResponseBodyAsString(); + if (isSuccess(response.code())) { // Parse xml response and obtain the list of shares ShareToRemoteOperationResultParser parser = new ShareToRemoteOperationResultParser( - new ShareXMLParser() + new ShareXMLParser() ); - result = parser.parse(response); + result = parser.parse(response.body().string()); Log_OC.d(TAG, "Unshare " + mRemoteShareId + ": " + result.getLogMessage()); } else { - result = new RemoteOperationResult(false, delete); + result = new RemoteOperationResult(false, deleteMethod.getRequest(), response); } + } catch (Exception e) { result = new RemoteOperationResult(e); Log_OC.e(TAG, "Unshare Link Exception " + result.getLogMessage(), e); - - } finally { - if (delete != null) - delete.releaseConnection(); } + return result; } - private boolean isSuccess(int status) { - return (status == HttpStatus.SC_OK); + return (status == HttpConstants.HTTP_OK); } } \ No newline at end of file diff --git a/src/com/owncloud/android/lib/resources/shares/UpdateRemoteShareOperation.java b/src/com/owncloud/android/lib/resources/shares/UpdateRemoteShareOperation.java index 29f2f48d..04d74bb1 100644 --- a/src/com/owncloud/android/lib/resources/shares/UpdateRemoteShareOperation.java +++ b/src/com/owncloud/android/lib/resources/shares/UpdateRemoteShareOperation.java @@ -172,7 +172,7 @@ public class UpdateRemoteShareOperation extends RemoteOperation { if (mName != null) { parametersToUpdate.add(new Pair<>(PARAM_NAME, mName)); } - + if (mPassword != null) { parametersToUpdate.add(new Pair<>(PARAM_PASSWORD, mPassword)); }