+package jalview.io;
+
+import static java.nio.file.Files.readAllBytes;
+import static java.nio.file.Paths.get;
+import jalview.datamodel.AlignmentI;
+import jalview.datamodel.SequenceI;
+import jalview.gui.AlignViewport;
+import jalview.gui.AlignmentPanel;
+import jalview.gui.FeatureRenderer;
+import jalview.gui.SequenceRenderer;
+import jalview.util.MessageManager;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+
+public class BioJsHTMLOutput
+{
+ private AlignViewport av;
+ private FeatureRenderer fr;
+
+ public BioJsHTMLOutput(AlignmentPanel ap, SequenceRenderer sr,
+ FeatureRenderer fr1)
+ {
+ System.out.println("BioJs working as expected so far");
+ this.av = ap.av;
+
+ this.fr = new FeatureRenderer(ap);
+ fr.transferSettings(fr1);
+ exportAsBioJsHtml();
+ }
+
+ private void exportAsBioJsHtml()
+ {
+ try
+ {
+ JalviewFileChooser jvFileChooser = getJalviewFileChooserOption();
+ int fileChooserOpt = jvFileChooser.showSaveDialog(null);
+ if (fileChooserOpt == JalviewFileChooser.APPROVE_OPTION)
+ {
+ jalview.bin.Cache.setProperty("LAST_DIRECTORY", jvFileChooser
+ .getSelectedFile().getParent());
+ String selectedFile = jvFileChooser.getSelectedFile().getPath();
+ String generartedBioJs = generateBioJsAlignmentData(av
+ .getAlignment());
+ PrintWriter out = new java.io.PrintWriter(new java.io.FileWriter(
+ selectedFile));
+ out.print(generartedBioJs);
+ out.close();
+ jalview.util.BrowserLauncher.openURL("file:///" + selectedFile);
+ }
+ } catch (Exception ex)
+ {
+ ex.printStackTrace();
+ }
+ }
+
+ private JalviewFileChooser getJalviewFileChooserOption()
+ {
+ JalviewFileChooser chooser = new JalviewFileChooser(
+ jalview.bin.Cache.getProperty("LAST_DIRECTORY"), new String[]
+ { "html" }, new String[]
+ { "HTML files" }, "HTML files");
+
+ chooser.setFileView(new JalviewFileView());
+ // TODO uncomment when supported by MassageManager
+ // chooser.setDialogTitle(MessageManager.getString("label.save_as_biojs_html"));
+ chooser.setDialogTitle("save as BioJs HTML");
+ chooser.setToolTipText(MessageManager.getString("action.save"));
+
+ return chooser;
+ }
+
+ private String generateBioJsAlignmentData(AlignmentI alignment)
+ throws IOException
+ {
+ StringBuilder bioJsData = new StringBuilder();
+ int count = 0;
+ for (SequenceI seq : alignment.getSequences())
+ {
+ bioJsData.append("seqOnFly.push({seq:'" + seq.getSequenceAsString()
+ + "', name:'" + seq.getName() + "', id:" + ++count + "});");
+ }
+ String bioJSTemplate = new String(
+ readAllBytes(get("resources/templates/BioJSTemplate.txt")));
+
+ return bioJSTemplate.replaceAll("#sequenceData#", bioJsData.toString());
+ }
+
+
+}
+