merge
[jalview.git] / src / jalview / io / JSONFile.java
index 3a08409..5cd09a1 100644 (file)
@@ -211,12 +211,14 @@ public class JSONFile extends AlignFile implements ComplexAlignFile
       if (exportSettings.isExportAnnotations())
       {
         jsonAlignmentPojo
-.setAlignAnnotation(annotationToJsonPojo(
-                annotations, seqs));
+                .setAlignAnnotation(annotationToJsonPojo(annotations));
       }
       else
       {
-        if (globalColourScheme.equalsIgnoreCase("RNA Helices"))
+        // These color schemes require annotation, disable them if annotations
+        // are not exported
+        if (globalColourScheme.equalsIgnoreCase("RNA Helices")
+                || globalColourScheme.equalsIgnoreCase("T-COFFEE SCORES"))
         {
           jsonAlignmentPojo.setGlobalColorScheme("None");
         }
@@ -360,7 +362,7 @@ public class JSONFile extends AlignFile implements ComplexAlignFile
   }
 
   public static List<AlignmentAnnotationPojo> annotationToJsonPojo(
-          Vector<AlignmentAnnotation> annotations, Vector<SequenceI> seqs)
+          Vector<AlignmentAnnotation> annotations)
   {
     List<AlignmentAnnotationPojo> jsonAnnotations = new ArrayList<AlignmentAnnotationPojo>();
     if (annotations == null)
@@ -369,24 +371,29 @@ public class JSONFile extends AlignFile implements ComplexAlignFile
     }
     for (AlignmentAnnotation annot : annotations)
     {
+      AlignmentAnnotationPojo alignAnnotPojo = new AlignmentAnnotationPojo();
+      alignAnnotPojo.setDescription(annot.description);
+      alignAnnotPojo.setLabel(annot.label);
+      if (!Double.isNaN(annot.score))
+      {
+        alignAnnotPojo.setScore(annot.score);
+      }
+      alignAnnotPojo.setCalcId(annot.getCalcId());
+      alignAnnotPojo.setGraphType(annot.graph);
+
       AnnotationDisplaySettingPojo annotSetting = new AnnotationDisplaySettingPojo();
       annotSetting.setBelowAlignment(annot.belowAlignment);
       annotSetting.setCentreColLabels(annot.centreColLabels);
-      annotSetting.setScaleColLabel(annot.centreColLabels);
+      annotSetting.setScaleColLabel(annot.scaleColLabel);
       annotSetting.setShowAllColLabels(annot.showAllColLabels);
       annotSetting.setVisible(annot.visible);
-
-
-      AlignmentAnnotationPojo alignAnnotPojo = new AlignmentAnnotationPojo();
-      alignAnnotPojo.setScore(annot.score);
-      alignAnnotPojo.setCalcId(annot.getCalcId());
-      alignAnnotPojo.setDescription(annot.description);
-      alignAnnotPojo.setLabel(annot.label);
-      alignAnnotPojo.setGraphType(annot.graph);
+      annotSetting.setHasIcon(annot.hasIcons);
       alignAnnotPojo.setAnnotationSettings(annotSetting);
-      int seqHash = setAnnotationRefSeq(annot, seqs);
-      alignAnnotPojo.setSequenceRef(seqHash == 0 ? null : String
-              .valueOf(seqHash));
+      SequenceI refSeq = annot.sequenceRef;
+      if (refSeq != null)
+      {
+        alignAnnotPojo.setSequenceRef(String.valueOf(refSeq.hashCode()));
+      }
       for (Annotation annotation : annot.annotations)
       {
         AnnotationPojo annotationPojo = new AnnotationPojo();
@@ -396,7 +403,10 @@ public class JSONFile extends AlignFile implements ComplexAlignFile
           annotationPojo.setValue(annotation.value);
           annotationPojo
                   .setSecondaryStructure(annotation.secondaryStructure);
-          annotationPojo.setDisplayCharacter(annotation.displayCharacter);
+          String displayChar = annotation.displayCharacter == null ? null
+                  : annotation.displayCharacter;
+          // System.out.println("--------------------->[" + displayChar + "]");
+          annotationPojo.setDisplayCharacter(displayChar);
           if (annotation.colour != null)
           {
             annotationPojo.setColour(jalview.util.Format
@@ -413,7 +423,7 @@ public class JSONFile extends AlignFile implements ComplexAlignFile
           }
           else
           {
-            alignAnnotPojo.getAnnotations().add(null);
+            alignAnnotPojo.getAnnotations().add(annotationPojo);
           }
         }
       }
@@ -422,29 +432,6 @@ public class JSONFile extends AlignFile implements ComplexAlignFile
     return jsonAnnotations;
   }
 
-  private static int setAnnotationRefSeq(AlignmentAnnotation annot,
-          Vector<SequenceI> seqs)
-  {
-    if (annot == null || seqs == null || seqs.size() == 0)
-    {
-      return 0;
-    }
-    for (SequenceI seq : seqs)
-    {
-      if (seq == null || seq.getAnnotation() == null)
-      {
-        continue;
-      }
-      for (AlignmentAnnotation seqAnnot : seq.getAnnotation())
-      {
-        if (seqAnnot == annot)
-        {
-          return seq.hashCode();
-        }
-      }
-    }
-    return 0;
-  }
   @SuppressWarnings("unchecked")
   public JSONFile parse(Reader jsonAlignmentString)
   {
@@ -495,7 +482,6 @@ public class JSONFile extends AlignFile implements ComplexAlignFile
         seqMap.put(seqUniqueId, seq);
       }
 
-
       parseFeatures(jsonSeqArray);
 
       for (Iterator<JSONObject> seqGrpIter = seqGrpJsonArray.iterator(); seqGrpIter
@@ -534,8 +520,7 @@ public class JSONFile extends AlignFile implements ComplexAlignFile
           }
         }
         SequenceGroup seqGrp = new SequenceGroup(grpSeqs, grpName, null,
-                displayBoxes, displayText, colourText,
-                startRes, endRes);
+                displayBoxes, displayText, colourText, startRes, endRes);
         seqGrp.cs = ColourSchemeMapper.getJalviewColourScheme(colourScheme,
                 seqGrp);
         seqGrp.setShowNonconserved(showNonconserved);
@@ -548,18 +533,9 @@ public class JSONFile extends AlignFile implements ComplexAlignFile
               .hasNext();)
       {
         JSONObject alAnnot = alAnnotIter.next();
-        if (alAnnot == null)
-        {
-          continue;
-        }
-        JSONObject diplaySettings = (JSONObject) alAnnot
-                .get("annotationSettings");
-
         JSONArray annotJsonArray = (JSONArray) alAnnot.get("annotations");
         Annotation[] annotations = new Annotation[annotJsonArray.size()];
         int count = 0;
-        String calcId = alAnnot.get("calcId") == null ? "" : alAnnot.get(
-                "calcId").toString();
         for (Iterator<JSONObject> annotIter = annotJsonArray.iterator(); annotIter
                 .hasNext();)
         {
@@ -580,11 +556,14 @@ public class JSONFile extends AlignFile implements ComplexAlignFile
                     .get("secondaryStructure").toString().charAt(0);
             String displayChar = annot.get("displayCharacter") == null ? ""
                     : annot.get("displayCharacter").toString();
-            Color color = annot.get("colour") == null ? Color.white
-                    : UserColourScheme.getColourFromString(annot.get(
-                    "colour").toString());
-            annotations[count] = new Annotation(displayChar, desc, ss, val,
-                    color);
+
+            annotations[count] = new Annotation(displayChar, desc, ss, val);
+            if (annot.get("colour") != null)
+            {
+              Color color = UserColourScheme.getColourFromString(annot.get(
+                      "colour").toString());
+              annotations[count].colour = color;
+            }
           }
           ++count;
         }
@@ -595,24 +574,42 @@ public class JSONFile extends AlignFile implements ComplexAlignFile
         alignAnnot.graph = (alAnnot.get("graphType") == null) ? 0 : Integer
                 .valueOf(alAnnot.get("graphType")
                         .toString());
-        alignAnnot.scaleColLabel = (diplaySettings.get("scaleColLabel") == null) ? false
-                : Boolean.valueOf(diplaySettings.get("scaleColLabel")
-                        .toString());
-        alignAnnot.showAllColLabels = (diplaySettings
-                .get("showAllColLabels") == null) ? true : Boolean
-                .valueOf(diplaySettings.get("showAllColLabels").toString());
-        alignAnnot.centreColLabels = (diplaySettings.get("centreColLabels") == null) ? true
-                : Boolean.valueOf(diplaySettings.get("centreColLabels")
-                        .toString());
-        alignAnnot.belowAlignment = (diplaySettings.get("belowAlignment") == null) ? false
-                : Boolean.valueOf(diplaySettings.get("belowAlignment")
-                        .toString());
-        alignAnnot.visible = (diplaySettings.get("visible") == null) ? true
-                : Boolean.valueOf(diplaySettings.get("visible").toString());
 
+        JSONObject diplaySettings = (JSONObject) alAnnot
+                .get("annotationSettings");
+        if (diplaySettings != null)
+        {
+
+          alignAnnot.scaleColLabel = (diplaySettings.get("scaleColLabel") == null) ? false
+                  : Boolean.valueOf(diplaySettings.get("scaleColLabel")
+                          .toString());
+          alignAnnot.showAllColLabels = (diplaySettings
+                  .get("showAllColLabels") == null) ? true : Boolean
+                  .valueOf(diplaySettings.get("showAllColLabels")
+                          .toString());
+          alignAnnot.centreColLabels = (diplaySettings
+                  .get("centreColLabels") == null) ? true
+                  : Boolean.valueOf(diplaySettings.get("centreColLabels")
+                          .toString());
+          alignAnnot.belowAlignment = (diplaySettings.get("belowAlignment") == null) ? false
+                  : Boolean.valueOf(diplaySettings.get("belowAlignment")
+                          .toString());
+          alignAnnot.visible = (diplaySettings.get("visible") == null) ? true
+                  : Boolean.valueOf(diplaySettings.get("visible")
+                          .toString());
+          alignAnnot.hasIcons = (diplaySettings.get("hasIcon") == null) ? true
+                  : Boolean.valueOf(diplaySettings.get("hasIcon")
+                          .toString());
+
+        }
+        if (alAnnot.get("score") != null)
+        {
+          alignAnnot.score = Double
+                  .valueOf(alAnnot.get("score").toString());
+        }
 
-        alignAnnot.score = alAnnot.get("score") == null ? null : Double
-                .valueOf(alAnnot.get("score").toString());
+        String calcId = (alAnnot.get("calcId") == null) ? "" : alAnnot.get(
+                "calcId").toString();
         alignAnnot.setCalcId(calcId);
         String seqHash = (alAnnot.get("sequenceRef") != null) ? alAnnot
                 .get("sequenceRef").toString() : null;
@@ -630,8 +627,9 @@ public class JSONFile extends AlignFile implements ComplexAlignFile
             alignAnnot.adjustForAlignment();
           }
         }
-        this.annotations.add(alignAnnot);
         alignAnnot.validateRangeAndDisplay();
+        this.annotations.add(alignAnnot);
+
       }
     } catch (Exception e)
     {