package jalview.urls;
+import jalview.bin.Cache;
+import jalview.util.UrlLink;
+
import java.util.Iterator;
import java.util.List;
+import javax.swing.event.TableModelEvent;
+import javax.swing.event.TableModelListener;
import javax.swing.table.AbstractTableModel;
/**
public class UrlLinkTableModel extends AbstractTableModel
{
// local storage of data
- // use LinkedHashMap to guarantee ordering remains the same, as
- // we need to maintain a row/col mapping into the HashMap
private List<UrlLinkDisplay> data;
+ // supplier of url data
private UrlProviderI dataProvider;
+ // list of columns to display in table in correct order
private List<String> displayColumns;
// row in table which is currently the default
{
dataProvider = baseData;
data = baseData.getLinksForTable();
- displayColumns = baseData.getDisplayColumnNames();
+ displayColumns = UrlLinkDisplay.getDisplayColumnNames();
// find the default row
defaultRow = 0;
defaultRow++;
}
}
+
+ // set up listener which updates data source when table changes
+ this.addTableModelListener(new TableModelListener()
+ {
+ @Override
+ public void tableChanged(TableModelEvent e)
+ {
+ try
+ {
+ // update the UrlProvider from data list
+ dataProvider.setUrlData(data);
+ } catch (IllegalArgumentException ex)
+ {
+ Cache.log.error(ex.getMessage());
+ }
+ }
+ });
+
}
@Override
@Override
public void setValueAt(Object aValue, int rowIndex, int columnIndex)
{
- if ((columnIndex == UrlLinkDisplay.SELECTED)
- && (rowIndex == defaultRow))
- {
- // Selected urls column: can't deselect default URL
- // refuse to edit: TODO show message box here
-
- }
- else if (columnIndex == UrlLinkDisplay.DEFAULT)
+ if (columnIndex == UrlLinkDisplay.DEFAULT)
{
// Default url column: exactly one row must always be true
if (rowIndex != defaultRow)
defaultRow = rowIndex;
data.get(rowIndex).setValue(columnIndex, aValue);
- // default row must also be selected
- if (!data.get(rowIndex).getIsSelected())
- {
- data.get(rowIndex).setValue(UrlLinkDisplay.SELECTED, true);
- }
fireTableRowsUpdated(rowIndex, rowIndex);
}
}
return displayColumns.get(columnIndex);
}
- @Override
- public String toString()
- {
- // update the UrlProvider from data list
- dataProvider.setUrlData(data);
-
- return dataProvider.writeUrlsAsString();
- }
-
public void removeRow(int rowIndex)
{
// remove the row from data
defaultRow--;
}
+ // fire update which will update data source
fireTableRowsDeleted(rowIndex, rowIndex);
}
public int insertRow(String name, String url)
{
// add a row to the data
- UrlLinkDisplay u = new UrlLinkDisplay(name, name, url, true, false);
+ UrlLink link = new UrlLink(name, url);
+ UrlLinkDisplay u = new UrlLinkDisplay(name, link, true, false);
int index = data.size();
data.add(u);
+
+ // fire update which will update data source
fireTableRowsInserted(index, index);
return index;
}
+
+ public int getDefaultColumn()
+ {
+ return UrlLinkDisplay.DEFAULT;
+ }
+
+ public int getNameColumn()
+ {
+ return UrlLinkDisplay.NAME;
+ }
+
+ public int getIdColumn()
+ {
+ return UrlLinkDisplay.ID;
+ }
+
+ public int getUrlColumn()
+ {
+ return UrlLinkDisplay.URL;
+ }
+
+ public int getSelectedColumn()
+ {
+ return UrlLinkDisplay.SELECTED;
+ }
}