package jalview.io; 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.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.URL; import com.json.JSONException; 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()) { StringBuilder name = new StringBuilder(); name.append(seq.getName()).append("/").append(seq.getStart()) .append("-").append(seq.getEnd()); bjsAlignment.getSeqs().add( new BioJsSeqPojo(String.valueOf(++count), name.toString(), seq.getSequenceAsString())); } String seqs = new com.json.JSONObject(bjsAlignment).getString("seqs"); // String bioJSTemplate = new String( // java.nio.file.Files.readAllBytes(java.nio.file.Paths // .get("resources/templates/BioJSTemplate.txt"))); String bioJSTemplate = getBioJsTemplateAsString(alignment); return bioJSTemplate.replaceAll("#sequenceData#", seqs).replaceAll( "#scheme#", "zappo"); } public static String getBioJsTemplateAsString(AlignmentI bio) throws IOException { StringBuilder sb = new StringBuilder(); URL url = bio.getClass().getResource( "/templates/BioJSTemplate.txt"); if (url != null) { try { BufferedReader reader = new BufferedReader(new InputStreamReader( url.openStream())); String line; String lineSeparator = System.getProperty("line.separator"); while ((line = reader.readLine()) != null) { sb.append(line).append(lineSeparator); } } catch (Exception ex) { ex.printStackTrace(); } } return sb.toString(); } }