JAL-3829 select single best TDB structure and select structures from particular provi...
[jalview.git] / src / jalview / gui / structurechooser / TDBResultAnalyser.java
index cf3cc0c..06dbe2d 100644 (file)
@@ -42,16 +42,30 @@ public class TDBResultAnalyser
 
   private int idx_resol;
 
+  /**
+   * selection model
+   */
+  private String filter=null;
+  /**
+   * limit to particular source
+   */
+  private String sourceFilter=null;
+
+  private int idx_mprov;
+
   public TDBResultAnalyser(SequenceI seq,
           Collection<FTSData> collectedResults,
-          FTSRestRequest lastTdbRequest)
+          FTSRestRequest lastTdbRequest, String fieldToFilterBy, String string)
   {
     this.seq = seq;
     this.collectedResults = collectedResults;
     this.lastTdbRequest = lastTdbRequest;
+    this.filter = fieldToFilterBy;
+    this.sourceFilter = string;
     idx_ups = lastTdbRequest.getFieldIndex("Uniprot Start");
     idx_upe = lastTdbRequest.getFieldIndex("Uniprot End");
     idx_mcat = lastTdbRequest.getFieldIndex("Model Category");
+    idx_mprov = lastTdbRequest.getFieldIndex("Provider");
     idx_mqual = lastTdbRequest.getFieldIndex("Confidence");
     idx_resol = lastTdbRequest.getFieldIndex("Resolution");
   }
@@ -81,19 +95,20 @@ public class TDBResultAnalyser
     {
       int up_s = (Integer) row.getSummaryData()[idx_ups];
       int up_e = (Integer) row.getSummaryData()[idx_upe];
-
-      if (seq == row.getSummaryData()[0] && up_e > seq.getStart()
-              && up_s < seq.getEnd())
+      String provider = (String) row.getSummaryData()[idx_mprov];
+      if (sourceFilter == null ||  sourceFilter.equals(provider))
       {
-        filteredResponse.add(row);
+        if (seq == row.getSummaryData()[0] && up_e > seq.getStart()
+                && up_s < seq.getEnd())
+        {
+          filteredResponse.add(row);
+        }
       }
     }
     // sort according to decreasing length,
     // increasing start
     Collections.sort(filteredResponse, new Comparator<FTSData>()
     {
-
-
       @Override
       public int compare(FTSData o1, FTSData o2)
       {
@@ -197,6 +212,10 @@ public class TDBResultAnalyser
         return o2_xt-o1_xt;
       }
     });
+    if (filter.equals(ThreeDBStructureChooserQuerySource.FILTER_FIRST_BEST_COVERAGE))
+    {
+      return selected.subList(0, 1);
+    }
     return selected;
   }