JAL-3990 gradle spotlessApply
[jalview.git] / src / jalview / gui / structurechooser / TDBResultAnalyser.java
index 9f57100..2408d7a 100644 (file)
@@ -1,5 +1,27 @@
+/*
+ * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
+ * Copyright (C) $$Year-Rel$$ The Jalview Authors
+ * 
+ * This file is part of Jalview.
+ * 
+ * Jalview is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License 
+ * as published by the Free Software Foundation, either version 3
+ * of the License, or (at your option) any later version.
+ *  
+ * Jalview is distributed in the hope that it will be useful, but 
+ * WITHOUT ANY WARRANTY; without even the implied warranty 
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
+ * PURPOSE.  See the GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
+ * The Jalview Authors are detailed in the 'AUTHORS' file.
+ */
 package jalview.gui.structurechooser;
 
+import java.util.Locale;
+
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.BitSet;
@@ -85,7 +107,7 @@ public class TDBResultAnalyser
     {
       return 0;
     }
-    String upper_cat = cat.toUpperCase();
+    String upper_cat = cat.toUpperCase(Locale.ROOT);
     int idx = EXP_CATEGORIES.indexOf(upper_cat);
     if (idx == -1)
     {
@@ -109,18 +131,22 @@ public class TDBResultAnalyser
     // ignore anything outside the sequence region
     for (FTSData row : collectedResults)
     {
-      int up_s = (Integer) row.getSummaryData()[idx_ups];
-      int up_e = (Integer) row.getSummaryData()[idx_upe];
-      String provider = (String) row.getSummaryData()[idx_mprov];
-      String mcat = (String) row.getSummaryData()[idx_mcat];
-      // this makes sure all new categories are in the score array.
-      int scorecat = scoreCategory(mcat); 
-      if (sourceFilter == null ||  sourceFilter.equals(provider))
+      if (row.getSummaryData() != null
+              && row.getSummaryData()[idx_ups] != null)
       {
-        if (seq == row.getSummaryData()[0] && up_e > seq.getStart()
-                && up_s < seq.getEnd())
+        int up_s = (Integer) row.getSummaryData()[idx_ups];
+        int up_e = (Integer) row.getSummaryData()[idx_upe];
+        String provider = (String) row.getSummaryData()[idx_mprov];
+        String mcat = (String) row.getSummaryData()[idx_mcat];
+        // this makes sure all new categories are in the score array.
+        int scorecat = scoreCategory(mcat);
+        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);
+          }
         }
       }
     }
@@ -136,12 +162,13 @@ public class TDBResultAnalyser
         int o1_s = (Integer) o1data[idx_ups];
         int o1_e = (Integer) o1data[idx_upe];
         int o1_cat = scoreCategory((String) o1data[idx_mcat]);
-        String o1_prov= ((String) o1data[idx_mprov]).toUpperCase();
+        String o1_prov = ((String) o1data[idx_mprov])
+                .toUpperCase(Locale.ROOT);
         int o2_s = (Integer) o2data[idx_ups];
         int o2_e = (Integer) o2data[idx_upe];
         int o2_cat = scoreCategory((String) o2data[idx_mcat]);
-        String o2_prov= ((String) o2data[idx_mprov]).toUpperCase();
-        
+        String o2_prov = ((String) o2data[idx_mprov])
+                .toUpperCase(Locale.ROOT);
 
         if (o1_cat == o2_cat)
         {
@@ -153,27 +180,37 @@ public class TDBResultAnalyser
             {
               if (o1_cat == scoreCategory(EXP_CATEGORIES.get(0)))
               {
-                if (o1_prov.equals(o2_prov)) {
-                  if ("PDBE".equals(o1_prov)) {
-                    if (eitherNull(idx_resol,o1data,o2data))
+                if (o1_prov.equals(o2_prov))
+                {
+                  if ("PDBE".equals(o1_prov))
+                  {
+                    if (eitherNull(idx_resol, o1data, o2data))
                     {
-                       return nonNullFirst(idx_resol,o1data,o2data);
+                      return nonNullFirst(idx_resol, o1data, o2data);
                     }
-                // experimental structures, so rank on quality
-                double o1_res = (Double) o1data[idx_resol];
-                double o2_res = (Double) o2data[idx_resol];
-                return (o2_res < o1_res) ? 1 : (o2_res == o1_res) ? 0 : -1;
-                } else {
-                  return 0; // no change in order
+                    // experimental structures, so rank on quality
+                    double o1_res = (Double) o1data[idx_resol];
+                    double o2_res = (Double) o2data[idx_resol];
+                    return (o2_res < o1_res) ? 1
+                            : (o2_res == o1_res) ? 0 : -1;
+                  }
+                  else
+                  {
+                    return 0; // no change in order
+                  }
+                }
+                else
+                {
+                  // PDBe always ranked above all other experimentally
+                  // determined categories
+                  return "PDBE".equals(o1_prov) ? -1
+                          : "PDBE".equals(o2_prov) ? 1 : 0;
                 }
-              } else {
-                // PDBe always ranked above all other experimentally determined categories
-                return "PDBE".equals(o1_prov) ? -1 : "PDBE".equals(o2_prov) ? 1 : 0;
-              }
               }
               else
               {
-                if (eitherNull(idx_mqual,o1data, o2data)) {
+                if (eitherNull(idx_mqual, o1data, o2data))
+                {
                   return nonNullFirst(idx_mqual, o1data, o2data);
                 }
                 // models, so rank on qmean - b
@@ -201,13 +238,14 @@ public class TDBResultAnalyser
       private int nonNullFirst(int idx_resol, Object[] o1data,
               Object[] o2data)
       {
-          return o1data[idx_resol] == o2data[idx_resol] ? 0: o1data[idx_resol] != null ? -1 : 1; 
+        return o1data[idx_resol] == o2data[idx_resol] ? 0
+                : o1data[idx_resol] != null ? -1 : 1;
       }
 
       private boolean eitherNull(int idx_resol, Object[] o1data,
               Object[] o2data)
       {
-        return (o1data[idx_resol] == null || o2data[idx_resol]==null);
+        return (o1data[idx_resol] == null || o2data[idx_resol] == null);
       }
 
       @Override
@@ -233,6 +271,8 @@ public class TDBResultAnalyser
     BitSet cover = new BitSet();
     cover.set(seq.getStart(), seq.getEnd());
     // walk down the list of structures, selecting some to add to selected
+    // TODO: could do simple DP - double loop to select largest number of
+    // structures covering largest number of sites
     for (FTSData structure : filteredStructures)
     {
       Object[] odata = structure.getSummaryData();
@@ -250,7 +290,7 @@ public class TDBResultAnalyser
         cover.andNot(scover);
       }
     }
-    if (selected.size()==0)
+    if (selected.size() == 0)
     {
       return selected;
     }