package org.lucci.madhoc.gui;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
import java.util.Vector;
import javax.swing.JTree;
import javax.swing.border.EtchedBorder;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.DefaultTreeSelectionModel;
import javax.swing.tree.TreeModel;
import org.lucci.madhoc.simulation.Monitor;
public class MonitorTree extends JTree
{
private ProjectionComponent projectionFrame;
public MonitorTree()
{
setModel(null);
getSelectionModel().setSelectionMode(DefaultTreeSelectionModel.DISCONTIGUOUS_TREE_SELECTION);
setCellRenderer(new ApplicationViewTreeCellRenderer());
setBorder(new EtchedBorder());
}
public void setProjectionFrame(ProjectionComponent projectionFrame)
{
if (projectionFrame == null)
throw new IllegalArgumentException();
this.projectionFrame = projectionFrame;
DefaultMutableTreeNode root = new DefaultMutableTreeNode(projectionFrame.getProjection());
TreeModel model = new DefaultTreeModel(root);
List<Monitor> monitors = new Vector<Monitor>(projectionFrame.getProjection().getNetwork().getMonitorMap().values());
Collections.sort(monitors, new Comparator<Monitor>()
{
public int compare(Monitor arg0, Monitor arg1)
{
return arg0.getName().compareTo(arg1.getName());
}
});
for (Monitor application : monitors)
{
buildSimulationApplicationNode(root, application);
}
setModel(model);
}
private void buildSimulationApplicationNode(DefaultMutableTreeNode root, Monitor application)
{
DefaultMutableTreeNode node = new DefaultMutableTreeNode(application);
root.add(node);
for (MonitorView view : projectionFrame.getMonitorViews().values())
{
if (view.getMonitor() == application)
{
buildApplicationViewNode(node, view);
}
}
}
private void buildApplicationViewNode(DefaultMutableTreeNode root, MonitorView view)
{
DefaultMutableTreeNode node = new DefaultMutableTreeNode(view);
root.add(node);
}
}