5a236dc80e2d27cceb4c464e5f86ea37c1c1f065
[jalview.git] / src / jalview / io / BioJsHTMLOutput.java
1 package jalview.io;
2
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.util.MessageManager;
12
13 import java.io.IOException;
14 import java.io.PrintWriter;
15
16 public class BioJsHTMLOutput
17 {
18   private AlignViewport av;
19   private FeatureRenderer fr;
20
21   public BioJsHTMLOutput(AlignmentPanel ap, SequenceRenderer sr,
22           FeatureRenderer fr1)
23   {
24     System.out.println("BioJs working as expected so far");
25     this.av = ap.av;
26
27     this.fr = new FeatureRenderer(ap);
28     fr.transferSettings(fr1);
29     exportAsBioJsHtml();
30   }
31
32   private void exportAsBioJsHtml()
33   {
34     try
35     {
36       JalviewFileChooser jvFileChooser = getJalviewFileChooserOption();
37       int fileChooserOpt = jvFileChooser.showSaveDialog(null);
38       if (fileChooserOpt == JalviewFileChooser.APPROVE_OPTION)
39       {
40         jalview.bin.Cache.setProperty("LAST_DIRECTORY", jvFileChooser
41                 .getSelectedFile().getParent());
42         String selectedFile = jvFileChooser.getSelectedFile().getPath();
43         String generartedBioJs = generateBioJsAlignmentData(av
44                 .getAlignment());
45         PrintWriter out = new java.io.PrintWriter(new java.io.FileWriter(
46                 selectedFile));
47         out.print(generartedBioJs);
48         out.close();
49         jalview.util.BrowserLauncher.openURL("file:///" + selectedFile);
50       }
51     } catch (Exception ex)
52     {
53       ex.printStackTrace();
54     }
55   }
56
57   private JalviewFileChooser getJalviewFileChooserOption()
58   {
59     JalviewFileChooser chooser = new JalviewFileChooser(
60             jalview.bin.Cache.getProperty("LAST_DIRECTORY"), new String[]
61             { "html" }, new String[]
62             { "HTML files" }, "HTML files");
63
64     chooser.setFileView(new JalviewFileView());
65     // TODO uncomment when supported by MassageManager
66     // chooser.setDialogTitle(MessageManager.getString("label.save_as_biojs_html"));
67     chooser.setDialogTitle("save as BioJs HTML");
68     chooser.setToolTipText(MessageManager.getString("action.save"));
69
70     return chooser;
71   }
72
73   private String generateBioJsAlignmentData(AlignmentI alignment)
74           throws IOException
75   {
76     StringBuilder bioJsData = new StringBuilder();
77     int count = 0;
78     for (SequenceI seq : alignment.getSequences())
79     {
80       bioJsData.append("seqOnFly.push({seq:'" + seq.getSequenceAsString()
81               + "', name:'" + seq.getName() + "', id:" + ++count + "});");
82     }
83     String bioJSTemplate = new String(
84             readAllBytes(get("resources/templates/BioJSTemplate.txt")));
85
86     return bioJSTemplate.replaceAll("#sequenceData#", bioJsData.toString());
87   }
88
89
90 }
91