package org.erlide.ui.views; import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.Map; import org.eclipse.jface.viewers.DoubleClickEvent; import org.eclipse.jface.viewers.IDoubleClickListener; import org.eclipse.jface.viewers.ITreeContentProvider; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.widgets.Composite; import org.eclipse.ui.part.ViewPart; import org.erlide.backend.BackendCore; import org.erlide.runtime.epmd.EpmdWatcher; import org.erlide.runtime.epmd.IEpmdListener; import org.erlide.ui.util.DisplayUtils; public class EpmdView extends ViewPart implements IEpmdListener { TreeViewer treeViewer; class TreeContentProvider implements ITreeContentProvider { @Override public void inputChanged(final Viewer viewer, final Object oldInput, final Object newInput) { } @Override public void dispose() { } @Override public Object[] getElements(final Object inputElement) { model = epmdWatcher.getData(); if (model == null) { return new Object[] {}; } return model.keySet().toArray(); } @Override public Object[] getChildren(final Object parentElement) { if (parentElement instanceof String) { final String host = (String) parentElement; final List<String> h = model.get(host); final List<String> res = new ArrayList<>(); if (h != null) { for (final String s : h) { if (!s.startsWith("jerlide_")) { res.add(s); } } return res.toArray(); } } return new Object[] {}; } @Override public Object getParent(final Object element) { return null; } @Override public boolean hasChildren(final Object element) { return getChildren(element).length > 0; } } static class TreeLabelProvider extends LabelProvider { @Override public String getText(final Object element) { return super.getText(element); } @Override public Image getImage(final Object element) { return null; } } Map<String, List<String>> model; EpmdWatcher epmdWatcher; public EpmdView() { epmdWatcher = BackendCore.getEpmdWatcher(); epmdWatcher.addEpmdListener(this); } @Override public void createPartControl(final Composite parent) { treeViewer = new TreeViewer(parent, SWT.BORDER); treeViewer.addDoubleClickListener(new IDoubleClickListener() { @Override public void doubleClick(final DoubleClickEvent event) { treeViewer.refresh(); } }); treeViewer.setContentProvider(new TreeContentProvider()); treeViewer.setLabelProvider(new TreeLabelProvider()); treeViewer.setAutoExpandLevel(2); initializeToolBar(); treeViewer.setInput(this); } @Override public void setFocus() { } private void initializeToolBar() { // IToolBarManager toolBarManager = getViewSite().getActionBars() // .getToolBarManager(); } @Override public void updateNodeStatus(final String host, final Collection<String> started, final Collection<String> stopped) { model = epmdWatcher.getData(); DisplayUtils.asyncExec(new Runnable() { @Override public void run() { treeViewer.setInput(model); } }); } }