package edu.brown.gui.designer; import java.awt.BorderLayout; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Set; import java.util.SortedSet; import java.util.TreeSet; import javax.swing.JComboBox; import javax.swing.JLabel; import javax.swing.JPanel; import org.voltdb.catalog.Procedure; import edu.brown.gui.AbstractInfoPanel; import edu.brown.gui.AbstractViewer; import edu.brown.gui.DesignerVisualization; import edu.brown.statistics.ProcedureStatistics; public class ProcedureInfoPanel extends AbstractInfoPanel<Procedure> { private static final long serialVersionUID = -295100895965501422L; protected final DesignerVisualization parent; protected Procedure selected; JLabel statementsLabel; JLabel workloadLabel; JLabel readonlyLabel; JComboBox procComboBox; public ProcedureInfoPanel(DesignerVisualization parent) { super(); this.parent = parent; } protected void init() { this.setLayout(new BorderLayout()); JPanel panel = new JPanel(); panel.setLayout(new GridBagLayout()); this.add(panel, BorderLayout.NORTH); GridBagConstraints c = new GridBagConstraints(); c.gridwidth = 1; c.gridheight = 1; c.weightx = 0.1; c.fill = GridBagConstraints.NONE; c.gridy = 0; c.insets = AbstractViewer.insets; c.gridx = 0; c.gridy++; c.gridwidth = 2; c.anchor = GridBagConstraints.LINE_START; JLabel label = null; this.procComboBox = new JComboBox(); this.procComboBox.setEnabled(false); this.procComboBox.setFont(AbstractViewer.value_font); this.procComboBox.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { String proc_name = (String)procComboBox.getSelectedItem(); ProcedureInfoPanel.this.update(ProcedureInfoPanel.this.parent.getArguments().catalog_db.getProcedures().get(proc_name)); } }); panel.add(this.procComboBox, c); c.gridy++; AbstractViewer.addSeperator(panel, c); c.gridwidth = 1; c.gridx = 0; c.gridy++; label = new JLabel("# of Statements:"); label.setFont(AbstractViewer.key_font); panel.add(label, c); c.gridx = 1; this.statementsLabel = new JLabel(""); this.statementsLabel.setFont(AbstractViewer.value_font); panel.add(this.statementsLabel, c); c.gridwidth = 1; c.gridx = 0; c.gridy++; label = new JLabel("Workload Invocations:"); label.setFont(AbstractViewer.key_font); panel.add(label, c); c.gridx = 1; this.workloadLabel = new JLabel(""); this.workloadLabel.setFont(AbstractViewer.value_font); panel.add(this.workloadLabel, c); c.gridwidth = 1; c.gridx = 0; c.gridy++; label = new JLabel("Read Only:"); label.setFont(AbstractViewer.key_font); panel.add(label, c); c.gridx = 1; this.readonlyLabel = new JLabel(""); this.readonlyLabel.setFont(AbstractViewer.value_font); panel.add(this.readonlyLabel, c); } public void loadProcedures(Set<Procedure> procedures) { SortedSet<String> sorted = new TreeSet<String>(); for (Procedure catalog_proc : procedures) { sorted.add(catalog_proc.getName()); } for (String proc_name : sorted) { this.procComboBox.addItem(proc_name); } this.procComboBox.setEnabled(true); } @Override public void update(Procedure catalog_proc) { this.element = catalog_proc; this.statementsLabel.setText(Integer.toString(catalog_proc.getStatements().size())); ProcedureStatistics stats = null; if (this.parent.getDesigner() != null && this.parent.getDesigner().getDesignerInfo() != null) { stats = this.parent.getDesigner().getDesignerInfo().getStats().getProcedureStatistics(catalog_proc); } if (stats != null) { this.workloadLabel.setText(stats.proc_counts.toString()); this.readonlyLabel.setText(stats.proc_readonly.toString()); } else { this.workloadLabel.setText("-"); this.readonlyLabel.setText("-"); } // // Tell the parent to show the graphs for this procedure // this.parent.displayGraphs(); } }