blob: 1b13fe4c4f6956b935223865f3f0d2d036b6cc5a [file] [log] [blame]
/*******************************************************************************
* 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);
}
}