JAL-2316 Unit test updates and associated minor changes and fixes.
[jalview.git] / src / jalview / urls / UrlLinkTableModel.java
index b2c64f1..a647d9e 100644 (file)
 
 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;
 
 /**
@@ -36,12 +41,12 @@ 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
@@ -64,7 +69,7 @@ public class UrlLinkTableModel extends AbstractTableModel
   {
     dataProvider = baseData;
     data = baseData.getLinksForTable();
-    displayColumns = baseData.getDisplayColumnNames();
+    displayColumns = UrlLinkDisplay.getDisplayColumnNames();
 
     // find the default row
     defaultRow = 0;
@@ -80,6 +85,24 @@ public class UrlLinkTableModel extends AbstractTableModel
         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
@@ -116,14 +139,7 @@ public class UrlLinkTableModel extends AbstractTableModel
   @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)
@@ -137,11 +153,6 @@ public class UrlLinkTableModel extends AbstractTableModel
         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);
       }
     }
@@ -164,15 +175,6 @@ public class UrlLinkTableModel extends AbstractTableModel
     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
@@ -184,16 +186,45 @@ public class UrlLinkTableModel extends AbstractTableModel
       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;
+  }
 }