3 import static java.nio.file.Files.readAllBytes;
4 import static java.nio.file.Paths.get;
5 import jalview.datamodel.AlignmentI;
6 import jalview.datamodel.SequenceI;
7 import jalview.gui.AlignViewport;
8 import jalview.gui.AlignmentPanel;
9 import jalview.gui.FeatureRenderer;
10 import jalview.gui.SequenceRenderer;
11 import jalview.json.binding.v1.BioJsAlignmentPojo;
12 import jalview.json.binding.v1.BioJsSeqPojo;
13 import jalview.util.MessageManager;
15 import java.io.IOException;
16 import java.io.PrintWriter;
18 import org.json.simple.parser.ParseException;
20 import com.json.JSONException;
22 public class BioJsHTMLOutput {
23 private AlignViewport av;
24 private FeatureRenderer fr;
26 public BioJsHTMLOutput(AlignmentPanel ap, SequenceRenderer sr, FeatureRenderer fr1) {
28 this.fr = new FeatureRenderer(ap);
29 fr.transferSettings(fr1);
33 private void exportAsBioJsHtml() {
35 JalviewFileChooser jvFileChooser = getJalviewFileChooserOption();
36 int fileChooserOpt = jvFileChooser.showSaveDialog(null);
37 if (fileChooserOpt == JalviewFileChooser.APPROVE_OPTION) {
38 jalview.bin.Cache.setProperty("LAST_DIRECTORY", jvFileChooser.getSelectedFile().getParent());
39 String selectedFile = jvFileChooser.getSelectedFile().getPath();
40 String generartedBioJs = generateBioJsAlignmentData(av.getAlignment());
41 PrintWriter out = new java.io.PrintWriter(new java.io.FileWriter(selectedFile));
42 out.print(generartedBioJs);
44 jalview.util.BrowserLauncher.openURL("file:///" + selectedFile);
46 } catch (Exception ex) {
51 private JalviewFileChooser getJalviewFileChooserOption() {
52 JalviewFileChooser chooser = new JalviewFileChooser(jalview.bin.Cache.getProperty("LAST_DIRECTORY"), new String[] { "html" }, new String[] { "HTML files" }, "HTML files");
53 chooser.setFileView(new JalviewFileView());
55 // TODO uncomment when supported by MassageManager
56 chooser.setDialogTitle(MessageManager.getString("label.save_as_biojs_html"));
57 chooser.setDialogTitle("save as BioJs HTML");
58 chooser.setToolTipText(MessageManager.getString("action.save"));
63 private String generateBioJsAlignmentData(AlignmentI alignment) throws IOException, JSONException {
64 BioJsAlignmentPojo bjsAlignment = new BioJsAlignmentPojo();
66 for (SequenceI seq : alignment.getSequences()) {
67 StringBuilder name = new StringBuilder();
68 name.append(seq.getName()).append("/").append(seq.getStart()).append("-").append(seq.getEnd());
69 bjsAlignment.getSeqs().add(new BioJsSeqPojo(String.valueOf(++count), name.toString(), seq.getSequenceAsString()));
73 // av.getGlobalColourScheme().;
74 String seqs = new com.json.JSONObject(bjsAlignment).getString("seqs");
75 String bioJSTemplate = new String(readAllBytes(get("resources/templates/BioJSTemplate.txt")));
79 return bioJSTemplate.replaceAll("#sequenceData#", seqs).replaceAll("#scheme#", "zappo");
82 public static void main(String[] args) throws IOException, ParseException {