/** * */ package edu.brown.gui; import java.awt.event.ActionEvent; import java.awt.event.ItemEvent; import java.awt.event.KeyEvent; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.KeyStroke; import org.voltdb.catalog.Database; import edu.brown.designer.DependencyGraph; import edu.brown.designer.DesignerEdge; import edu.brown.designer.DesignerInfo; import edu.brown.designer.DesignerVertex; import edu.brown.designer.generators.DependencyGraphGenerator; import edu.brown.gui.common.GraphVisualizationPanel; import edu.brown.utils.ArgumentsParser; import edu.brown.utils.EventObservable; import edu.brown.utils.EventObserver; /** * @author pavlo * */ public class SchemaVisualization extends AbstractViewer { private static final long serialVersionUID = 7789644785781359023L; // ---------------------------------------------- // WINDOW OPTIONS // ---------------------------------------------- public static final Integer WINDOW_WIDTH = 800; public static final Integer WINDOW_HEIGHT = 650; protected GraphVisualizationPanel<DesignerVertex, DesignerEdge> graph_panel; public SchemaVisualization(Database catalog_db) { super(new ArgumentsParser(), "DB Schema Visualizer"); this.args.catalog_db = catalog_db; this.menuHandler = new SchemaVisualization.MenuHandler(); this.init(); } public SchemaVisualization(ArgumentsParser args) { super(args, "DB Schema Visualizer"); this.menuHandler = new SchemaVisualization.MenuHandler(); this.init(); } @Override protected void viewerInit() { this.setBounds(50, 50, WINDOW_WIDTH, WINDOW_HEIGHT); // ---------------------------------------------- // MENU // ---------------------------------------------- JMenu menu; JMenuItem menuItem; JMenuBar menuBar = new JMenuBar(); // // File Menu // menu = new JMenu("File"); menu.getPopupMenu().setLightWeightPopupEnabled(false); menu.setMnemonic(KeyEvent.VK_F); menu.getAccessibleContext().setAccessibleDescription("File Menu"); menuBar.add(menu); menuItem = new JMenuItem("Open Schema File"); menuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, ActionEvent.CTRL_MASK)); menuItem.getAccessibleContext().setAccessibleDescription("Open Schema File"); menuItem.addActionListener(this.menuHandler); menuItem.putClientProperty(MenuHandler.MENU_ID, MenuHandler.MENU_SCHEMA_OPEN); menu.add(menuItem); menu.addSeparator(); menuItem = new JMenuItem("Quit", KeyEvent.VK_Q); menuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Q, ActionEvent.CTRL_MASK)); menuItem.getAccessibleContext().setAccessibleDescription("Quit Program"); menuItem.addActionListener(this.menuHandler); menuItem.putClientProperty(MenuHandler.MENU_ID, MenuHandler.MENU_QUIT); menu.add(menuItem); DependencyGraph dgraph = new DependencyGraph(this.args.catalog_db); try { new DependencyGraphGenerator(new DesignerInfo(args.catalogContext, args.workload, args.stats)).generate(dgraph); this.graph_panel = GraphVisualizationPanel.factory(dgraph); } catch (Exception ex) { ex.printStackTrace(); System.exit(1); } this.graph_panel.EVENT_SELECT_VERTEX.addObserver(new EventObserver<DesignerVertex>() { public void update(EventObservable<DesignerVertex> o, DesignerVertex arg) { System.out.println("Vertex Selected: " + arg); } }); this.setContentPane(this.graph_panel); // this.addComponentListener(this.graph_panel.resizer); this.setBounds(50, 50, WINDOW_WIDTH, WINDOW_HEIGHT); this.setJMenuBar(menuBar); } public ArgumentsParser getArguments() { return (this.args); } /** * */ protected class MenuHandler extends AbstractMenuHandler { // // Schemas // public static final int MENU_SCHEMA_NEW = 1; public static final int MENU_SCHEMA_OPEN = 2; public static final int MENU_SCHEMA_SAVE = 3; public static final int MENU_QUIT = 4; public void actionPerformed(ActionEvent e) { JMenuItem source = (JMenuItem)(e.getSource()); // // Process the event // Integer id = (Integer)source.getClientProperty(MENU_ID); switch (id) { // -------------------------------------------------------- // OPEN SCHEMA FILE // -------------------------------------------------------- case (MENU_SCHEMA_OPEN): { break; } // -------------------------------------------------------- // QUIT // -------------------------------------------------------- case (MENU_QUIT): { SchemaVisualization.this.setVisible(false); System.exit(0); break; } // -------------------------------------------------------- // UNKNOWN // -------------------------------------------------------- default: System.err.println("Invalid Menu Action: " + source.getName()); } // SWITCH } public void itemStateChanged(ItemEvent e) { JMenuItem source = (JMenuItem)(e.getSource()); String s = "Item event detected.\n" + " Event source: " + source.getText() + " (an instance of " + source.getClass().getName() + ")\n" + " New state: " + ((e.getStateChange() == ItemEvent.SELECTED) ? "selected":"unselected") + "\n\n"; System.err.println(s); } } // END CLASS /** * @param args */ public static void main(final String[] vargs) throws Exception { final ArgumentsParser args = ArgumentsParser.load(vargs); //edu.uci.ics.jung.samples.TreeLayoutDemo.main(args); javax.swing.SwingUtilities.invokeLater(new Runnable() { public void run() { SchemaVisualization gui = new SchemaVisualization(args); gui.setVisible(true); } // RUN }); } }