X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fjalview%2Fio%2FBioJsHTMLOutput.java;h=80df097f5cda66686669f31c97b821464e6a17d5;hb=4815037f13748676b04b91dc761b73cf6f2d6ecd;hp=f5a4136f04fc6bf6253c83c52c6c0e3abf8ee919;hpb=4d7f98a6dd54d9863ba449ec79dcd95d25ed863d;p=jalview.git diff --git a/src/jalview/io/BioJsHTMLOutput.java b/src/jalview/io/BioJsHTMLOutput.java index f5a4136..80df097 100644 --- a/src/jalview/io/BioJsHTMLOutput.java +++ b/src/jalview/io/BioJsHTMLOutput.java @@ -1,11 +1,36 @@ +/* + * 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.AlignmentViewPanel; +import jalview.bin.Cache; import jalview.datamodel.AlignmentExportData; import jalview.exceptions.NoFileSelectedException; +import jalview.gui.AlignFrame; +import jalview.gui.IProgressIndicator; +import jalview.gui.OOMWarning; import jalview.json.binding.biojs.BioJSReleasePojo; import jalview.json.binding.biojs.BioJSRepositoryPojo; +import jalview.util.ImageMaker; import jalview.util.MessageManager; import java.io.BufferedInputStream; @@ -24,6 +49,12 @@ public class BioJsHTMLOutput { private AlignmentViewPanel ap; + private long pSessionId; + + private IProgressIndicator pIndicator; + + private boolean headless; + private static File currentBJSTemplateFile; private static TreeMap bioJsMSAVersions; @@ -39,20 +70,25 @@ public class BioJsHTMLOutput "biojs_template_git_repo", "https://raw.githubusercontent.com/jalview/exporter-templates/master/biojs/package.json"); - public BioJsHTMLOutput(AlignmentViewPanel ap) + public BioJsHTMLOutput(AlignmentViewPanel ap, + IProgressIndicator pIndicator) { if (ap != null) { this.ap = ap; + this.pSessionId = System.currentTimeMillis(); + this.pIndicator = pIndicator; + this.headless = (System.getProperty("java.awt.headless") != null && System + .getProperty("java.awt.headless").equals("true")); } } public void exportJalviewAlignmentAsBioJsHtmlFile() { + String outputFile = null; try { - String outputFile = getOutputFile(); - // String jalviewAlignmentJson = JSONFile.getJSONData(ap); + outputFile = getOutputFile(); AlignExportSettingI exportSettings = new AlignExportSettingI() { @Override @@ -92,23 +128,18 @@ public class BioJsHTMLOutput } }; - AlignmentExportData exportData = jalview.gui.AlignFrame - .getAlignmentForExport(JSONFile.FILE_DESC, + AlignmentExportData exportData = AlignFrame + .getAlignmentForExport(FileFormat.Json, ap.getAlignViewport(), exportSettings); - if (exportData.getSettings().isCancelled()) - { - return; - } - String jalviewAlignmentJson = new FormatAdapter(ap, - exportData.getSettings()).formatSequences(JSONFile.FILE_DESC, - exportData.getAlignment(), exportData.getOmitHidden(), - exportData.getStartEndPostions(), ap.getAlignViewport() - .getColumnSelection()); + String bioJSON = new FormatAdapter(ap, exportData.getSettings()) + .formatSequences(FileFormat.Json, exportData + .getAlignment(), exportData.getOmitHidden(), + exportData.getStartEndPostions(), ap + .getAlignViewport().getColumnSelection()); String bioJSTemplateString = getBioJsTemplateAsString(); String generatedBioJsWithJalviewAlignmentAsJson = bioJSTemplateString - .replaceAll("#sequenceData#", jalviewAlignmentJson) - .toString(); + .replaceAll("#sequenceData#", bioJSON).toString(); PrintWriter out = new java.io.PrintWriter(new java.io.FileWriter( outputFile)); @@ -116,11 +147,23 @@ public class BioJsHTMLOutput out.flush(); out.close(); jalview.util.BrowserLauncher.openURL("file:///" + outputFile); + if (pIndicator != null && !headless) + { + pIndicator.setProgressBar(MessageManager.formatMessage( + "status.export_complete", "BioJS"), pSessionId); + } } catch (NoFileSelectedException ex) { // do noting if no file was selected + } catch (OutOfMemoryError err) + { + System.out.println("########################\n" + "OUT OF MEMORY " + + outputFile + "\n" + "########################"); + new OOMWarning("Creating Image for " + outputFile, err); } catch (Exception e) { + pIndicator.setProgressBar(MessageManager.formatMessage( + "info.error_creating_file", "HTML"), pSessionId); e.printStackTrace(); } } @@ -128,10 +171,16 @@ public class BioJsHTMLOutput public String getOutputFile() throws NoFileSelectedException { String selectedFile = null; + if (pIndicator != null && !headless) + { + 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" }, - "HTML files"); + Cache.getProperty("LAST_DIRECTORY"), ImageMaker.HTML_EXTENSION, + ImageMaker.HTML_EXTENSION, ImageMaker.HTML_EXTENSION); jvFileChooser.setFileView(new JalviewFileView()); jvFileChooser.setDialogTitle(MessageManager @@ -141,12 +190,15 @@ public class BioJsHTMLOutput int fileChooserOpt = jvFileChooser.showSaveDialog(null); if (fileChooserOpt == JalviewFileChooser.APPROVE_OPTION) { - jalview.bin.Cache.setProperty("LAST_DIRECTORY", jvFileChooser + Cache.setProperty("LAST_DIRECTORY", jvFileChooser .getSelectedFile().getParent()); selectedFile = jvFileChooser.getSelectedFile().getPath(); } else { + pIndicator.setProgressBar(MessageManager.formatMessage( + "status.cancelled_image_export_operation", "BioJS"), + pSessionId); throw new NoFileSelectedException("No file was selected."); } return selectedFile; @@ -230,6 +282,7 @@ public class BioJsHTMLOutput { Thread updateThread = new Thread() { + @Override public void run() { try