package jalview.io; import jalview.exceptions.NoFileSelectedException; import jalview.gui.AlignViewport; import jalview.gui.AlignmentPanel; import jalview.gui.FeatureRenderer; import jalview.util.MessageManager; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.URL; public class BioJsHTMLOutput { private AlignViewport av; public BioJsHTMLOutput(AlignmentPanel ap, FeatureRenderer fr1) { if (ap != null) { this.av = ap.av; av.setFeatureRenderer(new FeatureRenderer(ap)); } exportJalviewAlignmentAsBioJsHtmlFile(); } private void exportJalviewAlignmentAsBioJsHtmlFile() { try { String outputFile = getOutputFile(); String jalviewAlignmentJson = JSONFile.getJSONData(av); String bioJSTemplateString = getBioJsTemplateAsString(this); String generatedBioJsWithJalviewAlignmentAsJson = bioJSTemplateString .replaceAll( "#sequenceData#", jalviewAlignmentJson) .toString(); PrintWriter out = new java.io.PrintWriter(new java.io.FileWriter( outputFile)); out.print(generatedBioJsWithJalviewAlignmentAsJson); out.flush(); out.close(); jalview.util.BrowserLauncher.openURL("file:///" + outputFile); } catch (NoFileSelectedException ex) { // do noting if no file was selected } catch (Exception e) { e.printStackTrace(); } } public String getOutputFile() throws NoFileSelectedException { String selectedFile = null; JalviewFileChooser jvFileChooser = new JalviewFileChooser( jalview.bin.Cache.getProperty("LAST_DIRECTORY"), new String[] { "html" }, new String[] { "HTML files" }, "HTML files"); jvFileChooser.setFileView(new JalviewFileView()); // TODO uncomment when supported by MassageManager jvFileChooser.setDialogTitle(MessageManager .getString("label.save_as_biojs_html")); jvFileChooser.setDialogTitle("save as BioJs HTML"); jvFileChooser.setToolTipText(MessageManager.getString("action.save")); int fileChooserOpt = jvFileChooser.showSaveDialog(null); if (fileChooserOpt == JalviewFileChooser.APPROVE_OPTION) { jalview.bin.Cache.setProperty("LAST_DIRECTORY", jvFileChooser .getSelectedFile().getParent()); selectedFile = jvFileChooser.getSelectedFile().getPath(); } else { throw new NoFileSelectedException("No file was selected."); } return selectedFile; } public static String getBioJsTemplateAsString(Object currentObj) throws IOException { InputStreamReader isReader = null; BufferedReader buffReader = null; StringBuilder sb = new StringBuilder(); URL url = currentObj.getClass().getResource( "/templates/BioJSTemplate.txt"); if (url != null) { try { isReader = new InputStreamReader(url.openStream()); buffReader = new BufferedReader(isReader); String line; String lineSeparator = System.getProperty("line.separator"); while ((line = buffReader.readLine()) != null) { sb.append(line).append(lineSeparator); } } catch (Exception ex) { ex.printStackTrace(); } finally { if (isReader != null) { isReader.close(); } if (buffReader != null) { buffReader.close(); } } } return sb.toString(); } }