Java tutorial
/******************************************************************************* * Copyright (c) 2008 Sybase, Inc. * * 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: brianf & mdow - initial API and implementation ******************************************************************************/ package org.eclipse.datatools.connectivity.sample.ftp.internal; import org.apache.commons.net.ftp.FTPClient; import org.apache.commons.net.ftp.FTPFile; import org.apache.commons.net.ftp.FTPListParseEngine; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.core.runtime.Platform; import org.eclipse.jface.viewers.ITreeContentProvider; import org.eclipse.jface.viewers.Viewer; /** * @author mdow and brianf */ public class FtpContentProvider implements ITreeContentProvider, IAdaptable { /** * Constructor */ public FtpContentProvider() { } /* * (non-Javadoc) * * @see org.eclipse.jface.viewers.ITreeContentProvider#getChildren(java.lang.Object) */ public Object[] getChildren(Object parent) { try { if (parent instanceof FTPClientObject) { FTPClient ftpClient = ((FTPClientObject) parent).getFtpClient(); if (ftpClient.isConnected()) { FTPListParseEngine engine = ftpClient.initiateListParsing(); FTPFile[] files = engine.getFiles(); return FTPFileObject.convert(parent, ((FTPClientObject) parent).getProfile(), files); } } else if (parent instanceof FTPFileObject) { FTPFile ftpFile = ((FTPFileObject) parent).getFTPFile(); FTPClient ftpClient = getFTPClient(parent); if (ftpFile.isDirectory() && ftpClient.isConnected()) { FTPListParseEngine engine = ftpClient.initiateListParsing(getDirectory((FTPFileObject) parent)); FTPFile[] files = engine.getFiles(); return FTPFileObject.convert(parent, ((FTPFileObject) parent).getProfile(), files); } } } catch (Exception e) { e.printStackTrace(); FTPClient ftpClient = getFTPClient(parent); try { if (ftpClient != null) ftpClient.disconnect(); } catch (Exception ex) { } } return new Object[0]; } private String getDirectory(FTPFileObject file) { StringBuffer sb = new StringBuffer(); FTPFileObject fileobj = file; Object obj; FTPFile ftpFile; while (fileobj != null) { ftpFile = fileobj.getFTPFile(); sb.insert(0, ftpFile.getName()); sb.insert(0, "/"); obj = getParent(fileobj); if (obj instanceof FTPFileObject) { fileobj = (FTPFileObject) obj; } else { fileobj = null; } } return sb.toString(); } private FTPClient getFTPClient(Object element) { Object obj = element; while (obj != null && !(obj instanceof FTPClientObject)) { obj = ((FTPFileObject) obj).getParent(); } if (obj != null) return ((FTPClientObject) obj).getFtpClient(); else return null; } /* * (non-Javadoc) * * @see org.eclipse.jface.viewers.ITreeContentProvider#getParent(java.lang.Object) */ public Object getParent(Object element) { Object parent = null; if (element instanceof FTPFileObject) { parent = ((FTPFileObject) element).getParent(); } return parent; } /* * (non-Javadoc) * * @see org.eclipse.jface.viewers.ITreeContentProvider#hasChildren(java.lang.Object) */ public boolean hasChildren(Object element) { if (element instanceof FTPClientObject) { return true; } else if (element instanceof FTPFileObject) { FTPFile ftpFile = ((FTPFileObject) element).getFTPFile(); if (ftpFile.isDirectory()) { return true; } else { return false; } } else { return false; } } /* * (non-Javadoc) * * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object) */ public Object[] getElements(Object inputElement) { return getChildren(inputElement); } /* * (non-Javadoc) * * @see org.eclipse.jface.viewers.IContentProvider#dispose() */ public void dispose() { // Release any listeners. Other cleanup. } /* * (non-Javadoc) * * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, * java.lang.Object, java.lang.Object) */ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { // Register listeners on newInput, remove listeners on oldInput, other // initialization. } /** * @param oldInput * @param newInput */ public void init(Object oldInput, Object newInput) { // Auto-generated method stub } /* * (non-Javadoc) * * @see org.eclipse.core.runtime.IAdaptable#getAdapter(java.lang.Class) */ public Object getAdapter(Class adapter) { return Platform.getAdapterManager().getAdapter(this, adapter); } }