JAL-1925 update source version in license
[jalview.git] / src / jalview / io / SequenceAnnotationReport.java
index 7f46c67..e41b386 100644 (file)
@@ -1,14 +1,34 @@
+/*
+ * Jalview - A Sequence Alignment Editor and Viewer (Version 2.9.0b2)
+ * Copyright (C) 2015 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.io;
 
-import java.util.ArrayList;
-import java.util.Hashtable;
-import java.util.Vector;
-
 import jalview.datamodel.DBRefEntry;
 import jalview.datamodel.SequenceFeature;
 import jalview.datamodel.SequenceI;
 import jalview.util.UrlLink;
 
+import java.util.ArrayList;
+import java.util.Hashtable;
+import java.util.List;
+
 /**
  * generate HTML reports for a sequence
  * 
@@ -34,30 +54,29 @@ public class SequenceAnnotationReport
    *          TODO refactor to Jalview 'utilities' somehow.
    */
   public void appendFeatures(final StringBuffer tooltipText2, int rpos,
-          SequenceFeature[] features)
+          List<SequenceFeature> features)
   {
     appendFeatures(tooltipText2, rpos, features, null);
   }
 
   public void appendFeatures(final StringBuffer tooltipText2, int rpos,
-          SequenceFeature[] features, Hashtable minmax)
+          List<SequenceFeature> features, Hashtable minmax)
   {
     String tmpString;
     if (features != null)
     {
-      for (int i = 0; i < features.length; i++)
+      for (SequenceFeature feature : features)
       {
-        if (features[i].getType().equals("disulfide bond"))
+        if (feature.getType().equals("disulfide bond"))
         {
-          if (features[i].getBegin() == rpos
-                  || features[i].getEnd() == rpos)
+          if (feature.getBegin() == rpos || feature.getEnd() == rpos)
           {
             if (tooltipText2.length() > 6)
             {
               tooltipText2.append("<br>");
             }
-            tooltipText2.append("disulfide bond " + features[i].getBegin()
-                    + ":" + features[i].getEnd());
+            tooltipText2.append("disulfide bond " + feature.getBegin()
+                    + ":" + feature.getEnd());
           }
         }
         else
@@ -67,25 +86,24 @@ public class SequenceAnnotationReport
             tooltipText2.append("<br>");
           }
           // TODO: remove this hack to display link only features
-          boolean linkOnly = features[i].getValue("linkonly") != null;
+          boolean linkOnly = feature.getValue("linkonly") != null;
           if (!linkOnly)
           {
-            tooltipText2.append(features[i].getType() + " ");
+            tooltipText2.append(feature.getType() + " ");
             if (rpos != 0)
             {
               // we are marking a positional feature
-              tooltipText2.append(features[i].begin);
+              tooltipText2.append(feature.begin);
             }
-            if (features[i].begin != features[i].end)
+            if (feature.begin != feature.end)
             {
-              tooltipText2.append(" " + features[i].end);
+              tooltipText2.append(" " + feature.end);
             }
 
-            if (features[i].getDescription() != null
-                    && !features[i].description.equals(features[i]
-                            .getType()))
+            if (feature.getDescription() != null
+                    && !feature.description.equals(feature.getType()))
             {
-              tmpString = features[i].getDescription();
+              tmpString = feature.getDescription();
               String tmp2up = tmpString.toUpperCase();
               int startTag = tmp2up.indexOf("<HTML>");
               if (startTag > -1)
@@ -130,27 +148,27 @@ public class SequenceAnnotationReport
               }
             }
             // check score should be shown
-            if (features[i].getScore() != Float.NaN)
+            if (!Float.isNaN(feature.getScore()))
             {
               float[][] rng = (minmax == null) ? null : ((float[][]) minmax
-                      .get(features[i].getType()));
+                      .get(feature.getType()));
               if (rng != null && rng[0] != null && rng[0][0] != rng[0][1])
               {
-                tooltipText2.append(" Score=" + features[i].getScore());
+                tooltipText2.append(" Score=" + feature.getScore());
               }
             }
-            if (features[i].getValue("status") != null)
+            if (feature.getValue("status") != null)
             {
-              String status = features[i].getValue("status").toString();
+              String status = feature.getValue("status").toString();
               if (status.length() > 0)
               {
-                tooltipText2.append("; (" + features[i].getValue("status")
+                tooltipText2.append("; (" + feature.getValue("status")
                         + ")");
               }
             }
           }
         }
-        if (features[i].links != null)
+        if (feature.links != null)
         {
           if (linkImageURL != null)
           {
@@ -158,15 +176,21 @@ public class SequenceAnnotationReport
           }
           else
           {
-            for (String urlstring : (Vector<String>) features[i].links)
+            for (String urlstring : feature.links)
             {
               try
               {
                 for (String[] urllink : createLinksFrom(null, urlstring))
                 {
-                  tooltipText2.append("<br/> <a href=\"" + urllink[3]
-                          + "\" target=\"" + urllink[0] + "\">"
-                          + (urllink[0].toLowerCase().equals(urllink[1].toLowerCase()) ? urllink[0] : (urllink[0]+ ":" + urllink[1])) + "</a></br>");
+                  tooltipText2.append("<br/> <a href=\""
+                          + urllink[3]
+                          + "\" target=\""
+                          + urllink[0]
+                          + "\">"
+                          + (urllink[0].toLowerCase().equals(
+                                  urllink[1].toLowerCase()) ? urllink[0]
+                                  : (urllink[0] + ":" + urllink[1]))
+                          + "</a></br>");
                 }
               } catch (Exception x)
               {
@@ -192,7 +216,7 @@ public class SequenceAnnotationReport
   public String[][] createLinksFrom(SequenceI seq, String link)
   {
     ArrayList<String[]> urlSets = new ArrayList<String[]>();
-    ArrayList<String> uniques=new ArrayList<String>();
+    ArrayList<String> uniques = new ArrayList<String>();
     UrlLink urlLink = new UrlLink(link);
     if (!urlLink.isValid())
     {
@@ -207,8 +231,7 @@ public class SequenceAnnotationReport
 
       // collect matching db-refs
       DBRefEntry[] dbr = jalview.util.DBRefUtils.selectRefs(seq.getDBRef(),
-              new String[]
-              { target });
+              new String[] { target });
       // collect id string too
       String id = seq.getName();
       String descr = seq.getDescription();
@@ -232,11 +255,11 @@ public class SequenceAnnotationReport
           {
             for (int u = 0; u < urls.length; u += 2)
             {
-              String unq=urls[u]+"|"+urls[u+1];
+              String unq = urls[u] + "|" + urls[u + 1];
               if (!uniques.contains(unq))
               {
-                urlSets.add(new String[]
-                        { target, label, urls[u], urls[u + 1] });
+                urlSets.add(new String[] { target, label, urls[u],
+                    urls[u + 1] });
                 uniques.add(unq);
               }
             }
@@ -251,11 +274,11 @@ public class SequenceAnnotationReport
         {
           for (int u = 0; u < urls.length; u += 2)
           {
-            String unq=urls[u]+"|"+urls[u+1];
+            String unq = urls[u] + "|" + urls[u + 1];
             if (!uniques.contains(unq))
             {
-              urlSets.add(new String[]
-            { target, label, urls[u], urls[u + 1] });
+              urlSets.add(new String[] { target, label, urls[u],
+                  urls[u + 1] });
               uniques.add(unq);
             }
           }
@@ -269,41 +292,44 @@ public class SequenceAnnotationReport
         {
           for (int u = 0; u < urls.length; u += 2)
           {
-            String unq=urls[u]+"|"+urls[u+1];
+            String unq = urls[u] + "|" + urls[u + 1];
             if (!uniques.contains(unq))
             {
-              urlSets.add(new String[]
-            { target, label, urls[u], urls[u + 1] });
+              urlSets.add(new String[] { target, label, urls[u],
+                  urls[u + 1] });
               uniques.add(unq);
             }
           }
         }
       }
 
-    } else {
-      String unq=label + "|" + urlLink.getUrl_prefix();
-      if (!uniques.contains(unq)){
+    }
+    else
+    {
+      String unq = label + "|" + urlLink.getUrl_prefix();
+      if (!uniques.contains(unq))
+      {
         uniques.add(unq);
         // Add a non-dynamic link
-        urlSets.add(new String[] {target, label, null, urlLink.getUrl_prefix()});
+        urlSets.add(new String[] { target, label, null,
+            urlLink.getUrl_prefix() });
       }
     }
 
-    return urlSets.toArray(new String[][]
-    {});
+    return urlSets.toArray(new String[][] {});
   }
 
-
   public void createSequenceAnnotationReport(final StringBuffer tip,
           SequenceI sequence, boolean showDbRefs, boolean showNpFeats,
           Hashtable minmax)
   {
-    createSequenceAnnotationReport(tip, sequence, showDbRefs, showNpFeats, true, minmax);
+    createSequenceAnnotationReport(tip, sequence, showDbRefs, showNpFeats,
+            true, minmax);
   }
 
   public void createSequenceAnnotationReport(final StringBuffer tip,
-          SequenceI sequence, boolean showDbRefs, boolean showNpFeats, boolean tableWrap,
-          Hashtable minmax)
+          SequenceI sequence, boolean showDbRefs, boolean showNpFeats,
+          boolean tableWrap, Hashtable minmax)
   {
     String tmp;
     tip.append("<i>");
@@ -315,10 +341,10 @@ public class SequenceAnnotationReport
       tip.append("<br>" + tmp);
       maxWidth = Math.max(maxWidth, tmp.length());
     }
-    SequenceI ds=sequence;
-    while (ds.getDatasetSequence()!=null)
+    SequenceI ds = sequence;
+    while (ds.getDatasetSequence() != null)
     {
-      ds=ds.getDatasetSequence();
+      ds = ds.getDatasetSequence();
     }
     DBRefEntry[] dbrefs = ds.getDBRef();
     if (showDbRefs && dbrefs != null)
@@ -333,8 +359,7 @@ public class SequenceAnnotationReport
     }
 
     // ADD NON POSITIONAL SEQUENCE INFO
-    SequenceFeature[] features = ds.getSequenceFeatures();
-    SequenceFeature[] tfeat = new SequenceFeature[1];
+    SequenceFeature[] features = sequence.getSequenceFeatures();
     if (showNpFeats && features != null)
     {
       for (int i = 0; i < features.length; i++)
@@ -342,7 +367,8 @@ public class SequenceAnnotationReport
         if (features[i].begin == 0 && features[i].end == 0)
         {
           int sz = -tip.length();
-          tfeat[0] = features[i];
+          List<SequenceFeature> tfeat = new ArrayList<SequenceFeature>();
+          tfeat.add(features[i]);
           appendFeatures(tip, 0, tfeat, minmax);
           sz += tip.length();
           maxWidth = Math.max(maxWidth, sz);