X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/blobdiff_plain/5066193e58ea77f0a507d790f9487fc3269ae3b0..e901b609baa4dd5f681e2a5257c9e504997e3377:/src/com/owncloud/android/operations/CreateFolderOperation.java diff --git a/src/com/owncloud/android/operations/CreateFolderOperation.java b/src/com/owncloud/android/operations/CreateFolderOperation.java index 1a38cdbf..4df8b3df 100644 --- a/src/com/owncloud/android/operations/CreateFolderOperation.java +++ b/src/com/owncloud/android/operations/CreateFolderOperation.java @@ -1,5 +1,5 @@ /* ownCloud Android client application - * Copyright (C) 2012 ownCloud Inc. + * Copyright (C) 2014 ownCloud Inc. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2, @@ -17,79 +17,103 @@ package com.owncloud.android.operations; -import org.apache.jackrabbit.webdav.client.methods.MkColMethod; - -import com.owncloud.android.Log_OC; -import com.owncloud.android.datamodel.DataStorageManager; import com.owncloud.android.datamodel.OCFile; +import com.owncloud.android.lib.common.OwnCloudClient; +import com.owncloud.android.lib.resources.files.CreateRemoteFolderOperation; +import com.owncloud.android.lib.common.operations.OnRemoteOperationListener; +import com.owncloud.android.lib.common.operations.RemoteOperation; +import com.owncloud.android.lib.common.operations.RemoteOperationResult; +import com.owncloud.android.lib.common.utils.Log_OC; +import com.owncloud.android.operations.common.SyncOperation; +import com.owncloud.android.utils.FileStorageUtils; -import eu.alefzero.webdav.WebdavClient; -import eu.alefzero.webdav.WebdavUtils; /** - * Remote operation performing the creation of a new folder in the ownCloud server. + * Access to remote operation performing the creation of a new folder in the ownCloud server. + * Save the new folder in Database * * @author David A. Velasco + * @author masensio */ -public class CreateFolderOperation extends RemoteOperation { +public class CreateFolderOperation extends SyncOperation implements OnRemoteOperationListener{ private static final String TAG = CreateFolderOperation.class.getSimpleName(); - - private static final int READ_TIMEOUT = 10000; - private static final int CONNECTION_TIMEOUT = 5000; protected String mRemotePath; - protected long mParentDirId; - protected DataStorageManager mStorageManager; + protected boolean mCreateFullPath; /** * Constructor * - * @param remoetPath Full path to the new directory to create in the remote server. - * @param parentDirId Local database id for the parent folder. - * @param storageManager Reference to the local database corresponding to the account where the file is contained. + * @param createFullPath 'True' means that all the ancestor folders should be created if don't exist yet. */ - public CreateFolderOperation(String remotePath, long parentDirId, DataStorageManager storageManager) { + public CreateFolderOperation(String remotePath, boolean createFullPath) { mRemotePath = remotePath; - mParentDirId = parentDirId; - mStorageManager = storageManager; + mCreateFullPath = createFullPath; + + } + + + @Override + protected RemoteOperationResult run(OwnCloudClient client) { + CreateRemoteFolderOperation operation = new CreateRemoteFolderOperation(mRemotePath, mCreateFullPath); + RemoteOperationResult result = operation.execute(client); + + if (result.isSuccess()) { + saveFolderInDB(); + } else { + Log_OC.e(TAG, mRemotePath + "hasn't been created"); + } + + return result; + } + + @Override + public void onRemoteOperationFinish(RemoteOperation operation, RemoteOperationResult result) { + if (operation instanceof CreateRemoteFolderOperation) { + onCreateRemoteFolderOperationFinish((CreateRemoteFolderOperation)operation, result); + } } + private void onCreateRemoteFolderOperationFinish(CreateRemoteFolderOperation operation, RemoteOperationResult result) { + if (result.isSuccess()) { + saveFolderInDB(); + } else { + Log_OC.e(TAG, mRemotePath + "hasn't been created"); + } + } + /** - * Performs the remove operation - * - * @param client Client object to communicate with the remote ownCloud server. + * Save new directory in local database */ - @Override - protected RemoteOperationResult run(WebdavClient client) { - 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()) { - // Save new directory in local database - OCFile newDir = new OCFile(mRemotePath); - newDir.setMimetype("DIR"); - newDir.setParentId(mParentDirId); - newDir.setModificationTimestamp(System.currentTimeMillis()); - mStorageManager.saveFile(newDir); + public void saveFolderInDB() { + if (mCreateFullPath && getStorageManager(). + getFileByPath(FileStorageUtils.getParentPath(mRemotePath)) == null){// When parent + // of remote path + // is not created + String[] subFolders = mRemotePath.split("/"); + String composedRemotePath = "/"; + + // For each antecesor folders create them recursively + for (int i=0; i