package com.javadude.dependencies2.views;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.IPath;
import org.eclipse.jdt.core.IClasspathEntry;
import org.eclipse.jdt.core.IJavaModel;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerSorter;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.part.ViewPart;
import com.javadude.dependencies2.Activator;
public class DependencyTableView extends ViewPart {
private TableViewer viewer;
class ViewContentProvider implements IStructuredContentProvider {
public void inputChanged(Viewer v, Object oldInput, Object newInput) { /* nothing */ }
public void dispose() { /* nothing */ }
public Object[] getElements(Object parent) {
try {
IJavaModel javaModel = JavaCore.create(ResourcesPlugin.getWorkspace().getRoot());
return javaModel.getJavaProjects();
} catch (JavaModelException e) {
Activator.error("Error getting java projects", e);
throw new RuntimeException(e);
}
}
}
class ViewLabelProvider extends LabelProvider implements ITableLabelProvider {
public String getColumnText(Object obj, int index) {
switch (index) {
case 0: return ((IJavaProject) obj).getElementName();
case 1:
IJavaProject javaProject = (IJavaProject) obj;
try {
String dependencies = "";
IClasspathEntry[] classpath = javaProject.getRawClasspath();
for (IClasspathEntry classpathEntry : classpath) {
if (classpathEntry.getEntryKind() == IClasspathEntry.CPE_PROJECT) {
IPath path = classpathEntry.getPath();
dependencies += ',' + path.lastSegment();
}
}
if (dependencies.length() > 0)
return dependencies.substring(1);
return "";
} catch (JavaModelException e) {
e.printStackTrace();
}
}
return getText(obj);
}
public Image getColumnImage(Object obj, int index) {
return null;
}
}
class NameSorter extends ViewerSorter { /* nothing */ }
@Override public void createPartControl(Composite parent) {
viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
TableColumn column = new TableColumn((Table) viewer.getControl(), SWT.LEFT);
column.setText("Project");
column.setResizable(true);
column.setWidth(200);
column = new TableColumn((Table) viewer.getControl(), SWT.LEFT);
column.setText("Dependencies");
column.setResizable(true);
column.setWidth(400);
((Table) viewer.getControl()).setHeaderVisible(true);
viewer.setContentProvider(new ViewContentProvider());
viewer.setLabelProvider(new ViewLabelProvider());
viewer.setSorter(new NameSorter());
viewer.setInput(getViewSite());
getSite().setSelectionProvider(viewer);
// Create the help context id for the viewer's control
PlatformUI.getWorkbench().getHelpSystem().setHelp(viewer.getControl(), "com.javadude.dependencies2.viewer");
}
@Override public void setFocus() {
viewer.getControl().setFocus();
}
}