package edu.brown.gui.designer; import java.awt.BorderLayout; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.util.HashMap; import java.util.Map; import java.util.Set; import javax.swing.JComboBox; import javax.swing.JLabel; import javax.swing.JPanel; import org.voltdb.catalog.CatalogType; import edu.brown.designer.DesignerEdge; import edu.brown.designer.DesignerVertex; import edu.brown.graphs.IGraph; import edu.brown.gui.AbstractInfoPanel; import edu.brown.gui.AbstractViewer; import edu.brown.gui.DesignerVisualization; import edu.brown.gui.common.GraphVisualizationPanel; import edu.brown.utils.StringUtil; public class VertexInfoPanel extends AbstractInfoPanel<DesignerVertex> { private static final long serialVersionUID = -7696030449965056519L; protected final DesignerVisualization parent; JLabel relationLabel; JComboBox edgesCombo; protected JPanel attributesPanel; protected Map<String, JLabel> attributeLabels = new HashMap<String, JLabel>(); public VertexInfoPanel(DesignerVisualization parent) { super(); this.parent = parent; } protected void init() { this.setLayout(new BorderLayout()); JPanel panel = new JPanel(); this.add(panel, BorderLayout.NORTH); } public void update(DesignerVertex vertex) { this.setEnabled(true); this.setLayout(new BorderLayout()); JPanel panel = new JPanel(); panel.setLayout(new GridBagLayout()); this.add(panel, BorderLayout.NORTH); GridBagConstraints c = AbstractViewer.getConstraints(); JLabel label = null; c.gridx = 0; label = new JLabel("Relation:"); label.setFont(AbstractViewer.key_font); panel.add(label, c); c.gridx = 1; this.relationLabel = new JLabel(""); this.relationLabel.setFont(AbstractViewer.value_font); panel.add(this.relationLabel, c); c.gridx = 0; c.gridy++; label = new JLabel("Edges:"); label.setFont(AbstractViewer.key_font); panel.add(label, c); this.edgesCombo = new JComboBox(); this.edgesCombo.setFont(AbstractViewer.value_font); this.edgesCombo.addItemListener(new ItemListener() { @Override public void itemStateChanged(ItemEvent e) { if (e.getStateChange() == ItemEvent.SELECTED) { DesignerEdge edge = (DesignerEdge)VertexInfoPanel.this.edgesCombo.getSelectedItem(); VertexInfoPanel.this.parent.getCurrentVisualizer().selectEdge(edge); } } }); c.gridx = 1; panel.add(this.edgesCombo, c); GraphVisualizationPanel<DesignerVertex, DesignerEdge> visualizer = this.parent.getCurrentVisualizer(); IGraph<DesignerVertex, DesignerEdge> graph = (IGraph<DesignerVertex, DesignerEdge>)visualizer.getGraph(); this.relationLabel.setText(vertex.getCatalogItem().getName()); /* Set<String> attributes = v.getAttributes(graph); if (attributes != null) { for (String key : attributes) { System.out.println(key + ": " + v.getAttribute(graph, key)); } }*/ // // Edges // this.edgesCombo.removeAllItems(); boolean enabled = false; for (DesignerEdge edge : graph.getIncidentEdges(vertex)) { this.edgesCombo.addItem(edge); enabled = true; } // FOR this.edgesCombo.setEnabled(enabled); // // Attributes // c.gridwidth = 1; c.fill = GridBagConstraints.NONE; Set<String> attributes = vertex.getAttributes(graph); if (attributes != null) { for (String attr : attributes) { c.gridx = 0; c.gridy++; label = new JLabel(StringUtil.title(attr) + ":"); label.setFont(AbstractViewer.key_font); panel.add(label, c); c.gridx = 1; Object value = vertex.getAttribute(graph, attr); String text = null; if (value instanceof CatalogType) { text = ((CatalogType)value).getName(); } else if (value != null) { text = value.toString(); } else { text = "-"; } label = new JLabel(text); label.setFont(AbstractViewer.value_font); panel.add(label, c); } // FOR } this.removeAll(); this.add(panel, BorderLayout.CENTER); this.revalidate(); } }