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 21343d3..f2fcb76 100644 (file)
@@ -40,16 +40,24 @@ public class UniprotFTSPanel extends GFTSPanel
 
   private String ftsFrameTitle = defaultFTSFrameTitle;
 
+
+
   public UniprotFTSPanel(SequenceFetcher seqFetcher)
   {
+    pageLimit = UniProtFTSRestClient.getInstance()
+            .getDefaultResponsePageSize();
     this.seqFetcher = seqFetcher;
     this.progressIdicator = (seqFetcher == null) ? null : seqFetcher
             .getProgressIndicator();
   }
 
   @Override
-  public void searchAction()
+  public void searchAction(boolean isFreshSearch)
   {
+    if (isFreshSearch)
+    {
+      offSet = 0;
+    }
     new Thread()
   {
       @Override
@@ -67,11 +75,13 @@ 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);
           request.setSearchTerm(searchTerm);
+          request.setOffSet(offSet);
           request.setWantedFields(wantedFields);
           FTSRestClientI uniProtRestCleint = UniProtFTSRestClient
                   .getInstance();
@@ -92,27 +102,81 @@ public class UniprotFTSPanel extends GFTSPanel
           {
             getResultTable().setModel(
                     FTSRestResponse.getTableModel(request,
-                    resultList.getSearchSummary()));
+                            resultList.getSearchSummary()));
             FTSRestResponse.configureTableColumn(getResultTable(),
                     wantedFields);
             getResultTable().setVisible(true);
           }
 
           long endTime = System.currentTimeMillis();
-          int 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");
-          updateSearchFrameTitle(defaultFTSFrameTitle + " - "
-                  + resultSetCount + " " + result + " ("
-                  + (endTime - startTime) + " milli secs)");
+          if (isPaginationEnabled() && resultSetCount > 0)
+          {
+            updateSearchFrameTitle(defaultFTSFrameTitle + " - " + result
+                    + " "
+                    + totalNumberformatter.format((Number) (offSet + 1))
+                    + " to "
+                    + totalNumberformatter
+                            .format((Number) (offSet + resultSetCount))
+                    + " of "
+                    + totalNumberformatter
+                            .format((Number) totalResultSetCount)
+                    + " " + " (" + (endTime - startTime) + " milli secs)");
+          }
+          else
+          {
+            updateSearchFrameTitle(defaultFTSFrameTitle + " - "
+                    + resultSetCount + " " + result + " ("
+                    + (endTime - startTime) + " milli secs)");
+          }
           setSearchInProgress(false);
+          refreshPaginatorState();
+          updateSummaryTableSelections();
         }
       }
     }.start();
 
   }
 
+  public String decodeSearchTerm(String enteredText, String targetField)
+  {
+    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(";"))
+    {
+      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 boolean isPaginationEnabled()
+  {
+    return true;
+  }
+
   @Override
   public void okAction()
   {
@@ -135,7 +199,7 @@ public class UniprotFTSPanel extends GFTSPanel
               primaryKeyColIndex).toString();
       selectedIdsSet.add(idStr);
     }
-
+    selectedIdsSet.addAll(paginatorCart);
     for (String selectedId : selectedIdsSet)
     {
       selectedIds.append(selectedId).append(";");