-/* ownCloud Android client application
- * Copyright (C) 2012 ownCloud Inc.
+/**
+ * ownCloud Android client application
+ *
+ * @author David A. Velasco
+ * @author masensio
+ * Copyright (C) 2015 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,
package com.owncloud.android.operations;
-import com.owncloud.android.datamodel.FileDataStorageManager;
+import com.owncloud.android.MainApp;
import com.owncloud.android.datamodel.OCFile;
-import com.owncloud.android.oc_framework.network.webdav.WebdavClient;
-import com.owncloud.android.oc_framework.operations.remote.CreateRemoteFolderOperation;
-import com.owncloud.android.oc_framework.operations.OnRemoteOperationListener;
-import com.owncloud.android.oc_framework.operations.RemoteOperation;
-import com.owncloud.android.oc_framework.operations.RemoteOperationResult;
+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 com.owncloud.android.utils.Log_OC;
/**
* 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 implements OnRemoteOperationListener{
+public class CreateFolderOperation extends SyncOperation implements OnRemoteOperationListener{
private static final String TAG = CreateFolderOperation.class.getSimpleName();
- protected String mFolderName;
protected String mRemotePath;
protected boolean mCreateFullPath;
- protected FileDataStorageManager mStorageManager;
/**
* Constructor
*
- * @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.
- * @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 folderName, String remotePath, boolean createFullPath, FileDataStorageManager storageManager) {
- mFolderName = folderName;
+ public CreateFolderOperation(String remotePath, boolean createFullPath) {
mRemotePath = remotePath;
mCreateFullPath = createFullPath;
- mStorageManager = storageManager;
}
@Override
- protected RemoteOperationResult run(WebdavClient client) {
- CreateRemoteFolderOperation operation = new CreateRemoteFolderOperation(mFolderName, mRemotePath, mCreateFullPath);
+ protected RemoteOperationResult run(OwnCloudClient client) {
+ CreateRemoteFolderOperation operation = new CreateRemoteFolderOperation(mRemotePath,
+ mCreateFullPath);
RemoteOperationResult result = operation.execute(client);
if (result.isSuccess()) {
}
- private void onCreateRemoteFolderOperationFinish(CreateRemoteFolderOperation operation, RemoteOperationResult result) {
+ private void onCreateRemoteFolderOperationFinish(CreateRemoteFolderOperation operation,
+ RemoteOperationResult result) {
if (result.isSuccess()) {
saveFolderInDB();
} else {
}
}
-
/**
* Save new directory in local database
*/
public void saveFolderInDB() {
- OCFile newDir = new OCFile(mRemotePath);
- newDir.setMimetype("DIR");
- long parentId = mStorageManager.getFileByPath(FileStorageUtils.getParentPath(mRemotePath)).getFileId();
- newDir.setParentId(parentId);
- newDir.setModificationTimestamp(System.currentTimeMillis());
- mStorageManager.saveFile(newDir);
+ if (mCreateFullPath && getStorageManager().
+ getFileByPath(FileStorageUtils.getParentPath(mRemotePath)) == null){// When parent
+ // of remote path
+ // is not created
+ String[] subFolders = mRemotePath.split("/");
+ String composedRemotePath = "/";
- Log_OC.d(TAG, "Create directory " + mRemotePath + " in Database");
+ // For each antecesor folders create them recursively
+ for (int i=0; i<subFolders.length; i++) {
+ String subFolder = subFolders[i];
+ if (!subFolder.isEmpty()) {
+ composedRemotePath = composedRemotePath + subFolder + "/";
+ mRemotePath = composedRemotePath;
+ saveFolderInDB();
+ }
+ }
+ } else { // Create directory on DB
+ OCFile newDir = new OCFile(mRemotePath);
+ newDir.setMimetype("DIR");
+ long parentId = getStorageManager().
+ getFileByPath(FileStorageUtils.getParentPath(mRemotePath)).getFileId();
+ newDir.setParentId(parentId);
+ newDir.setModificationTimestamp(System.currentTimeMillis());
+ getStorageManager().saveFile(newDir);
+ Log_OC.d(TAG, "Create directory " + mRemotePath + " in Database");
+ }
}
-
-
}