Merge branch 'develop' of https://source.jalview.org/git/jalview.git into develop
[jalview.git] / src / jalview / fts / core / FTSDataColumnPreferences.java
  * along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
  * The Jalview Authors are detailed in the 'AUTHORS' file.
  */
-package jalview.jbgui;
+package jalview.fts.core;
 
-import jalview.ws.dbsources.PDBRestClient.PDBDocField;
-import jalview.ws.dbsources.PDBRestClient.PDBDocField.Group;
+import jalview.fts.api.FTSDataColumnI;
+import jalview.fts.api.FTSDataColumnI.FTSDataColumnGroupI;
+import jalview.fts.api.FTSRestClientI;
 
 import java.util.ArrayList;
 import java.util.Collection;
@@ -40,18 +41,18 @@ import javax.swing.table.TableRowSorter;
 
 
 @SuppressWarnings("serial")
-public class PDBDocFieldPreferences extends JScrollPane
+public class FTSDataColumnPreferences extends JScrollPane
 {
-  protected JTable tbl_pdbDocFieldConfig = new JTable();
+  protected JTable tbl_FTSDataColumnPrefs = new JTable();
 
   protected JScrollPane scrl_pdbDocFieldConfig = new JScrollPane(
-          tbl_pdbDocFieldConfig);
+          tbl_FTSDataColumnPrefs);
 
-  private HashMap<String, PDBDocField> map = new HashMap<String, PDBDocField>();
+  private HashMap<String, FTSDataColumnI> map = new HashMap<String, FTSDataColumnI>();
 
-  private static Collection<PDBDocField> searchSummaryFields = new LinkedHashSet<PDBDocField>();
+  private Collection<FTSDataColumnI> structSummaryColumns = new LinkedHashSet<FTSDataColumnI>();
 
-  private static Collection<PDBDocField> structureSummaryFields = new LinkedHashSet<PDBDocField>();
+  private Collection<FTSDataColumnI> allFTSDataColumns = new LinkedHashSet<FTSDataColumnI>();
 
   public enum PreferenceSource
   {
@@ -60,24 +61,21 @@ public class PDBDocFieldPreferences extends JScrollPane
 
   private PreferenceSource currentSource;
 
-  static
-  {
-    searchSummaryFields.add(PDBDocField.PDB_ID);
-    searchSummaryFields.add(PDBDocField.TITLE);
-    searchSummaryFields.add(PDBDocField.RESOLUTION);
-
-    structureSummaryFields.add(PDBDocField.PDB_ID);
-    structureSummaryFields.add(PDBDocField.TITLE);
-    structureSummaryFields.add(PDBDocField.RESOLUTION);
-  }
+  private FTSRestClientI ftsRestClient;
 
-  public PDBDocFieldPreferences(PreferenceSource source)
+  public FTSDataColumnPreferences(PreferenceSource source,
+          FTSRestClientI ftsRestClient)
   {
-    tbl_pdbDocFieldConfig.setAutoCreateRowSorter(true);
+    this.ftsRestClient = ftsRestClient;
+    Collection<FTSDataColumnI> defaultCols = ftsRestClient
+            .getAllDefaulDisplayedDataColumns();
 
+    structSummaryColumns.addAll(defaultCols);
 
+    allFTSDataColumns.addAll(ftsRestClient.getAllFTSDataColumns());
 
-    this.getViewport().add(tbl_pdbDocFieldConfig);
+    tbl_FTSDataColumnPrefs.setAutoCreateRowSorter(true);
+    this.getViewport().add(tbl_FTSDataColumnPrefs);
     this.currentSource = source;
 
     String[] columnNames = null;
@@ -97,9 +95,10 @@ public class PDBDocFieldPreferences extends JScrollPane
       break;
     }
 
-    Object[][] data = new Object[PDBDocField.values().length - 1][3];
+    Object[][] data = new Object[allFTSDataColumns.size() - 1][3];
+
     int x = 0;
-    for (PDBDocField field : PDBDocField.values())
+    for (FTSDataColumnI field : allFTSDataColumns)
     {
       if (field.getName().equalsIgnoreCase("all"))
       {
@@ -109,17 +108,20 @@ public class PDBDocFieldPreferences extends JScrollPane
       switch (source)
       {
       case SEARCH_SUMMARY:
-        data[x++] = new Object[] { searchSummaryFields.contains(field),
+        data[x++] = new Object[] {
+            ftsRestClient.getAllDefaulDisplayedDataColumns()
+                    .contains(field),
             field.getName(), field.getGroup() };
         break;
       case STRUCTURE_CHOOSER:
-        data[x++] = new Object[] { structureSummaryFields.contains(field),
+        data[x++] = new Object[] { structSummaryColumns.contains(field),
             field.getName(), field.getGroup() };
         break;
       case PREFERENCES:
         data[x++] = new Object[] { field.getName(),
-            searchSummaryFields.contains(field),
-            structureSummaryFields.contains(field) };
+            ftsRestClient.getAllDefaulDisplayedDataColumns()
+                    .contains(field),
+            structSummaryColumns.contains(field) };
         break;
       default:
         break;
@@ -127,28 +129,28 @@ public class PDBDocFieldPreferences extends JScrollPane
       map.put(field.getName(), field);
     }
 
-    PDBFieldTableModel model = new PDBFieldTableModel(columnNames, data);
-    tbl_pdbDocFieldConfig.setModel(model);
+    FTSDataColumnPrefsTableModel model = new FTSDataColumnPrefsTableModel(columnNames, data);
+    tbl_FTSDataColumnPrefs.setModel(model);
 
     switch (source)
     {
     case SEARCH_SUMMARY:
     case STRUCTURE_CHOOSER:
-      tbl_pdbDocFieldConfig.getColumnModel().getColumn(0)
+      tbl_FTSDataColumnPrefs.getColumnModel().getColumn(0)
               .setPreferredWidth(30);
-      tbl_pdbDocFieldConfig.getColumnModel().getColumn(0).setMinWidth(20);
-      tbl_pdbDocFieldConfig.getColumnModel().getColumn(0).setMaxWidth(40);
-      tbl_pdbDocFieldConfig.getColumnModel().getColumn(1)
+      tbl_FTSDataColumnPrefs.getColumnModel().getColumn(0).setMinWidth(20);
+      tbl_FTSDataColumnPrefs.getColumnModel().getColumn(0).setMaxWidth(40);
+      tbl_FTSDataColumnPrefs.getColumnModel().getColumn(1)
               .setPreferredWidth(150);
-      tbl_pdbDocFieldConfig.getColumnModel().getColumn(1).setMinWidth(150);
-      tbl_pdbDocFieldConfig.getColumnModel().getColumn(2)
+      tbl_FTSDataColumnPrefs.getColumnModel().getColumn(1).setMinWidth(150);
+      tbl_FTSDataColumnPrefs.getColumnModel().getColumn(2)
               .setPreferredWidth(150);
-      tbl_pdbDocFieldConfig.getColumnModel().getColumn(2)
+      tbl_FTSDataColumnPrefs.getColumnModel().getColumn(2)
 .setMinWidth(150);
 
       TableRowSorter<TableModel> sorter = new TableRowSorter<>(
-              tbl_pdbDocFieldConfig.getModel());
-      tbl_pdbDocFieldConfig.setRowSorter(sorter);
+              tbl_FTSDataColumnPrefs.getModel());
+      tbl_FTSDataColumnPrefs.setRowSorter(sorter);
       List<RowSorter.SortKey> sortKeys = new ArrayList<>();
       int columnIndexToSort = 2;
       sortKeys.add(new RowSorter.SortKey(columnIndexToSort,
@@ -156,17 +158,18 @@ public class PDBDocFieldPreferences extends JScrollPane
       sorter.setSortKeys(sortKeys);
       sorter.setComparator(
               columnIndexToSort,
-              new Comparator<jalview.ws.dbsources.PDBRestClient.PDBDocField.Group>()
+              new Comparator<FTSDataColumnGroupI>()
               {
                 @Override
-                public int compare(Group o1, Group o2)
+                public int compare(FTSDataColumnGroupI o1,
+                        FTSDataColumnGroupI o2)
                 {
                   return o1.getSortOrder() - o2.getSortOrder();
                 }
               });
       sorter.sort();
 
-      tbl_pdbDocFieldConfig
+      tbl_FTSDataColumnPrefs
               .setAutoResizeMode(JTable.AUTO_RESIZE_NEXT_COLUMN);
       break;
     case PREFERENCES:
@@ -176,32 +179,15 @@ public class PDBDocFieldPreferences extends JScrollPane
 
   }
 
-  public static Collection<PDBDocField> getSearchSummaryFields()
+  public Collection<FTSDataColumnI> getStructureSummaryFields()
   {
-    return searchSummaryFields;
+    return structSummaryColumns;
   }
 
-  public static void setSearchSummaryFields(
-          Collection<PDBDocField> searchSummaryFields)
+  class FTSDataColumnPrefsTableModel extends AbstractTableModel
   {
-    PDBDocFieldPreferences.searchSummaryFields = searchSummaryFields;
-  }
-
-  public static Collection<PDBDocField> getStructureSummaryFields()
-  {
-    return structureSummaryFields;
-  }
 
-  public static void setStructureSummaryFields(
-          Collection<PDBDocField> structureSummaryFields)
-  {
-    PDBDocFieldPreferences.structureSummaryFields = structureSummaryFields;
-  }
-
-  class PDBFieldTableModel extends AbstractTableModel
-  {
-
-    public PDBFieldTableModel(String[] columnNames, Object[][] data)
+    public FTSDataColumnPrefsTableModel(String[] columnNames, Object[][] data)
     {
       this.data = data;
       this.columnNames = columnNames;
@@ -261,9 +247,9 @@ public class PDBDocFieldPreferences extends JScrollPane
       {
       case SEARCH_SUMMARY:
       case STRUCTURE_CHOOSER:
-        return (col == 0) && !isPDBID(row, 1);
+        return (col == 0) && !isPrimaryKeyCell(row, 1);
       case PREFERENCES:
-        return (col == 1 || col == 2) && !isPDBID(row, 0);
+        return (col == 1 || col == 2) && !isPrimaryKeyCell(row, 0);
       default:
         return false;
       }
@@ -278,16 +264,11 @@ public class PDBDocFieldPreferences extends JScrollPane
      * @return
      */
 
-    public boolean isPDBID(int row, int col)
+    public boolean isPrimaryKeyCell(int row, int col)
     {
-      boolean matched = false;
       String name = getValueAt(row, col).toString();
-      PDBDocField pdbField = map.get(name);
-      if (pdbField == PDBDocField.PDB_ID)
-      {
-        matched = true;
-      }
-      return matched;
+      FTSDataColumnI pdbField = map.get(name);
+      return pdbField.isPrimaryKeyColumn();
     }
 
     /*
@@ -314,40 +295,45 @@ public class PDBDocFieldPreferences extends JScrollPane
       }
       boolean selected = ((Boolean) value).booleanValue();
 
-      PDBDocField pdbField = map.get(name);
+      FTSDataColumnI ftsDataColumn = map.get(name);
 
       if (currentSource == PreferenceSource.SEARCH_SUMMARY)
       {
-        updatePrefs(searchSummaryFields, pdbField, selected);
+        updatePrefs(ftsRestClient
+                .getAllDefaulDisplayedDataColumns(), ftsDataColumn,
+                selected);
       }
       else if (currentSource == PreferenceSource.STRUCTURE_CHOOSER)
       {
-        updatePrefs(structureSummaryFields, pdbField, selected);
+        updatePrefs(structSummaryColumns, ftsDataColumn, selected);
       }
       else if (currentSource == PreferenceSource.PREFERENCES)
       {
         if (col == 1)
         {
-          updatePrefs(searchSummaryFields, pdbField, selected);
+          updatePrefs(ftsRestClient
+                  .getAllDefaulDisplayedDataColumns(), ftsDataColumn,
+                  selected);
         }
         else if (col == 2)
         {
-          updatePrefs(structureSummaryFields, pdbField, selected);
+          updatePrefs(structSummaryColumns, ftsDataColumn, selected);
         }
       }
     }
 
-    private void updatePrefs(Collection<PDBDocField> prefConfig,
-            PDBDocField pdbField, boolean selected)
+    private void updatePrefs(
+            Collection<FTSDataColumnI> prefConfig,
+            FTSDataColumnI dataColumn, boolean selected)
     {
-      if (prefConfig.contains(pdbField) && !selected)
+      if (prefConfig.contains(dataColumn) && !selected)
       {
-        prefConfig.remove(pdbField);
+        prefConfig.remove(dataColumn);
       }
 
-      if (!prefConfig.contains(pdbField) && selected)
+      if (!prefConfig.contains(dataColumn) && selected)
       {
-        prefConfig.add(pdbField);
+        prefConfig.add(dataColumn);
       }
     }