+/*
+ * Jalview - A Sequence Alignment Editor and Viewer (Version 2.9.0b2)
+ * Copyright (C) 2015 The Jalview Authors
+ *
+ * This file is part of Jalview.
+ *
+ * Jalview is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * Jalview is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ * PURPOSE. See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Jalview. If not, see <http://www.gnu.org/licenses/>.
+ * The Jalview Authors are detailed in the 'AUTHORS' file.
+ */
package jalview.jbgui;
import jalview.ws.dbsources.PDBRestClient.PDBDocField;
-import java.awt.Rectangle;
import java.util.Collection;
import java.util.HashMap;
-import java.util.HashSet;
+import java.util.LinkedHashSet;
import javax.swing.JScrollPane;
import javax.swing.JTable;
@SuppressWarnings("serial")
public class PDBDocFieldPreferences extends JScrollPane
{
-
protected JTable tbl_pdbDocFieldConfig = new JTable();
protected JScrollPane scrl_pdbDocFieldConfig = new JScrollPane(
private HashMap<String, PDBDocField> map = new HashMap<String, PDBDocField>();
- private static Collection<PDBDocField> searchSummaryFields = new HashSet<PDBDocField>();
+ private static Collection<PDBDocField> searchSummaryFields = new LinkedHashSet<PDBDocField>();
+
+ private static Collection<PDBDocField> structureSummaryFields = new LinkedHashSet<PDBDocField>();
+
+ public enum PreferenceSource
+ {
+ SEARCH_SUMMARY, STRUCTURE_CHOOSER, PREFERENCES;
+ }
- private static Collection<PDBDocField> structureSummaryFields = new HashSet<PDBDocField>();
+ private PreferenceSource currentSource;
static
{
searchSummaryFields.add(PDBDocField.PDB_ID);
searchSummaryFields.add(PDBDocField.TITLE);
+
structureSummaryFields.add(PDBDocField.PDB_ID);
structureSummaryFields.add(PDBDocField.TITLE);
}
- public PDBDocFieldPreferences(Rectangle position)
+ public PDBDocFieldPreferences(PreferenceSource source)
{
- this.setBounds(position);
+ tbl_pdbDocFieldConfig.setAutoCreateRowSorter(true);
this.getViewport().add(tbl_pdbDocFieldConfig);
+ this.currentSource = source;
+
+ String[] columnNames = null;
+ switch (source)
+ {
+ case SEARCH_SUMMARY:
+ columnNames = new String[] { "PDB Field", "Show in search summary" };
+ break;
+ case STRUCTURE_CHOOSER:
+ columnNames = new String[] { "PDB Field", "Show in structure summary" };
+ break;
+ case PREFERENCES:
+ columnNames = new String[] { "PDB Field", "Show in search summary",
+ "Show in structure summary" };
+ break;
+ default:
+ break;
+ }
Object[][] data = new Object[PDBDocField.values().length - 1][3];
int x = 0;
continue;
}
- data[x++] = new Object[]
- { field.getName(), searchSummaryFields.contains(field),
- structureSummaryFields.contains(field) };
+ switch (source)
+ {
+ case SEARCH_SUMMARY:
+ data[x++] = new Object[] { field.getName(),
+ searchSummaryFields.contains(field) };
+ break;
+ case STRUCTURE_CHOOSER:
+ data[x++] = new Object[] { field.getName(),
+ structureSummaryFields.contains(field) };
+ break;
+ case PREFERENCES:
+ data[x++] = new Object[] { field.getName(),
+ searchSummaryFields.contains(field),
+ structureSummaryFields.contains(field) };
+ break;
+ default:
+ break;
+ }
map.put(field.getName(), field);
}
- PDBFieldTableModel model = new PDBFieldTableModel(data);
+ PDBFieldTableModel model = new PDBFieldTableModel(columnNames, data);
tbl_pdbDocFieldConfig.setModel(model);
}
class PDBFieldTableModel extends AbstractTableModel
{
- public PDBFieldTableModel(Object[][] data)
+ public PDBFieldTableModel(String[] columnNames, Object[][] data)
{
this.data = data;
+ this.columnNames = columnNames;
}
- private String[] columnNames = new String[]
- { "PDB Feild", "Show in search summary",
- "Show in structure chooser summary" };
-
private Object[][] data;
+ private String[] columnNames;
+
public int getColumnCount()
{
return columnNames.length;
{
// Note that the data/cell address is constant,
// no matter where the cell appears onscreen.
- return col == 1 || col == 2;
+ // !isPDBID(row, col) ensures the PDB_Id cell is never editable as it
+ // serves as a unique id for each row.
+ return (col == 1 || col == 2) && !isPDBID(row, col);
+
+ }
+ /**
+ * Determines whether the data in a given cell is a PDB ID.
+ *
+ * @param row
+ * @param col
+ * @return
+ */
+
+ public boolean isPDBID(int row, int col)
+ {
+ boolean matched = false;
+ String name = getValueAt(row, 0).toString();
+ PDBDocField pdbField = map.get(name);
+ if (pdbField == PDBDocField.PDB_ID)
+ {
+ matched = true;
+ }
+ return matched;
}
/*
PDBDocField pdbField = map.get(name);
- if (col == 1)
+ if (currentSource == PreferenceSource.SEARCH_SUMMARY)
{
- if (searchSummaryFields.contains(pdbField) && !selected)
- {
- searchSummaryFields.remove(pdbField);
- }
-
- if (!searchSummaryFields.contains(pdbField) && selected)
- {
- searchSummaryFields.add(pdbField);
- }
+ updatePrefs(searchSummaryFields, pdbField, selected);
+ }
+ else if (currentSource == PreferenceSource.STRUCTURE_CHOOSER)
+ {
+ updatePrefs(structureSummaryFields, pdbField, selected);
}
- else if (col == 2)
+ else if (currentSource == PreferenceSource.PREFERENCES)
{
- if (structureSummaryFields.contains(pdbField) && !selected)
+ if (col == 1)
{
- structureSummaryFields.remove(pdbField);
+ updatePrefs(searchSummaryFields, pdbField, selected);
}
-
- if (!structureSummaryFields.contains(pdbField) && selected)
+ else if (col == 2)
{
- structureSummaryFields.add(pdbField);
+ updatePrefs(structureSummaryFields, pdbField, selected);
}
}
+ }
+ private void updatePrefs(Collection<PDBDocField> prefConfig,
+ PDBDocField pdbField, boolean selected)
+ {
+ if (prefConfig.contains(pdbField) && !selected)
+ {
+ prefConfig.remove(pdbField);
+ }
+
+ if (!prefConfig.contains(pdbField) && selected)
+ {
+ prefConfig.add(pdbField);
+ }
}
+
}
}