X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/blobdiff_plain/67a7d8a303a70b7a25e6214eaa5cb6795cf4aff7..2be23eaec586972a5ff86c4f9c34d95188231821:/src/com/owncloud/android/operations/remote/CreateRemoteFolderOperation.java diff --git a/src/com/owncloud/android/operations/remote/CreateRemoteFolderOperation.java b/src/com/owncloud/android/operations/remote/CreateRemoteFolderOperation.java index 6d417d08..7e02afef 100644 --- a/src/com/owncloud/android/operations/remote/CreateRemoteFolderOperation.java +++ b/src/com/owncloud/android/operations/remote/CreateRemoteFolderOperation.java @@ -1,20 +1,81 @@ package com.owncloud.android.operations.remote; +import org.apache.commons.httpclient.HttpStatus; +import org.apache.jackrabbit.webdav.client.methods.MkColMethod; + +import com.owncloud.android.Log_OC; +import com.owncloud.android.network.webdav.WebdavClient; +import com.owncloud.android.network.webdav.WebdavUtils; import com.owncloud.android.operations.RemoteOperation; import com.owncloud.android.operations.RemoteOperationResult; +import com.owncloud.android.utils.FileStorageUtils; -import eu.alefzero.webdav.WebdavClient; +/** + * Remote operation performing the creation of a new folder in the ownCloud server. + * + * @author David A. Velasco + * @author masensio + * + */ public class CreateRemoteFolderOperation extends RemoteOperation { + + private static final String TAG = CreateRemoteFolderOperation.class.getSimpleName(); - public CreateRemoteFolderOperation() { - // TODO Auto-generated constructor stub + private static final int READ_TIMEOUT = 10000; + private static final int CONNECTION_TIMEOUT = 5000; + + protected String mRemotePath; + protected boolean mCreateFullPath; + + /** + * Contructor + * + * @param remotePath Full path to the new directory to create in the remote server. + * @param createFullPath 'True' means that all the ancestor folders should be created if don't exist yet. + */ + public CreateRemoteFolderOperation(String remotePath, boolean createFullPath) { + mRemotePath = remotePath; + mCreateFullPath = createFullPath; } + /** + * Performs the operation + * + * @param client Client object to communicate with the remote ownCloud server. + */ @Override protected RemoteOperationResult run(WebdavClient client) { - // TODO Auto-generated method stub - return null; + RemoteOperationResult result = null; + MkColMethod mkcol = null; + + try { + mkcol = new MkColMethod(client.getBaseUri() + WebdavUtils.encodePath(mRemotePath)); + int status = client.executeMethod(mkcol, READ_TIMEOUT, CONNECTION_TIMEOUT); + if (!mkcol.succeeded() && mkcol.getStatusCode() == HttpStatus.SC_CONFLICT && mCreateFullPath) { + result = createParentFolder(FileStorageUtils.getParentPath(mRemotePath), client); + status = client.executeMethod(mkcol, READ_TIMEOUT, CONNECTION_TIMEOUT); // second (and last) try + } + + result = new RemoteOperationResult(mkcol.succeeded(), status, mkcol.getResponseHeaders()); + Log_OC.d(TAG, "Create directory " + mRemotePath + ": " + result.getLogMessage()); + client.exhaustResponse(mkcol.getResponseBodyAsStream()); + + } catch (Exception e) { + result = new RemoteOperationResult(e); + Log_OC.e(TAG, "Create directory " + mRemotePath + ": " + result.getLogMessage(), e); + + } finally { + if (mkcol != null) + mkcol.releaseConnection(); + } + return result; } + + private RemoteOperationResult createParentFolder(String parentPath, WebdavClient client) { + RemoteOperation operation = new CreateRemoteFolderOperation( parentPath, + mCreateFullPath); + return operation.execute(client); + } }