package com.sparseboolean.ifexplorer; import gem.kevin.task.FileOperationTask; import gem.kevin.task.FileOperationTask.ClipOpTaskListener; import java.util.ArrayList; public class FileOperationTaskAutoExecutor implements ClipOpTaskListener { public static final int EXECUTOR_IDLE = 0x00000001; public static final int EXECUTOR_BUSY = 0x00000002; public static final int EXECUTOR_FULL_LOAD = 0x00000006; // should cover // flag STATUS_BUSY private final ArrayList<FileOperationTask> mTasks; public static final int MAX_EXECUTING_LIMIT = 2; public FileOperationTaskAutoExecutor() { mTasks = new ArrayList<FileOperationTask>(); } public void dequeueFileOpTask(FileOperationTask task) { if (task != null) { task.cancel(); mTasks.remove(task); manage(); } } public void enqueueFileOpTask(FileOperationTask task) { task.registerListener(this); mTasks.add(task); manage(); } public int evaluateFileOpTask(FileOperationTask task) { return 0; } @Override public String localeSensitiveCopyName(String srcName, int existDuplicateCount) { return null; } public void manage() { int running = 0; for (FileOperationTask task : mTasks) { if (running > MAX_EXECUTING_LIMIT) { break; } switch (task.getState()) { case FileOperationTask.TASK_STARTED: case FileOperationTask.TASK_RUNNING: running++; break; case FileOperationTask.TASK_NEW: task.start(); break; default: continue; } } } @Override public void onClipOpTaskCanceled(FileOperationTask canceledTask) { mTasks.remove(canceledTask); manage(); } @Override public void onClipOpTaskEvaluating(FileOperationTask evaluatingTask) { // TODO Auto-generated method stub } @Override public void onClipOpTaskFinished(FileOperationTask finishedTask) { mTasks.remove(finishedTask); manage(); } @Override public void onClipOpTaskPendingOnCopyError(FileOperationTask pendingTask, String srcPath, String targetPath, int errorCode) { // TODO Auto-generated method stub } @Override public void onClipOpTaskPendingOnDeleteError(FileOperationTask pendingTask, String srcPath, int errorCode) { // TODO Auto-generated method stub } @Override public void onClipOpTaskPendingOnExists(FileOperationTask pendingTask, String srcPath, String existPath) { // TODO Auto-generated method stub } @Override public void onClipOpTaskPendingOnRenameError(FileOperationTask pendingTask, String srcPath, String targetPath, int errorCode) { // TODO Auto-generated method stub } @Override public void onClipOpTaskProgressing(FileOperationTask processingTask) { // TODO Auto-generated method stub } @Override public void onClipOpTaskReady(FileOperationTask readyTask) { // TODO Auto-generated method stub } @Override public void onClipOpTaskRollbacked(FileOperationTask newTask) { // TODO Auto-generated method stub } @Override public void onClipOpTaskStarted(FileOperationTask startedTask) { manage(); } @Override public void onClipOpTaskStopped(FileOperationTask stoppedTask) { mTasks.remove(stoppedTask); manage(); } @Override public void onClipOpTaskUnavailable(FileOperationTask unavailableTask, int reason) { mTasks.remove(unavailableTask); manage(); } }