X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/blobdiff_plain/2623e9c1957e95166e99adc81481f91136ac4453..8f1566a21c1dfdc562d701c5514ee616509fcb65:/src/com/owncloud/android/operations/RemoteOperationResult.java diff --git a/src/com/owncloud/android/operations/RemoteOperationResult.java b/src/com/owncloud/android/operations/RemoteOperationResult.java index 718988a4..059c2908 100644 --- a/src/com/owncloud/android/operations/RemoteOperationResult.java +++ b/src/com/owncloud/android/operations/RemoteOperationResult.java @@ -3,9 +3,8 @@ * Copyright (C) 2012-2013 ownCloud Inc. * * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. + * it under the terms of the GNU General Public License version 2, + * as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -33,21 +32,23 @@ import org.apache.commons.httpclient.HttpException; import org.apache.commons.httpclient.HttpStatus; import org.apache.jackrabbit.webdav.DavException; +import com.owncloud.android.Log_OC; import com.owncloud.android.network.CertificateCombinedException; - /** * The result of a remote operation required to an ownCloud server. * - * Provides a common classification of remote operation results for all the application. + * Provides a common classification of remote operation results for all the + * application. * * @author David A. Velasco */ public class RemoteOperationResult implements Serializable { - + /** Generated - should be refreshed every time the class changes!! */ private static final long serialVersionUID = -7805531062432602444L; - + + private static final String TAG = "RemoteOperationResult"; public enum ResultCode { OK, @@ -70,105 +71,113 @@ public class RemoteOperationResult implements Serializable { INVALID_LOCAL_FILE_NAME, INVALID_OVERWRITE, CONFLICT, + OAUTH2_ERROR, SYNC_CONFLICT, LOCAL_STORAGE_FULL, LOCAL_STORAGE_NOT_MOVED, - LOCAL_STORAGE_NOT_COPIED + LOCAL_STORAGE_NOT_COPIED, + OAUTH2_ERROR_ACCESS_DENIED, + QUOTA_EXCEEDED } private boolean mSuccess = false; private int mHttpCode = -1; private Exception mException = null; private ResultCode mCode = ResultCode.UNKNOWN_ERROR; - + public RemoteOperationResult(ResultCode code) { mCode = code; mSuccess = (code == ResultCode.OK || code == ResultCode.OK_SSL || code == ResultCode.OK_NO_SSL); } - + public RemoteOperationResult(boolean success, int httpCode) { - mSuccess = success; + mSuccess = success; mHttpCode = httpCode; if (success) { mCode = ResultCode.OK; - + } else if (httpCode > 0) { switch (httpCode) { - case HttpStatus.SC_UNAUTHORIZED: - mCode = ResultCode.UNAUTHORIZED; - break; - case HttpStatus.SC_NOT_FOUND: - mCode = ResultCode.FILE_NOT_FOUND; - break; - case HttpStatus.SC_INTERNAL_SERVER_ERROR: - mCode = ResultCode.INSTANCE_NOT_CONFIGURED; - break; - case HttpStatus.SC_CONFLICT: - mCode = ResultCode.CONFLICT; - break; - default: - mCode = ResultCode.UNHANDLED_HTTP_CODE; + case HttpStatus.SC_UNAUTHORIZED: + mCode = ResultCode.UNAUTHORIZED; + break; + case HttpStatus.SC_NOT_FOUND: + mCode = ResultCode.FILE_NOT_FOUND; + break; + case HttpStatus.SC_INTERNAL_SERVER_ERROR: + mCode = ResultCode.INSTANCE_NOT_CONFIGURED; + break; + case HttpStatus.SC_CONFLICT: + mCode = ResultCode.CONFLICT; + break; + case HttpStatus.SC_INSUFFICIENT_STORAGE: + mCode = ResultCode.QUOTA_EXCEEDED; + break; + default: + mCode = ResultCode.UNHANDLED_HTTP_CODE; + Log_OC.d(TAG, "RemoteOperationResult has prcessed UNHANDLED_HTTP_CODE: " + httpCode); } } } - + public RemoteOperationResult(Exception e) { - mException = e; - + mException = e; + if (e instanceof OperationCancelledException) { mCode = ResultCode.CANCELLED; - - } else if (e instanceof SocketException) { + + } else if (e instanceof SocketException) { mCode = ResultCode.WRONG_CONNECTION; - + } else if (e instanceof SocketTimeoutException) { mCode = ResultCode.TIMEOUT; - + } else if (e instanceof ConnectTimeoutException) { mCode = ResultCode.TIMEOUT; - + } else if (e instanceof MalformedURLException) { mCode = ResultCode.INCORRECT_ADDRESS; - + } else if (e instanceof UnknownHostException) { mCode = ResultCode.HOST_NOT_AVAILABLE; - + } else if (e instanceof SSLException || e instanceof RuntimeException) { CertificateCombinedException se = getCertificateCombinedException(e); if (se != null) { mException = se; - if (se.isRecoverable()) { + if (se.isRecoverable()) { mCode = ResultCode.SSL_RECOVERABLE_PEER_UNVERIFIED; } - - } else { + } else if (e instanceof RuntimeException) { + mCode = ResultCode.HOST_NOT_AVAILABLE; + + } else { mCode = ResultCode.SSL_ERROR; } - + } else { mCode = ResultCode.UNKNOWN_ERROR; } - + } - - + public boolean isSuccess() { return mSuccess; } - + public boolean isCancelled() { return mCode == ResultCode.CANCELLED; } - + public int getHttpCode() { return mHttpCode; } - + public ResultCode getCode() { return mCode; } - + public Exception getException() { return mException; } @@ -176,11 +185,11 @@ public class RemoteOperationResult implements Serializable { public boolean isSslRecoverableException() { return mCode == ResultCode.SSL_RECOVERABLE_PEER_UNVERIFIED; } - + private CertificateCombinedException getCertificateCombinedException(Exception e) { CertificateCombinedException result = null; if (e instanceof CertificateCombinedException) { - return (CertificateCombinedException)e; + return (CertificateCombinedException) e; } Throwable cause = mException.getCause(); Throwable previousCause = null; @@ -189,39 +198,38 @@ public class RemoteOperationResult implements Serializable { cause = cause.getCause(); } if (cause != null && cause instanceof CertificateCombinedException) { - result = (CertificateCombinedException)cause; + result = (CertificateCombinedException) cause; } return result; } - - + public String getLogMessage() { - + if (mException != null) { if (mException instanceof OperationCancelledException) { return "Operation cancelled by the caller"; - - } else if (mException instanceof SocketException) { + + } else if (mException instanceof SocketException) { return "Socket exception"; - + } else if (mException instanceof SocketTimeoutException) { return "Socket timeout exception"; - + } else if (mException instanceof ConnectTimeoutException) { return "Connect timeout exception"; - + } else if (mException instanceof MalformedURLException) { return "Malformed URL exception"; - + } else if (mException instanceof UnknownHostException) { return "Unknown host exception"; - + } else if (mException instanceof CertificateCombinedException) { if (((CertificateCombinedException) mException).isRecoverable()) return "SSL recoverable exception"; else return "SSL exception"; - + } else if (mException instanceof SSLException) { return "SSL exception"; @@ -238,25 +246,33 @@ public class RemoteOperationResult implements Serializable { return "Unexpected exception"; } } - + if (mCode == ResultCode.INSTANCE_NOT_CONFIGURED) { return "The ownCloud server is not configured!"; - + } else if (mCode == ResultCode.NO_NETWORK_CONNECTION) { return "No network connection"; - + } else if (mCode == ResultCode.BAD_OC_VERSION) { return "No valid ownCloud version was found at the server"; - + } else if (mCode == ResultCode.LOCAL_STORAGE_FULL) { return "Local storage full"; - + } else if (mCode == ResultCode.LOCAL_STORAGE_NOT_MOVED) { return "Error while moving file to final directory"; } - - return "Operation finished with HTTP status code " + mHttpCode + " (" + (isSuccess()?"success":"fail") + ")"; - + + return "Operation finished with HTTP status code " + mHttpCode + " (" + (isSuccess() ? "success" : "fail") + ")"; + + } + + public boolean isServerFail() { + return (mHttpCode >= HttpStatus.SC_INTERNAL_SERVER_ERROR); + } + + public boolean isException() { + return (mException != null); } }