JAL-1641 round trip test/refactoring
[jalview.git] / src / jalview / io / JSONFile.java
index 25a0064..b079a3c 100644 (file)
 
 package jalview.io;
 
+import jalview.api.AlignExportSettingI;
+import jalview.api.AlignViewportI;
 import jalview.api.AlignmentViewPanel;
 import jalview.api.ComplexAlignFile;
 import jalview.api.FeatureRenderer;
 import jalview.api.FeaturesDisplayedI;
 import jalview.datamodel.AlignmentAnnotation;
+import jalview.datamodel.AlignmentI;
 import jalview.datamodel.Annotation;
 import jalview.datamodel.ColumnSelection;
 import jalview.datamodel.HiddenSequences;
@@ -42,6 +45,7 @@ import jalview.json.binding.v1.SequenceGrpPojo;
 import jalview.json.binding.v1.SequencePojo;
 import jalview.schemes.ColourSchemeI;
 import jalview.schemes.ColourSchemeProperty;
+import jalview.viewmodel.seqfeatures.FeaturesDisplayed;
 
 import java.awt.Color;
 import java.io.IOException;
@@ -88,6 +92,7 @@ public class JSONFile extends AlignFile implements ComplexAlignFile
 
   private ArrayList<SequenceI> hiddenSequences;
 
+
   public JSONFile()
   {
     super();
@@ -116,6 +121,45 @@ public class JSONFile extends AlignFile implements ComplexAlignFile
     try
     {
       AlignmentPojo jsonAlignmentPojo = new AlignmentPojo();
+      AlignExportSettingI exportSettings = getExportSettings();
+
+      // if no export settings were supplied use the following with all values
+      // defaulting to true
+      if (exportSettings == null)
+      {
+        exportSettings = new AlignExportSettingI()
+        {
+          @Override
+          public boolean isExportHiddenSequences()
+          {
+            return true;
+          }
+
+          @Override
+          public boolean isExportHiddenColumns()
+          {
+            return true;
+          }
+
+          @Override
+          public boolean isExportGroups()
+          {
+            return true;
+          }
+
+          @Override
+          public boolean isExportFeatures()
+          {
+            return true;
+          }
+
+          @Override
+          public boolean isExportAnnotations()
+          {
+            return true;
+          }
+        };
+      }
 
       int count = 0;
       for (SequenceI seq : seqs)
@@ -144,14 +188,14 @@ public class JSONFile extends AlignFile implements ComplexAlignFile
       if (hiddenSections != null)
       {
         if (hiddenSections[0] != null
-                && getExportSettings()
+                && exportSettings
                         .isExportHiddenColumns())
         {
           jsonAlignmentPojo.getAppSettings().put("hiddenCols",
                   String.valueOf(hiddenSections[0]));
         }
         if (hiddenSections[1] != null
-                && getExportSettings()
+                && exportSettings
                         .isExportHiddenSequences())
         {
           jsonAlignmentPojo.getAppSettings().put("hiddenSeqs",
@@ -159,19 +203,19 @@ public class JSONFile extends AlignFile implements ComplexAlignFile
         }
       }
 
-      if (getExportSettings().isExportAnnotations())
+      if (exportSettings.isExportAnnotations())
       {
         jsonAlignmentPojo
                 .setAlignAnnotation(annotationToJsonPojo(annotations));
       }
 
-      if (getExportSettings().isExportFeatures())
+      if (exportSettings.isExportFeatures())
       {
         jsonAlignmentPojo
                 .setSeqFeatures(sequenceFeatureToJsonPojo(seqs, fr));
       }
 
-      if (getExportSettings().isExportGroups()
+      if (exportSettings.isExportGroups()
               && seqGroups != null
               && seqGroups.size() > 0)
       {
@@ -257,10 +301,10 @@ public class JSONFile extends AlignFile implements ComplexAlignFile
     return hiddenSections;
   }
 
-  public static List<SequenceFeaturesPojo> sequenceFeatureToJsonPojo(
+  public List<SequenceFeaturesPojo> sequenceFeatureToJsonPojo(
           List<SequenceI> seqs, FeatureRenderer fr)
   {
-    FeaturesDisplayedI displayedFeatures = (fr == null) ? null : fr
+    displayedFeatures = (fr == null) ? null : fr
             .getFeaturesDisplayed();
     List<SequenceFeaturesPojo> sequenceFeaturesPojo = new ArrayList<SequenceFeaturesPojo>();
     for (SequenceI seq : seqs)
@@ -283,6 +327,7 @@ public class JSONFile extends AlignFile implements ComplexAlignFile
         {
           SequenceFeaturesPojo jsonFeature = new SequenceFeaturesPojo(
                   String.valueOf(seq.hashCode()));
+
           String featureColour = (fr == null) ? null : jalview.util.Format
                   .getHexString(fr
                   .findFeatureColour(Color.white, seq,
@@ -425,8 +470,9 @@ public class JSONFile extends AlignFile implements ComplexAlignFile
             }
           }
         }
-        ColourSchemeI scheme = getJalviewColorScheme(colourScheme);
-        SequenceGroup seqGrp = new SequenceGroup(grpSeqs, grpName, scheme,
+        ColourSchemeI grpColourScheme = getJalviewColorScheme(colourScheme);
+        SequenceGroup seqGrp = new SequenceGroup(grpSeqs, grpName,
+                grpColourScheme,
                 displayBoxes, displayText, colourText, startRes, endRes);
         seqGrp.setShowNonconserved(showNonconserved);
         seqGrp.setDescription(description);
@@ -509,6 +555,7 @@ public class JSONFile extends AlignFile implements ComplexAlignFile
   {
     if (jsonSeqFeatures != null)
     {
+      displayedFeatures = new FeaturesDisplayed();
       for (Iterator<JSONObject> seqFeatureItr = jsonSeqFeatures.iterator(); seqFeatureItr
               .hasNext();)
       {
@@ -540,6 +587,7 @@ public class JSONFile extends AlignFile implements ComplexAlignFile
         sequenceFeature.setBegin(seq.findPosition(begin.intValue()));
         sequenceFeature.setEnd(seq.findPosition(end.intValue()) - 1);
         seq.addSequenceFeature(sequenceFeature);
+        displayedFeatures.setVisible(type);
       }
     }
   }
@@ -580,6 +628,7 @@ public class JSONFile extends AlignFile implements ComplexAlignFile
     this.colourScheme = colourScheme;
   }
 
+  @Override
   public FeaturesDisplayedI getDisplayedFeatures()
   {
     return displayedFeatures;
@@ -590,18 +639,19 @@ public class JSONFile extends AlignFile implements ComplexAlignFile
     this.displayedFeatures = displayedFeatures;
   }
 
-  @Override
+
   public void configureForView(AlignmentViewPanel avpanel)
   {
     super.configureForView(avpanel);
+    AlignViewportI viewport = avpanel.getAlignViewport();
+    AlignmentI alignment = viewport.getAlignment();
+    AlignmentAnnotation[] annots = alignment.getAlignmentAnnotation();
 
-    seqGroups = avpanel.getAlignment().getGroups();
-    setDisplayedFeatures(getViewport().getFeaturesDisplayed());
+    seqGroups = alignment.getGroups();
     fr = avpanel.cloneFeatureRenderer();
 
     // Add non auto calculated annotation to AlignFile
-    for (AlignmentAnnotation annot : getViewport().getAlignment()
-            .getAlignmentAnnotation())
+    for (AlignmentAnnotation annot : annots)
     {
       if (annot != null && !annot.autoCalculated)
       {
@@ -612,10 +662,10 @@ public class JSONFile extends AlignFile implements ComplexAlignFile
         annotations.add(annot);
       }
     }
-    globalColorScheme = ColourSchemeProperty.getColourName(getViewport()
+    globalColorScheme = ColourSchemeProperty.getColourName(viewport
             .getGlobalColourScheme());
-    setDisplayedFeatures(getViewport().getFeaturesDisplayed());
-    showSeqFeatures = getViewport().isShowSequenceFeatures();
+    setDisplayedFeatures(viewport.getFeaturesDisplayed());
+    showSeqFeatures = viewport.isShowSequenceFeatures();
 
   }