X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;ds=inline;f=src%2Fjalview%2Fio%2FHTMLOutput.java;h=54e7e4b6c3012d5fbe286554b5a8048bad468b95;hb=47d3ff9c908b646ea2ee659b8328976d20c3dd11;hp=68f3e2c0d1280c1516daa099d137e85998cd7bea;hpb=8b844f70b97629d597be49cb6ac0d83c8da007c9;p=jalview.git
diff --git a/src/jalview/io/HTMLOutput.java b/src/jalview/io/HTMLOutput.java
old mode 100755
new mode 100644
index 68f3e2c..54e7e4b
--- a/src/jalview/io/HTMLOutput.java
+++ b/src/jalview/io/HTMLOutput.java
@@ -1,8 +1,29 @@
+/*
+ * 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.datamodel.AlignExportSettingsAdapter;
import jalview.datamodel.AlignmentExportData;
-import jalview.exceptions.NoFileSelectedException;
import jalview.gui.AlignmentPanel;
import jalview.gui.IProgressIndicator;
import jalview.util.MessageManager;
@@ -18,82 +39,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 +124,7 @@ public abstract class HTMLOutput implements Runnable
{
sb.append(line).append(lineSeparator);
}
-
+
} catch (Exception ex)
{
ex.printStackTrace();
@@ -134,7 +134,7 @@ public abstract class HTMLOutput implements Runnable
{
isReader.close();
}
-
+
if (buffReader != null)
{
buffReader.close();
@@ -146,121 +146,86 @@ 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);
- }
+ // 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;
}
@@ -289,16 +254,6 @@ public abstract class HTMLOutput implements Runnable
/**
* 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.
*/
@@ -338,13 +293,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