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.json.binding.v1.BioJsAlignmentPojo; import jalview.json.binding.v1.BioJsSeqPojo; import jalview.util.MessageManager; import java.io.IOException; import java.io.PrintWriter; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import com.json.JSONException; import com.json.JSONObject; public class BioJsHTMLOutput { private AlignViewport av; private FeatureRenderer fr; public BioJsHTMLOutput(AlignmentPanel ap, SequenceRenderer sr, FeatureRenderer fr1) { 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, JSONException { BioJsAlignmentPojo bjsAlignment = new BioJsAlignmentPojo(); int count = 0; for (SequenceI seq : alignment.getSequences()) { bjsAlignment.getSeqs().add( new BioJsSeqPojo(String.valueOf(++count), seq.getName(), seq .getSequenceAsString())); } String seqs = new JSONObject(bjsAlignment).getString("seqs"); String bioJSTemplate = new String( readAllBytes(get("resources/templates/BioJSTemplate.txt"))); return bioJSTemplate.replaceAll("#sequenceData#", seqs); } public static void main(String[] args) throws IOException { Document doc = Jsoup.parse(new String( readAllBytes(get("resources/templates/BioJSTemplate.txt")))); Element content = doc.getElementById("seqData"); System.out.println(content.val()); } }