Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWilliam Chen2012-02-02 02:45:12 +0000
committerWilliam Chen2012-02-02 02:45:12 +0000
commit51e4be1b08b42aa709603661c860c75424ceb2a1 (patch)
tree17233eb6dedc53776562bad2d09c08c779c734d9 /target_explorer
parentbac7cef1c767727115a41d01eeb28f167d44d37a (diff)
downloadorg.eclipse.tcf-51e4be1b08b42aa709603661c860c75424ceb2a1.tar.gz
org.eclipse.tcf-51e4be1b08b42aa709603661c860c75424ceb2a1.tar.xz
org.eclipse.tcf-51e4be1b08b42aa709603661c860c75424ceb2a1.zip
Target Explorer: Refactoring FSOperation and its sub classes.
Diffstat (limited to 'target_explorer')
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/src/org/eclipse/tcf/te/tcf/filesystem/internal/operations/FSCopy.java84
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/src/org/eclipse/tcf/te/tcf/filesystem/internal/operations/FSCreate.java99
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/src/org/eclipse/tcf/te/tcf/filesystem/internal/operations/FSDelete.java75
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/src/org/eclipse/tcf/te/tcf/filesystem/internal/operations/FSJobOperation.java73
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/src/org/eclipse/tcf/te/tcf/filesystem/internal/operations/FSMove.java90
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/src/org/eclipse/tcf/te/tcf/filesystem/internal/operations/FSOperation.java18
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/src/org/eclipse/tcf/te/tcf/filesystem/internal/operations/FSRefresh.java90
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/src/org/eclipse/tcf/te/tcf/filesystem/internal/operations/FSRename.java97
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/src/org/eclipse/tcf/te/tcf/filesystem/internal/operations/FSUIOperation.java54
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/src/org/eclipse/tcf/te/tcf/filesystem/internal/operations/RunnableJob.java56
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/src/org/eclipse/tcf/te/tcf/filesystem/model/FSModel.java25
11 files changed, 370 insertions, 391 deletions
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/src/org/eclipse/tcf/te/tcf/filesystem/internal/operations/FSCopy.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/src/org/eclipse/tcf/te/tcf/filesystem/internal/operations/FSCopy.java
index b1685d770..6fd6b1bc9 100644
--- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/src/org/eclipse/tcf/te/tcf/filesystem/internal/operations/FSCopy.java
+++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/src/org/eclipse/tcf/te/tcf/filesystem/internal/operations/FSCopy.java
@@ -12,34 +12,24 @@ package org.eclipse.tcf.te.tcf.filesystem.internal.operations;
import java.lang.reflect.InvocationTargetException;
import java.util.List;
-import org.eclipse.core.runtime.Assert;
import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.osgi.util.NLS;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Shell;
import org.eclipse.tcf.protocol.IChannel;
import org.eclipse.tcf.protocol.IToken;
import org.eclipse.tcf.services.IFileSystem;
import org.eclipse.tcf.services.IFileSystem.DoneCopy;
import org.eclipse.tcf.services.IFileSystem.FileSystemException;
import org.eclipse.tcf.te.tcf.core.Tcf;
-import org.eclipse.tcf.te.tcf.filesystem.activator.UIPlugin;
-import org.eclipse.tcf.te.tcf.filesystem.dialogs.TimeTriggeredProgressMonitorDialog;
import org.eclipse.tcf.te.tcf.filesystem.internal.exceptions.TCFException;
import org.eclipse.tcf.te.tcf.filesystem.internal.exceptions.TCFFileSystemException;
import org.eclipse.tcf.te.tcf.filesystem.internal.utils.PersistenceManager;
import org.eclipse.tcf.te.tcf.filesystem.model.FSTreeNode;
import org.eclipse.tcf.te.tcf.filesystem.nls.Messages;
-import org.eclipse.ui.PlatformUI;
/**
* FSCopy copies selected FSTreeNodes to a specify destination folder.
*/
-public class FSCopy extends FSOperation {
+public class FSCopy extends FSUIOperation {
// The nodes to be copied.
List<FSTreeNode> nodes;
// The destination folder to be copied to.
@@ -58,62 +48,40 @@ public class FSCopy extends FSOperation {
/*
* (non-Javadoc)
- * @see org.eclipse.tcf.te.tcf.filesystem.internal.operations.FSOperation#doit()
+ * @see org.eclipse.tcf.te.tcf.filesystem.internal.operations.FSOperation#run(org.eclipse.core.runtime.IProgressMonitor)
*/
@Override
- public IStatus doit() {
- Assert.isNotNull(Display.getCurrent());
- IRunnableWithProgress runnable = new IRunnableWithProgress() {
- @Override
- public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
- FSTreeNode head = nodes.get(0);
- IChannel channel = null;
- try {
- channel = openChannel(head.peerNode.getPeer());
- if (channel != null) {
- IFileSystem service = getBlockingFileSystem(channel);
- if (service != null) {
- monitor.beginTask(Messages.FSCopy_PrepareToCopy, IProgressMonitor.UNKNOWN);
- monitor.worked(1);
- int count = count(service, nodes);
- monitor.beginTask(Messages.FSCopy_CopyingFile, count);
- for (FSTreeNode node : nodes) {
- // Iterate the nodes and copy each of them to the destination
- // folder.
- copyNode(monitor, service, node, dest);
- }
- }
- else {
- String message = NLS.bind(Messages.FSOperation_NoFileSystemError, head.peerNode.getPeerId());
- throw new TCFFileSystemException(message);
- }
+ public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
+ FSTreeNode head = nodes.get(0);
+ IChannel channel = null;
+ try {
+ channel = openChannel(head.peerNode.getPeer());
+ if (channel != null) {
+ IFileSystem service = getBlockingFileSystem(channel);
+ if (service != null) {
+ monitor.beginTask(Messages.FSCopy_PrepareToCopy, IProgressMonitor.UNKNOWN);
+ monitor.worked(1);
+ int count = count(service, nodes);
+ monitor.beginTask(Messages.FSCopy_CopyingFile, count);
+ for (FSTreeNode node : nodes) {
+ // Iterate the nodes and copy each of them to the destination
+ // folder.
+ copyNode(monitor, service, node, dest);
}
}
- catch (TCFException e) {
- throw new InvocationTargetException(e);
- }
- finally {
- if (channel != null) Tcf.getChannelManager().closeChannel(channel);
- monitor.done();
+ else {
+ String message = NLS.bind(Messages.FSOperation_NoFileSystemError, head.peerNode.getPeerId());
+ throw new TCFFileSystemException(message);
}
}
- };
- Shell parent = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();
- TimeTriggeredProgressMonitorDialog dialog = new TimeTriggeredProgressMonitorDialog(parent, 250);
- dialog.setCancelable(true);
- try {
- dialog.run(true, true, runnable);
}
- catch (InvocationTargetException e) {
- // Display the error during copy.
- Throwable throwable = e.getTargetException() != null ? e.getTargetException() : e;
- MessageDialog.openError(parent, Messages.FSCopy_CopyFileFolderTitle, throwable.getLocalizedMessage());
- return new Status(IStatus.ERROR, UIPlugin.getUniqueIdentifier(), throwable.getLocalizedMessage(), throwable);
+ catch (TCFException e) {
+ throw new InvocationTargetException(e);
}
- catch (InterruptedException e) {
- // It is canceled.
+ finally {
+ if (channel != null) Tcf.getChannelManager().closeChannel(channel);
+ monitor.done();
}
- return Status.OK_STATUS;
}
/**
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/src/org/eclipse/tcf/te/tcf/filesystem/internal/operations/FSCreate.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/src/org/eclipse/tcf/te/tcf/filesystem/internal/operations/FSCreate.java
index 1338e632e..afd9fca01 100644
--- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/src/org/eclipse/tcf/te/tcf/filesystem/internal/operations/FSCreate.java
+++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/src/org/eclipse/tcf/te/tcf/filesystem/internal/operations/FSCreate.java
@@ -9,15 +9,10 @@
*******************************************************************************/
package org.eclipse.tcf.te.tcf.filesystem.internal.operations;
-import org.eclipse.core.runtime.Assert;
+import java.lang.reflect.InvocationTargetException;
+
import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.core.runtime.jobs.IJobChangeEvent;
-import org.eclipse.core.runtime.jobs.Job;
-import org.eclipse.core.runtime.jobs.JobChangeAdapter;
import org.eclipse.osgi.util.NLS;
-import org.eclipse.swt.widgets.Display;
import org.eclipse.tcf.protocol.IChannel;
import org.eclipse.tcf.protocol.IToken;
import org.eclipse.tcf.protocol.Protocol;
@@ -27,102 +22,64 @@ import org.eclipse.tcf.services.IFileSystem.FileAttrs;
import org.eclipse.tcf.services.IFileSystem.FileSystemException;
import org.eclipse.tcf.te.runtime.interfaces.callback.ICallback;
import org.eclipse.tcf.te.tcf.core.Tcf;
-import org.eclipse.tcf.te.tcf.filesystem.activator.UIPlugin;
import org.eclipse.tcf.te.tcf.filesystem.internal.exceptions.TCFException;
import org.eclipse.tcf.te.tcf.filesystem.internal.exceptions.TCFFileSystemException;
import org.eclipse.tcf.te.tcf.filesystem.model.FSTreeNode;
import org.eclipse.tcf.te.tcf.filesystem.nls.Messages;
-import org.eclipse.ui.PlatformUI;
/**
* The base file operation class for creating a file or a folder in the file system of Target
* Explorer.
*/
-public abstract class FSCreate extends FSOperation {
+public abstract class FSCreate extends FSJobOperation {
// The folder in which a file/folder is going to be created.
protected FSTreeNode folder;
// The node that is created after the operation.
protected FSTreeNode node;
// The name of the node to be created.
protected String name;
- // The callback
- protected ICallback callback;
/**
* Create an FSCreate instance with the specified folder and the name of the new node.
*
* @param folder The folder in which the new node is going to be created.
* @param name The new node's name.
- * @param callback called when the creation is done.
*/
public FSCreate(FSTreeNode folder, String name, ICallback callback) {
+ super(callback);
this.folder = folder;
this.name = name;
- this.callback = callback;
}
/*
* (non-Javadoc)
- * @see org.eclipse.tcf.te.tcf.filesystem.internal.operations.FSOperation#doit()
+ * @see org.eclipse.tcf.te.tcf.filesystem.internal.operations.FSOperation#run(org.eclipse.core.runtime.IProgressMonitor)
*/
@Override
- public IStatus doit() {
- Assert.isNotNull(Display.getCurrent());
- Job job = new Job(Messages.FSCreate_JobTitle) {
- @Override
- protected IStatus run(IProgressMonitor monitor) {
- IChannel channel = null;
- try {
- channel = openChannel(folder.peerNode.getPeer());
- IFileSystem service = getBlockingFileSystem(channel);
- if (service != null) {
- if (!folder.childrenQueried) {
- // If the children of folder is not queried, load it first.
- loadChildren(folder, service);
- }
- create(service);
- addNode(service);
- refresh(service);
- }
- else {
- String message = NLS.bind(Messages.FSOperation_NoFileSystemError, folder.peerNode.getPeerId());
- throw new TCFFileSystemException(message);
- }
- }
- catch (TCFException e) {
- return new Status(IStatus.ERROR, UIPlugin.getUniqueIdentifier(), e.getLocalizedMessage(), e);
+ public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
+ IChannel channel = null;
+ try {
+ channel = openChannel(folder.peerNode.getPeer());
+ IFileSystem service = getBlockingFileSystem(channel);
+ if (service != null) {
+ if (!folder.childrenQueried) {
+ // If the children of folder is not queried, load it first.
+ loadChildren(folder, service);
}
- finally {
- if (channel != null) Tcf.getChannelManager().closeChannel(channel);
- }
- return Status.OK_STATUS;
- }
- };
- job.addJobChangeListener(new JobChangeAdapter(){
- @Override
- public void done(final IJobChangeEvent event) {
- Display display = PlatformUI.getWorkbench().getDisplay();
- display.asyncExec(new Runnable(){
- @Override
- public void run() {
- doneCreate(event);
- }});
- }});
- job.schedule();
- return Status.OK_STATUS;
- }
-
-
- /**
- * Called when the creation is done. Must be called within UI-thread.
- *
- * @param event The job change event.
- */
- void doneCreate(IJobChangeEvent event) {
- Assert.isNotNull(Display.getCurrent());
- IStatus status = event.getResult();
- if(callback != null) {
- callback.done(this, status);
+ create(service);
+ addNode(service);
+ refresh(service);
+ }
+ else {
+ String message = NLS.bind(Messages.FSOperation_NoFileSystemError, folder.peerNode.getPeerId());
+ throw new TCFFileSystemException(message);
+ }
+ }
+ catch (TCFException e) {
+ throw new InvocationTargetException(e);
+ }
+ finally {
+ if (channel != null) Tcf.getChannelManager().closeChannel(channel);
}
}
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/src/org/eclipse/tcf/te/tcf/filesystem/internal/operations/FSDelete.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/src/org/eclipse/tcf/te/tcf/filesystem/internal/operations/FSDelete.java
index 62691aca7..2588d1a54 100644
--- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/src/org/eclipse/tcf/te/tcf/filesystem/internal/operations/FSDelete.java
+++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/src/org/eclipse/tcf/te/tcf/filesystem/internal/operations/FSDelete.java
@@ -12,13 +12,9 @@ package org.eclipse.tcf.te.tcf.filesystem.internal.operations;
import java.lang.reflect.InvocationTargetException;
import java.util.List;
-import org.eclipse.core.runtime.Assert;
import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.SafeRunner;
-import org.eclipse.core.runtime.Status;
import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.jface.util.SafeRunnable;
import org.eclipse.osgi.util.NLS;
import org.eclipse.swt.graphics.Image;
@@ -31,7 +27,6 @@ import org.eclipse.tcf.services.IFileSystem.DoneRemove;
import org.eclipse.tcf.services.IFileSystem.FileSystemException;
import org.eclipse.tcf.te.tcf.core.Tcf;
import org.eclipse.tcf.te.tcf.filesystem.activator.UIPlugin;
-import org.eclipse.tcf.te.tcf.filesystem.dialogs.TimeTriggeredProgressMonitorDialog;
import org.eclipse.tcf.te.tcf.filesystem.internal.ImageConsts;
import org.eclipse.tcf.te.tcf.filesystem.internal.exceptions.TCFException;
import org.eclipse.tcf.te.tcf.filesystem.internal.exceptions.TCFFileSystemException;
@@ -43,7 +38,7 @@ import org.eclipse.ui.PlatformUI;
/**
* FSDelete deletes the selected FSTreeNode list.
*/
-public class FSDelete extends FSOperation {
+public class FSDelete extends FSUIOperation {
//The nodes to be deleted.
List<FSTreeNode> nodes;
@@ -58,60 +53,38 @@ public class FSDelete extends FSOperation {
/*
* (non-Javadoc)
- * @see org.eclipse.tcf.te.tcf.filesystem.internal.operations.FSOperation#doit()
+ * @see org.eclipse.tcf.te.tcf.filesystem.internal.operations.FSOperation#run(org.eclipse.core.runtime.IProgressMonitor)
*/
@Override
- public IStatus doit() {
- Assert.isNotNull(Display.getCurrent());
- IRunnableWithProgress runnable = new IRunnableWithProgress() {
- @Override
- public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
- FSTreeNode head = nodes.get(0);
- IChannel channel = null;
- try {
- channel = openChannel(head.peerNode.getPeer());
- if (channel != null) {
- IFileSystem service = getBlockingFileSystem(channel);
- if (service != null) {
- monitor.beginTask(Messages.FSDelete_PrepareToDelete, IProgressMonitor.UNKNOWN);
- monitor.worked(1);
- int count = count(service, nodes);
- monitor.beginTask(Messages.FSDelete_Deleting, count);
- for (FSTreeNode node : nodes) {
- remove(monitor, node, service);
- }
- }
- else {
- String message = NLS.bind(Messages.FSOperation_NoFileSystemError, head.peerNode.getPeerId());
- throw new TCFFileSystemException(message);
- }
+ public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
+ FSTreeNode head = nodes.get(0);
+ IChannel channel = null;
+ try {
+ channel = openChannel(head.peerNode.getPeer());
+ if (channel != null) {
+ IFileSystem service = getBlockingFileSystem(channel);
+ if (service != null) {
+ monitor.beginTask(Messages.FSDelete_PrepareToDelete, IProgressMonitor.UNKNOWN);
+ monitor.worked(1);
+ int count = count(service, nodes);
+ monitor.beginTask(Messages.FSDelete_Deleting, count);
+ for (FSTreeNode node : nodes) {
+ remove(monitor, node, service);
}
}
- catch (TCFException e) {
- throw new InvocationTargetException(e);
- }
- finally {
- if (channel != null) Tcf.getChannelManager().closeChannel(channel);
- monitor.done();
+ else {
+ String message = NLS.bind(Messages.FSOperation_NoFileSystemError, head.peerNode.getPeerId());
+ throw new TCFFileSystemException(message);
}
}
- };
- Shell parent = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();
- TimeTriggeredProgressMonitorDialog dialog = new TimeTriggeredProgressMonitorDialog(parent, 250);
- dialog.setCancelable(true);
- try {
- dialog.run(true, true, runnable);
}
- catch (InvocationTargetException e) {
- // Display the error message during deleting.
- Throwable throwable = e.getTargetException() != null ? e.getTargetException() : e;
- MessageDialog.openError(parent, Messages.FSDelete_DeleteFileFolderTitle, throwable.getLocalizedMessage());
- return new Status(IStatus.ERROR, UIPlugin.getUniqueIdentifier(), throwable.getLocalizedMessage(), throwable);
+ catch (TCFException e) {
+ throw new InvocationTargetException(e);
}
- catch (InterruptedException e) {
- // It is canceled.
+ finally {
+ if (channel != null) Tcf.getChannelManager().closeChannel(channel);
+ monitor.done();
}
- return Status.OK_STATUS;
}
/**
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/src/org/eclipse/tcf/te/tcf/filesystem/internal/operations/FSJobOperation.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/src/org/eclipse/tcf/te/tcf/filesystem/internal/operations/FSJobOperation.java
new file mode 100644
index 000000000..eda9af463
--- /dev/null
+++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/src/org/eclipse/tcf/te/tcf/filesystem/internal/operations/FSJobOperation.java
@@ -0,0 +1,73 @@
+/*******************************************************************************
+ * Copyright (c) 2011 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tcf.te.tcf.filesystem.internal.operations;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.IJobChangeEvent;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.core.runtime.jobs.JobChangeAdapter;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.tcf.te.runtime.interfaces.callback.ICallback;
+import org.eclipse.tcf.te.tcf.filesystem.nls.Messages;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * The operation that is executed as a back ground job.
+ */
+public class FSJobOperation extends FSOperation {
+ // The callback
+ protected ICallback callback;
+
+ /**
+ * Create an instance with the specified callback.
+ *
+ * @param callback called when the creation is done.
+ */
+ public FSJobOperation(ICallback callback) {
+ this.callback = callback;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.tcf.te.tcf.filesystem.internal.operations.FSOperation#doit()
+ */
+ @Override
+ public IStatus doit() {
+ Assert.isNotNull(Display.getCurrent());
+ Job job = new RunnableJob(Messages.FSCreate_JobTitle, this);
+ job.addJobChangeListener(new JobChangeAdapter(){
+ @Override
+ public void done(final IJobChangeEvent event) {
+ Display display = PlatformUI.getWorkbench().getDisplay();
+ display.asyncExec(new Runnable(){
+ @Override
+ public void run() {
+ doCallback(event);
+ }});
+ }});
+ job.schedule();
+ return Status.OK_STATUS;
+ }
+
+ /**
+ * Called when the creation is done. Must be called within UI-thread.
+ *
+ * @param event The job change event.
+ */
+ void doCallback(IJobChangeEvent event) {
+ Assert.isNotNull(Display.getCurrent());
+ IStatus status = event.getResult();
+ if(callback != null) {
+ callback.done(this, status);
+ }
+ }
+}
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/src/org/eclipse/tcf/te/tcf/filesystem/internal/operations/FSMove.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/src/org/eclipse/tcf/te/tcf/filesystem/internal/operations/FSMove.java
index 7df922fe7..a9b84727e 100644
--- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/src/org/eclipse/tcf/te/tcf/filesystem/internal/operations/FSMove.java
+++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/src/org/eclipse/tcf/te/tcf/filesystem/internal/operations/FSMove.java
@@ -12,15 +12,8 @@ package org.eclipse.tcf.te.tcf.filesystem.internal.operations;
import java.lang.reflect.InvocationTargetException;
import java.util.List;
-import org.eclipse.core.runtime.Assert;
import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.osgi.util.NLS;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Shell;
import org.eclipse.tcf.protocol.IChannel;
import org.eclipse.tcf.protocol.IToken;
import org.eclipse.tcf.services.IFileSystem;
@@ -28,17 +21,15 @@ import org.eclipse.tcf.services.IFileSystem.DoneRename;
import org.eclipse.tcf.services.IFileSystem.FileSystemException;
import org.eclipse.tcf.te.tcf.core.Tcf;
import org.eclipse.tcf.te.tcf.filesystem.activator.UIPlugin;
-import org.eclipse.tcf.te.tcf.filesystem.dialogs.TimeTriggeredProgressMonitorDialog;
import org.eclipse.tcf.te.tcf.filesystem.internal.exceptions.TCFException;
import org.eclipse.tcf.te.tcf.filesystem.internal.exceptions.TCFFileSystemException;
import org.eclipse.tcf.te.tcf.filesystem.model.FSTreeNode;
import org.eclipse.tcf.te.tcf.filesystem.nls.Messages;
-import org.eclipse.ui.PlatformUI;
/**
* FSMove moves specified tree nodes to a destination folder.
*/
-public class FSMove extends FSOperation {
+public class FSMove extends FSUIOperation {
// The file/folder nodes to be moved.
List<FSTreeNode> nodes;
// The destination folder to be moved to.
@@ -57,69 +48,46 @@ public class FSMove extends FSOperation {
/*
* (non-Javadoc)
- * @see org.eclipse.tcf.te.tcf.filesystem.internal.operations.FSOperation#doit()
+ * @see org.eclipse.tcf.te.tcf.filesystem.internal.operations.FSOperation#run(org.eclipse.core.runtime.IProgressMonitor)
*/
@Override
- public IStatus doit() {
- Assert.isNotNull(Display.getCurrent());
+ public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
// Remove its self from the clipped nodes.
nodes.remove(dest);
- if(nodes.isEmpty()) {
- // Clear the clip board.
- UIPlugin.getDefault().getClipboard().clear();
- return Status.OK_STATUS;
- }
- IRunnableWithProgress runnable = new IRunnableWithProgress() {
- @Override
- public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
+ IChannel channel = null;
+ try {
+ if (!nodes.isEmpty()) {
FSTreeNode head = nodes.get(0);
- IChannel channel = null;
- try {
- channel = openChannel(head.peerNode.getPeer());
- if (channel != null) {
- IFileSystem service = getBlockingFileSystem(channel);
- if (service != null) {
- monitor.beginTask(Messages.FSMove_PrepareToMove, IProgressMonitor.UNKNOWN);
- monitor.worked(1);
- monitor.beginTask(Messages.FSMove_MovingFile, nodes.size());
- for (FSTreeNode node : nodes) {
- // Move each node.
- moveNode(monitor, service, node, dest);
- }
- }
- else {
- String message = NLS.bind(Messages.FSOperation_NoFileSystemError, head.peerNode.getPeerId());
- throw new TCFFileSystemException(message);
+ channel = openChannel(head.peerNode.getPeer());
+ if (channel != null) {
+ IFileSystem service = getBlockingFileSystem(channel);
+ if (service != null) {
+ monitor.beginTask(Messages.FSMove_PrepareToMove, IProgressMonitor.UNKNOWN);
+ monitor.worked(1);
+ monitor.beginTask(Messages.FSMove_MovingFile, nodes.size());
+ for (FSTreeNode node : nodes) {
+ // Move each node.
+ moveNode(monitor, service, node, dest);
}
}
- }
- catch (TCFException e) {
- throw new InvocationTargetException(e);
- }
- finally {
- // Clear the clip board.
- UIPlugin.getDefault().getClipboard().clear();
- if (channel != null) Tcf.getChannelManager().closeChannel(channel);
- monitor.done();
+ else {
+ String message = NLS
+ .bind(Messages.FSOperation_NoFileSystemError, head.peerNode
+ .getPeerId());
+ throw new TCFFileSystemException(message);
+ }
}
}
- };
- Shell parent = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();
- TimeTriggeredProgressMonitorDialog dialog = new TimeTriggeredProgressMonitorDialog(parent, 250);
- dialog.setCancelable(true);
- try {
- dialog.run(true, true, runnable);
}
- catch (InvocationTargetException e) {
- // Display the error reported during moving.
- Throwable throwable = e.getTargetException() != null ? e.getTargetException() : e;
- MessageDialog.openError(parent, Messages.FSMove_MoveFileFolderTitle, throwable.getLocalizedMessage());
- return new Status(IStatus.ERROR, UIPlugin.getUniqueIdentifier(), throwable.getLocalizedMessage(), throwable);
+ catch (TCFException e) {
+ throw new InvocationTargetException(e);
}
- catch (InterruptedException e) {
- // It is canceled.
+ finally {
+ // Clear the clip board.
+ UIPlugin.getDefault().getClipboard().clear();
+ if (channel != null) Tcf.getChannelManager().closeChannel(channel);
+ monitor.done();
}
- return Status.OK_STATUS;
}
/**
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/src/org/eclipse/tcf/te/tcf/filesystem/internal/operations/FSOperation.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/src/org/eclipse/tcf/te/tcf/filesystem/internal/operations/FSOperation.java
index c2b179c60..e9c770972 100644
--- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/src/org/eclipse/tcf/te/tcf/filesystem/internal/operations/FSOperation.java
+++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/src/org/eclipse/tcf/te/tcf/filesystem/internal/operations/FSOperation.java
@@ -10,16 +10,19 @@
package org.eclipse.tcf.te.tcf.filesystem.internal.operations;
import java.io.File;
+import java.lang.reflect.InvocationTargetException;
import java.net.ConnectException;
import java.net.URI;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.SafeRunner;
import org.eclipse.core.runtime.Status;
import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.jface.util.SafeRunnable;
import org.eclipse.osgi.util.NLS;
import org.eclipse.swt.graphics.Image;
@@ -61,7 +64,7 @@ import org.eclipse.ui.PlatformUI;
* FSOperation is the base class of file system operation classes including FSCopy, FSDelete, FSMove
* and FSRename.
*/
-public class FSOperation {
+public class FSOperation implements IRunnableWithProgress{
// The flag indicating if the following action should be executed without asking.
protected boolean yes2All;
@@ -273,7 +276,7 @@ public class FSOperation {
* @return The children of the folder node.
* @throws TCFFileSystemException Thrown during querying the children nodes.
*/
- public List<FSTreeNode> getChildren(final FSTreeNode node, final IFileSystem service) throws TCFFileSystemException {
+ protected List<FSTreeNode> getChildren(final FSTreeNode node, final IFileSystem service) throws TCFFileSystemException {
if (node.childrenQueried) {
return node.unsafeGetChildren();
}
@@ -289,6 +292,9 @@ public class FSOperation {
* @throws TCFException Thrown during querying the children nodes.
*/
public List<FSTreeNode> getChildren(final FSTreeNode node) throws TCFException {
+ if(node.childrenQueried) {
+ return node.unsafeGetChildren();
+ }
IChannel channel = null;
try {
channel = openChannel(node.peerNode.getPeer());
@@ -626,4 +632,12 @@ public class FSOperation {
public IStatus doit(){
return Status.OK_STATUS;
}
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.jface.operation.IRunnableWithProgress#run(org.eclipse.core.runtime.IProgressMonitor)
+ */
+ @Override
+ public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
+ }
}
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/src/org/eclipse/tcf/te/tcf/filesystem/internal/operations/FSRefresh.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/src/org/eclipse/tcf/te/tcf/filesystem/internal/operations/FSRefresh.java
index a4452425f..bb95efc9d 100644
--- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/src/org/eclipse/tcf/te/tcf/filesystem/internal/operations/FSRefresh.java
+++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/src/org/eclipse/tcf/te/tcf/filesystem/internal/operations/FSRefresh.java
@@ -9,50 +9,39 @@
*******************************************************************************/
package org.eclipse.tcf.te.tcf.filesystem.internal.operations;
+import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.List;
-import org.eclipse.core.runtime.Assert;
import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.SafeRunner;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.core.runtime.jobs.IJobChangeEvent;
-import org.eclipse.core.runtime.jobs.Job;
-import org.eclipse.core.runtime.jobs.JobChangeAdapter;
import org.eclipse.jface.util.SafeRunnable;
import org.eclipse.osgi.util.NLS;
-import org.eclipse.swt.widgets.Display;
import org.eclipse.tcf.protocol.IChannel;
import org.eclipse.tcf.services.IFileSystem;
import org.eclipse.tcf.te.runtime.interfaces.callback.ICallback;
import org.eclipse.tcf.te.tcf.core.Tcf;
-import org.eclipse.tcf.te.tcf.filesystem.activator.UIPlugin;
import org.eclipse.tcf.te.tcf.filesystem.internal.exceptions.TCFException;
import org.eclipse.tcf.te.tcf.filesystem.internal.exceptions.TCFFileSystemException;
import org.eclipse.tcf.te.tcf.filesystem.model.FSTreeNode;
import org.eclipse.tcf.te.tcf.filesystem.nls.Messages;
-import org.eclipse.ui.PlatformUI;
/**
* FSRefresh refreshes a specified tree node and its children and grand children recursively.
*/
-public class FSRefresh extends FSOperation {
+public class FSRefresh extends FSJobOperation {
/**
* The root node to be refreshed.
*/
FSTreeNode node;
- // The callback when everything is done
- ICallback callback;
-
/**
* Create an FSRefresh to refresh the specified node and its descendants.
*
* @param node The root node to be refreshed.
*/
public FSRefresh(FSTreeNode node) {
- this.node = node;
+ this(node, null);
}
/**
@@ -62,68 +51,37 @@ public class FSRefresh extends FSOperation {
* @param callback The callback
*/
public FSRefresh(FSTreeNode node, ICallback callback) {
+ super(callback);
this.node = node;
- this.callback = callback;
}
/*
* (non-Javadoc)
- * @see org.eclipse.tcf.te.tcf.filesystem.internal.operations.FSOperation#doit()
+ * @see org.eclipse.tcf.te.tcf.filesystem.internal.operations.FSOperation#run(org.eclipse.core.runtime.IProgressMonitor)
*/
@Override
- public IStatus doit() {
- Assert.isNotNull(Display.getCurrent());
- Job job = new Job(NLS.bind(Messages.RefreshDirectoryHandler_RefreshJobTitle, node.name)){
- @Override
- protected IStatus run(IProgressMonitor monitor) {
- if (node.childrenQueried) {
- IChannel channel = null;
- try {
- channel = openChannel(node.peerNode.getPeer());
- if (channel != null) {
- IFileSystem service = getBlockingFileSystem(channel);
- if (service != null) {
- refresh(node, service);
- }
- else {
- String message = NLS.bind(Messages.FSOperation_NoFileSystemError, node.peerNode.getPeerId());
- throw new TCFFileSystemException(message);
- }
- }
- }
- catch (TCFException e) {
- return new Status(IStatus.ERROR, UIPlugin.getUniqueIdentifier(), e.getMessage(), e);
+ public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
+ if (node.childrenQueried) {
+ IChannel channel = null;
+ try {
+ channel = openChannel(node.peerNode.getPeer());
+ if (channel != null) {
+ IFileSystem service = getBlockingFileSystem(channel);
+ if (service != null) {
+ refresh(node, service);
}
- finally {
- if (channel != null) Tcf.getChannelManager().closeChannel(channel);
+ else {
+ String message = NLS.bind(Messages.FSOperation_NoFileSystemError, node.peerNode.getPeerId());
+ throw new TCFFileSystemException(message);
}
}
- return Status.OK_STATUS;
- }};
- job.addJobChangeListener(new JobChangeAdapter(){
- @Override
- public void done(final IJobChangeEvent event) {
- Display display = PlatformUI.getWorkbench().getDisplay();
- display.asyncExec(new Runnable(){
- @Override
- public void run() {
- doneRefresh(event);
- }});
- }});
- job.schedule();
- return Status.OK_STATUS;
- }
-
- /**
- * Called when the refresh is done. Must be called within UI-thread.
- *
- * @param event The job change event.
- */
- void doneRefresh(IJobChangeEvent event) {
- Assert.isNotNull(Display.getCurrent());
- IStatus status = event.getResult();
- if (callback != null) {
- callback.done(this, status);
+ }
+ catch (TCFException e) {
+ throw new InvocationTargetException(e);
+ }
+ finally {
+ if (channel != null) Tcf.getChannelManager().closeChannel(channel);
+ }
}
}
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/src/org/eclipse/tcf/te/tcf/filesystem/internal/operations/FSRename.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/src/org/eclipse/tcf/te/tcf/filesystem/internal/operations/FSRename.java
index 8eb70dbcb..6248abd03 100644
--- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/src/org/eclipse/tcf/te/tcf/filesystem/internal/operations/FSRename.java
+++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/src/org/eclipse/tcf/te/tcf/filesystem/internal/operations/FSRename.java
@@ -10,14 +10,11 @@
package org.eclipse.tcf.te.tcf.filesystem.internal.operations;
import java.io.File;
+import java.lang.reflect.InvocationTargetException;
import org.eclipse.core.runtime.Assert;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.core.runtime.jobs.IJobChangeEvent;
-import org.eclipse.core.runtime.jobs.Job;
-import org.eclipse.core.runtime.jobs.JobChangeAdapter;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.osgi.util.NLS;
import org.eclipse.swt.widgets.Display;
@@ -27,8 +24,8 @@ import org.eclipse.tcf.protocol.IToken;
import org.eclipse.tcf.services.IFileSystem;
import org.eclipse.tcf.services.IFileSystem.DoneRename;
import org.eclipse.tcf.services.IFileSystem.FileSystemException;
+import org.eclipse.tcf.te.runtime.callback.Callback;
import org.eclipse.tcf.te.tcf.core.Tcf;
-import org.eclipse.tcf.te.tcf.filesystem.activator.UIPlugin;
import org.eclipse.tcf.te.tcf.filesystem.internal.exceptions.TCFException;
import org.eclipse.tcf.te.tcf.filesystem.internal.exceptions.TCFFileSystemException;
import org.eclipse.tcf.te.tcf.filesystem.internal.utils.CacheManager;
@@ -41,7 +38,7 @@ import org.eclipse.ui.PlatformUI;
* new name.
*
*/
-public class FSRename extends FSOperation {
+public class FSRename extends FSJobOperation {
// The file/folder node to be renamed.
FSTreeNode node;
// The new name the file/folder is renamed to.
@@ -54,69 +51,51 @@ public class FSRename extends FSOperation {
* @param newName The new name of this node.
*/
public FSRename(FSTreeNode node, String newName) {
+ super(new RenameCallback());
this.node = node;
this.newName = newName;
}
+
+ /**
+ * The callback called after the renaming is done.
+ */
+ static class RenameCallback extends Callback {
+ @Override
+ protected void internalDone(Object caller, IStatus status) {
+ Assert.isNotNull(Display.getCurrent());
+ if (!status.isOK()) {
+ String message = status.getMessage();
+ Shell parent = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();
+ MessageDialog.openError(parent, Messages.FSRename_RenameFileFolderTitle, message);
+ }
+ }
+ }
/*
* (non-Javadoc)
- * @see org.eclipse.tcf.te.tcf.filesystem.internal.operations.FSOperation#doit()
+ * @see org.eclipse.tcf.te.tcf.filesystem.internal.operations.FSOperation#run(org.eclipse.core.runtime.IProgressMonitor)
*/
@Override
- public IStatus doit() {
- Assert.isNotNull(Display.getCurrent());
- Job job = new Job(Messages.FSRename_RenameFileFolderTitle) {
- @Override
- protected IStatus run(IProgressMonitor monitor) {
- IChannel channel = null;
- try {
- channel = openChannel(node.peerNode.getPeer());
- if (channel != null) {
- IFileSystem service = getBlockingFileSystem(channel);
- if (service != null) {
- renameNode(service);
- }
- else {
- String message = NLS.bind(Messages.FSOperation_NoFileSystemError, node.peerNode.getPeerId());
- throw new TCFFileSystemException(message);
- }
- return Status.OK_STATUS;
- }
+ public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
+ IChannel channel = null;
+ try {
+ channel = openChannel(node.peerNode.getPeer());
+ if (channel != null) {
+ IFileSystem service = getBlockingFileSystem(channel);
+ if (service != null) {
+ renameNode(service);
}
- catch (TCFException e) {
- return new Status(IStatus.ERROR, UIPlugin.getUniqueIdentifier(), e.getLocalizedMessage(), e);
- }
- finally {
- if (channel != null) Tcf.getChannelManager().closeChannel(channel);
+ else {
+ String message = NLS.bind(Messages.FSOperation_NoFileSystemError, node.peerNode.getPeerId());
+ throw new TCFFileSystemException(message);
}
- return Status.OK_STATUS;
- }};
- job.addJobChangeListener(new JobChangeAdapter(){
- @Override
- public void done(final IJobChangeEvent event) {
- Display display = PlatformUI.getWorkbench().getDisplay();
- display.asyncExec(new Runnable(){
- @Override
- public void run() {
- doneRename(event);
- }});
- }});
- job.schedule();
- return Status.OK_STATUS;
- }
-
- /**
- * Called when the renaming is done. Must be called within UI-thread.
- *
- * @param event The job change event.
- */
- void doneRename(IJobChangeEvent event) {
- Assert.isNotNull(Display.getCurrent());
- IStatus status = event.getResult();
- if (!status.isOK()) {
- String message = status.getMessage();
- Shell parent = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();
- MessageDialog.openError(parent, Messages.FSRename_RenameFileFolderTitle, message);
+ }
+ }
+ catch (TCFException e) {
+ throw new InvocationTargetException(e);
+ }
+ finally {
+ if (channel != null) Tcf.getChannelManager().closeChannel(channel);
}
}
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/src/org/eclipse/tcf/te/tcf/filesystem/internal/operations/FSUIOperation.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/src/org/eclipse/tcf/te/tcf/filesystem/internal/operations/FSUIOperation.java
new file mode 100644
index 000000000..d2beb582b
--- /dev/null
+++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/src/org/eclipse/tcf/te/tcf/filesystem/internal/operations/FSUIOperation.java
@@ -0,0 +1,54 @@
+/*******************************************************************************
+ * Copyright (c) 2011 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tcf.te.tcf.filesystem.internal.operations;
+
+import java.lang.reflect.InvocationTargetException;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.tcf.te.tcf.filesystem.activator.UIPlugin;
+import org.eclipse.tcf.te.tcf.filesystem.dialogs.TimeTriggeredProgressMonitorDialog;
+import org.eclipse.tcf.te.tcf.filesystem.nls.Messages;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * The operation that is executed in an interactive progress dialog.
+ */
+public class FSUIOperation extends FSOperation {
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.tcf.te.tcf.filesystem.internal.operations.FSOperation#doit()
+ */
+ @Override
+ public IStatus doit() {
+ Assert.isNotNull(Display.getCurrent());
+ Shell parent = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();
+ TimeTriggeredProgressMonitorDialog dialog = new TimeTriggeredProgressMonitorDialog(parent, 250);
+ dialog.setCancelable(true);
+ try {
+ dialog.run(true, true, this);
+ }
+ catch (InvocationTargetException e) {
+ // Display the error during copy.
+ Throwable throwable = e.getTargetException() != null ? e.getTargetException() : e;
+ MessageDialog.openError(parent, Messages.FSCopy_CopyFileFolderTitle, throwable.getLocalizedMessage());
+ return new Status(IStatus.ERROR, UIPlugin.getUniqueIdentifier(), throwable.getLocalizedMessage(), throwable);
+ }
+ catch (InterruptedException e) {
+ // It is canceled.
+ }
+ return Status.OK_STATUS;
+ }
+}
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/src/org/eclipse/tcf/te/tcf/filesystem/internal/operations/RunnableJob.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/src/org/eclipse/tcf/te/tcf/filesystem/internal/operations/RunnableJob.java
new file mode 100644
index 000000000..c14b9b108
--- /dev/null
+++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/src/org/eclipse/tcf/te/tcf/filesystem/internal/operations/RunnableJob.java
@@ -0,0 +1,56 @@
+/*******************************************************************************
+ * Copyright (c) 2011 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tcf.te.tcf.filesystem.internal.operations;
+
+import java.lang.reflect.InvocationTargetException;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.jface.operation.IRunnableWithProgress;
+import org.eclipse.tcf.te.tcf.filesystem.activator.UIPlugin;
+
+/**
+ * The job that wraps an IRunnableWithProgress object.
+ */
+public class RunnableJob extends Job {
+ // The runnable object.
+ private IRunnableWithProgress runnable;
+
+ /**
+ * Create a job with the specified name and the runnable object.
+ *
+ * @param name The job's name.
+ * @param runnable The runnable object.
+ */
+ public RunnableJob(String name, IRunnableWithProgress runnable) {
+ super(name);
+ this.runnable = runnable;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.core.runtime.jobs.Job#run(org.eclipse.core.runtime.IProgressMonitor)
+ */
+ @Override
+ protected IStatus run(IProgressMonitor monitor) {
+ try {
+ runnable.run(monitor);
+ }
+ catch (InvocationTargetException e) {
+ return new Status(IStatus.ERROR, UIPlugin.getUniqueIdentifier(), e.getLocalizedMessage(), e);
+ }
+ catch (InterruptedException e) {
+ return Status.CANCEL_STATUS;
+ }
+ return Status.OK_STATUS;
+ }
+}
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/src/org/eclipse/tcf/te/tcf/filesystem/model/FSModel.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/src/org/eclipse/tcf/te/tcf/filesystem/model/FSModel.java
index ce4ba0b24..3148b229b 100644
--- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/src/org/eclipse/tcf/te/tcf/filesystem/model/FSModel.java
+++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/src/org/eclipse/tcf/te/tcf/filesystem/model/FSModel.java
@@ -16,10 +16,8 @@ import java.util.Map;
import org.eclipse.core.runtime.Assert;
import org.eclipse.core.runtime.SafeRunner;
import org.eclipse.jface.util.SafeRunnable;
-import org.eclipse.tcf.protocol.IChannel;
import org.eclipse.tcf.protocol.IPeer;
import org.eclipse.tcf.protocol.Protocol;
-import org.eclipse.tcf.services.IFileSystem;
import org.eclipse.tcf.te.runtime.utils.Host;
import org.eclipse.tcf.te.tcf.core.Tcf;
import org.eclipse.tcf.te.tcf.filesystem.activator.UIPlugin;
@@ -219,7 +217,8 @@ public final class FSModel {
}
else if (node != null) {
if (node.isDirectory()) {
- children = getUpdatedChildren(peer, node);
+ List<FSTreeNode> nodes= new FSOperation().getChildren(node);
+ children = nodes.toArray(new FSTreeNode[nodes.size()]);
}
else {
children = null;
@@ -232,26 +231,6 @@ public final class FSModel {
}
/**
- * Get the updated children of the directory node. If the node is already updated, i.e., its
- * children are queried, then return its current children. If the node is not yet queried, then
- * query its children before getting its children.
- *
- * @param folder The directory node.
- * @return The nodes of the updated children.
- * @throws TCFException Thrown during updating.
- */
- static private FSTreeNode[] getUpdatedChildren(IPeer peer, final FSTreeNode folder) throws TCFException {
- if (folder.childrenQueried) {
- List<FSTreeNode> list = folder.unsafeGetChildren();
- return list.toArray(new FSTreeNode[list.size()]);
- }
- IChannel channel = FSOperation.openChannel(folder.peerNode.getPeer());
- IFileSystem service = FSOperation.getBlockingFileSystem(channel);
- List<FSTreeNode> list = new FSOperation().getChildren(folder, service);
- return list.toArray(new FSTreeNode[list.size()]);
- }
-
- /**
* Find in the children array the node that has the specified name.
*
* @param children The children array in which to find the node.

Back to the top