diff options
author | William Chen | 2012-02-02 02:45:12 +0000 |
---|---|---|
committer | William Chen | 2012-02-02 02:45:12 +0000 |
commit | 51e4be1b08b42aa709603661c860c75424ceb2a1 (patch) | |
tree | 17233eb6dedc53776562bad2d09c08c779c734d9 /target_explorer | |
parent | bac7cef1c767727115a41d01eeb28f167d44d37a (diff) | |
download | org.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')
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.
|