2 * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
3 * Copyright (C) $$Year-Rel$$ The Jalview Authors
5 * This file is part of Jalview.
7 * Jalview is free software: you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License
9 * as published by the Free Software Foundation, either version 3
10 * of the License, or (at your option) any later version.
12 * Jalview is distributed in the hope that it will be useful, but
13 * WITHOUT ANY WARRANTY; without even the implied warranty
14 * of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15 * PURPOSE. See the GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with Jalview. If not, see <http://www.gnu.org/licenses/>.
19 * The Jalview Authors are detailed in the 'AUTHORS' file.
24 import jalview.bin.Cache;
25 import jalview.urls.api.UrlProviderI;
26 import jalview.util.UrlLink;
28 import java.util.Iterator;
29 import java.util.List;
31 import javax.swing.event.TableModelEvent;
32 import javax.swing.event.TableModelListener;
33 import javax.swing.table.AbstractTableModel;
36 * TableModel for UrlLinks table
42 public class UrlLinkTableModel extends AbstractTableModel
44 // local storage of data
45 private List<UrlLinkDisplay> data;
47 // supplier of url data
48 private UrlProviderI dataProvider;
50 // list of columns to display in table in correct order
51 private List<String> displayColumns;
53 // row in table which is currently the default
54 private int defaultRow;
57 * UrlLinkTableModel constructor
60 * base data set to be presented in table
62 * keys of entries in baseData's nested hashmap. Should match order
64 * @param displayColNames
65 * names of columns to display in order.
67 * name of column corresponding to keys in baseData
69 public UrlLinkTableModel(UrlProviderI baseData)
71 dataProvider = baseData;
72 data = baseData.getLinksForTable();
73 displayColumns = UrlLinkDisplay.getDisplayColumnNames();
75 // find the default row
77 Iterator<UrlLinkDisplay> it = data.iterator();
80 if (it.next().getIsDefault())
90 // set up listener which updates data source when table changes
91 this.addTableModelListener(new TableModelListener()
94 public void tableChanged(TableModelEvent e)
98 // update the UrlProvider from data list
99 dataProvider.setUrlData(data);
100 } catch (IllegalArgumentException ex)
102 Cache.log.error(ex.getMessage());
110 public int getRowCount()
123 public int getColumnCount()
125 return displayColumns.size();
129 public Object getValueAt(int rowIndex, int columnIndex)
131 return data.get(rowIndex).getValue(columnIndex);
135 public boolean isCellEditable(int rowIndex, int columnIndex)
137 return data.get(rowIndex).isEditable(columnIndex);
141 public void setValueAt(Object aValue, int rowIndex, int columnIndex)
143 if (columnIndex == UrlLinkDisplay.DEFAULT)
145 // Default url column: exactly one row must always be true
146 if (rowIndex != defaultRow)
148 // selected row is not currently the default
149 // set the current default to false
150 data.get(defaultRow).setValue(columnIndex, false);
151 fireTableRowsUpdated(defaultRow, defaultRow);
153 // set the default to be the selected row
154 defaultRow = rowIndex;
155 data.get(rowIndex).setValue(columnIndex, aValue);
157 fireTableRowsUpdated(rowIndex, rowIndex);
162 data.get(rowIndex).setValue(columnIndex, aValue);
163 fireTableRowsUpdated(rowIndex, rowIndex);
168 public Class<?> getColumnClass(int columnIndex)
170 return getValueAt(0, columnIndex).getClass();
174 public String getColumnName(int columnIndex)
176 return displayColumns.get(columnIndex);
179 public void removeRow(int rowIndex)
181 // remove the row from data
182 data.remove(rowIndex);
184 // update default row
185 if (defaultRow > rowIndex)
190 // fire update which will update data source
191 fireTableRowsDeleted(rowIndex, rowIndex);
194 public int insertRow(String name, String url)
196 // add a row to the data
197 UrlLink link = new UrlLink(name, url);
198 UrlLinkDisplay u = new UrlLinkDisplay(name, link, true, false);
199 int index = data.size();
202 // fire update which will update data source
203 fireTableRowsInserted(index, index);
207 public int getDefaultColumn()
209 return UrlLinkDisplay.DEFAULT;
212 public int getNameColumn()
214 return UrlLinkDisplay.NAME;
217 public int getIdColumn()
219 return UrlLinkDisplay.ID;
222 public int getUrlColumn()
224 return UrlLinkDisplay.URL;
227 public int getSelectedColumn()
229 return UrlLinkDisplay.SELECTED;