X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fio%2FHTMLOutput.java;h=9729ec8c9930bfb3d255f853cd47f5aa32ec685d;hb=6babd7c2387996384a49042ed4290095c13d5ed9;hp=86da67a8a750689e52e8092da2e86ad5339c7cb2;hpb=fe8a4b9cb2b7242c902259aab79ecc0637c6c370;p=jalview.git diff --git a/src/jalview/io/HTMLOutput.java b/src/jalview/io/HTMLOutput.java index 86da67a..9729ec8 100644 --- a/src/jalview/io/HTMLOutput.java +++ b/src/jalview/io/HTMLOutput.java @@ -21,12 +21,14 @@ package jalview.io; import jalview.api.AlignExportSettingsI; +import jalview.bin.Cache; +import jalview.bin.Jalview; import jalview.datamodel.AlignExportSettingsAdapter; import jalview.datamodel.AlignmentExportData; -import jalview.exceptions.NoFileSelectedException; import jalview.gui.AlignmentPanel; import jalview.gui.IProgressIndicator; import jalview.util.MessageManager; +import jalview.util.Platform; import java.io.BufferedReader; import java.io.File; @@ -39,23 +41,34 @@ public abstract class HTMLOutput implements Runnable { protected AlignmentPanel ap; + /* + * key for progress or status messages + */ protected long pSessionId; + /* + * (optional) place to write progress messages to + */ protected IProgressIndicator pIndicator; protected File generatedFile; String _bioJson = null; + private String description; + /** * Constructor given an alignment panel (which should not be null) * * @param ap + * @param desc */ - public HTMLOutput(AlignmentPanel ap) + public HTMLOutput(AlignmentPanel ap, String desc) { this.ap = ap; this.pIndicator = ap.alignFrame; + this.description = desc; + this.pSessionId = System.currentTimeMillis(); } /** @@ -187,15 +200,15 @@ public abstract class HTMLOutput implements Runnable } - public String getOutputFile() throws NoFileSelectedException + /** + * Prompts the user to choose an output file and returns the file path, or + * null on Cancel + * + * @return + */ + public String getOutputFile() { String selectedFile = null; - if (pIndicator != null && !isHeadless()) - { - pIndicator.setProgressBar(MessageManager.formatMessage( - "status.waiting_for_user_to_select_output_file", "HTML"), - pSessionId); - } // TODO: JAL-3048 generate html rendered view (requires SvgGraphics and/or // Jalview HTML rendering system- probably not required for Jalview-JS) @@ -210,20 +223,17 @@ public abstract class HTMLOutput implements Runnable int fileChooserOpt = jvFileChooser.showSaveDialog(null); if (fileChooserOpt == JalviewFileChooser.APPROVE_OPTION) { - jalview.bin.Cache.setProperty("LAST_DIRECTORY", + Cache.setProperty("LAST_DIRECTORY", jvFileChooser.getSelectedFile().getParent()); selectedFile = jvFileChooser.getSelectedFile().getPath(); } - else - { - throw new NoFileSelectedException("No file was selected."); - } + return selectedFile; } protected void setProgressMessage(String message) { - if (pIndicator != null && !isHeadless()) + if (pIndicator != null && !Jalview.isHeadlessMode()) { pIndicator.setProgressBar(message, pSessionId); } @@ -233,26 +243,16 @@ public abstract class HTMLOutput implements Runnable } } - /** - * 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(); - } + // /** + // * 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 @@ -261,12 +261,11 @@ public abstract class HTMLOutput implements Runnable */ protected void exportCompleted() { - if (isLaunchInBrowserAfterExport() && !isHeadless()) + if (isLaunchInBrowserAfterExport() && !Jalview.isHeadlessMode()) { try { - jalview.util.BrowserLauncher - .openURL("file:///" + getExportedFile()); + Platform.openURL("file:///" + getExportedFile()); } catch (IOException e) { e.printStackTrace(); @@ -295,13 +294,51 @@ public abstract class HTMLOutput implements Runnable * * @return */ - public abstract File getExportedFile(); + public File getExportedFile() + { + return generatedFile; + } + + public void exportHTML(String outputFile) + { + setProgressMessage(MessageManager.formatMessage( + "status.exporting_alignment_as_x_file", getDescription())); + try + { + if (outputFile == null) + { + /* + * prompt for output file + */ + outputFile = getOutputFile(); + if (outputFile == null) + { + setProgressMessage(MessageManager.formatMessage( + "status.cancelled_image_export_operation", + getDescription())); + return; + } + } + generatedFile = new File(outputFile); + } catch (Exception e) + { + setProgressMessage(MessageManager + .formatMessage("info.error_creating_file", getDescription())); + e.printStackTrace(); + return; + } + new Thread(this).start(); + + } /** - * This is the main method to handle the HTML generation. + * Answers a short description of the image format suitable for display in + * messages * - * @param outputFile - * the file path of the generated HTML + * @return */ - public abstract void exportHTML(String outputFile); + protected final String getDescription() + { + return description; + } } \ No newline at end of file