3 import jalview.fts.api.FTSData;
4 import jalview.fts.api.FTSDataColumnI;
5 import jalview.fts.core.DecimalFormatTableCellRenderer;
6 import jalview.fts.core.FTSRestRequest;
8 import java.awt.event.MouseEvent;
9 import java.util.Collection;
12 import javax.swing.JTable;
13 import javax.swing.event.ChangeEvent;
14 import javax.swing.table.DefaultTableModel;
15 import javax.swing.table.TableColumn;
17 @SuppressWarnings("serial")
18 public class JvSummaryTable extends JTable
20 private Map<String, Integer> tempUserPrefs;
22 public JvSummaryTable(Map<String, Integer> tempUserPrefs)
24 this.tempUserPrefs = tempUserPrefs;
27 private boolean inLayout;
30 public boolean getScrollableTracksViewportWidth()
32 return hasExcessWidth();
37 public void doLayout()
41 autoResizeMode = AUTO_RESIZE_SUBSEQUENT_COLUMNS;
46 autoResizeMode = AUTO_RESIZE_OFF;
49 protected boolean hasExcessWidth()
51 return getPreferredSize().width < getParent().getWidth();
55 public void columnMarginChanged(ChangeEvent e)
61 TableColumn resizingColumn = getTableHeader().getResizingColumn();
62 // Need to do this here, before the parent's
63 // layout manager calls getPreferredSize().
64 if (resizingColumn != null && autoResizeMode == AUTO_RESIZE_OFF
67 resizingColumn.setPreferredWidth(resizingColumn.getWidth());
68 String colHeader = resizingColumn.getHeaderValue().toString();
69 tempUserPrefs.put(colHeader, resizingColumn.getWidth());
75 public String getToolTipText(MouseEvent evt)
77 String toolTipText = null;
78 java.awt.Point pnt = evt.getPoint();
79 int rowIndex = rowAtPoint(pnt);
80 int colIndex = columnAtPoint(pnt);
84 if (getValueAt(rowIndex, colIndex) == null)
88 toolTipText = getValueAt(rowIndex, colIndex).toString();
91 // e.printStackTrace();
93 toolTipText = (toolTipText == null ? null
94 : (toolTipText.length() > 500 ? JvSwingUtils.wrapTooltip(true,
95 "\"" + toolTipText.subSequence(0, 500) + "...\"")
96 : JvSwingUtils.wrapTooltip(true, toolTipText)));
101 * Convenience method to obtain a Table model for a given summary List based
102 * on the request parameters
105 * the FTSRestRequest object which holds useful information for
106 * creating a table model
107 * @param summariesList
108 * the summary list which contains the data for populating the
110 * @return the table model which was dynamically generated
112 public static DefaultTableModel getTableModel(FTSRestRequest request,
113 Collection<FTSData> summariesList)
115 final FTSDataColumnI[] cols = request.getWantedFields().toArray(
116 new FTSDataColumnI[0]);
117 final int colOffset = request.getAssociatedSequence() == null ? 0 : 1;
118 DefaultTableModel tableModel = new DefaultTableModel()
121 public boolean isCellEditable(int row, int column)
127 public Class<?> getColumnClass(int columnIndex)
129 if (colOffset == 1 && columnIndex == 0)
133 return cols[columnIndex - colOffset].getDataType()
138 if (request.getAssociatedSequence() != null)
140 tableModel.addColumn("Ref Sequence"); // Create sequence column header if
141 // exists in the request
143 for (FTSDataColumnI field : request.getWantedFields())
145 tableModel.addColumn(field.getName()); // Create sequence column header if
146 // exists in the request
149 for (FTSData res : summariesList)
151 tableModel.addRow(res.getSummaryData()); // Populate table rows with
158 public static void configureTableColumn(JTable tbl_summary,
159 Collection<FTSDataColumnI> wantedFields,
160 Map<String, Integer> columnPrefs)
162 for (FTSDataColumnI wantedField : wantedFields)
166 tbl_summary.getColumn(wantedField.getName()).setMinWidth(
167 wantedField.getMinWidth());
168 tbl_summary.getColumn(wantedField.getName()).setMaxWidth(
169 wantedField.getMaxWidth());
170 int prefedWidth = columnPrefs.get(wantedField.getName()) == null ? wantedField
171 .getPreferredWidth() : columnPrefs.get(wantedField
173 tbl_summary.getColumn(wantedField.getName()).setPreferredWidth(
175 } catch (Exception e)
179 if (wantedField.getDataType().getDataTypeClass() == Double.class)
181 DecimalFormatTableCellRenderer dfr = new DecimalFormatTableCellRenderer(
182 wantedField.getDataType().isFormtted(), wantedField
183 .getDataType().getSignificantFigures());
184 tbl_summary.getColumn(wantedField.getName()).setCellRenderer(dfr);
186 else if (wantedField.getDataType().getDataTypeClass() == Integer.class)
188 DecimalFormatTableCellRenderer dfr = new DecimalFormatTableCellRenderer(
189 wantedField.getDataType().isFormtted(), wantedField
190 .getDataType().getSignificantFigures());
191 tbl_summary.getColumn(wantedField.getName()).setCellRenderer(dfr);