JAL-2101 JAL-2071 JAL-1563 Added fix to enable searching for old entry names in Unipr...
[jalview.git] / src / jalview / fts / service / uniprot / UniprotFTSPanel.java
index 3681a23..f2fcb76 100644 (file)
@@ -40,29 +40,24 @@ public class UniprotFTSPanel extends GFTSPanel
 
   private String ftsFrameTitle = defaultFTSFrameTitle;
 
-  private int resultSetCount;
 
-  private int offSet;
-
-  private static int pageLimit = UniProtFTSRestClient.getInstance()
-          .getDefaultResponsePageSize();
 
   public UniprotFTSPanel(SequenceFetcher seqFetcher)
   {
+    pageLimit = UniProtFTSRestClient.getInstance()
+            .getDefaultResponsePageSize();
     this.seqFetcher = seqFetcher;
     this.progressIdicator = (seqFetcher == null) ? null : seqFetcher
             .getProgressIndicator();
   }
 
   @Override
-  public void searchAction()
-  {
-    offSet = 0;
-    executeSearch();
-  }
-
-  public void executeSearch()
+  public void searchAction(boolean isFreshSearch)
   {
+    if (isFreshSearch)
+    {
+      offSet = 0;
+    }
     new Thread()
   {
       @Override
@@ -80,7 +75,8 @@ public class UniprotFTSPanel extends GFTSPanel
 
           wantedFields = UniProtFTSRestClient.getInstance()
                   .getAllDefaulDisplayedDataColumns();
-          String searchTerm = txt_search.getText();
+          String searchTerm = decodeSearchTerm(txt_search.getText(),
+                  searchTarget);
 
           FTSRestRequest request = new FTSRestRequest();
           request.setFieldToSearchBy(searchTarget);
@@ -113,14 +109,23 @@ public class UniprotFTSPanel extends GFTSPanel
           }
 
           long endTime = System.currentTimeMillis();
-          resultSetCount = resultList.getNumberOfItemsFound();
-          String result = (resultSetCount > 1) ? MessageManager
+          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 > 1)
+          if (isPaginationEnabled() && resultSetCount > 0)
           {
             updateSearchFrameTitle(defaultFTSFrameTitle + " - " + result
-                    + " " + offSet + " to " + (offSet + resultSetCount)
+                    + " "
+                    + totalNumberformatter.format((Number) (offSet + 1))
+                    + " to "
+                    + totalNumberformatter
+                            .format((Number) (offSet + resultSetCount))
+                    + " of "
+                    + totalNumberformatter
+                            .format((Number) totalResultSetCount)
                     + " " + " (" + (endTime - startTime) + " milli secs)");
           }
           else
@@ -131,50 +136,40 @@ public class UniprotFTSPanel extends GFTSPanel
           }
           setSearchInProgress(false);
           refreshPaginatorState();
+          updateSummaryTableSelections();
         }
       }
     }.start();
 
   }
 
-
-
-  public void refreshPaginatorState()
+  public String decodeSearchTerm(String enteredText, String targetField)
   {
-    // System.out.println("resultSet count : " + resultSetCount);
-    // System.out.println("offSet : " + offSet);
-    // System.out.println("page limit : " + pageLimit);
-    setPrevPageButtonEnabled(false);
-    setNextPageButtonEnabled(false);
-    if (resultSetCount >= pageLimit)
-    {
-      setNextPageButtonEnabled(true);
-    }
-    if (offSet >= pageLimit)
+    int searchTargetLength = targetField.equalsIgnoreCase("Search All") ? 0
+            : targetField.length() + 1;
+    String searchTarget = targetField.equalsIgnoreCase("Search All") ? ""
+            : targetField + ":";
+    String foundSearchTerms = enteredText;
+    StringBuilder foundSearchTermsBuilder = new StringBuilder();
+    if (enteredText.contains(";"))
     {
-      setPrevPageButtonEnabled(true);
-    }
-  }
-
-  @Override
-  public void prevPageAction()
-  {
-    if (offSet >= pageLimit)
-    {
-      offSet = offSet - pageLimit;
-      executeSearch();
-    }else{
-      refreshPaginatorState();
+      String[] searchTerms = enteredText.split(";");
+      for (String searchTerm : searchTerms)
+      {
+        foundSearchTermsBuilder.append(searchTarget).append(searchTerm)
+                .append(" OR ");
+      }
+      int endIndex = foundSearchTermsBuilder.lastIndexOf(" OR ");
+      foundSearchTerms = foundSearchTermsBuilder.toString();
+      if (foundSearchTerms.contains(" OR "))
+      {
+        foundSearchTerms = foundSearchTerms.substring(searchTargetLength,
+                endIndex);
+      }
     }
+    return foundSearchTerms;
   }
 
-  @Override
-  public void nextPageAction()
-  {
-    offSet = offSet + pageLimit;
-    executeSearch();
-
-  }
 
   @Override
   public boolean isPaginationEnabled()
@@ -204,7 +199,7 @@ public class UniprotFTSPanel extends GFTSPanel
               primaryKeyColIndex).toString();
       selectedIdsSet.add(idStr);
     }
-
+    selectedIdsSet.addAll(paginatorCart);
     for (String selectedId : selectedIdsSet)
     {
       selectedIds.append(selectedId).append(";");