JAL-2175 code/test fixes/tidy for PFAM/MSF/JSON roundtrip
[jalview.git] / src / jalview / io / JSONFile.java
index 4e293db..653c071 100644 (file)
@@ -26,6 +26,7 @@ import jalview.api.AlignViewportI;
 import jalview.api.AlignmentViewPanel;
 import jalview.api.ComplexAlignFile;
 import jalview.api.FeatureRenderer;
+import jalview.api.FeatureSettingsModelI;
 import jalview.api.FeaturesDisplayedI;
 import jalview.bin.BuildDetails;
 import jalview.datamodel.AlignmentAnnotation;
@@ -374,16 +375,20 @@ public class JSONFile extends AlignFile implements ComplexAlignFile
       AlignmentAnnotationPojo alignAnnotPojo = new AlignmentAnnotationPojo();
       alignAnnotPojo.setDescription(annot.description);
       alignAnnotPojo.setLabel(annot.label);
-      alignAnnotPojo.setScore(annot.score);
+      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);
+      annotSetting.setHasIcon(annot.hasIcons);
       alignAnnotPojo.setAnnotationSettings(annotSetting);
       SequenceI refSeq = annot.sequenceRef;
       if (refSeq != null)
@@ -399,7 +404,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
@@ -475,7 +483,6 @@ public class JSONFile extends AlignFile implements ComplexAlignFile
         seqMap.put(seqUniqueId, seq);
       }
 
-
       parseFeatures(jsonSeqArray);
 
       for (Iterator<JSONObject> seqGrpIter = seqGrpJsonArray.iterator(); seqGrpIter
@@ -514,8 +521,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);
@@ -528,11 +534,6 @@ public class JSONFile extends AlignFile implements ComplexAlignFile
               .hasNext();)
       {
         JSONObject alAnnot = alAnnotIter.next();
-        if (alAnnot == null)
-        {
-          continue;
-        }
-
         JSONArray annotJsonArray = (JSONArray) alAnnot.get("annotations");
         Annotation[] annotations = new Annotation[annotJsonArray.size()];
         int count = 0;
@@ -556,11 +557,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;
         }
@@ -569,8 +573,7 @@ public class JSONFile extends AlignFile implements ComplexAlignFile
                 .get("label").toString(), alAnnot.get("description")
                 .toString(), annotations);
         alignAnnot.graph = (alAnnot.get("graphType") == null) ? 0 : Integer
-                .valueOf(alAnnot.get("graphType")
-                        .toString());
+                .valueOf(alAnnot.get("graphType").toString());
 
         JSONObject diplaySettings = (JSONObject) alAnnot
                 .get("annotationSettings");
@@ -594,6 +597,9 @@ public class JSONFile extends AlignFile implements ComplexAlignFile
           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)
@@ -621,7 +627,9 @@ public class JSONFile extends AlignFile implements ComplexAlignFile
             alignAnnot.adjustForAlignment();
           }
         }
+        alignAnnot.validateRangeAndDisplay();
         this.annotations.add(alignAnnot);
+
       }
     } catch (Exception e)
     {
@@ -702,6 +710,7 @@ public class JSONFile extends AlignFile implements ComplexAlignFile
     }
   }
 
+  @Override
   public String getGlobalColourScheme()
   {
     return globalColourScheme;
@@ -723,8 +732,13 @@ public class JSONFile extends AlignFile implements ComplexAlignFile
     this.displayedFeatures = displayedFeatures;
   }
 
+  @Override
   public void configureForView(AlignmentViewPanel avpanel)
   {
+    if (avpanel == null)
+    {
+      return;
+    }
     super.configureForView(avpanel);
     AlignViewportI viewport = avpanel.getAlignViewport();
     AlignmentI alignment = viewport.getAlignment();
@@ -734,11 +748,14 @@ public class JSONFile extends AlignFile implements ComplexAlignFile
     fr = avpanel.cloneFeatureRenderer();
 
     // Add non auto calculated annotation to AlignFile
-    for (AlignmentAnnotation annot : annots)
+    if (annots != null)
     {
-      if (annot != null && !annot.autoCalculated)
+      for (AlignmentAnnotation annot : annots)
       {
-        annotations.add(annot);
+        if (annot != null && !annot.autoCalculated)
+        {
+          annotations.add(annot);
+        }
       }
     }
     globalColourScheme = ColourSchemeProperty.getColourName(viewport
@@ -748,6 +765,7 @@ public class JSONFile extends AlignFile implements ComplexAlignFile
 
   }
 
+  @Override
   public boolean isShowSeqFeatures()
   {
     return showSeqFeatures;
@@ -768,6 +786,7 @@ public class JSONFile extends AlignFile implements ComplexAlignFile
     return hiddenColumns;
   }
 
+  @Override
   public ColumnSelection getColumnSelection()
   {
     return columnSelection;
@@ -778,6 +797,7 @@ public class JSONFile extends AlignFile implements ComplexAlignFile
     this.columnSelection = columnSelection;
   }
 
+  @Override
   public SequenceI[] getHiddenSequences()
   {
     if (hiddenSequences == null || hiddenSequences.isEmpty())
@@ -857,4 +877,19 @@ public class JSONFile extends AlignFile implements ComplexAlignFile
       this.exportJalviewSettings = exportJalviewSettings;
     }
   }
+
+  /**
+   * Returns a descriptor for suitable feature display settings with
+   * <ul>
+   * <li>ResNums or insertions features visible</li>
+   * <li>insertions features coloured red</li>
+   * <li>ResNum features coloured by label</li>
+   * <li>Insertions displayed above (on top of) ResNums</li>
+   * </ul>
+   */
+  @Override
+  public FeatureSettingsModelI getFeatureColourScheme()
+  {
+    return new PDBFeatureSettings();
+  }
 }