JAL-2691 catchall if passed dataset sequences (tests only)
[jalview.git] / src / jalview / io / FeaturesFile.java
index 20c44bc..4be8d0e 100755 (executable)
@@ -35,11 +35,12 @@ import jalview.io.gff.GffHelperBase;
 import jalview.io.gff.GffHelperFactory;
 import jalview.io.gff.GffHelperI;
 import jalview.schemes.FeatureColour;
-import jalview.schemes.UserColourScheme;
+import jalview.util.ColorUtils;
 import jalview.util.MapList;
 import jalview.util.ParseHtmlBodyAndLinks;
 import jalview.util.StringUtils;
 
+import java.awt.Color;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -121,8 +122,7 @@ public class FeaturesFile extends AlignFile implements FeaturesSourceI
    * @throws IOException
    */
   public FeaturesFile(boolean parseImmediately, String inFile,
-          DataSourceType type)
-          throws IOException
+          DataSourceType type) throws IOException
   {
     super(parseImmediately, inFile, type);
   }
@@ -140,8 +140,7 @@ public class FeaturesFile extends AlignFile implements FeaturesSourceI
    * @return true if features were added
    */
   public boolean parse(AlignmentI align,
-          Map<String, FeatureColourI> colours,
-          boolean removeHTML)
+          Map<String, FeatureColourI> colours, boolean removeHTML)
   {
     return parse(align, colours, removeHTML, false);
   }
@@ -178,8 +177,8 @@ public class FeaturesFile extends AlignFile implements FeaturesSourceI
    * @return true if features were added
    */
   public boolean parse(AlignmentI align,
-          Map<String, FeatureColourI> colours,
-          boolean removeHTML, boolean relaxedIdmatching)
+          Map<String, FeatureColourI> colours, boolean removeHTML,
+          boolean relaxedIdmatching)
   {
     Map<String, String> gffProps = new HashMap<String, String>();
     /*
@@ -305,7 +304,8 @@ public class FeaturesFile extends AlignFile implements FeaturesSourceI
    */
   protected boolean parseJalviewFeature(String line, String[] gffColumns,
           AlignmentI alignment, Map<String, FeatureColourI> featureColours,
-          boolean removeHTML, boolean relaxedIdMatching, String featureGroup)
+          boolean removeHTML, boolean relaxedIdMatching,
+          String featureGroup)
   {
     /*
      * tokens: description seqid seqIndex start end type [score]
@@ -356,11 +356,11 @@ public class FeaturesFile extends AlignFile implements FeaturesSourceI
        * Perhaps an old style groups file with no colours -
        * synthesize a colour from the feature type
        */
-      UserColourScheme ucs = new UserColourScheme(ft);
-      featureColours.put(ft, new FeatureColour(ucs.findColour('A')));
+      Color colour = ColorUtils.createColourFromName(ft);
+      featureColours.put(ft, new FeatureColour(colour));
     }
-    SequenceFeature sf = new SequenceFeature(ft, desc, "", startPos,
-            endPos, featureGroup);
+    SequenceFeature sf = new SequenceFeature(ft, desc, "", startPos, endPos,
+            featureGroup);
     if (gffColumns.length > 6)
     {
       float score = Float.NaN;
@@ -550,9 +550,8 @@ public class FeaturesFile extends AlignFile implements FeaturesSourceI
         for (int j = 0; j < features.length; j++)
         {
           isnonpos = features[j].begin == 0 && features[j].end == 0;
-          if ((!nonpos && isnonpos)
-                  || (!isnonpos && visOnly && !visible
-                          .containsKey(features[j].type)))
+          if ((!nonpos && isnonpos) || (!isnonpos && visOnly
+                  && !visible.containsKey(features[j].type)))
           {
             continue;
           }
@@ -589,19 +588,18 @@ public class FeaturesFile extends AlignFile implements FeaturesSourceI
         {
           for (SequenceFeature sequenceFeature : features)
           {
-            isnonpos = sequenceFeature.begin == 0 && sequenceFeature.end == 0;
-            if ((!nonpos && isnonpos)
-                    || (!isnonpos && visOnly && !visible
-                            .containsKey(sequenceFeature.type)))
+            isnonpos = sequenceFeature.begin == 0
+                    && sequenceFeature.end == 0;
+            if ((!nonpos && isnonpos) || (!isnonpos && visOnly
+                    && !visible.containsKey(sequenceFeature.type)))
             {
               // skip if feature is nonpos and we ignore them or if we only
               // output visible and it isn't non-pos and it's not visible
               continue;
             }
 
-            if (group != null
-                    && (sequenceFeature.featureGroup == null || !sequenceFeature.featureGroup
-                            .equals(group)))
+            if (group != null && (sequenceFeature.featureGroup == null
+                    || !sequenceFeature.featureGroup.equals(group)))
             {
               continue;
             }
@@ -619,8 +617,8 @@ public class FeaturesFile extends AlignFile implements FeaturesSourceI
             }
             else
             {
-              if (sequenceFeature.links != null
-                      && sequenceFeature.getDescription().indexOf("<html>") == -1)
+              if (sequenceFeature.links != null && sequenceFeature
+                      .getDescription().indexOf("<html>") == -1)
               {
                 out.append("<html>");
               }
@@ -636,12 +634,13 @@ public class FeaturesFile extends AlignFile implements FeaturesSourceI
 
                   if (sequenceFeature.description.indexOf(href) == -1)
                   {
-                    out.append(" <a href=\"" + href + "\">" + label
-                            + "</a>");
+                    out.append(
+                            " <a href=\"" + href + "\">" + label + "</a>");
                   }
                 }
 
-                if (sequenceFeature.getDescription().indexOf("</html>") == -1)
+                if (sequenceFeature.getDescription()
+                        .indexOf("</html>") == -1)
                 {
                   out.append("</html>");
                 }
@@ -712,7 +711,8 @@ public class FeaturesFile extends AlignFile implements FeaturesSourceI
       dataset = new Alignment(new SequenceI[] {});
     }
 
-    boolean parseResult = parse(dataset, null, false, true);
+    Map<String, FeatureColourI> featureColours = new HashMap<String, FeatureColourI>();
+    boolean parseResult = parse(dataset, featureColours, false, true);
     if (!parseResult)
     {
       // pass error up somehow
@@ -897,8 +897,8 @@ public class FeaturesFile extends AlignFile implements FeaturesSourceI
         fromCount = Integer.parseInt(tokens[2]);
       } catch (NumberFormatException nfe)
       {
-        throw new IOException("Invalid number in Align field: "
-                + nfe.getMessage());
+        throw new IOException(
+                "Invalid number in Align field: " + nfe.getMessage());
       }
 
       /*
@@ -1118,9 +1118,8 @@ public class FeaturesFile extends AlignFile implements FeaturesSourceI
    * @param newseqs
    * @throws IOException
    */
-  protected void processGffPragma(String line,
-          Map<String, String> gffProps, AlignmentI align,
-          List<SequenceI> newseqs) throws IOException
+  protected void processGffPragma(String line, Map<String, String> gffProps,
+          AlignmentI align, List<SequenceI> newseqs) throws IOException
   {
     line = line.trim();
     if ("###".equals(line))