/* * 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.main; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Component; import java.awt.Dimension; import java.awt.event.ComponentAdapter; import java.awt.event.ComponentEvent; import javax.swing.BorderFactory; import javax.swing.Box; import javax.swing.BoxLayout; import javax.swing.JComponent; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JSplitPane; import javax.swing.JTabbedPane; import javax.swing.event.TreeSelectionEvent; import javax.swing.event.TreeSelectionListener; import javax.swing.table.AbstractTableModel; import javax.swing.table.TableModel; import javax.swing.text.html.HTML; import javax.swing.text.html.HTMLDocument; 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.CIAttributeModel; import org.onecmdb.rest.graph.model.CIModel; import org.onecmdb.rest.graph.model.prefuse.TemplateModelControl; import org.onecmdb.rest.graph.panels.TemplateReferencePanel; import org.onecmdb.rest.graph.prefuse.view.TreeView; import org.onecmdb.swing.treetable.JTreeTable; import prefuse.Visualization; import prefuse.action.Action; import prefuse.data.Node; import prefuse.data.Tree; import prefuse.data.Tuple; import prefuse.data.event.TupleSetListener; import prefuse.data.tuple.TupleSet; public class MainTemplateBrowser extends JPanel implements IEventListener { private CIAttributeModel templatePropertyControl; private JTreeTable pTree; private String root; private MainInstanceBrowser instanceGraph; private JTabbedPane graphTab; private String referenceRoot; private JTabbedPane tp; public MainTemplateBrowser(String root, String rootRef) { this.root = root; this.referenceRoot = rootRef; EventDispatcher.addEventListener(this); initUI(); } public void initUI() { templatePropertyControl = new CIAttributeModel(); templatePropertyControl.setAdvanced(true); pTree = new JTreeTable(templatePropertyControl); //pTree.setDefaultEditor(CiBean.class, templatePropertyControl.getTableCellEditor()); TemplateModelControl model = TemplateModelControl.get(root); System.out.println("MainTemplateBrowser.initUI() model=" + model.toString()); Tree tree = model.getTemplateGraph().getSpanningTree(); TreeView treeView = new TreeView(tree, "alias"); treeView.getVisualization().getGroup(Visualization.FOCUS_ITEMS).addTupleSetListener( new TupleSetListener() { public void tupleSetChanged(TupleSet t, Tuple[] add, Tuple[] rem) { if (add.length == 1) { // Fire selection change... Node n = (Node)add[0]; EventDispatcher.fireEvent(this, new Event(CEvents.ITEM_SELECTED, n.getString("alias"))); } } } ); /* TemplateModel refModel = TemplateModel.get(referenceRoot); Tree refTree = refModel.getTemplateGraph().getSpanningTree(); TreeView refTreeView = new TreeView(refTree, "name"); */ /* refTreeView.getVisualization().getGroup(Visualization.FOCUS_ITEMS).addTupleSetListener( new TupleSetListener() { public void tupleSetChanged(TupleSet t, Tuple[] add, Tuple[] rem) { if (add.length == 1) { // Fire selection change... Node n = (Node)add[0]; EventDispatcher.fireEvent(this, new Event(CEvents.ITEM_SELECTED, n.getString("alias"))); } } } ); */ graphTab = new JTabbedPane(); //graphTab.setTabPlacement(JTabbedPane.BOTTOM); TemplateReferencePanel refPanel = new TemplateReferencePanel(model); Dimension minimumSize = new Dimension(200, 200); treeView.setMinimumSize(minimumSize); refPanel.setMinimumSize(minimumSize); instanceGraph = new MainInstanceBrowser(this.root); graphTab.addTab("References to/from ", refPanel); graphTab.addTab("Instances of ", instanceGraph); //graphTab.addTab("All References", allRefPanel); JTabbedPane centerTab = new JTabbedPane(); centerTab.addTab("Template Hierarchy", treeView); //centerTab.addTab("CiReferences" + " Templates", refTreeView); tp = new JTabbedPane(); tp.add(new JScrollPane(pTree), "Attributes"); tp.add(getInfoPanel(), "OneCMDB Info"); //tp.add(new TemplateReferencePanel(), "Reference(s)"); tp.setTabPlacement(JTabbedPane.TOP); final JSplitPane leftSplit = new JSplitPane(); leftSplit.setTopComponent(centerTab); leftSplit.setBottomComponent(tp); leftSplit.setOrientation(JSplitPane.VERTICAL_SPLIT); leftSplit.setOneTouchExpandable(true); final JSplitPane centerSplit = new JSplitPane(); centerSplit.setOrientation(JSplitPane.HORIZONTAL_SPLIT); centerSplit.setTopComponent(leftSplit); centerSplit.setBottomComponent(graphTab); centerSplit.setOneTouchExpandable(true); centerSplit.setDividerLocation(200); //centerSplit.setDividerLocation(200); setLayout(new BorderLayout()); add(centerSplit, BorderLayout.CENTER); this.addComponentListener(new ComponentAdapter() { public void componentResized(ComponentEvent e) { leftSplit.setDividerLocation(0.8D); centerSplit.setDividerLocation(0.5D); invalidate(); } }); } private JComponent getInfoPanel() { JPanel panel = new JPanel(); panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS)); panel.setBackground(Color.WHITE); Box info = new Box(BoxLayout.Y_AXIS); //info.add(Box.createHorizontalStrut(5)); JLabel l = new JLabel(TemplateModelControl.get(root).getTemplateInfoAsHTML()); l.setAlignmentY(Component.TOP_ALIGNMENT); info.add(l); info.setAlignmentY(Component.TOP_ALIGNMENT); info.setBorder(BorderFactory.createTitledBorder("OneCMDB - Statistics")); //panel.add(Box.createVerticalStrut(5)); panel.add(info); panel.setAlignmentY(Component.TOP_ALIGNMENT); return(panel); } public static void main(String argv[]) { JFrame frame = new JFrame(); frame.setSize(500, 600); OneCMDBConnection con = new OneCMDBConnection(); con.setUrl("http://localhost:8080/onecmdb-desktop/onecmdb/query"); OneCMDBConnection.setInstance(con); MainTemplateBrowser mainWindow = new MainTemplateBrowser("Ci", "CIReference"); frame.getContentPane().add(mainWindow); frame.setVisible(true); } public void onEvent(Event e) { switch(e.getType()) { case(CEvents.ITEM_SELECTED): { String alias = (String) e.getData(); graphTab.setTitleAt(0, "References to/from " + alias); graphTab.setTitleAt(1, "Instances of " + alias); tp.setTitleAt(0, "Attributes for " + alias); instanceGraph.setInstanceTemplate(alias, null); CiBean bean = TemplateModelControl.get(root).getBean(alias); if (bean != null) { templatePropertyControl.setRoot(new CIModel(bean, bean)); TableModel tModel = pTree.getModel(); if (tModel instanceof AbstractTableModel) { ((AbstractTableModel)tModel).fireTableDataChanged(); } } } break; } } }