JAL-1641 updated json schema to make it more generic in order to accomodate more...
[jalview.git] / src / jalview / io / JSONFile.java
index 30383f3..5e2139e 100644 (file)
@@ -27,15 +27,15 @@ import jalview.api.FeatureRenderer;
 import jalview.api.FeaturesDisplayedI;
 import jalview.datamodel.AlignmentAnnotation;
 import jalview.datamodel.Annotation;
+import jalview.datamodel.HiddenSequences;
 import jalview.datamodel.Sequence;
 import jalview.datamodel.SequenceFeature;
 import jalview.datamodel.SequenceGroup;
 import jalview.datamodel.SequenceI;
 import jalview.json.binding.v1.AlignmentAnnotationPojo;
 import jalview.json.binding.v1.AlignmentPojo;
+import jalview.json.binding.v1.AlignmentPojo.JalviewBioJsColorSchemeMapper;
 import jalview.json.binding.v1.AnnotationPojo;
-import jalview.json.binding.v1.JalviewSettingsPojo;
-import jalview.json.binding.v1.JalviewSettingsPojo.JalviewBioJsColorSchemeMapper;
 import jalview.json.binding.v1.SequenceFeaturesPojo;
 import jalview.json.binding.v1.SequenceGrpPojo;
 import jalview.json.binding.v1.SequencePojo;
@@ -58,9 +58,11 @@ public class JSONFile extends AlignFile
 {
   private ColourSchemeI colourScheme;
 
-  private String jalviewVersion;
+  private String version = "2.9";
 
-  private String webStartLaunchServletUrl;
+  private String webstartUrl = "www.jalview.org/services/launchApp";
+
+  private String application = "Jalview";
 
   public static final String FILE_EXT = "json";
 
@@ -150,15 +152,21 @@ public class JSONFile extends AlignFile
 
       if (jsonExportSettings.isExportJalviewSettings())
       {
-        jalviewVersion = "";
-        webStartLaunchServletUrl = "www.jalview.org/services/launchApp";
-
-        JalviewSettingsPojo jvSettings = new JalviewSettingsPojo();
-        jvSettings.setGlobalColorScheme(globalColorScheme);
-        jvSettings.setJalviewVersion(jalviewVersion);
-        jvSettings.setWebStartUrl(webStartLaunchServletUrl);
-        jvSettings.setShowSeqFeatures(showSeqFeatures);
-        jsonAlignmentPojo.setJalviewSettings(jvSettings);
+        jsonAlignmentPojo.setGlobalColorScheme(globalColorScheme);
+        jsonAlignmentPojo.getAppSettings().put("application", application);
+        jsonAlignmentPojo.getAppSettings().put("version", version);
+        jsonAlignmentPojo.getAppSettings().put("webStartUrl", webstartUrl);
+        jsonAlignmentPojo.getAppSettings().put("showSeqFeatures",
+                String.valueOf(showSeqFeatures));
+
+        String[] hiddenSections = exportHiddenSections();
+        if (hiddenSections != null)
+        {
+          jsonAlignmentPojo.getAppSettings().put("hiddenCols",
+                  String.valueOf(hiddenSections[0]));
+          jsonAlignmentPojo.getAppSettings().put("hiddenSeqs",
+                  String.valueOf(hiddenSections[1]));
+        }
       }
 
       if (jsonExportSettings.isExportAnnotations())
@@ -209,6 +217,60 @@ public class JSONFile extends AlignFile
     return jsonOutput;
   }
 
+  public String[] exportHiddenSections()
+  {
+    String[] hiddenSections = new String[2];
+    if (getViewport() == null)
+    {
+      return null;
+    }
+
+    System.out.println("--- Hidden Sections ---");
+    // hidden column business
+    if (getViewport().hasHiddenColumns())
+    {
+      System.out.print("Hidden Cols : ");
+      List<int[]> hiddenCols = getViewport().getColumnSelection()
+              .getHiddenColumns();
+      StringBuilder hiddenColsBuilder = new StringBuilder();
+      for (int[] range : hiddenCols)
+      {
+        hiddenColsBuilder.append(";").append(range[0]).append("-")
+                .append(range[1]);
+      }
+
+      hiddenColsBuilder.deleteCharAt(0);
+      hiddenSections[0] = hiddenColsBuilder.toString();
+      System.out.println(hiddenSections[0]);
+    }
+
+    // hidden rows/seqs business
+    HiddenSequences hiddenSeqsObj = getViewport().getAlignment()
+            .getHiddenSequences();
+    if (hiddenSeqsObj == null)
+    {
+      return hiddenSections;
+    }
+
+    SequenceI[] hiddenSeqs = hiddenSeqsObj.hiddenSequences;
+    System.out.print("Hidden Seqs : ");
+    StringBuilder hiddenSeqsBuilder = new StringBuilder();
+    for (SequenceI hiddenSeq : hiddenSeqs)
+    {
+      if (hiddenSeq != null)
+      {
+        hiddenSeqsBuilder.append(";").append(hiddenSeq.hashCode());
+      }
+    }
+    if (hiddenSeqsBuilder.length() > 0)
+    {
+      hiddenSeqsBuilder.deleteCharAt(0);
+    }
+    hiddenSections[1] = hiddenSeqsBuilder.toString();
+    System.out.println(hiddenSections[1]);
+    return hiddenSections;
+  }
+
   public static List<SequenceFeaturesPojo> sequenceFeatureToJsonPojo(
           List<SequenceI> seqs, FeatureRenderer fr)
   {
@@ -304,7 +366,7 @@ public class JSONFile extends AlignFile
       JSONArray seqGrpJsonArray = (JSONArray) alignmentJsonObj
               .get("seqGroups");
       JSONObject jvSettingsJsonObj = (JSONObject) alignmentJsonObj
-              .get("jalviewSettings");
+              .get("appSettings");
 
       if (jvSettingsJsonObj != null)
       {