X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fjalview%2Fio%2FHtmlSvgOutput.java;h=68173ff6a6205c15929314a6d9d339772cb3eef9;hb=ab216310338f4037fca92a38e0fe02ceaa407e18;hp=a524c4437527ca130897a18b32c2f12dd0c428af;hpb=9e702c94a53fd99ac8f167f28ea29bb5e26096cb;p=jalview.git
diff --git a/src/jalview/io/HtmlSvgOutput.java b/src/jalview/io/HtmlSvgOutput.java
index a524c44..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,93 +48,213 @@ public class HtmlSvgOutput
AlignViewport av;
FeatureRenderer fr;
+
AlignmentPanel ap;
- AnnotationPanel annotationPanel;
+ private IProgressIndicator pIndicator;
- public HtmlSvgOutput(AlignmentPanel ap)
- {
+ private long pSessionId;
+
+ private boolean headless;
- this.av = ap.av;
- this.ap = ap;
- this.annotationPanel = ap.getAnnotationPanel();
- generateHtmlSvgOutput();
+ public HtmlSvgOutput(File file, AlignmentPanel ap)
+ {
+ this.av = ap.av;
+ this.ap = ap;
+ fr = ap.cloneFeatureRenderer();
+ generateHtmlSvgOutput(file);
}
- public void generateHtmlSvgOutput()
+ public void generateHtmlSvgOutput(File file)
{
- File file = null;
+ pIndicator = ap.alignFrame;
+ pSessionId = System.currentTimeMillis();
try
{
- 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)
+ headless = (System.getProperty("java.awt.headless") != null && System
+ .getProperty("java.awt.headless").equals("true"));
+ if (file == null)
{
- jalview.bin.Cache.setProperty("LAST_DIRECTORY", chooser
- .getSelectedFile().getParent());
- file = chooser.getSelectedFile();
+ 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;
+ }
}
+ } 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 == null || svgOption.cancelled)
+ 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;
+ }
+
+ @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();
+ }
- 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)
@@ -210,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));
}
@@ -246,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();
}
}