1
0
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:
David A. Velasco 2015-10-23 15:27:37 +02:00
parent 3d34e504ff
commit ad60bc9e8e
7 changed files with 167 additions and 62 deletions

View File

@ -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;

View File

@ -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 {

View File

@ -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());
}

View File

@ -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 {

View File

@ -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);
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());
}

View File

@ -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());

View File

@ -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);
}