From: tcofoegbu Date: Mon, 14 Nov 2016 19:47:59 +0000 (+0000) Subject: JAL-2322 Refactored unified architecture for data + html exporting for SVG & BioJS... X-Git-Tag: Release_2_10_1~11^2~4 X-Git-Url: http://source.jalview.org/gitweb/?a=commitdiff_plain;h=e60cacff9260c47c12cf34a7e191678cfc97d265;p=jalview.git JAL-2322 Refactored unified architecture for data + html exporting for SVG & BioJS msa exports --- diff --git a/src/jalview/bin/Jalview.java b/src/jalview/bin/Jalview.java index d0cabb2..bcb4e7b 100755 --- a/src/jalview/bin/Jalview.java +++ b/src/jalview/bin/Jalview.java @@ -51,6 +51,7 @@ import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.MalformedURLException; import java.net.URI; +import java.net.URISyntaxException; import java.net.URL; import java.security.AllPermission; import java.security.CodeSource; @@ -651,23 +652,28 @@ public class Jalview File imageFile = new File(file); imageName = imageFile.getName(); HtmlSvgOutput htmlSVG = new HtmlSvgOutput(af.alignPanel); - htmlSVG.generateHtmlSvgOutput(new File(file)); + htmlSVG.exportHTML(file); System.out.println("Creating HTML image: " + file); continue; } else if (format.equalsIgnoreCase("biojsmsa")) { - BioJsHTMLOutput.updateBioJS(); + if (file == null) + { + System.err.println("The output html file must not be null"); + return; + } try { - Thread.sleep(1500); - } catch (InterruptedException e) + BioJsHTMLOutput + .refreshVersionInfo(BioJsHTMLOutput.BJS_TEMPLATES_LOCAL_DIRECTORY); + } catch (URISyntaxException e) { e.printStackTrace(); } - BioJsHTMLOutput bjs = new BioJsHTMLOutput(af.alignPanel, af); - bjs.exportJalviewAlignmentAsBioJsHtmlFile(file); + BioJsHTMLOutput bjs = new BioJsHTMLOutput(af.alignPanel); + bjs.exportHTML(file); System.out.println("Creating BioJS MSA Viwer HTML file: " + file); continue; diff --git a/src/jalview/gui/AlignFrame.java b/src/jalview/gui/AlignFrame.java index 834e561..1372749 100644 --- a/src/jalview/gui/AlignFrame.java +++ b/src/jalview/gui/AlignFrame.java @@ -1342,14 +1342,14 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, protected void htmlMenuItem_actionPerformed(ActionEvent e) { HtmlSvgOutput htmlSVG = new HtmlSvgOutput(alignPanel); - htmlSVG.generateHtmlSvgOutput(null); + htmlSVG.exportHTML(null); } @Override public void bioJSMenuItem_actionPerformed(ActionEvent e) { - BioJsHTMLOutput bjs = new BioJsHTMLOutput(alignPanel, this); - bjs.exportJalviewAlignmentAsBioJsHtmlFile(null); + BioJsHTMLOutput bjs = new BioJsHTMLOutput(alignPanel); + bjs.exportHTML(null); } public void createImageMap(File file, String image) diff --git a/src/jalview/io/BioJsHTMLOutput.java b/src/jalview/io/BioJsHTMLOutput.java index 9b6a15a..1be97f5 100644 --- a/src/jalview/io/BioJsHTMLOutput.java +++ b/src/jalview/io/BioJsHTMLOutput.java @@ -20,11 +20,8 @@ */ package jalview.io; -import jalview.api.AlignExportSettingI; -import jalview.api.AlignmentViewPanel; -import jalview.datamodel.AlignmentExportData; import jalview.exceptions.NoFileSelectedException; -import jalview.gui.IProgressIndicator; +import jalview.gui.AlignmentPanel; import jalview.gui.OOMWarning; import jalview.json.binding.biojs.BioJSReleasePojo; import jalview.json.binding.biojs.BioJSRepositoryPojo; @@ -42,15 +39,8 @@ import java.net.URL; import java.util.Objects; import java.util.TreeMap; -public class BioJsHTMLOutput +public class BioJsHTMLOutput extends HTMLOutput { - private AlignmentViewPanel ap; - - private long pSessionId; - - private IProgressIndicator pIndicator; - - private boolean headless; private static File currentBJSTemplateFile; @@ -67,91 +57,38 @@ public class BioJsHTMLOutput "biojs_template_git_repo", "https://raw.githubusercontent.com/jalview/exporter-templates/master/biojs/package.json"); - public BioJsHTMLOutput(AlignmentViewPanel ap, - IProgressIndicator pIndicator) + public BioJsHTMLOutput(AlignmentPanel ap) { - if (ap != null) - { - this.ap = ap; - this.pSessionId = System.currentTimeMillis(); - this.pIndicator = pIndicator; - this.headless = (System.getProperty("java.awt.headless") != null && System - .getProperty("java.awt.headless").equals("true")); - } + super(ap); } - public void exportJalviewAlignmentAsBioJsHtmlFile(String outputFile) + @Override + public void exportHTML(String outputFile) { - // String outputFile = null; + exportStarted(); try { + if (outputFile == null) { outputFile = getOutputFile(); } - AlignExportSettingI exportSettings = new AlignExportSettingI() - { - @Override - public boolean isExportHiddenSequences() - { - return true; - } - - @Override - public boolean isExportHiddenColumns() - { - return true; - } + generatedFile = new File(outputFile); - @Override - public boolean isExportAnnotations() - { - return true; - } - - @Override - public boolean isExportFeatures() - { - return true; - } - - @Override - public boolean isExportGroups() - { - return true; - } - - @Override - public boolean isCancelled() - { - return false; - } - - }; - AlignmentExportData exportData = jalview.gui.AlignFrame - .getAlignmentForExport(JSONFile.FILE_DESC, - ap.getAlignViewport(), exportSettings); - String bioJSON = new FormatAdapter(ap, exportData.getSettings()) - .formatSequences(JSONFile.FILE_DESC, exportData - .getAlignment(), exportData.getOmitHidden(), - exportData.getStartEndPostions(), ap - .getAlignViewport().getColumnSelection()); - - String bioJSTemplateString = HtmlFile.readFileAsString(getCurrentBJSTemplateFile()); + String bioJSON = getBioJSONData(); + String bioJSTemplateString = HTMLOutput.readFileAsString(getCurrentBJSTemplateFile()); String generatedBioJsWithJalviewAlignmentAsJson = bioJSTemplateString .replaceAll("#sequenceData#", bioJSON).toString(); PrintWriter out = new java.io.PrintWriter(new java.io.FileWriter( - outputFile)); + generatedFile)); out.print(generatedBioJsWithJalviewAlignmentAsJson); out.flush(); out.close(); - jalview.util.BrowserLauncher.openURL("file:///" + outputFile); - if (pIndicator != null && !headless) - { - pIndicator.setProgressBar(MessageManager.formatMessage( - "status.export_complete", "BioJS"), pSessionId); - } + exportCompleted(); + setProgressMessage(MessageManager.formatMessage( + "status.export_complete", "BioJS")); + } catch (NoFileSelectedException ex) { // do noting if no file was selected @@ -162,54 +99,15 @@ public class BioJsHTMLOutput new OOMWarning("Creating Image for " + outputFile, err); } catch (Exception e) { - if (pIndicator != null && !headless) - { - pIndicator.setProgressBar(MessageManager.formatMessage( - "info.error_creating_file", "HTML"), pSessionId); - } + setProgressMessage(MessageManager.formatMessage( + "info.error_creating_file", "HTML")); e.printStackTrace(); } } - public String getOutputFile() throws NoFileSelectedException - { - String selectedFile = null; - if (pIndicator != null && !headless) - { - pIndicator.setProgressBar(MessageManager.formatMessage( - "status.waiting_for_user_to_select_output_file", "HTML"), - pSessionId); - } - - JalviewFileChooser jvFileChooser = new JalviewFileChooser( - jalview.bin.Cache.getProperty("LAST_DIRECTORY"), - new String[] { "html" }, new String[] { "HTML files" }, - "HTML files"); - jvFileChooser.setFileView(new JalviewFileView()); - - jvFileChooser.setDialogTitle(MessageManager - .getString("label.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 - { - pIndicator.setProgressBar(MessageManager.formatMessage( - "status.cancelled_image_export_operation", "BioJS"), - pSessionId); - throw new NoFileSelectedException("No file was selected."); - } - return selectedFile; - } - public static void refreshBioJSVersionsInfo(String dirName) + public static void refreshVersionInfo(String dirName) throws URISyntaxException { File directory = new File(BJS_TEMPLATES_LOCAL_DIRECTORY); @@ -257,7 +155,7 @@ public class BioJsHTMLOutput BioJSRepositoryPojo release = new BioJSRepositoryPojo( gitRepoPkgJson); syncUpdates(BJS_TEMPLATES_LOCAL_DIRECTORY, release); - refreshBioJSVersionsInfo(BJS_TEMPLATES_LOCAL_DIRECTORY); + refreshVersionInfo(BJS_TEMPLATES_LOCAL_DIRECTORY); } } catch (URISyntaxException e) { @@ -378,4 +276,22 @@ public class BioJsHTMLOutput BioJsHTMLOutput.bioJsMSAVersions = bioJsMSAVersions; } + @Override + public boolean isEmbedData() + { + return true; + } + + @Override + public boolean isLaunchInBrowserAfterExport() + { + return true; + } + + @Override + public File getExportedFile() + { + return generatedFile; + } + } diff --git a/src/jalview/io/HTMLOutput.java b/src/jalview/io/HTMLOutput.java index df0dc06..ccf1ea4 100755 --- a/src/jalview/io/HTMLOutput.java +++ b/src/jalview/io/HTMLOutput.java @@ -20,283 +20,145 @@ */ package jalview.io; -import jalview.datamodel.AlignmentI; -import jalview.datamodel.SequenceI; -import jalview.gui.AlignViewport; +import jalview.api.AlignExportSettingI; +import jalview.datamodel.AlignmentExportData; +import jalview.exceptions.NoFileSelectedException; import jalview.gui.AlignmentPanel; -import jalview.gui.FeatureRenderer; -import jalview.gui.SequenceRenderer; +import jalview.gui.IProgressIndicator; import jalview.util.MessageManager; -import java.awt.Color; -import java.awt.Font; -import java.io.PrintWriter; +import java.io.BufferedReader; +import java.io.File; +import java.io.IOException; +import java.io.InputStreamReader; +import java.net.URL; +import java.util.Objects; -public class HTMLOutput -{ - AlignViewport av; - - SequenceRenderer sr; - - jalview.renderer.seqfeatures.FeatureRenderer fr; - Color color; - - public HTMLOutput(AlignmentPanel ap, SequenceRenderer sr, - FeatureRenderer fr1) - { - this.av = ap.av; - this.sr = sr; +public abstract class HTMLOutput +{ + protected AlignmentPanel ap; - fr = new FeatureRenderer(ap); - fr.transferSettings(fr1); + protected long pSessionId; - JalviewFileChooser chooser = new JalviewFileChooser( - jalview.bin.Cache.getProperty("LAST_DIRECTORY"), - new String[] { "html" }, new String[] { "HTML files" }, - "HTML files"); + protected IProgressIndicator pIndicator; - chooser.setFileView(new JalviewFileView()); - chooser.setDialogTitle(MessageManager.getString("label.save_as_html")); - chooser.setToolTipText(MessageManager.getString("action.save")); + private boolean headless; - int value = chooser.showSaveDialog(null); + protected File generatedFile; - if (value == JalviewFileChooser.APPROVE_OPTION) + public HTMLOutput(AlignmentPanel ap) + { + if (ap != null) { - String choice = chooser.getSelectedFile().getPath(); - jalview.bin.Cache.setProperty("LAST_DIRECTORY", chooser - .getSelectedFile().getParent()); - - try - { - PrintWriter out = new java.io.PrintWriter(new java.io.FileWriter( - choice)); - out.println(""); - out.println(""); - out.println(""); - - if (av.getWrapAlignment()) - { - drawWrappedAlignment(out); - } - else - { - drawUnwrappedAlignment(out); - } - - out.println("\n\n"); - out.close(); - jalview.util.BrowserLauncher.openURL("file:///" + choice); - } catch (Exception ex) - { - ex.printStackTrace(); - } + this.ap = ap; + this.pIndicator = ap.alignFrame; } } - void drawUnwrappedAlignment(PrintWriter out) - { - out.println("
\n"); - out.println("\n"); - - // //////////// - SequenceI seq; - AlignmentI alignment = av.getAlignment(); - // draws the top row, the measure rule - out.println(""); - - int i = 0; - - for (i = 10; i < (alignment.getWidth() - 10); i += 10) + public String getBioJSONData() + { + if (!isEmbedData()) { - out.println(""); + return null; } - - out.println(""); - out.println(""); - - for (i = 0; i < alignment.getHeight(); i++) + AlignExportSettingI exportSettings = new AlignExportSettingI() { - seq = alignment.getSequenceAt(i); - - String id = seq.getDisplayId(av.getShowJVSuffix()); - - out.println(""); - - for (int res = 0; res < seq.getLength(); res++) + @Override + public boolean isExportHiddenSequences() { - if (!jalview.util.Comparison.isGap(seq.getCharAt(res))) - { - color = sr.getResidueBoxColour(seq, res); - - color = fr.findFeatureColour(color, seq, res); - } - else - { - color = Color.white; - } - - if (color.getRGB() < -1) - { - out.println(""); - } - else - { - out.println(""); - } + return true; } - out.println(""); - } - - // //////////// - out.println("
" + i + "
|
" + i - + "
|
" + id + "  " - + seq.getCharAt(res) + "" + seq.getCharAt(res) + "
"); - out.println("
"); - } - - void drawWrappedAlignment(PrintWriter out) - { - // ////////////////////////////////// - // / How many sequences and residues can we fit on a printable page? - AlignmentI al = av.getAlignment(); - SequenceI seq; - String r; - String g; - String b; - - out.println("
\n"); - out.println("\n"); - - for (int startRes = 0; startRes < al.getWidth(); startRes += av - .getWrappedWidth()) - { - int endRes = startRes + av.getWrappedWidth(); - - if (endRes > al.getWidth()) + @Override + public boolean isExportHiddenColumns() { - endRes = al.getWidth(); + return true; } - if (av.getScaleAboveWrapped()) + @Override + public boolean isExportAnnotations() { - out.println(""); - - if (av.getScaleLeftWrapped()) - { - out.println(""); - } - else - { - out.println(""); - } - - for (int i = startRes + 10; i < endRes; i += 10) - { - out.println(""); - } - - out.println(""); + return true; } - int startPos, endPos; - for (int s = 0; s < al.getHeight(); s++) + @Override + public boolean isExportFeatures() { - out.println(""); - seq = al.getSequenceAt(s); - - startPos = seq.findPosition(startRes); - endPos = seq.findPosition(endRes) - 1; + return true; + } - String id = seq.getDisplayId(av.getShowJVSuffix()); + @Override + public boolean isExportGroups() + { + return true; + } - out.println(""); + @Override + public boolean isCancelled() + { + return false; + } - if (av.getScaleLeftWrapped()) - { - if (startPos > seq.getEnd() || endPos == 0) - { - out.println(""); - } - else - { - out.println(""); - } - } + }; + AlignmentExportData exportData = jalview.gui.AlignFrame + .getAlignmentForExport(JSONFile.FILE_DESC, + ap.getAlignViewport(), exportSettings); + String bioJSON = new FormatAdapter(ap, exportData.getSettings()) + .formatSequences(JSONFile.FILE_DESC, exportData.getAlignment(), + exportData.getOmitHidden(), exportData + .getStartEndPostions(), ap.getAlignViewport() + .getColumnSelection()); + return bioJSON; + } - for (int res = startRes; res < endRes; res++) + /** + * Read a template file content as string + * + * @param file + * - the file to be read + * @return File content as String + * @throws IOException + */ + public static String readFileAsString(File file) throws IOException + { + InputStreamReader isReader = null; + BufferedReader buffReader = null; + StringBuilder sb = new StringBuilder(); + Objects.requireNonNull(file, "File must not be null!"); + @SuppressWarnings("deprecation") + URL url = file.toURL(); + 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) { - if (!jalview.util.Comparison.isGap(seq.getCharAt(res))) - { - color = sr.getResidueBoxColour(seq, res); - - color = fr.findFeatureColour(color, seq, res); - } - else - { - color = Color.white; - } - - if (color.getRGB() < -1) - { - out.println(""); - } - else - { - out.println(""); - } - + sb.append(line).append(lineSeparator); } - - if (av.getScaleRightWrapped() - && endRes < startRes + av.getWrappedWidth()) + + } catch (Exception ex) + { + ex.printStackTrace(); + } finally + { + if (isReader != null) { - out.println(""); + isReader.close(); } - - if (av.getScaleRightWrapped() && startPos < endPos) + + if (buffReader != null) { - out.println(""); + buffReader.close(); } - - out.println(""); - } - - if (endRes < al.getWidth()) - { - out.println(""); } } - - out.println("
  " + i + "
|
" + id + "   " + startPos + "  " - + seq.getCharAt(res) + "" + seq.getCharAt(res) + "" - + "   " + endPos + "  
"); - out.println("
"); + return sb.toString(); } public static String getImageMapHTML() @@ -386,4 +248,125 @@ public class HTMLOutput + "initToolTips(); //-->\n"); } + + public String getOutputFile() throws NoFileSelectedException + { + String selectedFile = null; + if (pIndicator != null && !headless) + { + pIndicator.setProgressBar(MessageManager.formatMessage( + "status.waiting_for_user_to_select_output_file", "HTML"), + pSessionId); + } + + JalviewFileChooser jvFileChooser = new JalviewFileChooser( + jalview.bin.Cache.getProperty("LAST_DIRECTORY"), + new String[] { "html" }, new String[] { "HTML files" }, + "HTML files"); + jvFileChooser.setFileView(new JalviewFileView()); + + jvFileChooser.setDialogTitle(MessageManager + .getString("label.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 + { + pIndicator.setProgressBar(MessageManager.formatMessage( + "status.cancelled_image_export_operation", "BioJS"), + pSessionId); + throw new NoFileSelectedException("No file was selected."); + } + return selectedFile; + } + + protected void setProgressMessage(String message) + { + if (pIndicator != null && !headless) + { + pIndicator.setProgressBar(message, pSessionId); + } + else + { + System.out.println(message); + } + } + + /** + * Answers true if HTML export is invoke in headless mode or false otherwise + * + * @return + */ + protected boolean isHeadless() + { + return System.getProperty("java.awt.headless") != null + && System.getProperty("java.awt.headless").equals("true"); + } + + /** + * This method provides implementation of consistent behaviour which should + * occur before a HTML file export. It MUST be called at the start of the + * exportHTML() method implementation. + */ + protected void exportStarted() + { + pSessionId = System.currentTimeMillis(); + } + + /** + * This method provides implementation of consistent behaviour which should + * occur after a HTML file export. It MUST be called at the end of the + * exportHTML() method implementation. + */ + protected void exportCompleted() + { + if (isLaunchInBrowserAfterExport() && !isHeadless()) + { + try + { + jalview.util.BrowserLauncher + .openURL("file:///" + getExportedFile()); + } catch (IOException e) + { + e.printStackTrace(); + } + } + } + + /** + * if this answers true then BioJSON data will be embedded to the exported + * HTML file otherwise it won't be embedded. + * + * @return + */ + public abstract boolean isEmbedData(); + + /** + * if this answers true then the generated HTML file is opened for viewing in + * a browser after its generation otherwise it won't be opened in a browser + * + * @return + */ + public abstract boolean isLaunchInBrowserAfterExport(); + + /** + * handle to the generated HTML file + * + * @return + */ + public abstract File getExportedFile(); + + /** + * This is the main method to handle the HTML generation. + * + * @param outputFile + * the file path of the generated HTML + */ + public abstract void exportHTML(String outputFile); } diff --git a/src/jalview/io/HtmlFile.java b/src/jalview/io/HtmlFile.java index d19a203..e31e78d 100644 --- a/src/jalview/io/HtmlFile.java +++ b/src/jalview/io/HtmlFile.java @@ -27,13 +27,8 @@ import jalview.api.FeaturesDisplayedI; import jalview.datamodel.ColumnSelection; import jalview.datamodel.SequenceI; -import java.io.BufferedReader; -import java.io.File; import java.io.IOException; -import java.io.InputStreamReader; import java.io.StringReader; -import java.net.URL; -import java.util.Objects; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; @@ -195,52 +190,4 @@ public class HtmlFile extends AlignFile implements ComplexAlignFile return new PDBFeatureSettings(); } - /** - * Read a template file content as string - * - * @param file - * - the file to be read - * @return File content as String - * @throws IOException - */ - public static String readFileAsString(File file) throws IOException - { - InputStreamReader isReader = null; - BufferedReader buffReader = null; - StringBuilder sb = new StringBuilder(); - Objects.requireNonNull(file, "File must not be null!"); - @SuppressWarnings("deprecation") - URL url = file.toURL(); - 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(); - } - } diff --git a/src/jalview/io/HtmlSvgOutput.java b/src/jalview/io/HtmlSvgOutput.java index e6e698c..e60824a 100644 --- a/src/jalview/io/HtmlSvgOutput.java +++ b/src/jalview/io/HtmlSvgOutput.java @@ -20,13 +20,8 @@ */ package jalview.io; -import jalview.api.AlignExportSettingI; -import jalview.api.FeatureRenderer; -import jalview.datamodel.AlignmentExportData; -import jalview.gui.AlignViewport; import jalview.gui.AlignmentPanel; import jalview.gui.HTMLOptions; -import jalview.gui.IProgressIndicator; import jalview.gui.OOMWarning; import jalview.math.AlignmentDimension; import jalview.util.MessageManager; @@ -40,67 +35,34 @@ import java.io.IOException; import org.jfree.graphics2d.svg.SVGGraphics2D; import org.jfree.graphics2d.svg.SVGHints; -public class HtmlSvgOutput +public class HtmlSvgOutput extends HTMLOutput { - AlignViewport av; - FeatureRenderer fr; - - AlignmentPanel ap; - - private IProgressIndicator pIndicator; - - private long pSessionId; - - private boolean headless; + private File generatedFile; public HtmlSvgOutput(AlignmentPanel ap) { - this.av = ap.av; - this.ap = ap; - fr = ap.cloneFeatureRenderer(); + super(ap); } - public void generateHtmlSvgOutput(File file) + @Override + public void exportHTML(String file) { - pIndicator = ap.alignFrame; - pSessionId = System.currentTimeMillis(); + exportStarted(); try { - headless = (System.getProperty("java.awt.headless") != null && System - .getProperty("java.awt.headless").equals("true")); if (file == null) { - setProgressMessage(MessageManager.formatMessage( - "status.waiting_for_user_to_select_output_file", "HTML")); - JalviewFileChooser chooser = getHTMLChooser(); - chooser.setFileView(new jalview.io.JalviewFileView()); - chooser.setDialogTitle(ap.alignFrame.getTitle()); - chooser.setToolTipText(MessageManager.getString("action.save")); - int value = chooser.showSaveDialog(ap.alignFrame); - - if (value == jalview.io.JalviewFileChooser.APPROVE_OPTION) - { - jalview.bin.Cache.setProperty("LAST_DIRECTORY", chooser - .getSelectedFile().getParent()); - file = chooser.getSelectedFile(); - ap.alignFrame.repaint(); - } - else - { - setProgressMessage(MessageManager.formatMessage( - "status.cancelled_image_export_operation", "HTML")); - return; - } + file = getOutputFile(); } + generatedFile = new File(file); } catch (Exception e) { - pIndicator.setProgressBar(MessageManager.formatMessage( - "info.error_creating_file", "HTML"), pSessionId); + setProgressMessage(MessageManager.formatMessage( + "info.error_creating_file", "HTML")); e.printStackTrace(); return; } - final File fileX = file; new Thread() { @Override @@ -125,8 +87,7 @@ public class HtmlSvgOutput // If we need to prompt, and if the GUI is visible then // Prompt for rendering style if (renderStyle.equalsIgnoreCase("Prompt each time") - && !(System.getProperty("java.awt.headless") != null && System - .getProperty("java.awt.headless").equals("true"))) + && !isHeadless()) { HTMLOptions svgOption = new HTMLOptions(); renderStyle = svgOption.getValue(); @@ -147,7 +108,7 @@ public class HtmlSvgOutput SVGHints.KEY_DRAW_STRING_TYPE, SVGHints.VALUE_DRAW_STRING_TYPE_VECTOR); } - if (av.getWrapAlignment()) + if (ap.av.getWrapAlignment()) { printWrapped(aDimension.getWidth(), aDimension.getHeight(), 0, alignPanelGraphics); @@ -160,82 +121,25 @@ public class HtmlSvgOutput String idPanelSvgData = idPanelGraphics.getSVGDocument(); String alignPanelSvgData = alignPanelGraphics.getSVGDocument(); - String jsonData = null; - boolean isEmbbedBioJSON = Boolean.valueOf(jalview.bin.Cache - .getDefault("EXPORT_EMBBED_BIOJSON", "true")); - if (isEmbbedBioJSON) - { - AlignExportSettingI exportSettings = new AlignExportSettingI() - { - @Override - public boolean isExportHiddenSequences() - { - return true; - } - - @Override - public boolean isExportHiddenColumns() - { - return true; - } - - @Override - public boolean isExportAnnotations() - { - return true; - } - - @Override - public boolean isExportFeatures() - { - return true; - } - - @Override - public boolean isExportGroups() - { - return true; - } - - @Override - public boolean isCancelled() - { - return false; - } - - }; - AlignmentExportData exportData = jalview.gui.AlignFrame - .getAlignmentForExport(JSONFile.FILE_DESC, av, - exportSettings); - jsonData = new FormatAdapter(ap, exportData.getSettings()) - .formatSequences(JSONFile.FILE_DESC, - exportData.getAlignment(), - exportData.getOmitHidden(), - exportData.getStartEndPostions(), - av.getColumnSelection()); - } + String jsonData = getBioJSONData(); String htmlData = getHtml(idPanelSvgData, alignPanelSvgData, jsonData, - av.getWrapAlignment()); - FileOutputStream out = new FileOutputStream(fileX); + ap.av.getWrapAlignment()); + FileOutputStream out = new FileOutputStream(generatedFile); out.write(htmlData.getBytes()); out.flush(); out.close(); - if (!(System.getProperty("java.awt.headless") != null && System - .getProperty("java.awt.headless").equals("true"))) - { - jalview.util.BrowserLauncher.openURL("file:///" + fileX); - } + exportCompleted(); } catch (OutOfMemoryError err) { System.out.println("########################\n" - + "OUT OF MEMORY " + fileX + "\n" + + "OUT OF MEMORY " + generatedFile + "\n" + "########################"); - new OOMWarning("Creating Image for " + fileX, err); + new OOMWarning("Creating Image for " + generatedFile, err); } catch (Exception e) { e.printStackTrace(); - pIndicator.setProgressBar(MessageManager.formatMessage( - "info.error_creating_file", "HTML"), pSessionId); + setProgressMessage(MessageManager.formatMessage( + "info.error_creating_file", "HTML")); } setProgressMessage(MessageManager.formatMessage( "status.export_complete", "HTML")); @@ -244,17 +148,6 @@ public class HtmlSvgOutput } - private void setProgressMessage(String message) - { - if (pIndicator != null && !headless) - { - pIndicator.setProgressBar(message, pSessionId); - } - else - { - System.out.println(message); - } - } static JalviewFileChooser getHTMLChooser() { @@ -383,7 +276,7 @@ public class HtmlSvgOutput File faceBoxJsFile = new File("examples/javascript/facebox-1.3.js"); try { - htmlSvg.append(HtmlFile.readFileAsString(faceBoxJsFile)); + htmlSvg.append(HTMLOutput.readFileAsString(faceBoxJsFile)); } catch (IOException e) { e.printStackTrace(); @@ -394,4 +287,23 @@ public class HtmlSvgOutput htmlSvg.append(""); return htmlSvg.toString(); } + + @Override + public boolean isEmbedData() + { + return Boolean.valueOf(jalview.bin.Cache.getDefault( + "EXPORT_EMBBED_BIOJSON", "true")); + } + + @Override + public boolean isLaunchInBrowserAfterExport() + { + return true; + } + + @Override + public File getExportedFile() + { + return generatedFile; + } } diff --git a/test/jalview/io/BioJsHTMLOutputTest.java b/test/jalview/io/BioJsHTMLOutputTest.java index 09ce54c..77aa0f6 100644 --- a/test/jalview/io/BioJsHTMLOutputTest.java +++ b/test/jalview/io/BioJsHTMLOutputTest.java @@ -54,7 +54,7 @@ public class BioJsHTMLOutputTest { e.printStackTrace(); } - bjsTemplate = HtmlFile.readFileAsString(BioJsHTMLOutput + bjsTemplate = HTMLOutput.readFileAsString(BioJsHTMLOutput .getCurrentBJSTemplateFile()); // System.out.println(bjsTemplate); } catch (IOException e) @@ -71,7 +71,7 @@ public class BioJsHTMLOutputTest { try { - BioJsHTMLOutput.refreshBioJSVersionsInfo(null); + BioJsHTMLOutput.refreshVersionInfo(null); } catch (URISyntaxException e) { AssertJUnit.fail("Expception occured while testing!"); @@ -86,7 +86,7 @@ public class BioJsHTMLOutputTest try { BioJsHTMLOutput - .refreshBioJSVersionsInfo(BioJsHTMLOutput.BJS_TEMPLATES_LOCAL_DIRECTORY); + .refreshVersionInfo(BioJsHTMLOutput.BJS_TEMPLATES_LOCAL_DIRECTORY); versions = BioJsHTMLOutput.getBioJsMSAVersions(); } catch (URISyntaxException e) {