/*
* Copyright (C) 2012 The CyanogenMod Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.cyanogenmod.filemanager.ui.policy;
import android.content.Context;
import android.os.AsyncTask;
import android.util.Log;
import com.cyanogenmod.filemanager.console.RelaunchableException;
import com.cyanogenmod.filemanager.listeners.OnRequestRefreshListener;
import com.cyanogenmod.filemanager.listeners.OnSelectionListener;
import com.cyanogenmod.filemanager.model.FileSystemObject;
import com.cyanogenmod.filemanager.util.CommandHelper;
import com.cyanogenmod.filemanager.util.ExceptionUtil;
import java.io.File;
/**
* A class with the convenience methods for resolve new related actions
*/
public final class NewActionPolicy extends ActionsPolicy {
private static final String TAG = "NewActionPolicy"; //$NON-NLS-1$
private static boolean DEBUG = false;
/**
* Method that create the a new file system object.
*
* @param ctx The current context
* @param name The name of the file to be created
* @param onSelectionListener The selection listener (required)
* @param onRequestRefreshListener The listener for request a refresh after the new
* file was created (option)
*/
public static void createNewFile(
final Context ctx, final String name,
final OnSelectionListener onSelectionListener,
final OnRequestRefreshListener onRequestRefreshListener) {
createNewFileSystemObject(ctx, name, false, onSelectionListener, onRequestRefreshListener);
}
/**
* Method that create the a new folder system object.
*
* @param ctx The current context
* @param name The name of the file to be created
* @param onSelectionListener The selection listener (required)
* @param onRequestRefreshListener The listener for request a refresh after the new
* folder was created (option)
*/
public static void createNewDirectory(
final Context ctx, final String name,
final OnSelectionListener onSelectionListener,
final OnRequestRefreshListener onRequestRefreshListener) {
createNewFileSystemObject(ctx, name, true, onSelectionListener, onRequestRefreshListener);
}
/**
* Method that create the a new file system object.
*
* @param ctx The current context
* @param name The name of the file to be created
* @param folder If the new {@link FileSystemObject} to create is a folder (true) or a
* file (false).
* @param onSelectionListener The selection listener (required)
* @param onRequestRefreshListener The listener for request a refresh after the new
* folder was created (option)
*/
private static void createNewFileSystemObject(
final Context ctx, final String name, final boolean folder,
final OnSelectionListener onSelectionListener,
final OnRequestRefreshListener onRequestRefreshListener) {
//Create the absolute file name
File newFso = new File(
onSelectionListener.onRequestCurrentDir(), name);
final String newName = newFso.getAbsolutePath();
try {
if (folder) {
if (DEBUG) {
Log.d(TAG, String.format("Creating new directory: %s", newName)); //$NON-NLS-1$
}
CommandHelper.createDirectory(ctx, newName, null);
} else {
if (DEBUG) {
Log.d(TAG, String.format("Creating new file: %s", newName)); //$NON-NLS-1$
}
CommandHelper.createFile(ctx, newName, null);
}
//Operation complete. Show refresh
if (onRequestRefreshListener != null) {
FileSystemObject fso = null;
try {
fso = CommandHelper.getFileInfo(ctx, newName, false, null);
} catch (Throwable ex2) {/**NON BLOCK**/}
onRequestRefreshListener.onRequestRefresh(fso, false);
}
showOperationSuccessMsg(ctx);
} catch (Throwable ex) {
//Capture the exception
if (ex instanceof RelaunchableException) {
ExceptionUtil.attachAsyncTask(ex, new AsyncTask<Object, Integer, Boolean>() {
/**
* {@inheritDoc}
*/
@Override
protected Boolean doInBackground(Object... params) {
//Operation complete. Show refresh
if (onRequestRefreshListener != null) {
FileSystemObject fso = null;
try {
fso = CommandHelper.getFileInfo(ctx, newName, false, null);
} catch (Throwable ex2) {/**NON BLOCK**/}
onRequestRefreshListener.onRequestRefresh(fso, false);
}
return Boolean.TRUE;
}
/**
* {@inheritDoc}
*/
@Override
protected void onPostExecute(Boolean result) {
if (result != null && result.booleanValue()) {
showOperationSuccessMsg(ctx);
}
}
});
}
ExceptionUtil.translateException(ctx, ex);
}
}
/**
* Method that remove an existing file system object.
*
* @param ctx The current context
* @param src The source file system object
* @param lnkName The new name of the link
* @param onSelectionListener The listener for obtain selection information (required)
* @param onRequestRefreshListener The listener for request a refresh (optional)
*/
public static void createSymlink(
final Context ctx,
final FileSystemObject src,
final String lnkName,
final OnSelectionListener onSelectionListener,
final OnRequestRefreshListener onRequestRefreshListener) {
//Create the absolute file name
File newFso = new File(
onSelectionListener.onRequestCurrentDir(), lnkName);
final String link = newFso.getAbsolutePath();
try {
if (DEBUG) {
Log.d(TAG, String.format(
"Creating new symlink: %s -> %s", src.getFullPath(), link)); //$NON-NLS-1$
}
CommandHelper.createLink(ctx, src.getFullPath(), link, null);
//Operation complete. Show refresh
if (onRequestRefreshListener != null) {
FileSystemObject fso = null;
try {
fso = CommandHelper.getFileInfo(ctx, link, false, null);
} catch (Throwable ex2) {
/**NON BLOCK**/
}
onRequestRefreshListener.onRequestRefresh(fso, false);
}
showOperationSuccessMsg(ctx);
} catch (Throwable ex) {
//Capture the exception
if (ex instanceof RelaunchableException) {
ExceptionUtil.attachAsyncTask(ex, new AsyncTask<Object, Integer, Boolean>() {
/**
* {@inheritDoc}
*/
@Override
protected Boolean doInBackground(Object... params) {
//Operation complete. Show refresh
if (onRequestRefreshListener != null) {
FileSystemObject fso = null;
try {
fso = CommandHelper.getFileInfo(ctx, link, false, null);
} catch (Throwable ex2) {/**NON BLOCK**/}
onRequestRefreshListener.onRequestRefresh(fso, false);
}
return Boolean.TRUE;
}
/**
* {@inheritDoc}
*/
@Override
protected void onPostExecute(Boolean result) {
if (result != null && result.booleanValue()) {
showOperationSuccessMsg(ctx);
}
}
});
}
ExceptionUtil.translateException(ctx, ex);
}
}
}