mirror of
https://github.com/owncloud/android-library.git
synced 2025-06-08 16:36:13 +00:00
Complete error handling and add error message from server to response
This commit is contained in:
parent
3d34e504ff
commit
ad60bc9e8e
@ -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;
|
||||
|
@ -140,8 +140,7 @@ public class CreateRemoteShareOperation extends RemoteOperation {
|
||||
|
||||
if(isSuccess(status)) {
|
||||
String response = post.getResponseBodyAsString();
|
||||
|
||||
result = new RemoteOperationResult(ResultCode.OK);
|
||||
ArrayList<Object> resultData = new ArrayList<Object>();
|
||||
|
||||
// Parse xml response --> obtain the response in ShareFiles ArrayList
|
||||
// convert String into InputStream
|
||||
@ -149,37 +148,44 @@ public class CreateRemoteShareOperation extends RemoteOperation {
|
||||
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<Object> sharesObjects = new ArrayList<Object>();
|
||||
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()){
|
||||
result = new RemoteOperationResult(ResultCode.SHARE_NOT_FOUND);
|
||||
} else if (xmlParser.isWrongParameter()){
|
||||
result = new RemoteOperationResult(ResultCode.SHARE_WRONG_PARAMETER);
|
||||
resultData.add(xmlParser.getMessage());
|
||||
result.setData(resultData);
|
||||
|
||||
} else if (xmlParser.isFailure()) {
|
||||
// TODO need deeper processing
|
||||
} 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, post.getResponseHeaders());
|
||||
result = new RemoteOperationResult(ResultCode.WRONG_SERVER_RESPONSE);
|
||||
}
|
||||
|
||||
} else {
|
||||
|
@ -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<Object> resultData = new ArrayList<Object>();
|
||||
|
||||
// Parse xml response --> obtain the response in ShareFiles ArrayList
|
||||
// convert String into InputStream
|
||||
InputStream is = new ByteArrayInputStream(response.getBytes());
|
||||
ShareXMLParser xmlParser = new ShareXMLParser();
|
||||
List<OCShare> shares = xmlParser.parseXMLResponse(is);
|
||||
if (xmlParser.isSuccess()) {
|
||||
if (shares != null && shares.size() > 0) {
|
||||
Log_OC.d(TAG, "Got " + shares.size() + " shares");
|
||||
result = new RemoteOperationResult(ResultCode.OK);
|
||||
ArrayList<Object> sharesObjects = new ArrayList<Object>();
|
||||
sharesObjects.add(shares.get(0));
|
||||
result.setData(sharesObjects);
|
||||
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());
|
||||
}
|
||||
|
@ -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,18 +102,17 @@ public class GetRemoteSharesForFileOperation extends RemoteOperation {
|
||||
|
||||
if(isSuccess(status)) {
|
||||
String response = get.getResponseBodyAsString();
|
||||
|
||||
result = new RemoteOperationResult(ResultCode.OK);
|
||||
ArrayList<Object> resultData = new ArrayList<Object>();
|
||||
|
||||
// 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) {
|
||||
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);
|
||||
ArrayList<Object> sharesObjects = new ArrayList<Object>();
|
||||
for (OCShare share: mShares) {
|
||||
// Build the link
|
||||
if ( share.getShareType() == ShareType.PUBLIC_LINK &&
|
||||
@ -126,9 +124,31 @@ public class GetRemoteSharesForFileOperation extends RemoteOperation {
|
||||
share.setShareLink(client.getBaseUri() + linkToken +
|
||||
share.getToken());
|
||||
}
|
||||
sharesObjects.add(share);
|
||||
resultData.add(share);
|
||||
}
|
||||
result.setData(sharesObjects);
|
||||
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 {
|
||||
|
@ -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<Object> resultData = new ArrayList<Object>();
|
||||
|
||||
// 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) {
|
||||
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);
|
||||
ArrayList<Object> sharesObjects = new ArrayList<Object>();
|
||||
for (OCShare share: mShares) {
|
||||
sharesObjects.add(share);
|
||||
for (OCShare share : mShares) {
|
||||
resultData.add(share);
|
||||
}
|
||||
result.setData(sharesObjects);
|
||||
result.setData(resultData);
|
||||
}
|
||||
|
||||
} 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());
|
||||
}
|
||||
|
@ -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,8 +78,7 @@ public class RemoveRemoteShareOperation extends RemoteOperation {
|
||||
|
||||
if(isSuccess(status)) {
|
||||
String response = delete.getResponseBodyAsString();
|
||||
|
||||
result = new RemoteOperationResult(ResultCode.OK);
|
||||
ArrayList<Object> resultData = new ArrayList<Object>();
|
||||
|
||||
// Parse xml response
|
||||
// convert String into InputStream
|
||||
@ -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());
|
||||
|
@ -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,19 +106,34 @@ 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;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -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);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user