Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ad60bc9e authored by David A. Velasco's avatar David A. Velasco
Browse files

Complete error handling and add error message from server to response

parent 3d34e504
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -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;
+20 −14
Original line number Diff line number Diff line
@@ -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()){
				} 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.isFailure()) {
					// TODO need deeper processing
				} 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 {
+31 −8
Original line number Diff line number Diff line
@@ -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());
			}
+39 −19
Original line number Diff line number Diff line
@@ -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 {
+29 −7
Original line number Diff line number Diff line
@@ -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(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());
			}
Loading