mirror of
				https://github.com/owncloud/android-library.git
				synced 2025-10-31 10:27:45 +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); | ||||
| 							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