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.json.simple.parser.ParseException; 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())); } // Taylor // av.getGlobalColourScheme().; String seqs = new com.json.JSONObject(bjsAlignment).getString("seqs"); String bioJSTemplate = new String(readAllBytes(get("resources/templates/BioJSTemplate.txt"))); // av.get // fr. return bioJSTemplate.replaceAll("#sequenceData#", seqs).replaceAll("#scheme#", "zappo"); } public static void main(String[] args) throws IOException, ParseException { } }