/*
* Lokomo OneCMDB - An Open Source Software for Configuration
* Management of Datacenter Resources
*
* Copyright (C) 2006 Lokomo Systems AB
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or (at
* your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301 USA.
*
* Lokomo Systems AB can be contacted via e-mail: info@lokomo.com or via
* paper mail: Lokomo Systems AB, Sv�rdv�gen 27, SE-182 33
* Danderyd, Sweden.
*
*/
package org.onecmdb.rest.graph.panels;
import java.awt.BorderLayout;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import org.onecmdb.core.utils.bean.CiBean;
import org.onecmdb.rest.graph.events.CEvents;
import org.onecmdb.rest.graph.events.Event;
import org.onecmdb.rest.graph.events.EventDispatcher;
import org.onecmdb.rest.graph.events.IEventListener;
import org.onecmdb.rest.graph.io.OneCMDBConnection;
import org.onecmdb.rest.graph.model.prefuse.TemplateModelControl;
import org.onecmdb.rest.graph.model.prefuse.TemplateRelationGraphControl;
import org.onecmdb.rest.graph.utils.swing.CheckBoxTreeRenderer;
import org.onecmdb.rest.graph.utils.swing.NodTableEditor;
import prefuse.data.Edge;
import prefuse.data.Graph;
import prefuse.data.Node;
import prefuse.data.Tree;
import prefuse.util.ui.JPrefuseTree;
public class ReferenceTree extends JPanel {
private TemplateModelControl templateModel;
JPanel panel = new JPanel();
public ReferenceTree(TemplateModelControl tModel) {
System.out.println("ReferenceTree[" + hashCode() + "].constructor(" + tModel + ")");
this.templateModel = tModel;
setLayout(new BorderLayout());
}
public void update(String template, String alias) {
System.out.println("ReferenceTree[" + hashCode() + "].update() " + templateModel);
TemplateRelationGraphControl refCtrl = new TemplateRelationGraphControl(templateModel);
//Node n = refCtrl.reloadGraph(alias);
Tree tree = refCtrl.getReferenceTree(template);
//Tree tree = g.getSpanningTree(n);
//n.set("checked", true);
if (alias != null) {
CiBean bean = OneCMDBConnection.instance().getBeanFromAlias(alias);
if (bean != null) {
tree.getRoot().set("name", bean.getDisplayName());
}
tree.getRoot().set("alias", alias);
}
JPrefuseTree jtree = new JPrefuseTree(tree, "name");
CheckBoxTreeRenderer render = new CheckBoxTreeRenderer();
jtree.setCellRenderer(render);
jtree.setEditable(true);
NodTableEditor editor = new NodTableEditor();
editor.setListener(new IEventListener() {
public void onEvent(Event e) {
if (e.getData() instanceof Node) {
Node n = (Node)e.getData();
if (n.getBoolean("checked")) {
EventDispatcher.fireEvent(this, new Event(CEvents.RELATION_NODE_SELECTED, n));
} else {
EventDispatcher.fireEvent(this, new Event(CEvents.RELATION_NODE_UNSELECTED, n));
}
/*
n.getP
Edge parentEdge = tree.getParentEdge(n);
if (parentEdge != null) {
System.out.println(parentEdge.getSourceNode().getString("alias")
+ "-->[" +
parentEdge.getString("type")
+ "]-->" +
parentEdge.getTargetNode().getString("alias"));
ModifyRelationEvent modEvent = new ModifyRelationEvent();
modEvent.setSource(parentEdge.getSourceNode());
modEvent.setTarget(parentEdge.getTargetNode());
modEvent.setEdge(parentEdge);
modEvent.setChecked(n.getBoolean("checked"));
modEvent.setPrimary(getRoot(tree, n));
modEvent.setClicked(n);
EventDispatcher.fireEvent(this, modEvent);
} else {
Edge edge = refGraph.getEdge(n,n);
//if (edge != null) {
ModifyRelationEvent modEvent = new ModifyRelationEvent();
modEvent.setClicked(n);
modEvent.setSource(n);
modEvent.setTarget(n);
modEvent.setEdge(edge);
modEvent.setChecked(n.getBoolean("checked"));
modEvent.setPrimary(n);
EventDispatcher.fireEvent(this, modEvent);
//}
}
*/
}
}
});
jtree.setCellEditor(editor);
//tp.add(new JScrollPane(jtree), "Reference(s)");
/*
GraphView view = new GraphView(ref2Graph, "name", null);
tp.add(new JScrollPane(view), "Graph");
*/
/*
if (refNode != null) {
Tree t = refGraph.getSpanningTree(refNode);
tp.add(new JScrollPane(new TreeView(t, "name")), "Tree View");
}
*/
removeAll();
add(new JScrollPane(jtree), BorderLayout.CENTER);
revalidate();
}
}