JAL-1835 made BioJSON embedding to html exports configurable, and trapped import...
[jalview.git] / src / jalview / io / HtmlSvgOutput.java
index 64dfc1c..7fcf629 100644 (file)
@@ -1,13 +1,10 @@
 package jalview.io;
 
-import jalview.datamodel.Alignment;
-import jalview.datamodel.AlignmentAnnotation;
+import jalview.api.FeatureRenderer;
+import jalview.datamodel.AlignmentExportData;
 import jalview.datamodel.SequenceI;
 import jalview.gui.AlignViewport;
 import jalview.gui.AlignmentPanel;
-import jalview.gui.AnnotationPanel;
-import jalview.gui.Desktop;
-import jalview.gui.FeatureRenderer;
 import jalview.gui.HTMLOptions;
 import jalview.math.AlignmentDimension;
 import jalview.util.MessageManager;
@@ -30,14 +27,12 @@ public class HtmlSvgOutput
   FeatureRenderer fr;
   AlignmentPanel ap;
 
-  AnnotationPanel annotationPanel;
 
   public HtmlSvgOutput(File file, AlignmentPanel ap)
   {
-
-      this.av = ap.av;
-      this.ap = ap;
-      this.annotationPanel = ap.getAnnotationPanel();
+    this.av = ap.av;
+    this.ap = ap;
+    fr = ap.cloneFeatureRenderer();
     generateHtmlSvgOutput(file);
   }
 
@@ -99,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 = getJSONData();
+      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();
@@ -261,39 +271,6 @@ public class HtmlSvgOutput
     return Printable.PAGE_EXISTS;
   }
   
-  private String getJSONData()
-  {
-    JSONFile jsonFile = new JSONFile();
-    Alignment al = new Alignment(av.getAlignment().getSequencesArray());
-    jsonFile.seqGroups = av.getAlignment().getGroups();
-    // jsonFile.addAnnotations(al);
-    jsonFile.setDisplayedFeatures(av.getFeaturesDisplayed());
-    Desktop.setCurrentAlignFrame(av.getAlignPanel().alignFrame);
-    for (SequenceI seq : av.getAlignment().getSequences())
-    {
-      jsonFile.seqs.add(seq);
-    }
-
-    // Add non auto calculated annotation to AlignFile
-    for (AlignmentAnnotation annot : av.getAlignment()
-            .getAlignmentAnnotation())
-    {
-      if (annot != null && !annot.autoCalculated)
-      {
-        if (annot.label.equals("PDB.CATempFactor"))
-        {
-          continue;
-        }
-        jsonFile.annotations.add(annot);
-      }
-    }
-
-    // jsonFile.setGlobalColorScheme(av.getGlobalColourScheme());
-    String jsonString = jsonFile.print();
-    System.out.println(">>>>>>>>>>> JSONFile : " + jsonString);
-    return jsonString;
-  }
-
   private String getHtml(String titleSvg, String alignmentSvg,
           String jsonData)
   {
@@ -301,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 + "'>");
     }
@@ -335,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();
   }
 }