X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fio%2FHtmlSvgOutput.java;h=68173ff6a6205c15929314a6d9d339772cb3eef9;hb=37de9310bec3501cbc6381e0c3dcb282fcaad812;hp=68f99240238e4c5a76b8113f0da51a3bfe3f6cf7;hpb=81edd609f9841a84d5799d221277d45413a177cf;p=jalview.git diff --git a/src/jalview/io/HtmlSvgOutput.java b/src/jalview/io/HtmlSvgOutput.java index 68f9924..68173ff 100644 --- a/src/jalview/io/HtmlSvgOutput.java +++ b/src/jalview/io/HtmlSvgOutput.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.FeatureRenderer; +import jalview.datamodel.AlignmentExportData; import jalview.datamodel.SequenceI; import jalview.gui.AlignViewport; import jalview.gui.AlignmentPanel; -import jalview.gui.AnnotationPanel; -import jalview.gui.FeatureRenderer; import jalview.gui.HTMLOptions; +import jalview.gui.IProgressIndicator; +import jalview.gui.OOMWarning; import jalview.math.AlignmentDimension; import jalview.util.MessageManager; @@ -25,103 +48,213 @@ public class HtmlSvgOutput AlignViewport av; FeatureRenderer fr; + AlignmentPanel ap; - AnnotationPanel annotationPanel; + private IProgressIndicator pIndicator; + + private long pSessionId; + + private boolean headless; public HtmlSvgOutput(File file, AlignmentPanel ap) { - - this.av = ap.av; - this.ap = ap; - this.annotationPanel = ap.getAnnotationPanel(); + this.av = ap.av; + this.ap = ap; + fr = ap.cloneFeatureRenderer(); generateHtmlSvgOutput(file); } public void generateHtmlSvgOutput(File file) { + pIndicator = ap.alignFrame; + pSessionId = System.currentTimeMillis(); try { - if (file == null /* - * && !(System.getProperty("java.awt.headless") != null - * && System - * .getProperty("java.awt.headless").equals("true")) - */) + 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); - 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(); - } + 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; + } } + } catch (Exception e) + { + pIndicator.setProgressBar(MessageManager.formatMessage( + "info.error_creating_file", "HTML"), pSessionId); + e.printStackTrace(); + return; + } + final File fileX = file; + new Thread() + { + @Override + public void run() + { + try + { + setProgressMessage(null); + setProgressMessage(MessageManager.formatMessage( + "status.exporting_alignment_as_x_file", "HTML")); + AlignmentDimension aDimension = ap.getAlignmentDimension(); + SVGGraphics2D g1 = new SVGGraphics2D(aDimension.getWidth(), + aDimension.getHeight()); + SVGGraphics2D g2 = new SVGGraphics2D(aDimension.getWidth(), + aDimension.getHeight()); - AlignmentDimension aDimension = ap.getAlignmentDimension(); - SVGGraphics2D g1 = new SVGGraphics2D(aDimension.getWidth(), - aDimension.getHeight()); - SVGGraphics2D g2 = new SVGGraphics2D(aDimension.getWidth(), - aDimension.getHeight()); + String renderStyle = jalview.bin.Cache.getDefault( + "HTML_RENDERING", "Prompt each time"); - String renderStyle = jalview.bin.Cache.getDefault("HTML_RENDERING", - "Prompt each time"); + // 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"))) + { + HTMLOptions svgOption = new HTMLOptions(); + renderStyle = svgOption.getValue(); - // 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"))) - { - HTMLOptions svgOption = new HTMLOptions(); - renderStyle = svgOption.getValue(); + if (renderStyle == null || svgOption.cancelled) + { + setProgressMessage(MessageManager.formatMessage( + "status.cancelled_image_export_operation", "HTML")); + return; + } + } + + if (renderStyle.equalsIgnoreCase("Lineart")) + { + g1.setRenderingHint(SVGHints.KEY_DRAW_STRING_TYPE, + SVGHints.VALUE_DRAW_STRING_TYPE_VECTOR); + g2.setRenderingHint(SVGHints.KEY_DRAW_STRING_TYPE, + SVGHints.VALUE_DRAW_STRING_TYPE_VECTOR); + } + printUnwrapped(aDimension.getWidth(), aDimension.getHeight(), 0, + g1, g2); + + String titleSvgData = g1.getSVGDocument(); + String alignSvgData = g2.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; + } - if (renderStyle == null || svgOption.cancelled) + @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 htmlData = getHtml(titleSvgData, alignSvgData, jsonData); + FileOutputStream out = new FileOutputStream(fileX); + 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); + } + } catch (OutOfMemoryError err) { - return; + System.out.println("########################\n" + + "OUT OF MEMORY " + fileX + "\n" + + "########################"); + new OOMWarning("Creating Image for " + fileX, err); + } catch (Exception e) + { + e.printStackTrace(); + pIndicator.setProgressBar(MessageManager.formatMessage( + "info.error_creating_file", "HTML"), pSessionId); } + setProgressMessage(MessageManager.formatMessage( + "status.export_complete", "HTML")); } + }.start(); - if (renderStyle.equalsIgnoreCase("lineart")) - { - g1.setRenderingHint(SVGHints.KEY_DRAW_STRING_TYPE, - SVGHints.VALUE_DRAW_STRING_TYPE_VECTOR); - g2.setRenderingHint(SVGHints.KEY_DRAW_STRING_TYPE, - SVGHints.VALUE_DRAW_STRING_TYPE_VECTOR); - } - printUnwrapped(aDimension.getWidth(), aDimension.getHeight(), 0, g1, - g2); - FileOutputStream out = new FileOutputStream(file); - - String titleSvgData = g1.getSVGDocument(); - String alignSvgData = g2.getSVGDocument(); - String htmlData = getHtml(titleSvgData, alignSvgData); - - 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:///" + file); - } - } catch (Exception e) + } + + private void setProgressMessage(String message) + { + if (pIndicator != null && !headless) { - e.printStackTrace(); + pIndicator.setProgressBar(message, pSessionId); + } + else + { + System.out.println(message); } } - + static JalviewFileChooser getHTMLChooser() { return new jalview.io.JalviewFileChooser( - jalview.bin.Cache.getProperty("LAST_DIRECTORY"), new String[] - { "html" }, new String[] - { "Hypertext Markup Language" }, "Hypertext Markup Language"); + jalview.bin.Cache.getProperty("LAST_DIRECTORY"), + new String[] { "html" }, + new String[] { "Hypertext Markup Language" }, + "Hypertext Markup Language"); } public int printUnwrapped(int pwidth, int pheight, int pi, Graphics... pg) @@ -220,9 +353,7 @@ public class HtmlSvgOutput - fm.stringWidth(seq.getDisplayId(av.getShowJVSuffix())) - 4; } - pg[0].drawString( - seq.getDisplayId(av.getShowJVSuffix()), - xPos, + pg[0].drawString(seq.getDisplayId(av.getShowJVSuffix()), xPos, (((i - startSeq) * av.getCharHeight()) + av.getCharHeight()) - (av.getCharHeight() / 5)); } @@ -256,19 +387,360 @@ public class HtmlSvgOutput return Printable.PAGE_EXISTS; } - - private String getHtml(String titleSvg, String alignmentSvg) + + private String getHtml(String titleSvg, String alignmentSvg, + String jsonData) { StringBuilder htmlSvg = new StringBuilder(); - htmlSvg.append("" - + "
" - + "
"); + htmlSvg.append("\n"); + if (jsonData != null) + { + htmlSvg.append("  "); + htmlSvg.append(""); + htmlSvg.append("
" + + jsonData + "
"); + htmlSvg.append("
 "); + } + htmlSvg.append("\n"); + htmlSvg.append("
"); + htmlSvg.append("
\n"); + htmlSvg.append("
\n"); htmlSvg.append(titleSvg); - htmlSvg.append("
").append(alignmentSvg); htmlSvg.append("
"); + htmlSvg.append("
\n\n\n\n"); + htmlSvg.append("
"); + htmlSvg.append( + "
") + .append(alignmentSvg).append("
").append("
"); + htmlSvg.append("
"); + + htmlSvg.append("\n" + + "\n" + + "\n"); + + // javascript for launching file in Jalview + + htmlSvg.append("\n"); + htmlSvg.append(""); return htmlSvg.toString(); } }