JAL-4036 Add getDbName to the GFTSPanelI and add an index code message to the index...
[jalview.git] / src / jalview / fts / service / pdb / PDBFTSPanel.java
index 0b8917d..c9d7676 100644 (file)
 
 package jalview.fts.service.pdb;
 
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+
+import javax.help.HelpSetException;
+
 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.Help;
+import jalview.gui.Help.HelpId;
 import jalview.gui.SequenceFetcher;
 import jalview.util.MessageManager;
 
-import java.util.HashSet;
-
-import javax.swing.table.DefaultTableModel;
-
 @SuppressWarnings("serial")
 public class PDBFTSPanel extends GFTSPanel
 {
+  private static String defaultFTSFrameTitle = MessageManager
+          .getString("label.pdb_sequence_fetcher");
+
+  private static Map<String, Integer> tempUserPrefs = new HashMap<>();
 
-  public PDBFTSPanel(SequenceFetcher seqFetcher)
+  private static final String PDB_FTS_CACHE_KEY = "CACHE.PDB_FTS";
+
+  private static final String PDB_AUTOSEARCH = "FTS.PDB.AUTOSEARCH";
+
+  public PDBFTSPanel(SequenceFetcher fetcher)
   {
-    this.seqFetcher = seqFetcher;
-    this.progressIdicator = (seqFetcher == null) ? null : seqFetcher
-            .getProgressIndicator();
+    super(fetcher);
+    pageLimit = PDBFTSRestClient.getInstance().getDefaultResponsePageSize();
+    this.seqFetcher = fetcher;
+    this.progressIndicator = (fetcher == null) ? null
+            : fetcher.getProgressIndicator();
   }
 
-
-  /**
-   * Action performed when an input is detected on txt_search field.
-   */
   @Override
-  public void txt_search_ActionPerformed()
+  public void searchAction(boolean isFreshSearch)
   {
+    mainFrame.requestFocusInWindow();
+    if (isFreshSearch)
+    {
+      offSet = 0;
+    }
     new Thread()
     {
       @Override
       public void run()
       {
-        lbl_loading.setVisible(false);
-        errorWarning.setLength(0);
-        lbl_warning.setVisible(false);
-        btn_ok.setEnabled(false);
+        reset();
         boolean allowEmptySequence = false;
-        mainFrame.setTitle(getFTSFrameTitle());
-        tbl_summary.setModel(new DefaultTableModel());
-        tbl_summary.setVisible(false);
-        if (txt_search.getText().trim().length() > 0)
+        if (getTypedText().length() > 0)
         {
-          lbl_loading.setVisible(true);
+          setSearchInProgress(true);
           long startTime = System.currentTimeMillis();
 
           String searchTarget = ((FTSDataColumnI) cmb_searchTarget
                   .getSelectedItem()).getCode();
-
-          // wantedFields = FTSDataColumnPreferences.getSearchSummaryFields();
           wantedFields = PDBFTSRestClient.getInstance()
-                  .getAllDefaulDisplayedDataColumns();
-          String searchTerm = decodeSearchTerm(txt_search.getText(),
+                  .getAllDefaultDisplayedFTSDataColumns();
+          String searchTerm = decodeSearchTerm(getTypedText(),
                   searchTarget);
 
           FTSRestRequest request = new FTSRestRequest();
@@ -83,40 +90,63 @@ public class PDBFTSPanel extends GFTSPanel
           request.setResponseSize(100);
           request.setFieldToSearchBy("(" + searchTarget + ":");
           request.setSearchTerm(searchTerm + ")");
+          request.setOffSet(offSet);
           request.setWantedFields(wantedFields);
-          // System.out.println(">>>>>>>>>>>>>> " + request.getQuery());
-          FTSRestClientI pdbRestCleint = PDBFTSRestClient.getInstance();
+          FTSRestClientI pdbRestClient = PDBFTSRestClient.getInstance();
           FTSRestResponse resultList;
           try
           {
-            resultList = pdbRestCleint.executeRequest(request);
+            resultList = pdbRestClient.executeRequest(request);
           } catch (Exception e)
           {
-            // e.printStackTrace();
-            errorWarning.append(e.getMessage());
+            setErrorMessage(e.getMessage());
             checkForErrors();
+            setSearchInProgress(false);
             return;
           }
 
-          if (resultList.getSearchSummary() != null)
+          if (resultList.getSearchSummary() != null
+                  && resultList.getSearchSummary().size() > 0)
           {
-            tbl_summary.setModel(FTSRestResponse.getTableModel(request,
+            getResultTable().setModel(FTSRestResponse.getTableModel(request,
                     resultList.getSearchSummary()));
-            FTSRestResponse.configureTableColumn(tbl_summary, wantedFields);
-            tbl_summary.setVisible(true);
+            FTSRestResponse.configureTableColumn(getResultTable(),
+                    wantedFields, tempUserPrefs);
+            getResultTable().setVisible(true);
           }
 
-
           long endTime = System.currentTimeMillis();
-          int resultSetCount = resultList.getNumberOfItemsFound();
-          String result = (resultSetCount > 1) ? MessageManager
-                  .getString("label.results") : MessageManager
-                  .getString("label.result");
-          mainFrame.setTitle(getFTSFrameTitle() + " - " + resultSetCount
-                  + " "
-                  + result + " (" + (endTime - startTime) + " milli secs)");
-          lbl_loading.setVisible(false);
+          totalResultSetCount = resultList.getNumberOfItemsFound();
+          resultSetCount = resultList.getSearchSummary() == null ? 0
+                  : resultList.getSearchSummary().size();
+          String result = (resultSetCount > 0)
+                  ? MessageManager.getString("label.results")
+                  : MessageManager.getString("label.result");
+
+          if (isPaginationEnabled() && resultSetCount > 0)
+          {
+            String f1 = totalNumberformatter
+                    .format(Integer.valueOf(offSet + 1));
+            String f2 = totalNumberformatter
+                    .format(Integer.valueOf(offSet + resultSetCount));
+            String f3 = totalNumberformatter
+                    .format(Integer.valueOf(totalResultSetCount));
+            updateSearchFrameTitle(defaultFTSFrameTitle + " - " + result
+                    + " " + f1 + " to " + f2 + " of " + f3 + " " + " ("
+                    + (endTime - startTime) + " milli secs)");
+          }
+          else
+          {
+            updateSearchFrameTitle(defaultFTSFrameTitle + " - "
+                    + resultSetCount + " " + result + " ("
+                    + (endTime - startTime) + " milli secs)");
+          }
+
+          setSearchInProgress(false);
+          refreshPaginatorState();
+          updateSummaryTableSelections();
         }
+        txt_search.updateCache();
       }
     }.start();
   }
@@ -146,8 +176,8 @@ public class PDBFTSPanel extends GFTSPanel
       foundSearchTerms = foundSearchTermsBuilder.toString();
       if (foundSearchTerms.contains(" OR "))
       {
-        foundSearchTerms = foundSearchTerms.substring(
-                targetField.length() + 1, endIndex);
+        foundSearchTerms = foundSearchTerms
+                .substring(targetField.length() + 1, endIndex);
       }
     }
     else if (enteredText.contains(":"))
@@ -158,28 +188,32 @@ public class PDBFTSPanel extends GFTSPanel
   }
 
   @Override
-  public void btn_ok_ActionPerformed()
+  public void okAction()
   {
     // mainFrame.dispose();
     disableActionButtons();
     StringBuilder selectedIds = new StringBuilder();
-    HashSet<String> selectedIdsSet = new HashSet<String>();
-    int pdbIdCol = 0;
+    HashSet<String> selectedIdsSet = new HashSet<>();
+    int primaryKeyColIndex = 0;
     try
     {
-      pdbIdCol = getFTSRestClient().getPrimaryKeyColumIndex(wantedFields,
-              false);
+      primaryKeyColIndex = getFTSRestClient()
+              .getPrimaryKeyColumIndex(wantedFields, false);
     } catch (Exception e)
     {
-      // TODO Auto-generated catch block
       e.printStackTrace();
     }
-    int[] selectedRows = tbl_summary.getSelectedRows();
+    int[] selectedRows = getResultTable().getSelectedRows();
+    String searchTerm = getTypedText();
     for (int summaryRow : selectedRows)
     {
-      String idStr = tbl_summary.getValueAt(summaryRow, pdbIdCol)
-              .toString();
-      String searchTerm = txt_search.getText();
+      String idStr = getResultTable()
+              .getValueAt(summaryRow, primaryKeyColIndex).toString();
+      selectedIdsSet.add(getPDBIdwithSpecifiedChain(idStr, searchTerm));
+    }
+
+    for (String idStr : paginatorCart)
+    {
       selectedIdsSet.add(getPDBIdwithSpecifiedChain(idStr, searchTerm));
     }
 
@@ -189,14 +223,12 @@ public class PDBFTSPanel extends GFTSPanel
     }
 
     String ids = selectedIds.toString();
-    // System.out.println(">>>>>>>>>>>>>>>> selected Ids: " + ids);
-    seqFetcher.getTextArea().setText(ids);
+    seqFetcher.setQuery(ids);
     Thread worker = new Thread(seqFetcher);
     worker.start();
     delayAndEnableActionButtons();
   }
 
-
   public static String getPDBIdwithSpecifiedChain(String pdbId,
           String searchTerm)
   {
@@ -223,8 +255,6 @@ public class PDBFTSPanel extends GFTSPanel
     return pdbIdWithChainCode;
   }
 
-
-
   @Override
   public FTSRestClientI getFTSRestClient()
   {
@@ -234,7 +264,47 @@ public class PDBFTSPanel extends GFTSPanel
   @Override
   public String getFTSFrameTitle()
   {
-    return MessageManager.getString("label.pdb_sequence_fetcher");
+    return defaultFTSFrameTitle;
   }
 
-}
+  @Override
+  public boolean isPaginationEnabled()
+  {
+    return true;
+  }
+
+  @Override
+  public Map<String, Integer> getTempUserPrefs()
+  {
+    return tempUserPrefs;
+  }
+
+  @Override
+  public String getCacheKey()
+  {
+    return PDB_FTS_CACHE_KEY;
+  }
+
+  @Override
+  public String getAutosearchPreference()
+  {
+    return PDB_AUTOSEARCH;
+  }
+
+  @Override
+  protected void showHelp()
+  {
+    try
+    {
+      Help.showHelpWindow(HelpId.PdbFts);
+    } catch (HelpSetException e1)
+    {
+      e1.printStackTrace();
+    }
+  }
+
+  public String getDbName()
+  {
+    return "PDB";
+  }
+}
\ No newline at end of file