JAL-2071 architectural improvement for Plugable Free Text Search Services
[jalview.git] / src / jalview / fts / service / pdb / PDBFTSPanel.java
similarity index 59%
rename from src/jalview/gui/PDBSearchPanel.java
rename to src/jalview/fts/service/pdb/PDBFTSPanel.java
index 9b94c27..0b8917d 100644 (file)
  * The Jalview Authors are detailed in the 'AUTHORS' file.
  */
 
-package jalview.gui;
-
-import jalview.jbgui.GPDBSearchPanel;
-import jalview.jbgui.PDBDocFieldPreferences;
+package jalview.fts.service.pdb;
+
+import jalview.fts.api.FTSDataColumnI;
+import jalview.fts.api.FTSRestClientI;
+import jalview.fts.core.FTSRestRequest;
+import jalview.fts.core.FTSRestResponse;
+import jalview.fts.core.GFTSPanel;
+import jalview.gui.SequenceFetcher;
 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 java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Comparator;
 import java.util.HashSet;
-import java.util.List;
 
 import javax.swing.table.DefaultTableModel;
 
 @SuppressWarnings("serial")
-public class PDBSearchPanel extends GPDBSearchPanel
+public class PDBFTSPanel extends GFTSPanel
 {
-  private SequenceFetcher seqFetcher;
-
-  private IProgressIndicator progressIdicator;
 
-  private Collection<PDBDocField> wantedFields;
-
-  public PDBSearchPanel(SequenceFetcher seqFetcher)
+  public PDBFTSPanel(SequenceFetcher seqFetcher)
   {
     this.seqFetcher = seqFetcher;
     this.progressIdicator = (seqFetcher == null) ? null : seqFetcher
             .getProgressIndicator();
   }
 
+
   /**
    * Action performed when an input is detected on txt_search field.
    */
@@ -70,31 +61,32 @@ public class PDBSearchPanel extends GPDBSearchPanel
         lbl_warning.setVisible(false);
         btn_ok.setEnabled(false);
         boolean allowEmptySequence = false;
-        mainFrame.setTitle(MessageManager
-                .getString("label.pdb_sequence_getcher"));
+        mainFrame.setTitle(getFTSFrameTitle());
         tbl_summary.setModel(new DefaultTableModel());
+        tbl_summary.setVisible(false);
         if (txt_search.getText().trim().length() > 0)
         {
           lbl_loading.setVisible(true);
           long startTime = System.currentTimeMillis();
 
-          String searchTarget = ((PDBDocField) cmb_searchTarget
+          String searchTarget = ((FTSDataColumnI) cmb_searchTarget
                   .getSelectedItem()).getCode();
 
-          wantedFields = PDBDocFieldPreferences.getSearchSummaryFields();
-
+          // wantedFields = FTSDataColumnPreferences.getSearchSummaryFields();
+          wantedFields = PDBFTSRestClient.getInstance()
+                  .getAllDefaulDisplayedDataColumns();
           String searchTerm = decodeSearchTerm(txt_search.getText(),
                   searchTarget);
 
-          PDBRestRequest request = new PDBRestRequest();
+          FTSRestRequest request = new FTSRestRequest();
           request.setAllowEmptySeq(allowEmptySequence);
           request.setResponseSize(100);
           request.setFieldToSearchBy("(" + searchTarget + ":");
           request.setSearchTerm(searchTerm + ")");
           request.setWantedFields(wantedFields);
           // System.out.println(">>>>>>>>>>>>>> " + request.getQuery());
-          PDBRestClient pdbRestCleint = new PDBRestClient();
-          PDBRestResponse resultList;
+          FTSRestClientI pdbRestCleint = PDBFTSRestClient.getInstance();
+          FTSRestResponse resultList;
           try
           {
             resultList = pdbRestCleint.executeRequest(request);
@@ -108,18 +100,20 @@ public class PDBSearchPanel extends GPDBSearchPanel
 
           if (resultList.getSearchSummary() != null)
           {
-            tbl_summary.setModel(PDBRestResponse.getTableModel(request,
+            tbl_summary.setModel(FTSRestResponse.getTableModel(request,
                     resultList.getSearchSummary()));
+            FTSRestResponse.configureTableColumn(tbl_summary, wantedFields);
+            tbl_summary.setVisible(true);
           }
 
-          PDBRestResponse.configureTableColumn(tbl_summary, wantedFields);
 
           long endTime = System.currentTimeMillis();
           int resultSetCount = resultList.getNumberOfItemsFound();
           String result = (resultSetCount > 1) ? MessageManager
                   .getString("label.results") : MessageManager
                   .getString("label.result");
-          mainFrame.setTitle(frameTitle + " - " + resultSetCount + " "
+          mainFrame.setTitle(getFTSFrameTitle() + " - " + resultSetCount
+                  + " "
                   + result + " (" + (endTime - startTime) + " milli secs)");
           lbl_loading.setVisible(false);
         }
@@ -166,48 +160,27 @@ public class PDBSearchPanel extends GPDBSearchPanel
   @Override
   public void btn_ok_ActionPerformed()
   {
-    loadSelectedPDBSequencesToAlignment();
-  }
-
-  @Override
-  public void btn_back_ActionPerformed()
-  {
-    mainFrame.dispose();
-    new SequenceFetcher(progressIdicator);
-  }
-
-  @Override
-  public void btn_cancel_ActionPerformed()
-  {
-    mainFrame.dispose();
-  }
-
-  @Override
-  public void transferToSequenceFetcher(String ids)
-  {
-    // mainFrame.dispose();
-    seqFetcher.textArea.setText(ids);
-    Thread worker = new Thread(seqFetcher);
-    worker.start();
-  }
-
-  /**
-   * Add the discovered/selected sequences to a target alignment window
-   */
-  public void loadSelectedPDBSequencesToAlignment()
-  {
     // mainFrame.dispose();
     disableActionButtons();
     StringBuilder selectedIds = new StringBuilder();
     HashSet<String> selectedIdsSet = new HashSet<String>();
-    int pdbIdCol = PDBRestClient.getPDBIdColumIndex(wantedFields, false);
+    int pdbIdCol = 0;
+    try
+    {
+      pdbIdCol = getFTSRestClient().getPrimaryKeyColumIndex(wantedFields,
+              false);
+    } catch (Exception e)
+    {
+      // TODO Auto-generated catch block
+      e.printStackTrace();
+    }
     int[] selectedRows = tbl_summary.getSelectedRows();
     for (int summaryRow : selectedRows)
     {
-      String pdbIdStr = tbl_summary.getValueAt(summaryRow, pdbIdCol)
+      String idStr = tbl_summary.getValueAt(summaryRow, pdbIdCol)
               .toString();
       String searchTerm = txt_search.getText();
-      selectedIdsSet.add(getPDBIdwithSpecifiedChain(pdbIdStr, searchTerm));
+      selectedIdsSet.add(getPDBIdwithSpecifiedChain(idStr, searchTerm));
     }
 
     for (String selectedId : selectedIdsSet)
@@ -217,40 +190,12 @@ public class PDBSearchPanel extends GPDBSearchPanel
 
     String ids = selectedIds.toString();
     // System.out.println(">>>>>>>>>>>>>>>> selected Ids: " + ids);
-    seqFetcher.textArea.setText(ids);
+    seqFetcher.getTextArea().setText(ids);
     Thread worker = new Thread(seqFetcher);
     worker.start();
     delayAndEnableActionButtons();
-
-  }
-
-  private void disableActionButtons()
-  {
-    btn_ok.setEnabled(false);
-    btn_back.setEnabled(false);
-    btn_cancel.setEnabled(false);
   }
 
-  private void delayAndEnableActionButtons()
-  {
-    new Thread()
-    {
-      @Override
-      public void run()
-      {
-        try
-        {
-          Thread.sleep(1500);
-        } catch (InterruptedException e)
-        {
-          e.printStackTrace();
-        }
-        btn_ok.setEnabled(true);
-        btn_back.setEnabled(true);
-        btn_cancel.setEnabled(true);
-      }
-    }.start();
-  }
 
   public static String getPDBIdwithSpecifiedChain(String pdbId,
           String searchTerm)
@@ -278,46 +223,18 @@ public class PDBSearchPanel extends GPDBSearchPanel
     return pdbIdWithChainCode;
   }
 
-  /**
-   * Populates search target combo-box options
-   */
-  @Override
-  public void populateCmbSearchTargetOptions()
-  {
-    List<PDBDocField> searchableTargets = new ArrayList<PDBDocField>();
-    searchableTargets.add(PDBDocField.PDB_ID);
-    searchableTargets.add(PDBDocField.PFAM_ACCESSION);
-    searchableTargets.add(PDBDocField.MOLECULE_TYPE);
-    searchableTargets.add(PDBDocField.MOLECULE_NAME);
-    searchableTargets.add(PDBDocField.UNIPROT_ACCESSION);
-    searchableTargets.add(PDBDocField.GENE_NAME);
-    searchableTargets.add(PDBDocField.GENUS);
-    searchableTargets.add(PDBDocField.ALL);
 
-    Collections.sort(searchableTargets, new Comparator<PDBDocField>()
-    {
-      @Override
-      public int compare(PDBDocField o1, PDBDocField o2)
-      {
-        return o1.getName().compareTo(o2.getName());
-      }
-    });
 
-    for (PDBDocField searchTarget : searchableTargets)
-    {
-      cmb_searchTarget.addItem(searchTarget);
-    }
+  @Override
+  public FTSRestClientI getFTSRestClient()
+  {
+    return PDBFTSRestClient.getInstance();
   }
 
-  public void checkForErrors()
+  @Override
+  public String getFTSFrameTitle()
   {
-    lbl_warning.setVisible(false);
-    if (errorWarning.length() > 0)
-    {
-      lbl_loading.setVisible(false);
-      lbl_warning.setToolTipText(JvSwingUtils.wrapTooltip(true,
-              errorWarning.toString()));
-      lbl_warning.setVisible(true);
-    }
+    return MessageManager.getString("label.pdb_sequence_fetcher");
   }
+
 }