X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Furls%2FUrlLinkTableModel.java;h=d6d26b53fe7e1f9200d1d6ba534a27d98add227b;hb=c0b7a760fe1ced5fe25ee3c3fd272e03f7526fa2;hp=a18341bb0ba1dc607f069a827e6fdc218351353a;hpb=2db199e42a0ef5cca46c237544aa5c807cdece18;p=jalview.git diff --git a/src/jalview/urls/UrlLinkTableModel.java b/src/jalview/urls/UrlLinkTableModel.java index a18341b..d6d26b5 100644 --- a/src/jalview/urls/UrlLinkTableModel.java +++ b/src/jalview/urls/UrlLinkTableModel.java @@ -21,12 +21,18 @@ package jalview.urls; +import jalview.bin.Cache; +import jalview.urls.api.UrlProviderI; +import jalview.util.UrlLink; + import java.util.Iterator; import java.util.List; +import javax.swing.RowFilter.Entry; import javax.swing.event.TableModelEvent; import javax.swing.event.TableModelListener; import javax.swing.table.AbstractTableModel; +import javax.swing.table.TableModel; /** * TableModel for UrlLinks table @@ -46,8 +52,8 @@ public class UrlLinkTableModel extends AbstractTableModel // list of columns to display in table in correct order private List displayColumns; - // row in table which is currently the default - private int defaultRow; + // row in table which is currently the primary + private int primaryRow; /** * UrlLinkTableModel constructor @@ -68,18 +74,18 @@ public class UrlLinkTableModel extends AbstractTableModel data = baseData.getLinksForTable(); displayColumns = UrlLinkDisplay.getDisplayColumnNames(); - // find the default row - defaultRow = 0; + // find the primary row + primaryRow = 0; Iterator it = data.iterator(); while (it.hasNext()) { - if (it.next().getIsDefault()) + if (it.next().getIsPrimary()) { break; } else { - defaultRow++; + primaryRow++; } } @@ -89,8 +95,14 @@ public class UrlLinkTableModel extends AbstractTableModel @Override public void tableChanged(TableModelEvent e) { - // update the UrlProvider from data list - dataProvider.setUrlData(data); + try + { + // update the UrlProvider from data list + dataProvider.setUrlData(data); + } catch (IllegalArgumentException ex) + { + Cache.log.error(ex.getMessage()); + } } }); @@ -127,21 +139,48 @@ public class UrlLinkTableModel extends AbstractTableModel return data.get(rowIndex).isEditable(columnIndex); } + /** + * Determine if a row is editable indirectly (rather than directly in table as + * in isCellEditable) + * + * @param rowIndex + * @return true if row can be edited indirectly + */ + public boolean isRowEditable(int rowIndex) + { + // to edit, row must be a user entered row + return (dataProvider.isUserEntry(data.get(rowIndex).getId())); + } + + /** + * Determine if a row is deletable + * + * @param rowIndex + * the row to be tested + * @return true if row can be deleted + */ + public boolean isRowDeletable(int rowIndex) + { + // to delete, row must be a user entered row, and not the default row + return (dataProvider.isUserEntry(data.get(rowIndex).getId()) && !data + .get(rowIndex).getIsPrimary()); + } + @Override public void setValueAt(Object aValue, int rowIndex, int columnIndex) { - if (columnIndex == UrlLinkDisplay.DEFAULT) + if (columnIndex == UrlLinkDisplay.PRIMARY) { // Default url column: exactly one row must always be true - if (rowIndex != defaultRow) + if (rowIndex != primaryRow) { // selected row is not currently the default // set the current default to false - data.get(defaultRow).setValue(columnIndex, false); - fireTableRowsUpdated(defaultRow, defaultRow); + data.get(primaryRow).setValue(columnIndex, false); + fireTableRowsUpdated(primaryRow, primaryRow); // set the default to be the selected row - defaultRow = rowIndex; + primaryRow = rowIndex; data.get(rowIndex).setValue(columnIndex, aValue); fireTableRowsUpdated(rowIndex, rowIndex); @@ -172,9 +211,9 @@ public class UrlLinkTableModel extends AbstractTableModel data.remove(rowIndex); // update default row - if (defaultRow > rowIndex) + if (primaryRow > rowIndex) { - defaultRow--; + primaryRow--; } // fire update which will update data source @@ -184,7 +223,8 @@ public class UrlLinkTableModel extends AbstractTableModel 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, name); + UrlLinkDisplay u = new UrlLinkDisplay(name, link, true, false); int index = data.size(); data.add(u); @@ -193,4 +233,45 @@ public class UrlLinkTableModel extends AbstractTableModel return index; } + public int getPrimaryColumn() + { + return UrlLinkDisplay.PRIMARY; + } + + public int getNameColumn() + { + return UrlLinkDisplay.NAME; + } + + public int getDatabaseColumn() + { + return UrlLinkDisplay.DATABASE; + } + + public int getIdColumn() + { + return UrlLinkDisplay.ID; + } + + public int getUrlColumn() + { + return UrlLinkDisplay.URL; + } + + public int getSelectedColumn() + { + return UrlLinkDisplay.SELECTED; + } + + public boolean isUserEntry( + Entry entry) + { + return dataProvider + .isUserEntry(entry.getStringValue(UrlLinkDisplay.ID)); + } + + public boolean isUniqueName(String name) + { + return !dataProvider.contains(name); + } }