package edu.brown.gui.designer;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.util.ArrayList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ScrollPaneConstants;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.AbstractTableModel;
import org.voltdb.catalog.Table;
import edu.brown.designer.Designer;
import edu.brown.designer.DesignerEdge;
import edu.brown.designer.DesignerVertex;
import edu.brown.designer.partitioners.plan.PartitionPlan;
import edu.brown.designer.partitioners.plan.TableEntry;
import edu.brown.graphs.IGraph;
import edu.brown.gui.DesignerVisualization;
import edu.brown.gui.common.GraphVisualizationPanel;
public class PartitionPlanPanel extends JPanel {
private static final long serialVersionUID = 1L;
private final DesignerVisualization parent;
private final Designer designer;
public PartitionPlanPanel(DesignerVisualization parent) {
super();
this.parent = parent;
this.designer = this.parent.getDesigner();
this.init();
}
private void init() {
this.setLayout(new BorderLayout());
final PartitionPlan plan = this.designer.getPartitionPlan();
final ArrayList<Table> tables = new ArrayList<Table>();
tables.addAll(plan.getTableEntries().keySet());
final JTable partitonTable = new JTable(new AbstractTableModel() {
private static final long serialVersionUID = 1L;
protected final String columns[] = { "Table", "Method", "Partition Attribute", "Parent", "Parent Attribute" };
public String getColumnName(int col) { return (this.columns[col]); }
public int getColumnCount() { return (this.columns.length); }
public int getRowCount() { return (tables.size()); }
public Object getValueAt(int row, int col) {
String ret = null;
Table catalog_tbl = tables.get(row);
TableEntry entry = plan.getTableEntries().get(catalog_tbl);
switch (col) {
case 0:
ret = catalog_tbl.getName();
break;
case 1:
ret = entry.getMethod().toString();
break;
case 2:
ret = (entry.getAttribute() != null ? entry.getAttribute().getName() : "-");
break;
case 3:
ret = (entry.getParent() != null ? entry.getParent().getName() : "-");
break;
case 4:
ret = (entry.getParentAttribute() != null ? entry.getParentAttribute().getName() : "-");
break;
} // SWITCH
return (ret);
}
public boolean isCellEditable(int row, int col) {
return (false);
}
public Class<?> getColumnClass(int c) {
return getValueAt(0, c).getClass();
}
});
partitonTable.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
partitonTable.setFillsViewportHeight(false);
partitonTable.setDragEnabled(false);
partitonTable.setColumnSelectionAllowed(false);
partitonTable.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
//
// Select the vertex in the graph when they select its corresponding row
//
partitonTable.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent e) {
Table catalog_tbl = tables.get(partitonTable.getSelectedRow());
GraphVisualizationPanel<DesignerVertex, DesignerEdge> visualizer = PartitionPlanPanel.this.parent.getCurrentVisualizer();
IGraph<DesignerVertex, DesignerEdge> graph = (IGraph<DesignerVertex, DesignerEdge>)visualizer.getGraph();
DesignerVertex vertex = graph.getVertex(catalog_tbl);
visualizer.selectVertex(vertex);
return;
}
});
//
// Set the column widths
//
partitonTable.getColumnModel().getColumn(0).setPreferredWidth(40);
partitonTable.getColumnModel().getColumn(1).setPreferredWidth(20);
partitonTable.getColumnModel().getColumn(3).setPreferredWidth(40);
JScrollPane scrollPane = new JScrollPane(partitonTable);
scrollPane.setPreferredSize(new Dimension(DesignerVisualization.WINDOW_WIDTH, 175));
//scrollPane.setMaximumSize(this.columnSetTable.getPreferredScrollableViewportSize());
scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
this.add(scrollPane, BorderLayout.SOUTH);
return;
}
}