diff options
4 files changed, 146 insertions, 111 deletions
diff --git a/providers/bundles/org.eclipse.ecf.provider.filetransfer/src/org/eclipse/ecf/provider/filetransfer/browse/AbstractFileSystemBrowser.java b/providers/bundles/org.eclipse.ecf.provider.filetransfer/src/org/eclipse/ecf/provider/filetransfer/browse/AbstractFileSystemBrowser.java new file mode 100644 index 000000000..46e9bc706 --- /dev/null +++ b/providers/bundles/org.eclipse.ecf.provider.filetransfer/src/org/eclipse/ecf/provider/filetransfer/browse/AbstractFileSystemBrowser.java @@ -0,0 +1,125 @@ +/**************************************************************************** + * Copyright (c) 2007 Composent, 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: + * Composent, Inc. - initial API and implementation + *****************************************************************************/ + +package org.eclipse.ecf.provider.filetransfer.browse; + +import java.util.Arrays; +import org.eclipse.core.runtime.*; +import org.eclipse.core.runtime.jobs.Job; +import org.eclipse.ecf.filetransfer.*; +import org.eclipse.ecf.filetransfer.events.IRemoteFileSystemDirectoryEvent; +import org.eclipse.ecf.filetransfer.events.IRemoteFileSystemEvent; +import org.eclipse.ecf.filetransfer.identity.IFileID; +import org.eclipse.ecf.internal.provider.filetransfer.Messages; + +/** + * + */ +public abstract class AbstractFileSystemBrowser { + + protected IFileID directoryID = null; + protected IRemoteFileSystemListener listener = null; + + Job job = null; + protected Exception exception = null; + protected IRemoteFile[] remoteFiles = null; + + Object lock = new Object(); + + class DirectoryJob extends Job { + + public DirectoryJob() { + super(directoryID.getName()); + } + + protected IStatus run(IProgressMonitor monitor) { + try { + if (monitor.isCanceled()) + throw new UserCancelledException(Messages.AbstractRetrieveFileTransfer_Exception_User_Cancelled); + runDirectoryRequest(); + } catch (Exception e) { + AbstractFileSystemBrowser.this.exception = e; + } finally { + listener.handleRemoteFileEvent(createRemoteFileEvent()); + cleanUp(); + } + return Status.OK_STATUS; + } + + } + + protected void cleanUp() { + synchronized (lock) { + job = null; + } + } + + protected abstract void runDirectoryRequest() throws Exception; + + public AbstractFileSystemBrowser(IFileID directoryID2, IRemoteFileSystemListener listener) { + Assert.isNotNull(directoryID2); + this.directoryID = directoryID2; + Assert.isNotNull(listener); + this.listener = listener; + } + + public IRemoteFileSystemRequest sendDirectoryRequest() { + job = new DirectoryJob(); + job.schedule(); + return new IRemoteFileSystemRequest() { + + public void cancel() { + synchronized (lock) { + if (job != null) + job.cancel(); + } + } + + public IFileID getDirectoryID() { + return directoryID; + } + + public IRemoteFileSystemListener getRemoteFileListener() { + return listener; + } + + }; + + } + + /** + * @return file system directory event + */ + protected IRemoteFileSystemEvent createRemoteFileEvent() { + return new IRemoteFileSystemDirectoryEvent() { + + public IFileID getDirectory() { + return directoryID; + } + + public Exception getException() { + return exception; + } + + public String toString() { + StringBuffer buf = new StringBuffer("RemoteFileSystemDirectoryEvent["); //$NON-NLS-1$ + buf.append("directoryID=").append(directoryID).append(";"); //$NON-NLS-1$ //$NON-NLS-2$ + buf.append("files=" + Arrays.asList(remoteFiles)).append("]"); //$NON-NLS-1$ //$NON-NLS-2$ + return buf.toString(); + } + + public IRemoteFile[] getRemoteFiles() { + return remoteFiles; + } + }; + } + +} diff --git a/providers/bundles/org.eclipse.ecf.provider.filetransfer/src/org/eclipse/ecf/provider/filetransfer/browse/FileSystemBrowser.java b/providers/bundles/org.eclipse.ecf.provider.filetransfer/src/org/eclipse/ecf/provider/filetransfer/browse/FileSystemBrowser.java index 8d569291c..4b1befc46 100644 --- a/providers/bundles/org.eclipse.ecf.provider.filetransfer/src/org/eclipse/ecf/provider/filetransfer/browse/FileSystemBrowser.java +++ b/providers/bundles/org.eclipse.ecf.provider.filetransfer/src/org/eclipse/ecf/provider/filetransfer/browse/FileSystemBrowser.java @@ -12,13 +12,9 @@ package org.eclipse.ecf.provider.filetransfer.browse; import java.io.File; -import java.net.URL; -import java.util.Arrays; -import org.eclipse.core.runtime.*; -import org.eclipse.core.runtime.jobs.Job; -import org.eclipse.ecf.filetransfer.*; -import org.eclipse.ecf.filetransfer.events.IRemoteFileSystemDirectoryEvent; -import org.eclipse.ecf.filetransfer.events.IRemoteFileSystemEvent; +import java.net.MalformedURLException; +import org.eclipse.ecf.filetransfer.IRemoteFileSystemListener; +import org.eclipse.ecf.filetransfer.RemoteFileSystemException; import org.eclipse.ecf.filetransfer.identity.IFileID; import org.eclipse.ecf.internal.provider.filetransfer.Messages; import org.eclipse.osgi.util.NLS; @@ -26,59 +22,25 @@ import org.eclipse.osgi.util.NLS; /** * */ -public class FileSystemBrowser { +public class FileSystemBrowser extends AbstractFileSystemBrowser { - IFileID directoryID = null; - URL directoryURL = null; - IRemoteFileSystemListener listener = null; - File localDirectory; - - Job job = null; - Exception exception = null; - IRemoteFile[] remoteFiles = null; - - Object lock = new Object(); + protected File localDirectory; /** * @param listener - * @param url * @param directoryID2 */ - public FileSystemBrowser(IFileID directoryID2, URL url, IRemoteFileSystemListener listener) { - Assert.isNotNull(directoryID2); - this.directoryID = directoryID2; - Assert.isNotNull(url); - this.directoryURL = url; - Assert.isNotNull(listener); - this.listener = listener; - } - - class DirectoryJob extends Job { - - public DirectoryJob() { - super(directoryID.getName()); - } - - protected IStatus run(IProgressMonitor monitor) { - try { - if (monitor.isCanceled()) - throw new UserCancelledException(Messages.AbstractRetrieveFileTransfer_Exception_User_Cancelled); - runDirectoryRequest(); - } catch (Exception e) { - FileSystemBrowser.this.exception = e; - } finally { - listener.handleRemoteFileEvent(createRemoteFileEvent()); - cleanUp(); - } - return Status.OK_STATUS; - } - - } - - void cleanUp() { - synchronized (lock) { - job = null; + public FileSystemBrowser(IFileID directoryID2, IRemoteFileSystemListener listener) throws RemoteFileSystemException { + super(directoryID2, listener); + try { + localDirectory = new File(directoryID2.getURL().getPath()); + } catch (MalformedURLException e) { + throw new RemoteFileSystemException(e); } + if (!localDirectory.exists()) + throw new RemoteFileSystemException(NLS.bind(Messages.FileSystemBrowser_EXCEPTION_DIRECTORY_DOES_NOT_EXIST, localDirectory)); + if (!localDirectory.isDirectory()) + throw new RemoteFileSystemException(NLS.bind(Messages.FileSystemBrowser_EXCEPTION_NOT_DIRECTORY, localDirectory)); } protected void runDirectoryRequest() throws Exception { @@ -89,60 +51,4 @@ public class FileSystemBrowser { } } - public IRemoteFileSystemRequest sendDirectoryRequest() throws RemoteFileSystemException { - localDirectory = new File(directoryURL.getPath()); - if (!localDirectory.exists()) - throw new RemoteFileSystemException(NLS.bind(Messages.FileSystemBrowser_EXCEPTION_DIRECTORY_DOES_NOT_EXIST, localDirectory)); - if (!localDirectory.isDirectory()) - throw new RemoteFileSystemException(NLS.bind(Messages.FileSystemBrowser_EXCEPTION_NOT_DIRECTORY, localDirectory)); - - job = new DirectoryJob(); - job.schedule(); - return new IRemoteFileSystemRequest() { - - public void cancel() { - synchronized (lock) { - if (job != null) - job.cancel(); - } - } - - public IFileID getDirectoryID() { - return directoryID; - } - - public IRemoteFileSystemListener getRemoteFileListener() { - return listener; - } - - }; - - } - - /** - * @return file system directory event - */ - IRemoteFileSystemEvent createRemoteFileEvent() { - return new IRemoteFileSystemDirectoryEvent() { - - public IFileID getDirectory() { - return directoryID; - } - - public Exception getException() { - return exception; - } - - public String toString() { - StringBuffer buf = new StringBuffer("RemoteFileSystemDirectoryEvent["); //$NON-NLS-1$ - buf.append("directoryID=").append(directoryID).append(";"); //$NON-NLS-1$ //$NON-NLS-2$ - buf.append("files=" + Arrays.asList(remoteFiles)).append("]"); //$NON-NLS-1$ //$NON-NLS-2$ - return buf.toString(); - } - - public IRemoteFile[] getRemoteFiles() { - return remoteFiles; - } - }; - } } diff --git a/providers/bundles/org.eclipse.ecf.provider.filetransfer/src/org/eclipse/ecf/provider/filetransfer/browse/LocalFileAttributes.java b/providers/bundles/org.eclipse.ecf.provider.filetransfer/src/org/eclipse/ecf/provider/filetransfer/browse/LocalFileAttributes.java index 6fb92bfca..a1b8c4a50 100644 --- a/providers/bundles/org.eclipse.ecf.provider.filetransfer/src/org/eclipse/ecf/provider/filetransfer/browse/LocalFileAttributes.java +++ b/providers/bundles/org.eclipse.ecf.provider.filetransfer/src/org/eclipse/ecf/provider/filetransfer/browse/LocalFileAttributes.java @@ -22,7 +22,7 @@ public class LocalFileAttributes implements IRemoteFileAttributes { File file = null; - static String[] fileAttributes = {IRemoteFileAttributes.READ_ATTRIBUTE, IRemoteFileAttributes.WRITE_ATTRIBUTE, IRemoteFileAttributes.HIDDEN_ATTRIBUTE}; + static String[] fileAttributes = {IRemoteFileAttributes.READ_ATTRIBUTE, IRemoteFileAttributes.WRITE_ATTRIBUTE, IRemoteFileAttributes.HIDDEN_ATTRIBUTE, IRemoteFileAttributes.EXEC_ATTRIBUTE, IRemoteFileAttributes.ARCHIVE_ATTRIBUTE}; static List attributeKeys = new ArrayList(Arrays.asList(fileAttributes)); public LocalFileAttributes(File file) { @@ -44,6 +44,10 @@ public class LocalFileAttributes implements IRemoteFileAttributes { } else if (key.equals(IRemoteFileAttributes.HIDDEN_ATTRIBUTE)) { if (file.isHidden()) return Boolean.TRUE.toString(); + } else if (key.equals(IRemoteFileAttributes.EXEC_ATTRIBUTE)) { + return Boolean.TRUE.toString(); + } else if (key.equals(IRemoteFileAttributes.ARCHIVE_ATTRIBUTE)) { + return Boolean.TRUE.toString(); } return null; } diff --git a/providers/bundles/org.eclipse.ecf.provider.filetransfer/src/org/eclipse/ecf/provider/filetransfer/browse/MultiProtocolFileSystemBrowserAdapter.java b/providers/bundles/org.eclipse.ecf.provider.filetransfer/src/org/eclipse/ecf/provider/filetransfer/browse/MultiProtocolFileSystemBrowserAdapter.java index c7d9bf8a4..0054f799e 100644 --- a/providers/bundles/org.eclipse.ecf.provider.filetransfer/src/org/eclipse/ecf/provider/filetransfer/browse/MultiProtocolFileSystemBrowserAdapter.java +++ b/providers/bundles/org.eclipse.ecf.provider.filetransfer/src/org/eclipse/ecf/provider/filetransfer/browse/MultiProtocolFileSystemBrowserAdapter.java @@ -78,7 +78,7 @@ public class MultiProtocolFileSystemBrowserAdapter implements IRemoteFileSystemB if (fileSystemBrowser == null) { if (url.getProtocol().equalsIgnoreCase("file")) { //$NON-NLS-1$ - FileSystemBrowser fsb = new FileSystemBrowser(directoryID, url, listener); + FileSystemBrowser fsb = new FileSystemBrowser(directoryID, listener); return fsb.sendDirectoryRequest(); } throw new RemoteFileSystemException(NLS.bind(Messages.MultiProtocolOutgoingAdapter_EXCEPTION_NO_PROTOCOL_HANDER, directoryID)); |