diff --git a/src/com/owncloud/android/lib/common/operations/RemoteOperationResult.java b/src/com/owncloud/android/lib/common/operations/RemoteOperationResult.java index ceb3f25f..28709905 100644 --- a/src/com/owncloud/android/lib/common/operations/RemoteOperationResult.java +++ b/src/com/owncloud/android/lib/common/operations/RemoteOperationResult.java @@ -107,7 +107,8 @@ public class RemoteOperationResult implements Serializable { INVALID_COPY_INTO_DESCENDANT, PARTIAL_MOVE_DONE, PARTIAL_COPY_DONE, - INVALID_CHARACTER_DETECT_IN_SERVER + SHARE_WRONG_PARAMETER, + WRONG_SERVER_RESPONSE, INVALID_CHARACTER_DETECT_IN_SERVER } private boolean mSuccess = false; diff --git a/src/com/owncloud/android/lib/resources/shares/CreateRemoteShareOperation.java b/src/com/owncloud/android/lib/resources/shares/CreateRemoteShareOperation.java index 6aaa7d1f..10b447a9 100644 --- a/src/com/owncloud/android/lib/resources/shares/CreateRemoteShareOperation.java +++ b/src/com/owncloud/android/lib/resources/shares/CreateRemoteShareOperation.java @@ -140,46 +140,52 @@ public class CreateRemoteShareOperation extends RemoteOperation { if(isSuccess(status)) { String response = post.getResponseBodyAsString(); + ArrayList resultData = new ArrayList(); - result = new RemoteOperationResult(ResultCode.OK); - // Parse xml response --> obtain the response in ShareFiles ArrayList // convert String into InputStream InputStream is = new ByteArrayInputStream(response.getBytes()); ShareXMLParser xmlParser = new ShareXMLParser(); mShares = xmlParser.parseXMLResponse(is); if (xmlParser.isSuccess()) { - if (mShares != null) { + if (mShares != null && mShares.size() > 0) { Log_OC.d(TAG, "Created " + mShares.size() + " share(s)"); result = new RemoteOperationResult(ResultCode.OK); - ArrayList sharesObjects = new ArrayList(); for (OCShare share: mShares) { - sharesObjects.add(share); + resultData.add(share); } - result.setData(sharesObjects); + result.setData(resultData); if (mGetShareDetails) { // retrieve more info - OCShare emptyShare = (OCShare) sharesObjects.get(0); + OCShare emptyShare = (OCShare) resultData.get(0); GetRemoteShareOperation getInfo = new GetRemoteShareOperation(emptyShare.getIdRemoteShared()); result = getInfo.execute(client); } } else { - result = new RemoteOperationResult(ResultCode.UNKNOWN_ERROR); - Log_OC.e(TAG, "Successful response with no share in it"); + result = new RemoteOperationResult(ResultCode.WRONG_SERVER_RESPONSE); + Log_OC.e(TAG, "Successful status with no share in it"); } - } else if (xmlParser.isFileNotFound()){ + } else if (xmlParser.isWrongParameter()){ + result = new RemoteOperationResult(ResultCode.SHARE_WRONG_PARAMETER); + resultData.add(xmlParser.getMessage()); + result.setData(resultData); + + } else if (xmlParser.isNotFound()){ result = new RemoteOperationResult(ResultCode.SHARE_NOT_FOUND); - - } else if (xmlParser.isFailure()) { - // TODO need deeper processing + resultData.add(xmlParser.getMessage()); + result.setData(resultData); + + } else if (xmlParser.isForbidden()) { result = new RemoteOperationResult(ResultCode.SHARE_FORBIDDEN); + resultData.add(xmlParser.getMessage()); + result.setData(resultData); } else { - result = new RemoteOperationResult(false, status, post.getResponseHeaders()); + result = new RemoteOperationResult(ResultCode.WRONG_SERVER_RESPONSE); } } else { diff --git a/src/com/owncloud/android/lib/resources/shares/GetRemoteShareOperation.java b/src/com/owncloud/android/lib/resources/shares/GetRemoteShareOperation.java index 6dcb28a2..f7ab0b29 100644 --- a/src/com/owncloud/android/lib/resources/shares/GetRemoteShareOperation.java +++ b/src/com/owncloud/android/lib/resources/shares/GetRemoteShareOperation.java @@ -25,8 +25,6 @@ package com.owncloud.android.lib.resources.shares; -import android.net.Uri; - import com.owncloud.android.lib.common.OwnCloudClient; import com.owncloud.android.lib.common.operations.RemoteOperation; import com.owncloud.android.lib.common.operations.RemoteOperationResult; @@ -71,21 +69,46 @@ public class GetRemoteShareOperation extends RemoteOperation { get = new GetMethod(client.getBaseUri() + ShareUtils.SHARING_API_PATH + "/" + Long.toString(mRemoteId)); //get.addRequestHeader(OCS_API_HEADER, OCS_API_HEADER_VALUE); status = client.executeMethod(get); + if(isSuccess(status)) { String response = get.getResponseBodyAsString(); + ArrayList resultData = new ArrayList(); // Parse xml response --> obtain the response in ShareFiles ArrayList // convert String into InputStream InputStream is = new ByteArrayInputStream(response.getBytes()); ShareXMLParser xmlParser = new ShareXMLParser(); List shares = xmlParser.parseXMLResponse(is); - if (shares != null && shares.size() > 0) { - Log_OC.d(TAG, "Got " + shares.size() + " shares"); - result = new RemoteOperationResult(ResultCode.OK); - ArrayList sharesObjects = new ArrayList(); - sharesObjects.add(shares.get(0)); - result.setData(sharesObjects); + if (xmlParser.isSuccess()) { + if (shares != null && shares.size() > 0) { + Log_OC.d(TAG, "Got " + shares.size() + " shares"); + result = new RemoteOperationResult(ResultCode.OK); + resultData.add(shares.get(0)); + result.setData(resultData); + } else { + result = new RemoteOperationResult(ResultCode.WRONG_SERVER_RESPONSE); + Log_OC.e(TAG, "Successful status with no share in it"); + } + + } else if (xmlParser.isWrongParameter()){ + result = new RemoteOperationResult(ResultCode.SHARE_WRONG_PARAMETER); + resultData.add(xmlParser.getMessage()); + result.setData(resultData); + + } else if (xmlParser.isNotFound()){ + result = new RemoteOperationResult(ResultCode.SHARE_NOT_FOUND); + resultData.add(xmlParser.getMessage()); + result.setData(resultData); + + } else if (xmlParser.isForbidden()) { + result = new RemoteOperationResult(ResultCode.SHARE_FORBIDDEN); + resultData.add(xmlParser.getMessage()); + result.setData(resultData); + + } else { + result = new RemoteOperationResult(ResultCode.WRONG_SERVER_RESPONSE); } + } else { result = new RemoteOperationResult(false, status, get.getResponseHeaders()); } diff --git a/src/com/owncloud/android/lib/resources/shares/GetRemoteSharesForFileOperation.java b/src/com/owncloud/android/lib/resources/shares/GetRemoteSharesForFileOperation.java index 1518b516..98c8c9d8 100644 --- a/src/com/owncloud/android/lib/resources/shares/GetRemoteSharesForFileOperation.java +++ b/src/com/owncloud/android/lib/resources/shares/GetRemoteSharesForFileOperation.java @@ -37,7 +37,6 @@ import com.owncloud.android.lib.common.operations.RemoteOperation; import com.owncloud.android.lib.common.operations.RemoteOperationResult; import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode; import com.owncloud.android.lib.common.utils.Log_OC; -import com.owncloud.android.lib.resources.status.OwnCloudVersion; /** * Provide a list shares for a specific file. @@ -103,32 +102,53 @@ public class GetRemoteSharesForFileOperation extends RemoteOperation { if(isSuccess(status)) { String response = get.getResponseBodyAsString(); + ArrayList resultData = new ArrayList(); - result = new RemoteOperationResult(ResultCode.OK); - // Parse xml response --> obtain the response in ShareFiles ArrayList // convert String into InputStream InputStream is = new ByteArrayInputStream(response.getBytes()); ShareXMLParser xmlParser = new ShareXMLParser(); mShares = xmlParser.parseXMLResponse(is); - if (mShares != null) { - Log_OC.d(TAG, "Got " + mShares.size() + " shares"); - result = new RemoteOperationResult(ResultCode.OK); - ArrayList sharesObjects = new ArrayList(); - for (OCShare share: mShares) { - // Build the link - if ( share.getShareType() == ShareType.PUBLIC_LINK && - share.getShareLink() == null && - share.getToken().length() > 0 - ) { - String linkToken = ShareUtils.getSharingToken( - client.getOwnCloudVersion()); - share.setShareLink(client.getBaseUri() + linkToken + - share.getToken()); + if (xmlParser.isSuccess()) { + if (mShares != null) { // 0 shares is a right response + Log_OC.d(TAG, "Got " + mShares.size() + " shares"); + result = new RemoteOperationResult(ResultCode.OK); + for (OCShare share: mShares) { + // Build the link + if ( share.getShareType() == ShareType.PUBLIC_LINK && + share.getShareLink() == null && + share.getToken().length() > 0 + ) { + String linkToken = ShareUtils.getSharingToken( + client.getOwnCloudVersion()); + share.setShareLink(client.getBaseUri() + linkToken + + share.getToken()); + } + resultData.add(share); } - sharesObjects.add(share); + result.setData(resultData); + } else { + result = new RemoteOperationResult(ResultCode.WRONG_SERVER_RESPONSE); + Log_OC.e(TAG, "Successful status with no share in it"); } - result.setData(sharesObjects); + + } else if (xmlParser.isWrongParameter()){ + result = new RemoteOperationResult(ResultCode.SHARE_WRONG_PARAMETER); + resultData.add(xmlParser.getMessage()); + result.setData(resultData); + + } else if (xmlParser.isNotFound()){ + result = new RemoteOperationResult(ResultCode.SHARE_NOT_FOUND); + resultData.add(xmlParser.getMessage()); + result.setData(resultData); + + } else if (xmlParser.isForbidden()) { + result = new RemoteOperationResult(ResultCode.SHARE_FORBIDDEN); + resultData.add(xmlParser.getMessage()); + result.setData(resultData); + + } else { + result = new RemoteOperationResult(ResultCode.WRONG_SERVER_RESPONSE); } } else { diff --git a/src/com/owncloud/android/lib/resources/shares/GetRemoteSharesOperation.java b/src/com/owncloud/android/lib/resources/shares/GetRemoteSharesOperation.java index 18326549..295eaba4 100644 --- a/src/com/owncloud/android/lib/resources/shares/GetRemoteSharesOperation.java +++ b/src/com/owncloud/android/lib/resources/shares/GetRemoteSharesOperation.java @@ -68,23 +68,45 @@ public class GetRemoteSharesOperation extends RemoteOperation { get = new GetMethod(client.getBaseUri() + ShareUtils.SHARING_API_PATH); get.addRequestHeader(OCS_API_HEADER, OCS_API_HEADER_VALUE); status = client.executeMethod(get); + if(isSuccess(status)) { String response = get.getResponseBodyAsString(); + ArrayList resultData = new ArrayList(); // Parse xml response --> obtain the response in ShareFiles ArrayList // convert String into InputStream InputStream is = new ByteArrayInputStream(response.getBytes()); ShareXMLParser xmlParser = new ShareXMLParser(); mShares = xmlParser.parseXMLResponse(is); - if (mShares != null) { - Log_OC.d(TAG, "Got " + mShares.size() + " shares"); - result = new RemoteOperationResult(ResultCode.OK); - ArrayList sharesObjects = new ArrayList(); - for (OCShare share: mShares) { - sharesObjects.add(share); + if (xmlParser.isSuccess()) { + if (mShares != null) { // 0 shares is a right response + Log_OC.d(TAG, "Got " + mShares.size() + " shares"); + result = new RemoteOperationResult(ResultCode.OK); + for (OCShare share : mShares) { + resultData.add(share); + } + result.setData(resultData); } - result.setData(sharesObjects); + + } else if (xmlParser.isWrongParameter()){ + result = new RemoteOperationResult(ResultCode.SHARE_WRONG_PARAMETER); + resultData.add(xmlParser.getMessage()); + result.setData(resultData); + + } else if (xmlParser.isNotFound()){ + result = new RemoteOperationResult(ResultCode.SHARE_NOT_FOUND); + resultData.add(xmlParser.getMessage()); + result.setData(resultData); + + } else if (xmlParser.isForbidden()) { + result = new RemoteOperationResult(ResultCode.SHARE_FORBIDDEN); + resultData.add(xmlParser.getMessage()); + result.setData(resultData); + + } else { + result = new RemoteOperationResult(ResultCode.WRONG_SERVER_RESPONSE); } + } else { result = new RemoteOperationResult(false, status, get.getResponseHeaders()); } diff --git a/src/com/owncloud/android/lib/resources/shares/RemoveRemoteShareOperation.java b/src/com/owncloud/android/lib/resources/shares/RemoveRemoteShareOperation.java index 4db29051..c4245718 100644 --- a/src/com/owncloud/android/lib/resources/shares/RemoveRemoteShareOperation.java +++ b/src/com/owncloud/android/lib/resources/shares/RemoveRemoteShareOperation.java @@ -26,6 +26,7 @@ package com.owncloud.android.lib.resources.shares; import java.io.ByteArrayInputStream; import java.io.InputStream; +import java.util.ArrayList; import org.apache.commons.httpclient.HttpStatus; import org.apache.jackrabbit.webdav.client.methods.DeleteMethod; @@ -77,9 +78,8 @@ public class RemoveRemoteShareOperation extends RemoteOperation { if(isSuccess(status)) { String response = delete.getResponseBodyAsString(); + ArrayList resultData = new ArrayList(); - result = new RemoteOperationResult(ResultCode.OK); - // Parse xml response // convert String into InputStream InputStream is = new ByteArrayInputStream(response.getBytes()); @@ -87,10 +87,23 @@ public class RemoveRemoteShareOperation extends RemoteOperation { xmlParser.parseXMLResponse(is); if (xmlParser.isSuccess()) { result = new RemoteOperationResult(ResultCode.OK); - } else if (xmlParser.isFileNotFound()){ + } else if (xmlParser.isWrongParameter()){ + result = new RemoteOperationResult(ResultCode.SHARE_WRONG_PARAMETER); + resultData.add(xmlParser.getMessage()); + result.setData(resultData); + + } else if (xmlParser.isNotFound()){ result = new RemoteOperationResult(ResultCode.SHARE_NOT_FOUND); + resultData.add(xmlParser.getMessage()); + result.setData(resultData); + + } else if (xmlParser.isForbidden()) { + result = new RemoteOperationResult(ResultCode.SHARE_FORBIDDEN); + resultData.add(xmlParser.getMessage()); + result.setData(resultData); + } else { - result = new RemoteOperationResult(false, status, delete.getResponseHeaders()); + result = new RemoteOperationResult(ResultCode.WRONG_SERVER_RESPONSE); } Log_OC.d(TAG, "Unshare " + id + ": " + result.getLogMessage()); diff --git a/src/com/owncloud/android/lib/resources/shares/ShareXMLParser.java b/src/com/owncloud/android/lib/resources/shares/ShareXMLParser.java index 8189eac0..e672deeb 100644 --- a/src/com/owncloud/android/lib/resources/shares/ShareXMLParser.java +++ b/src/com/owncloud/android/lib/resources/shares/ShareXMLParser.java @@ -57,7 +57,7 @@ public class ShareXMLParser { private static final String NODE_META = "meta"; private static final String NODE_STATUS = "status"; private static final String NODE_STATUS_CODE = "statuscode"; - //private static final String NODE_MESSAGE = "message"; + private static final String NODE_MESSAGE = "message"; private static final String NODE_DATA = "data"; private static final String NODE_ELEMENT = "element"; @@ -82,11 +82,13 @@ public class ShareXMLParser { private static final String TYPE_FOLDER = "folder"; private static final int SUCCESS = 100; - private static final int FAILURE = 403; - private static final int FILE_NOT_FOUND = 404; + private static final int ERROR_WRONG_PARAMETER = 403; + private static final int ERROR_FORBIDDEN = 403; + private static final int ERROR_NOT_FOUND = 404; private String mStatus; private int mStatusCode; + private String mMessage; // Getters and Setters public String getStatus() { @@ -104,21 +106,36 @@ public class ShareXMLParser { public void setStatusCode(int statusCode) { this.mStatusCode = statusCode; } + + public String getMessage() { + return mMessage; + } + + public void setMessage(String message) { + this.mMessage = message; + } + // Constructor public ShareXMLParser() { - mStatusCode = 100; + mStatusCode = -1; } public boolean isSuccess() { return mStatusCode == SUCCESS; } - public boolean isFailure() { - return mStatusCode == FAILURE; + + public boolean isForbidden() { + return mStatusCode == ERROR_FORBIDDEN; } - public boolean isFileNotFound() { - return mStatusCode == FILE_NOT_FOUND; + + public boolean isNotFound() { + return mStatusCode == ERROR_NOT_FOUND; } - + + public boolean isWrongParameter() { + return mStatusCode == ERROR_WRONG_PARAMETER; + } + /** * Parse is as response of Share API * @param is @@ -197,6 +214,9 @@ public class ShareXMLParser { } else if (name.equalsIgnoreCase(NODE_STATUS_CODE)) { setStatusCode(Integer.parseInt(readNode(parser, NODE_STATUS_CODE))); + } else if (name.equalsIgnoreCase(NODE_MESSAGE)) { + setMessage(readNode(parser, NODE_MESSAGE)); + } else { skip(parser); }