Updated BioJs Html to be capable of launching jalivew
[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.json.binding.v1.BioJsAlignmentPojo;
12 import jalview.json.binding.v1.BioJsSeqPojo;
13 import jalview.util.MessageManager;
14
15 import java.io.IOException;
16 import java.io.PrintWriter;
17
18 import org.json.simple.parser.ParseException;
19
20 import com.json.JSONException;
21
22 public class BioJsHTMLOutput {
23         private AlignViewport av;
24         private FeatureRenderer fr;
25
26         public BioJsHTMLOutput(AlignmentPanel ap, SequenceRenderer sr, FeatureRenderer fr1) {
27                 this.av = ap.av;
28                 this.fr = new FeatureRenderer(ap);
29                 fr.transferSettings(fr1);
30                 exportAsBioJsHtml();
31         }
32
33         private void exportAsBioJsHtml() {
34                 try {
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);
43                                 out.close();
44                                 jalview.util.BrowserLauncher.openURL("file:///" + selectedFile);
45                         }
46                 } catch (Exception ex) {
47                         ex.printStackTrace();
48                 }
49         }
50
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());
54
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"));
59
60                 return chooser;
61         }
62
63         private String generateBioJsAlignmentData(AlignmentI alignment) throws IOException, JSONException {
64                 BioJsAlignmentPojo bjsAlignment = new BioJsAlignmentPojo();
65                 int count = 0;
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()));
70                 }
71
72                 // Taylor
73                 // av.getGlobalColourScheme().;
74                 String seqs = new com.json.JSONObject(bjsAlignment).getString("seqs");
75                 String bioJSTemplate = new String(readAllBytes(get("resources/templates/BioJSTemplate.txt")));
76
77                 // av.get
78                 // fr.
79                 return bioJSTemplate.replaceAll("#sequenceData#", seqs).replaceAll("#scheme#", "zappo");
80         }
81
82         public static void main(String[] args) throws IOException, ParseException {
83
84         }
85
86 }