Mega Code Archive

 
Categories / Java / SWT Jface Eclipse
 

FTP client

/*******************************************************************************  * All Right Reserved. Copyright (c) 1998, 2004 Jackwind Li Guojie  *   * Created on 2004-7-14 7:19:55 by JACK $Id$  *    ******************************************************************************/ import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.net.SocketException; import java.io.File; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.DialogSettings; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; import org.apache.commons.net.ProtocolCommandEvent; import org.apache.commons.net.ProtocolCommandListener; import org.apache.commons.net.ftp.FTPClient; import org.apache.commons.net.ftp.FTPFile; import org.apache.commons.net.ftp.FTPReply; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.ActionContributionItem; import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.action.Separator; import org.eclipse.jface.action.ToolBarManager; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.window.ApplicationWindow; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.SashForm; import org.eclipse.swt.custom.StyleRange; import org.eclipse.swt.custom.StyledText; import org.eclipse.swt.dnd.DND; import org.eclipse.swt.dnd.DragSource; import org.eclipse.swt.dnd.DragSourceEvent; import org.eclipse.swt.dnd.DragSourceListener; import org.eclipse.swt.dnd.DropTarget; import org.eclipse.swt.dnd.DropTargetEvent; import org.eclipse.swt.dnd.DropTargetListener; import org.eclipse.swt.dnd.TextTransfer; import org.eclipse.swt.dnd.Transfer; import org.eclipse.swt.events.DisposeEvent; import org.eclipse.swt.events.DisposeListener; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.DirectoryDialog; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import org.eclipse.swt.widgets.Text; import java.io.File; import java.util.Date; import org.eclipse.jface.viewers.ILabelProviderListener; import org.eclipse.jface.viewers.IStructuredContentProvider; import org.eclipse.jface.viewers.ITableLabelProvider; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.widgets.Table; class ConnectionInfo {   public String host;   public int port;   public String password;   public String username; } class ConnectionDialog extends Dialog {   private static final String DIALOG_SETTING_FILE = "ftp.connection.xml";   private static final String KEY_HOST = "HOST";   private static final String KEY_PORT = "PORT";   private static final String KEY_USERNAME = "USER";   private static final String KEY_PASSWORD = "PASSWORD";   Text textHost;   Text textPort;   Text textUsername;   Text textPassword;   DialogSettings dialogSettings;   ConnectionInfo connectionInfo;   ConnectionDialog(FTPWindow window) {     super(window.getShell());     connectionInfo = null;     dialogSettings = new DialogSettings("FTP");     try {       dialogSettings.load(DIALOG_SETTING_FILE);     } catch (Exception e) {       e.printStackTrace();       // ignore.     }   }   /*    * (non-Javadoc)    *     * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite)    */   protected Control createDialogArea(Composite parent) {     getShell().setText("Connection Settings");     Composite composite = (Composite) super.createDialogArea(parent);     composite.setLayout(new GridLayout(2, false));     new Label(composite, SWT.NULL).setText("Host: ");     textHost = new Text(composite, SWT.BORDER);     textHost.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));     new Label(composite, SWT.NULL).setText("Port: ");     textPort = new Text(composite, SWT.BORDER);     textPort.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));     new Label(composite, SWT.NULL).setText("Username: ");     textUsername = new Text(composite, SWT.BORDER);     textUsername.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));     new Label(composite, SWT.NULL).setText("Password: ");     textPassword = new Text(composite, SWT.PASSWORD | SWT.BORDER);     textPassword.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));     // sets initial values.     try {       textHost.setText(dialogSettings.get(KEY_HOST));       textPort.setText(dialogSettings.getInt(KEY_PORT) + "");       textUsername.setText(dialogSettings.get(KEY_USERNAME));       textPassword.setText(dialogSettings.get(KEY_PASSWORD));     } catch (Exception e) {       // ignore.     }     return composite;   }   /**    * Returns a ConnectionInfo object containing connection information.    *     * @return    */   public ConnectionInfo getConnectionInfo() {     return connectionInfo;   }   /*    * (non-Javadoc)    *     * @see org.eclipse.jface.dialogs.Dialog#okPressed()    */   protected void okPressed() {     try {       if (!new File(DIALOG_SETTING_FILE).exists()) {         new File(DIALOG_SETTING_FILE).createNewFile();       }       dialogSettings.put(KEY_HOST, textHost.getText());       dialogSettings.put(KEY_PORT, Integer.parseInt(textPort.getText()           .trim()));       dialogSettings.put(KEY_USERNAME, textUsername.getText());       dialogSettings.put(KEY_PASSWORD, textPassword.getText());       dialogSettings.save(DIALOG_SETTING_FILE);     } catch (Exception e) {       e.printStackTrace();       // ignore     }     connectionInfo = new ConnectionInfo();     connectionInfo.host = textHost.getText();     connectionInfo.port = Integer.parseInt(textPort.getText().trim());     connectionInfo.username = textUsername.getText();     connectionInfo.password = textPassword.getText();     super.okPressed();   } } public class FTPWindow extends ApplicationWindow {   TableViewer localDirBrowser;   TableViewer remoteDirBrowser;   Label labelPathLocal;   Label labelPathRemote;   StyledText textLog;   ConnectionDialog connectionDialog;   Action actionUpLocalDir;   Action actionUpRemoteDir;   Action actionBrowseLocalDir;   Action actionConnect;   Action actionDisconnect;   Action actionDisplayAbout;   Action actionExit;   FTPClient ftp;   ConnectionInfo connectionInfo;   /**    * @param parentShell    */   public FTPWindow(Shell parentShell) {     super(parentShell);     createActions();     addStatusLine();     //addCoolBar(SWT.FLAT | SWT.RIGHT);     addToolBar(SWT.FLAT);     addMenuBar();     ftp = new FTPClient();     ftp.addProtocolCommandListener(new ProtocolCommandListener() {       public void protocolCommandSent(ProtocolCommandEvent e) {         logMessage("> " + e.getCommand(), false);       }       public void protocolReplyReceived(ProtocolCommandEvent e) {         logMessage("< " + e.getMessage(), false);       }     });   }   private void createActions() {     // Up one level - local dir     actionUpLocalDir = new Action() {       public void run() {         if (localDirBrowser.getInput() == null)           return;         File dir = ((File) localDirBrowser.getInput()).getParentFile();         if (dir != null) {           localDirBrowser.setInput(dir);           labelPathLocal.setText("Path: " + dir);         }       }     };     actionUpLocalDir.setText("Up");     actionUpLocalDir.setToolTipText("Up one level - local dir");     actionUpLocalDir.setImageDescriptor(ImageDescriptor.createFromFile(         null, "icons/ftp/up.gif"));     // browse for local dir     actionBrowseLocalDir = new Action() {       public void run() {         DirectoryDialog dialog = new DirectoryDialog(getShell());         String path = dialog.open();         if (path == null)           return;         File file = new File(path);         localDirBrowser.setInput(file);         labelPathLocal.setText("Path: " + file);       }     };     actionBrowseLocalDir.setText("Browse...");     actionBrowseLocalDir.setToolTipText("Browse local directory");     actionBrowseLocalDir.setImageDescriptor(ImageDescriptor.createFromFile(         null, "icons/ftp/browse.gif"));     // connect     actionConnect = new Action() {       public void run() {         if (connectionDialog == null)           connectionDialog = new ConnectionDialog(FTPWindow.this);         if (connectionDialog.open() == Dialog.OK) {           connectionInfo = connectionDialog.getConnectionInfo();           if (connectionInfo == null) {             logError("Failed to get connection information.");           } else {             // connects to remote host.             logMessage("Connecting to " + connectionInfo.host, true);             try {               ftp.connect(connectionInfo.host,                   connectionInfo.port);               if (!FTPReply.isPositiveCompletion(ftp                   .getReplyCode()))                 throw new RuntimeException(                     "FTP server refused connection.");               logMessage("Connected to " + connectionInfo.host,                   true);             } catch (Exception e) {               logError(e.toString());               return;             }             try {               // logins in.               if (ftp.login(connectionInfo.username,                   connectionInfo.password)) {                 logMessage("Logged in as user: "                     + connectionInfo.username, true);               }               // gets current working directory.               labelPathRemote.setText("Path: "                   + ftp.printWorkingDirectory());               // Lists files.               FTPFile[] files = ftp.listFiles();               remoteDirBrowser.setInput(files);             } catch (IOException e1) {               logError(e1.getMessage());               try {                 ftp.disconnect();               } catch (IOException e2) {                 //                }             }           }         }       }     };     actionConnect.setText("Connect");     actionConnect.setToolTipText("Connect to remote host");     actionConnect.setImageDescriptor(ImageDescriptor.createFromFile(null,         "icons/ftp/connect.gif"));     // disconnect     actionDisconnect = new Action() {       public void run() {         try {           ftp.logout();           ftp.disconnect();         } catch (Exception e) {           logError(e.toString());         }       }     };     actionDisconnect.setText("Disconnect");     actionDisconnect.setToolTipText("Disconnect from remote host");     actionDisconnect.setImageDescriptor(ImageDescriptor.createFromFile(         null, "icons/ftp/stop.gif"));     // up one level - remote dir.     actionUpRemoteDir = new Action() {       public void run() {         try {           if (ftp.changeToParentDirectory()) {             // gets current working directory.             labelPathRemote.setText("Path: "                 + ftp.printWorkingDirectory());             // Lists files.             FTPFile[] files = ftp.listFiles();             remoteDirBrowser.setInput(files);           }         } catch (Exception e) {           logError(e.toString());         }       }     };     actionUpRemoteDir.setText("Up");     actionUpRemoteDir.setToolTipText("Up one level - remote dir");     actionUpRemoteDir.setImageDescriptor(ImageDescriptor.createFromFile(         null, "icons/ftp/up.gif"));     actionDisplayAbout = new Action() {       public void run() {         MessageDialog             .openInformation(getShell(), "About",                 "FTP Client v1.0\nAll right reserved by Jack Li Guojie.");       }     };     actionDisplayAbout.setText("About");     actionDisplayAbout.setImageDescriptor(ImageDescriptor.createFromFile(         null, "icons/ftp/about.gif"));     actionExit = new Action() {       public void run() {         if (!MessageDialog.openConfirm(getShell(), "Confirm",             "Are you sure you want to exit?"))           return;         try {           ftp.disconnect();         } catch (Exception e) {           // ignore.         }         close();       }     };     actionExit.setText("Exit");     actionExit.setImageDescriptor(ImageDescriptor.createFromFile(null,         "icons/ftp/close.gif"));   }   private void dragNDropSupport() {     // --- Drag source ---     //  Allows text to be moved only.     int operations = DND.DROP_COPY | DND.DROP_MOVE;     final DragSource dragSource = new DragSource(remoteDirBrowser         .getControl(), operations);     // Data should be transfered in plain text format.     Transfer[] formats = new Transfer[] { TextTransfer.getInstance() };     dragSource.setTransfer(formats);     dragSource.addDragListener(new DragSourceListener() {       public void dragStart(DragSourceEvent event) {         System.out.println("DND starts");         // disallows DND if no remote file is selected.         IStructuredSelection selection = (IStructuredSelection) remoteDirBrowser             .getSelection();         FTPFile file = (FTPFile) selection.getFirstElement();         if (file == null || file.isDirectory()) {           event.doit = false;         }       }       public void dragSetData(DragSourceEvent event) {         // Provides the text data.         if (TextTransfer.getInstance().isSupportedType(event.dataType)) {           IStructuredSelection selection = (IStructuredSelection) remoteDirBrowser               .getSelection();           FTPFile file = (FTPFile) selection.getFirstElement();           if (file == null || file.isDirectory()) {             event.doit = false;           } else {             event.data = file.getName();           }         }       }       public void dragFinished(DragSourceEvent event) {       }     });     remoteDirBrowser.getControl().addDisposeListener(new DisposeListener() {       public void widgetDisposed(DisposeEvent e) {         dragSource.dispose();       }     });     // --- Drop target ---     final DropTarget dropTarget = new DropTarget(localDirBrowser         .getControl(), operations);     dropTarget.setTransfer(formats);     dropTarget.addDropListener(new DropTargetListener() {       public void dragEnter(DropTargetEvent event) {       }       public void dragLeave(DropTargetEvent event) {       }       public void dragOperationChanged(DropTargetEvent event) {       }       public void dragOver(DropTargetEvent event) {       }       public void drop(DropTargetEvent event) {         if (TextTransfer.getInstance().isSupportedType(             event.currentDataType)) {           String text = (String) event.data;           File target = new File((File) localDirBrowser.getInput(),               text);           if (target.exists()) {             if (!MessageDialog.openConfirm(getShell(),                 "Overwriting confirmation", "Overwrite file "                     + target + "?")) {               return;             }           }           try {             FileOutputStream stream = new FileOutputStream(target);             if (ftp.retrieveFile(text, stream)) {               logMessage("File retrieved successfully.", true);               // refreshes the file list.               localDirBrowser.refresh();             } else {               logError("Failed to retrieve file: " + text);             }             stream.close();           } catch (IOException e) {             e.printStackTrace();           }         }       }       public void dropAccept(DropTargetEvent event) {       }     });     localDirBrowser.getControl().addDisposeListener(new DisposeListener() {       public void widgetDisposed(DisposeEvent e) {         dropTarget.dispose();       }     });   }   /*    * (non-Javadoc)    *     * @see org.eclipse.jface.window.ApplicationWindow#createMenuManager()    */   protected MenuManager createMenuManager() {     MenuManager bar = new MenuManager();     MenuManager menuFile = new MenuManager("&File");     menuFile.add(actionConnect);     menuFile.add(actionDisconnect);     menuFile.add(new Separator());     menuFile.add(actionExit);     MenuManager menuLocal = new MenuManager("&Local");     menuLocal.add(actionBrowseLocalDir);     menuLocal.add(actionUpLocalDir);     MenuManager menuRemote = new MenuManager("&Remote");     menuRemote.add(actionUpRemoteDir);     MenuManager menuHelp = new MenuManager("&Help");     menuHelp.add(actionDisplayAbout);     bar.add(menuFile);     bar.add(menuLocal);     bar.add(menuRemote);     bar.add(menuHelp);     bar.updateAll(true);     return bar;   }   public static void addAction(ToolBarManager manager, Action action,       boolean displayText) {     if (!displayText) {       manager.add(action);       return;     } else {       ActionContributionItem item = new ActionContributionItem(action);       item.setMode(ActionContributionItem.MODE_FORCE_TEXT);       manager.add(item);     }   }   /*    * (non-Javadoc)    *     * @see org.eclipse.jface.window.ApplicationWindow#createToolBarManager(int)    */   protected ToolBarManager createToolBarManager(int style) {     ToolBarManager manager = super.createToolBarManager(style);     addAction(manager, actionConnect, true);     addAction(manager, actionDisconnect, true);     manager.add(new Separator());     addAction(manager, actionBrowseLocalDir, true);     addAction(manager, actionUpLocalDir, true);     manager.add(new Separator());     addAction(manager, actionUpRemoteDir, true);     manager.add(new Separator());     addAction(manager, actionDisplayAbout, true);     addAction(manager, actionExit, true);     manager.update(true);     return manager;   }   /*    * (non-Javadoc)    *     * @see org.eclipse.jface.window.Window#createContents(org.eclipse.swt.widgets.Composite)    */   protected Control createContents(Composite parent) {     Composite composite = new Composite(parent, SWT.NULL);     composite.setLayout(new FillLayout());     // the vertical sashform.     SashForm verticalForm = new SashForm(composite, SWT.VERTICAL);     // the horizontal sashform.     SashForm horizontalForm = new SashForm(verticalForm, SWT.HORIZONTAL);     // Local dir browser.     Composite compositeLocalDir = new Composite(horizontalForm, SWT.NULL);     GridLayout gridLayout = new GridLayout();     gridLayout.horizontalSpacing = 1;     gridLayout.verticalSpacing = 1;     compositeLocalDir.setLayout(gridLayout);     Group compositeLocalDirTop = new Group(compositeLocalDir, SWT.NULL);     compositeLocalDirTop.setText("Local");     GridLayout gridLayout2 = new GridLayout(3, false);     gridLayout2.marginHeight = 0;     compositeLocalDirTop.setLayout(gridLayout2);     compositeLocalDirTop.setLayoutData(new GridData(         GridData.FILL_HORIZONTAL));     labelPathLocal = new Label(compositeLocalDirTop, SWT.NULL);     labelPathLocal.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));     labelPathLocal.setText("Path: ");     Button buttonUpLocalDir = new Button(compositeLocalDirTop, SWT.PUSH);     buttonUpLocalDir.setText(actionUpLocalDir.getText());     buttonUpLocalDir.addListener(SWT.Selection, new Listener() {       public void handleEvent(Event event) {         actionUpLocalDir.run();       }     });     Button buttonBrowseLocalDir = new Button(compositeLocalDirTop, SWT.PUSH);     buttonBrowseLocalDir.setText(actionBrowseLocalDir.getText());     buttonBrowseLocalDir.addListener(SWT.Selection, new Listener() {       public void handleEvent(Event event) {         actionBrowseLocalDir.run();       }     });     Table table = new Table(compositeLocalDir, SWT.BORDER);     TableColumn tcFile = new TableColumn(table, SWT.LEFT);     tcFile.setText("Name");     TableColumn tcSize = new TableColumn(table, SWT.NULL);     tcSize.setText("Size");     TableColumn tcDate = new TableColumn(table, SWT.NULL);     tcDate.setText("Date");     tcFile.setWidth(200);     tcSize.setWidth(100);     tcDate.setWidth(100);     table.setHeaderVisible(true);     table.setLayoutData(new GridData(GridData.FILL_BOTH));     localDirBrowser = new LocalDirectoryBrowser(table);     table.addListener(SWT.MouseDoubleClick, new Listener() {       public void handleEvent(Event event) {         IStructuredSelection selection = (IStructuredSelection) localDirBrowser             .getSelection();         File file = (File) selection.getFirstElement();         if (file != null && file.isDirectory()) {           localDirBrowser.setInput(file);           labelPathLocal.setText("Path: " + file);         }       }     });     // Remote directory browser.     Composite compositeRemoteDir = new Composite(horizontalForm, SWT.NULL);     gridLayout = new GridLayout();     gridLayout.horizontalSpacing = 1;     gridLayout.verticalSpacing = 1;     compositeRemoteDir.setLayout(gridLayout);     Group compositeRemoteDirTop = new Group(compositeRemoteDir, SWT.NULL);     compositeRemoteDirTop.setText("Remote");     gridLayout2 = new GridLayout(2, false);     gridLayout2.marginHeight = 0;     compositeRemoteDirTop.setLayout(gridLayout2);     compositeRemoteDirTop.setLayoutData(new GridData(         GridData.FILL_HORIZONTAL));     labelPathRemote = new Label(compositeRemoteDirTop, SWT.NULL);     labelPathRemote.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));     labelPathRemote.setText("Path: ");     Button buttonUpRemoteDir = new Button(compositeRemoteDirTop, SWT.PUSH);     buttonUpRemoteDir.setText(actionUpLocalDir.getText());     buttonUpRemoteDir.addListener(SWT.Selection, new Listener() {       public void handleEvent(Event event) {         actionUpRemoteDir.run();       }     });     Table tableRemote = new Table(compositeRemoteDir, SWT.BORDER);     TableColumn tcFileRemote = new TableColumn(tableRemote, SWT.LEFT);     tcFileRemote.setText("Name");     TableColumn tcSizeRemote = new TableColumn(tableRemote, SWT.NULL);     tcSizeRemote.setText("Size");     TableColumn tcDateRemote = new TableColumn(tableRemote, SWT.NULL);     tcDateRemote.setText("Date");     tcFileRemote.setWidth(200);     tcSizeRemote.setWidth(100);     tcDateRemote.setWidth(100);     tableRemote.setHeaderVisible(true);     tableRemote.setLayoutData(new GridData(GridData.FILL_BOTH));     remoteDirBrowser = new RemoteDirectoryBrowser(tableRemote);     tableRemote.addListener(SWT.MouseDoubleClick, new Listener() {       public void handleEvent(Event event) {         IStructuredSelection selection = (IStructuredSelection) remoteDirBrowser             .getSelection();         FTPFile file = (FTPFile) selection.getFirstElement();         if (file != null && file.isDirectory()) {           try {             ftp.changeWorkingDirectory(file.getName());             labelPathRemote.setText("Path: "                 + ftp.printWorkingDirectory());             remoteDirBrowser.setInput(ftp.listFiles());           } catch (IOException e) {             logError(e.toString());           }         }       }     });     // the log box.     textLog = new StyledText(verticalForm, SWT.BORDER | SWT.H_SCROLL         | SWT.V_SCROLL);     localDirBrowser.setInput(File.listRoots()[0]);     labelPathLocal.setText("Path: " + File.listRoots()[0]);     // resize sashform children.     verticalForm.setWeights(new int[] { 4, 1 });     // adding drag and drop support.     dragNDropSupport();     getToolBarControl().setBackground(         new Color(getShell().getDisplay(), 230, 230, 230));     getShell().setImage(         new Image(getShell().getDisplay(), "icons/ftp/ftp.gif"));     getShell().setText("FTP Client v1.0");     return composite;   }   private void logMessage(String message, boolean showInStatusBar) {     StyleRange styleRange1 = new StyleRange();     styleRange1.start = textLog.getCharCount();     styleRange1.length = message.length();     styleRange1.foreground = getShell().getDisplay().getSystemColor(         SWT.COLOR_DARK_GREEN);     styleRange1.fontStyle = SWT.NORMAL;     textLog.append(message + "\r\n");     textLog.setStyleRange(styleRange1);     textLog.setSelection(textLog.getCharCount());     if (showInStatusBar) {       setStatus(message);     }   }   private void logError(String message) {     StyleRange styleRange1 = new StyleRange();     styleRange1.start = textLog.getCharCount();     styleRange1.length = message.length();     styleRange1.foreground = getShell().getDisplay().getSystemColor(         SWT.COLOR_DARK_RED);     styleRange1.fontStyle = SWT.NORMAL;     textLog.append(message + "\r\n");     textLog.setStyleRange(styleRange1);     textLog.setSelection(textLog.getCharCount());   }   public static void main(String[] args) {     ApplicationWindow window = new FTPWindow(null);     window.setBlockOnOpen(true);     window.open();     Display.getCurrent().dispose();   } } /*******************************************************************************  * All Right Reserved. Copyright (c) 1998, 2004 Jackwind Li Guojie  *   * Created on 2004-7-14 7:42:05 by JACK $Id$  *    ******************************************************************************/ class LocalDirectoryBrowser extends TableViewer {   /**    * @param table    */   public LocalDirectoryBrowser(Table table) {     super(table);     init();   }   private void init() {     // the content provider.     setContentProvider(new IStructuredContentProvider() {       public Object[] getElements(Object inputElement) {         File dir = (File) inputElement;         return dir.listFiles();       }       public void dispose() {       }       public void inputChanged(Viewer viewer, Object oldInput,           Object newInput) {       }     });     // the label provider.     setLabelProvider(new ITableLabelProvider() {       public Image getColumnImage(Object element, int columnIndex) {         if (columnIndex == 0)           return FileIconUtil.getIcon((File) element);         return null;       }       public String getColumnText(Object element, int columnIndex) {         switch (columnIndex) {         case 0:           return ((File) element).getName();         case 1:           return ((File) element).length() + "";         case 2:           return new Date(((File) element).lastModified()).toString();         default:           return "";         }       }       public void addListener(ILabelProviderListener listener) {       }       public void dispose() {       }       public boolean isLabelProperty(Object element, String property) {         return false;       }       public void removeListener(ILabelProviderListener listener) {       }     });   } } /*******************************************************************************  * All Right Reserved. Copyright (c) 1998, 2004 Jackwind Li Guojie  *   * Created on 2004-7-14 22:41:43 by JACK $Id$  *    ******************************************************************************/ class RemoteDirectoryBrowser extends TableViewer {   /**    * @param table    */   public RemoteDirectoryBrowser(Table table) {     super(table);     init();   }   private void init() {     // the content provider.     setContentProvider(new IStructuredContentProvider() {       public Object[] getElements(Object inputElement) {         FTPFile[] files = (FTPFile[]) inputElement;         return files;       }       public void dispose() {       }       public void inputChanged(Viewer viewer, Object oldInput,           Object newInput) {       }     });     // the label provider.     setLabelProvider(new ITableLabelProvider() {       public Image getColumnImage(Object element, int columnIndex) {         if (columnIndex == 0)           return FileIconUtil.getIcon((FTPFile) element);         return null;       }       public String getColumnText(Object element, int columnIndex) {         switch (columnIndex) {         case 0:           return ((FTPFile) element).getName();         case 1:           return ((FTPFile) element).getSize() + "";         case 2:           Calendar cal = ((FTPFile) element).getTimestamp();           return cal.get(Calendar.YEAR) + "-"               + cal.get(Calendar.MONTH) + "-"               + cal.get(Calendar.DAY_OF_MONTH) + " "               + cal.get(Calendar.HOUR_OF_DAY) + ":"               + cal.get(Calendar.MINUTE) + ":"               + cal.get(Calendar.SECOND);         default:           return "";         }       }       public void addListener(ILabelProviderListener listener) {       }       public void dispose() {       }       public boolean isLabelProperty(Object element, String property) {         return false;       }       public void removeListener(ILabelProviderListener listener) {       }     });   } }