JAL-3949 - refactor logging from jalview.bin.Cache to jalview.bin.Console
[jalview.git] / src / jalview / urls / UrlLinkTableModel.java
index a647d9e..02e565e 100644 (file)
 
 package jalview.urls;
 
-import jalview.bin.Cache;
+import jalview.bin.Console;
+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
@@ -49,8 +52,8 @@ public class UrlLinkTableModel extends AbstractTableModel
   // list of columns to display in table in correct order
   private List<String> 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
@@ -71,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<UrlLinkDisplay> it = data.iterator();
     while (it.hasNext())
     {
-      if (it.next().getIsDefault())
+      if (it.next().getIsPrimary())
       {
         break;
       }
       else
       {
-        defaultRow++;
+        primaryRow++;
       }
     }
 
@@ -98,7 +101,7 @@ public class UrlLinkTableModel extends AbstractTableModel
           dataProvider.setUrlData(data);
         } catch (IllegalArgumentException ex)
         {
-          Cache.log.error(ex.getMessage());
+          Console.error(ex.getMessage());
         }
       }
     });
@@ -136,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);
@@ -181,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
@@ -193,7 +223,7 @@ public class UrlLinkTableModel extends AbstractTableModel
   public int insertRow(String name, String url)
   {
     // add a row to the data
-    UrlLink link = new UrlLink(name, url);
+    UrlLink link = new UrlLink(name, url, name);
     UrlLinkDisplay u = new UrlLinkDisplay(name, link, true, false);
     int index = data.size();
     data.add(u);
@@ -203,9 +233,9 @@ public class UrlLinkTableModel extends AbstractTableModel
     return index;
   }
 
-  public int getDefaultColumn()
+  public int getPrimaryColumn()
   {
-    return UrlLinkDisplay.DEFAULT;
+    return UrlLinkDisplay.PRIMARY;
   }
 
   public int getNameColumn()
@@ -213,6 +243,11 @@ public class UrlLinkTableModel extends AbstractTableModel
     return UrlLinkDisplay.NAME;
   }
 
+  public int getDatabaseColumn()
+  {
+    return UrlLinkDisplay.DATABASE;
+  }
+
   public int getIdColumn()
   {
     return UrlLinkDisplay.ID;
@@ -227,4 +262,16 @@ public class UrlLinkTableModel extends AbstractTableModel
   {
     return UrlLinkDisplay.SELECTED;
   }
+
+  public boolean isUserEntry(
+          Entry<? extends TableModel, ? extends Object> entry)
+  {
+    return dataProvider
+            .isUserEntry(entry.getStringValue(UrlLinkDisplay.ID));
+  }
+
+  public boolean isUniqueName(String name)
+  {
+    return !dataProvider.contains(name);
+  }
 }