add ability to launch jalview from exported html + svg file. Abstracted Jalview build...
[jalview.git] / src / jalview / io / JSONFile.java
index bbbc122..b8e2454 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.bin.BuildDetails;
 import jalview.datamodel.AlignmentAnnotation;
+import jalview.datamodel.AlignmentI;
 import jalview.datamodel.Annotation;
 import jalview.datamodel.ColumnSelection;
 import jalview.datamodel.HiddenSequences;
@@ -42,6 +46,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;
@@ -60,9 +65,9 @@ public class JSONFile extends AlignFile implements ComplexAlignFile
 {
   private ColourSchemeI colourScheme;
 
-  private String version = "2.9";
+  private static String version = new BuildDetails().getVersion();
 
-  private String webstartUrl = "www.jalview.org/services/launchApp";
+  private String webstartUrl = "http://www.jalview.org/services/launchApp";
 
   private String application = "Jalview";
 
@@ -88,6 +93,7 @@ public class JSONFile extends AlignFile implements ComplexAlignFile
 
   private ArrayList<SequenceI> hiddenSequences;
 
+
   public JSONFile()
   {
     super();
@@ -109,7 +115,6 @@ public class JSONFile extends AlignFile implements ComplexAlignFile
     parse(getReader());
 
   }
-
   @Override
   public String print()
   {
@@ -117,14 +122,44 @@ public class JSONFile extends AlignFile implements ComplexAlignFile
     try
     {
       AlignmentPojo jsonAlignmentPojo = new AlignmentPojo();
-      if (getViewport() != null)
+      AlignExportSettingI exportSettings = getExportSettings();
+
+      // if no export settings were supplied use the following with all values
+      // defaulting to true
+      if (exportSettings == null)
       {
-        globalColorScheme = ColourSchemeProperty
-                .getColourName(getViewport()
-                .getGlobalColourScheme());
-        setDisplayedFeatures(getViewport().getFeaturesDisplayed());
-        showSeqFeatures = getViewport().isShowSequenceFeatures();
-        fr = getViewport().getFeatureRenderer();
+        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;
@@ -142,7 +177,6 @@ public class JSONFile extends AlignFile implements ComplexAlignFile
         jsonSeqPojo.setSeq(seq.getSequenceAsString());
         jsonAlignmentPojo.getSeqs().add(jsonSeqPojo);
       }
-
       jsonAlignmentPojo.setGlobalColorScheme(globalColorScheme);
       jsonAlignmentPojo.getAppSettings().put("application", application);
       jsonAlignmentPojo.getAppSettings().put("version", version);
@@ -154,14 +188,14 @@ public class JSONFile extends AlignFile implements ComplexAlignFile
       if (hiddenSections != null)
       {
         if (hiddenSections[0] != null
-                && getViewport().getExportSettings()
+                && exportSettings
                         .isExportHiddenColumns())
         {
           jsonAlignmentPojo.getAppSettings().put("hiddenCols",
                   String.valueOf(hiddenSections[0]));
         }
         if (hiddenSections[1] != null
-                && getViewport().getExportSettings()
+                && exportSettings
                         .isExportHiddenSequences())
         {
           jsonAlignmentPojo.getAppSettings().put("hiddenSeqs",
@@ -169,19 +203,19 @@ public class JSONFile extends AlignFile implements ComplexAlignFile
         }
       }
 
-      if (getViewport().getExportSettings().isExportAnnotations())
+      if (exportSettings.isExportAnnotations())
       {
         jsonAlignmentPojo
                 .setAlignAnnotation(annotationToJsonPojo(annotations));
       }
 
-      if (getViewport().getExportSettings().isExportFeatures())
+      if (exportSettings.isExportFeatures())
       {
         jsonAlignmentPojo
                 .setSeqFeatures(sequenceFeatureToJsonPojo(seqs, fr));
       }
 
-      if (getViewport().getExportSettings().isExportGroups()
+      if (exportSettings.isExportGroups()
               && seqGroups != null
               && seqGroups.size() > 0)
       {
@@ -267,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)
@@ -293,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,
@@ -435,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);
@@ -519,6 +555,7 @@ public class JSONFile extends AlignFile implements ComplexAlignFile
   {
     if (jsonSeqFeatures != null)
     {
+      displayedFeatures = new FeaturesDisplayed();
       for (Iterator<JSONObject> seqFeatureItr = jsonSeqFeatures.iterator(); seqFeatureItr
               .hasNext();)
       {
@@ -550,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);
       }
     }
   }
@@ -590,6 +628,7 @@ public class JSONFile extends AlignFile implements ComplexAlignFile
     this.colourScheme = colourScheme;
   }
 
+  @Override
   public FeaturesDisplayedI getDisplayedFeatures()
   {
     return displayedFeatures;
@@ -601,33 +640,33 @@ public class JSONFile extends AlignFile implements ComplexAlignFile
   }
 
 
-  public static String getJSONData(AlignViewportI av)
+  public void configureForView(AlignmentViewPanel avpanel)
   {
-    JSONFile jsonFile = new JSONFile();
-    jsonFile.setViewport(av);
-    jsonFile.seqGroups = av.getAlignment().getGroups();
-    jsonFile.setDisplayedFeatures(av.getFeaturesDisplayed());
+    super.configureForView(avpanel);
+    AlignViewportI viewport = avpanel.getAlignViewport();
+    AlignmentI alignment = viewport.getAlignment();
+    AlignmentAnnotation[] annots = alignment.getAlignmentAnnotation();
+
+    seqGroups = alignment.getGroups();
+    fr = avpanel.cloneFeatureRenderer();
 
-    for (SequenceI seq : av.getAlignment().getSequences())
-    {
-      jsonFile.seqs.add(seq);
-    }
-  
     // Add non auto calculated annotation to AlignFile
-    for (AlignmentAnnotation annot : av.getAlignment()
-            .getAlignmentAnnotation())
+    for (AlignmentAnnotation annot : annots)
     {
       if (annot != null && !annot.autoCalculated)
       {
-        if (annot.label.equals("PDB.CATempFactor"))
+        if (!annot.visible)
         {
           continue;
         }
-        jsonFile.annotations.add(annot);
+        annotations.add(annot);
       }
     }
-    String jsonString = jsonFile.print();
-    return jsonString;
+    globalColorScheme = ColourSchemeProperty.getColourName(viewport
+            .getGlobalColourScheme());
+    setDisplayedFeatures(viewport.getFeaturesDisplayed());
+    showSeqFeatures = viewport.isShowSequenceFeatures();
+
   }
 
   public boolean isShowSeqFeatures()