JAL-1668 Tab for summary config, auto refresh after config and table column sorting
[jalview.git] / src / jalview / gui / PDBSearchPanel.java
index 1441e08..2d46714 100644 (file)
 package jalview.gui;
 
 import jalview.jbgui.GPDBSearchPanel;
+import jalview.jbgui.PDBDocFieldPreferences;
 import jalview.util.MessageManager;
 import jalview.ws.dbsources.PDBRestClient;
 import jalview.ws.dbsources.PDBRestClient.PDBDocField;
 import jalview.ws.uimodel.PDBRestRequest;
 import jalview.ws.uimodel.PDBRestResponse;
-import jalview.ws.uimodel.PDBRestResponse.PDBResponseSummary;
 
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.Collections;
 import java.util.Comparator;
 import java.util.List;
 
-import javax.swing.DefaultListModel;
-import javax.swing.SwingUtilities;
+import javax.swing.table.DefaultTableModel;
 
 @SuppressWarnings("serial")
 public class PDBSearchPanel extends GPDBSearchPanel
@@ -44,6 +44,8 @@ public class PDBSearchPanel extends GPDBSearchPanel
 
   private IProgressIndicator progressIdicator;
 
+  private Collection<PDBDocField> wantedFields;
+
   public PDBSearchPanel(SequenceFetcher seqFetcher)
   {
     this.seqFetcher = seqFetcher;
@@ -51,50 +53,40 @@ public class PDBSearchPanel extends GPDBSearchPanel
             .getProgressIndicator();
   }
 
-  public static void main(String[] args)
-  {
-    SwingUtilities.invokeLater(new Runnable()
-    {
-      public void run()
-      {
-        new PDBSearchPanel(null);
-      }
-    });
-  }
 
+  /**
+   * Action performed when an input is detected on txt_search field.
+   */
   @Override
   public void txt_search_ActionPerformed()
   {
     boolean allowEmptySequence = false;
-    lst_searchResult.setModel(new DefaultListModel<PDBResponseSummary>());
     mainFrame.setTitle(MessageManager
             .getString("label.pdb_sequence_getcher"));
+    tbl_summary.setModel(new DefaultTableModel());
     if (txt_search.getText().trim().length() > 0)
     {
       long startTime = System.currentTimeMillis();
-      PDBRestClient pdbRestCleint = new PDBRestClient();
+
       String searchTarget = ((PDBDocField) cmb_searchTarget
               .getSelectedItem()).getCode();
 
+      wantedFields = PDBDocFieldPreferences
+              .getSearchSummaryFields();
+
       PDBRestRequest request = new PDBRestRequest();
       request.setAllowEmptySeq(allowEmptySequence);
       request.setResponseSize(100);
       request.setFieldToSearchBy(searchTarget + ":");
       request.setSearchTerm(txt_search.getText());
-      List<PDBDocField> wantedFields = new ArrayList<PDBDocField>();
-      wantedFields.add(PDBDocField.MOLECULE_TYPE);
-      wantedFields.add(PDBDocField.PDB_ID);
-      // wantedFields.add(PDBDocField.GENUS);
-      wantedFields.add(PDBDocField.GENE_NAME);
-      wantedFields.add(PDBDocField.TITLE);
-      // wantedFields.add(PDBDocField.RESOLUTION);
-      // wantedFields.add(PDBDocField.EXPERIMENTAL_METHOD);
       request.setWantedFields(wantedFields);
+
+      PDBRestClient pdbRestCleint = new PDBRestClient();
       PDBRestResponse resultList = pdbRestCleint.executeRequest(request);
       if (resultList.getSearchSummary() != null)
       {
-        lst_searchResult.setModel(PDBRestResponse
-                .getListModel(resultList.getSearchSummary()));
+        tbl_summary.setModel(PDBRestResponse.getTableModel(request,
+                resultList.getSearchSummary()));
       }
 
       long endTime = System.currentTimeMillis();
@@ -126,21 +118,31 @@ public class PDBSearchPanel extends GPDBSearchPanel
     mainFrame.dispose();
   }
 
+  /**
+   * Add the discovered/selected sequences to a target alignment window
+   */
   public void loadSelectedPDBSequencesToAlignment()
   {
     mainFrame.dispose();
     StringBuilder selectedIds = new StringBuilder();
-    for (PDBResponseSummary dataSelected : lst_searchResult
-            .getSelectedValuesList())
+    int pdbIdCol = PDBRestClient.getPDBIdColumIndex(wantedFields, false);
+    int[] selectedRows = tbl_summary.getSelectedRows();
+    for (int summaryRow : selectedRows)
     {
-      selectedIds.append(";").append(dataSelected.getPdbId());
+      String pdbIdStr = tbl_summary.getValueAt(summaryRow, pdbIdCol)
+              .toString();
+      selectedIds.append(";").append(pdbIdStr);
     }
+
     String ids = selectedIds.deleteCharAt(0).toString();
     seqFetcher.textArea.setText(ids);
     Thread worker = new Thread(seqFetcher);
     worker.start();
   }
 
+  /**
+   * Populates search target combo-box options
+   */
   public void populateCmbSearchTargetOptions()
   {
     List<PDBDocField> searchableTargets = new ArrayList<PDBDocField>();