JAL-1835 made BioJSON embedding to html exports configurable, and trapped import...
[jalview.git] / src / jalview / io / HtmlSvgOutput.java
index 7e02118..7fcf629 100644 (file)
@@ -1,6 +1,7 @@
 package jalview.io;
 
 import jalview.api.FeatureRenderer;
+import jalview.datamodel.AlignmentExportData;
 import jalview.datamodel.SequenceI;
 import jalview.gui.AlignViewport;
 import jalview.gui.AlignmentPanel;
@@ -93,13 +94,28 @@ public class HtmlSvgOutput
       }
       printUnwrapped(aDimension.getWidth(), aDimension.getHeight(), 0, g1,
               g2);
-      FileOutputStream out = new FileOutputStream(file);
 
       String titleSvgData = g1.getSVGDocument();
       String alignSvgData = g2.getSVGDocument();
-      String jsonData = JSONFile.getJSONData(ap);
+      String jsonData = null;
+      boolean isEmbbedBioJSON = Boolean.valueOf(jalview.bin.Cache
+              .getDefault("EXPORT_EMBBED_BIOJSON", "true"));
+      if (isEmbbedBioJSON)
+      {
+      AlignmentExportData exportData = ap.alignFrame.getAlignmentForExport(
+              JSONFile.FILE_DESC, av);
+      if (exportData.getSettings().isCancelled())
+      {
+        return;
+      }
+        jsonData = new FormatAdapter(ap, exportData.getSettings())
+              .formatSequences(JSONFile.FILE_DESC, exportData
+                      .getAlignment(), exportData.getOmitHidden(),
+                      exportData.getStartEndPostions(), ap
+                              .getAlignViewport().getColumnSelection());
+      }
       String htmlData = getHtml(titleSvgData, alignSvgData, jsonData);
-
+      FileOutputStream out = new FileOutputStream(file);
       out.write(htmlData.getBytes());
       out.flush();
       out.close();
@@ -262,6 +278,7 @@ public class HtmlSvgOutput
     htmlSvg.append("<html>\n");
     if (jsonData != null)
     {
+      htmlSvg.append("<button onclick=\"javascipt:openJalviewUsingCurrentUrl();\">Launch in Jalview</button>");
       htmlSvg.append("<input type=\"hidden\" name=\"seqData\" id=\"seqData\" value='"
               + jsonData + "'>");
     }
@@ -296,8 +313,35 @@ public class HtmlSvgOutput
             + "subCatContainer.scroll(\nfunction() {\n"
             + "subCatContainer.scrollTop($(this).scrollTop());\n});\n");
 
-    htmlSvg.append("</script></hmtl>");
-
+    htmlSvg.append("</script>\n");
+
+    // javascript for launching file in Jalview
+
+    htmlSvg.append("<script language=\"JavaScript\">\n");
+    htmlSvg.append("function openJalviewUsingCurrentUrl(){\n");
+    htmlSvg.append("    var json = JSON.parse(document.getElementById(\"seqData\").value);\n");
+    htmlSvg.append("    var jalviewVersion = json['appSettings'].version;\n");
+    htmlSvg.append("    var url = json['appSettings'].webStartUrl;\n");
+    htmlSvg.append("    var myForm = document.createElement(\"form\");\n\n");
+    htmlSvg.append("    var heap = document.createElement(\"input\");\n");
+    htmlSvg.append("    heap.setAttribute(\"name\", \"jvm-max-heap\") ;\n");
+    htmlSvg.append("    heap.setAttribute(\"value\", \"2G\");\n\n");
+    htmlSvg.append("    var target = document.createElement(\"input\");\n");
+    htmlSvg.append("    target.setAttribute(\"name\", \"open\");\n");
+    htmlSvg.append("    target.setAttribute(\"value\", document.URL);\n\n");
+    htmlSvg.append("    var jvVersion = document.createElement(\"input\");\n");
+    htmlSvg.append("    jvVersion.setAttribute(\"name\", \"version\") ;\n");
+    htmlSvg.append("    jvVersion.setAttribute(\"value\", jalviewVersion);\n\n");
+    htmlSvg.append("    myForm.action = url;\n");
+    htmlSvg.append("    myForm.appendChild(heap);\n");
+    htmlSvg.append("    myForm.appendChild(target);\n");
+    htmlSvg.append("    myForm.appendChild(jvVersion);\n");
+    htmlSvg.append("    document.body.appendChild(myForm);\n");
+    htmlSvg.append("    myForm.submit() ;\n");
+    htmlSvg.append("    document.body.removeChild(myForm);\n");
+    htmlSvg.append("}\n");
+    htmlSvg.append("</script>\n");
+    htmlSvg.append("</hmtl>");
     return htmlSvg.toString();
   }
 }