X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fio%2FHTMLOutput.java;h=e7054c7704ce11ea82953770d13af9632f557921;hb=c4c37610dc373b9b3349e5c0915c6eddda2efe31;hp=381a40ba3d92caee0151119aa0b8e3abef85bbc4;hpb=7d67fb613ec026dc9a265e351e7fab542e3f1d61;p=jalview.git diff --git a/src/jalview/io/HTMLOutput.java b/src/jalview/io/HTMLOutput.java old mode 100755 new mode 100644 index 381a40b..e7054c7 --- a/src/jalview/io/HTMLOutput.java +++ b/src/jalview/io/HTMLOutput.java @@ -1,11 +1,34 @@ +/* + * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$) + * Copyright (C) $$Year-Rel$$ The Jalview Authors + * + * This file is part of Jalview. + * + * Jalview is free software: you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * Jalview is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Jalview. If not, see . + * The Jalview Authors are detailed in the 'AUTHORS' file. + */ package jalview.io; -import jalview.api.AlignExportSettingI; +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; @@ -18,82 +41,61 @@ 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; - public HTMLOutput(AlignmentPanel ap) - { - if (ap != null) - { - this.ap = ap; - this.pIndicator = ap.alignFrame; - } - } + String _bioJson = null; - public String getBioJSONData() + private String description; + + /** + * Constructor given an alignment panel (which should not be null) + * + * @param ap + * @param desc + */ + public HTMLOutput(AlignmentPanel ap, String desc) { - return getBioJSONData(null); + this.ap = ap; + this.pIndicator = ap.alignFrame; + this.description = desc; + this.pSessionId = System.currentTimeMillis(); } - public String getBioJSONData(AlignExportSettingI exportSettings) + /** + * Gets the BioJSON data as a string, with lazy evaluation (first time called + * only). If the output format is configured not to embed BioJSON, returns + * null. + * + * @return + */ + public String getBioJSONData() { if (!isEmbedData()) { return null; } - if (exportSettings == null) + if (_bioJson == null) { - 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; - } - }; + AlignExportSettingsI options = new AlignExportSettingsAdapter(true); + AlignmentExportData exportData = ap.getAlignViewport() + .getAlignExportData(options); + _bioJson = new FormatAdapter(ap, options).formatSequences( + FileFormat.Json, exportData.getAlignment(), + exportData.getOmitHidden(), exportData.getStartEndPostions(), + ap.getAlignViewport().getAlignment().getHiddenColumns()); } - AlignmentExportData exportData = jalview.gui.AlignFrame - .getAlignmentForExport(FileFormat.Json, - ap.getAlignViewport(), exportSettings); - String bioJSON = new FormatAdapter(ap, exportData.getSettings()) - .formatSequences(FileFormat.Json, exportData.getAlignment(), - exportData.getOmitHidden(), exportData - .getStartEndPostions(), ap.getAlignViewport() - .getColumnSelection()); - return bioJSON; + + return _bioJson; } /** @@ -124,7 +126,7 @@ public abstract class HTMLOutput implements Runnable { sb.append(line).append(lineSeparator); } - + } catch (Exception ex) { ex.printStackTrace(); @@ -134,7 +136,7 @@ public abstract class HTMLOutput implements Runnable { isReader.close(); } - + if (buffReader != null) { buffReader.close(); @@ -146,129 +148,92 @@ public abstract class HTMLOutput implements Runnable public static String getImageMapHTML() { - return new String( - "\n" - + "\n" - + "\n" - + "\n" - + "\n" - + "
\n" - + "\n"); + return new String("\n" + "\n" + + "\n" + "\n" + "\n" + + "
\n" + + "\n"); } - 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); - } - JalviewFileChooser jvFileChooser = new JalviewFileChooser( - jalview.bin.Cache.getProperty("LAST_DIRECTORY"), - new String[] { "html" }, new String[] { "HTML files" }, + // TODO: JAL-3048 generate html rendered view (requires SvgGraphics and/or + // Jalview HTML rendering system- probably not required for Jalview-JS) + JalviewFileChooser jvFileChooser = new JalviewFileChooser("html", "HTML files"); jvFileChooser.setFileView(new JalviewFileView()); - jvFileChooser.setDialogTitle(MessageManager - .getString("label.save_as_html")); + jvFileChooser + .setDialogTitle(MessageManager.getString("label.save_as_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()); + 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); } @@ -279,39 +244,17 @@ 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(); - } - - /** * 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()) + if (isLaunchInBrowserAfterExport() && !Jalview.isHeadlessMode()) { try { - jalview.util.BrowserLauncher - .openURL("file:///" + getExportedFile()); + Platform.openURL("file:///" + getExportedFile()); } catch (IOException e) { e.printStackTrace(); @@ -340,13 +283,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