Merge branch 'develop' into releases/Release_2_11_2_Branch
[jalview.git] / src / jalview / gui / structurechooser / PDBStructureChooserQuerySource.java
index 3d2efb2..727d8e0 100644 (file)
@@ -1,5 +1,8 @@
 package jalview.gui.structurechooser;
 
+import java.util.Locale;
+
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashSet;
 import java.util.LinkedHashSet;
@@ -22,7 +25,8 @@ import jalview.fts.core.FTSDataColumnPreferences.PreferenceSource;
 import jalview.fts.core.FTSRestRequest;
 import jalview.fts.core.FTSRestResponse;
 import jalview.fts.service.pdb.PDBFTSRestClient;
-import jalview.jbgui.GStructureChooser.FilterOption;
+import jalview.jbgui.FilterOption;
+import jalview.util.MessageManager;
 
 /**
  * logic for querying the PDBe API for structures of sequences
@@ -35,6 +39,10 @@ public class PDBStructureChooserQuerySource
 
   private static int MAX_QLENGTH = 7820;
 
+  protected FTSRestRequest lastPdbRequest;
+
+  protected FTSRestClientI pdbRestClient;
+
   public PDBStructureChooserQuerySource()
   {
     pdbRestClient = PDBFTSRestClient.getInstance();
@@ -72,7 +80,7 @@ public class PDBStructureChooserQuerySource
       {
         if (isValidSeqName(entry.getId()))
         {
-          String id = entry.getId().toLowerCase();
+          String id = entry.getId().toLowerCase(Locale.ROOT);
           queryBuilder.append("pdb_id:").append(id).append(" OR ");
           isPDBRefsFound = true;
           pdbids.add(id);
@@ -100,7 +108,7 @@ public class PDBStructureChooserQuerySource
           else if (dbRef.getSource().equalsIgnoreCase(DBRefSource.PDB))
           {
 
-            String id = getDBRefId(dbRef).toLowerCase();
+            String id = getDBRefId(dbRef).toLowerCase(Locale.ROOT);
             if (!pdbids.contains(id))
             {
               queryBuilder.append("pdb_id:").append(id).append(" OR ");
@@ -120,7 +128,7 @@ public class PDBStructureChooserQuerySource
     {
       String seqName = seq.getName();
       seqName = sanitizeSeqName(seqName);
-      String[] names = seqName.toLowerCase().split("\\|");
+      String[] names = seqName.toLowerCase(Locale.ROOT).split("\\|");
       for (String name : names)
       {
         // System.out.println("Found name : " + name);
@@ -179,7 +187,7 @@ public class PDBStructureChooserQuerySource
     {
       return false;
     }
-    seqName = seqName.toLowerCase();
+    seqName = seqName.toLowerCase(Locale.ROOT);
     for (String ignoredEntry : ignoreList.split(","))
     {
       if (seqName.contains(ignoredEntry))
@@ -229,6 +237,34 @@ public class PDBStructureChooserQuerySource
     lastPdbRequest = pdbRequest;
     return resultList;
   }
+  public List<FilterOption> getAvailableFilterOptions(String VIEWS_FILTER)
+  {
+    List<FilterOption> filters = new ArrayList<FilterOption>();
+    filters.add(new FilterOption("PDBe "+
+            MessageManager.getString("label.best_quality"),
+            "overall_quality", VIEWS_FILTER, false,this));
+    filters.add(new FilterOption("PDBe "+
+            MessageManager.getString("label.best_resolution"),
+            "resolution", VIEWS_FILTER, false,this));
+    filters.add(new FilterOption("PDBe "+
+            MessageManager.getString("label.most_protein_chain"),
+            "number_of_protein_chains", VIEWS_FILTER, false,this));
+    filters.add(new FilterOption("PDBe "+
+            MessageManager.getString("label.most_bound_molecules"),
+            "number_of_bound_molecules", VIEWS_FILTER, false,this));
+    filters.add(new FilterOption("PDBe "+
+            MessageManager.getString("label.most_polymer_residues"),
+            "number_of_polymer_residues", VIEWS_FILTER, true,this));
+  
+    return filters;
+  }
+
+  @Override
+  public boolean needsRefetch(FilterOption selectedFilterOpt)
+  {
+    // PDBe queries never need a refetch first
+    return false;
+  }
 
   /**
    * FTSRestClient specific query builder to pick top ranked entry from a
@@ -245,7 +281,7 @@ public class PDBStructureChooserQuerySource
    * @return
    * @throws Exception
    */
-  public FTSRestResponse selectFirstRankedQuery(SequenceI seq,
+  public FTSRestResponse selectFirstRankedQuery(SequenceI seq, Collection<FTSData> collectedResults,
           Collection<FTSDataColumnI> wantedFields, String fieldToFilterBy,
           boolean b) throws Exception
   {
@@ -321,4 +357,17 @@ public class PDBStructureChooserQuerySource
     return pdbEntriesToView;
   }
 
+
+  @Override
+  protected FTSRestRequest getLastFTSRequest()
+  {
+    return lastPdbRequest;
+  }
+
+
+  public FTSRestResponse executePDBFTSRestRequest(FTSRestRequest pdbRequest) throws Exception
+  {
+    return pdbRestClient.executeRequest(pdbRequest);
+  }
+
 }
\ No newline at end of file