X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fio%2FBioJsHTMLOutput.java;h=48988cf527b2516f748bc19b217d27e210de3ee1;hb=a1984b1c8c273ed33c7ce9283039f4027dcae2de;hp=089f50b0ed03b389508055fd7d74f8d7c2f073af;hpb=a8aec438cd92c74061c89487b2431a52bb0c2799;p=jalview.git diff --git a/src/jalview/io/BioJsHTMLOutput.java b/src/jalview/io/BioJsHTMLOutput.java index 089f50b..48988cf 100644 --- a/src/jalview/io/BioJsHTMLOutput.java +++ b/src/jalview/io/BioJsHTMLOutput.java @@ -1,10 +1,30 @@ +/* + * 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.AlignmentViewPanel; -import jalview.datamodel.AlignmentExportData; -import jalview.exceptions.NoFileSelectedException; -import jalview.json.binding.v1.BioJSReleasePojo; -import jalview.json.binding.v1.BioJSRepositoryPojo; +import jalview.bin.Cache; +import jalview.gui.AlignmentPanel; +import jalview.gui.OOMWarning; +import jalview.json.binding.biojs.BioJSReleasePojo; +import jalview.json.binding.biojs.BioJSRepositoryPojo; import jalview.util.MessageManager; import java.io.BufferedInputStream; @@ -19,11 +39,8 @@ import java.net.URL; import java.util.Objects; import java.util.TreeMap; - -public class BioJsHTMLOutput +public class BioJsHTMLOutput extends HTMLOutput { - private AlignmentViewPanel ap; - private static File currentBJSTemplateFile; private static TreeMap bioJsMSAVersions; @@ -31,135 +48,19 @@ public class BioJsHTMLOutput public static final String DEFAULT_DIR = System.getProperty("user.home") + File.separatorChar + ".biojs_templates" + File.separatorChar; - public static final String BJS_TEMPLATES_LOCAL_DIRECTORY = jalview.bin.Cache + public static final String BJS_TEMPLATES_LOCAL_DIRECTORY = Cache .getDefault("biojs_template_directory", DEFAULT_DIR); - public static final String BJS_TEMPLATE_GIT_REPO = jalview.bin.Cache - .getDefault( - "biojs_template_git_repo", - "https://raw.githubusercontent.com/tcofoegbu/bjs-template/master/package.json"); - - public BioJsHTMLOutput(AlignmentViewPanel ap) - { - if (ap != null) - { - this.ap = ap; - } - } - - public void exportJalviewAlignmentAsBioJsHtmlFile() - { - try - { - String outputFile = getOutputFile(); - // String jalviewAlignmentJson = JSONFile.getJSONData(ap); - AlignmentExportData exportData = jalview.gui.AlignFrame - .getAlignmentForExport( - JSONFile.FILE_DESC, ap.getAlignViewport()); - 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 bioJSTemplateString = getBioJsTemplateAsString(); - String generatedBioJsWithJalviewAlignmentAsJson = bioJSTemplateString - .replaceAll( -"#sequenceData#", jalviewAlignmentJson) - .toString(); - - PrintWriter out = new java.io.PrintWriter(new java.io.FileWriter( - outputFile)); - out.print(generatedBioJsWithJalviewAlignmentAsJson); - out.flush(); - out.close(); - jalview.util.BrowserLauncher.openURL("file:///" + outputFile); - } catch (NoFileSelectedException ex) - { - // do noting if no file was selected - } catch (Exception e) - { - e.printStackTrace(); - } - } + public static final String BJS_TEMPLATE_GIT_REPO = Cache + .getDefault("biojs_template_git_repo", + "https://raw.githubusercontent.com/jalview/exporter-templates/master/biojs/package.json"); - public String getOutputFile() throws NoFileSelectedException + public BioJsHTMLOutput(AlignmentPanel ap) { - String selectedFile = null; - JalviewFileChooser jvFileChooser = new JalviewFileChooser( - jalview.bin.Cache.getProperty("LAST_DIRECTORY"), new String[] - { "html" }, new String[] - { "HTML files" }, "HTML files"); - jvFileChooser.setFileView(new JalviewFileView()); - - // TODO uncomment when supported by MassageManager - jvFileChooser.setDialogTitle(MessageManager - .getString("label.save_as_biojs_html")); - jvFileChooser.setDialogTitle("save as BioJs 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()); - selectedFile = jvFileChooser.getSelectedFile().getPath(); - } - else - { - throw new NoFileSelectedException("No file was selected."); - } - return selectedFile; + super(ap, "BioJS MSA"); } - - public static String getBioJsTemplateAsString() - throws IOException - { - InputStreamReader isReader = null; - BufferedReader buffReader = null; - StringBuilder sb = new StringBuilder(); - Objects.requireNonNull(getCurrentBJSTemplateFile(), - "BioJsTemplate File not initialized!"); - @SuppressWarnings("deprecation") - URL url = getCurrentBJSTemplateFile().toURL(); - if (url != null) - { - try - { - isReader = new InputStreamReader(url.openStream()); - buffReader = new BufferedReader(isReader); - String line; - String lineSeparator = System.getProperty("line.separator"); - while ((line = buffReader.readLine()) != null) - { - sb.append(line).append(lineSeparator); - } - - } catch (Exception ex) - { - ex.printStackTrace(); - } finally - { - if (isReader != null) - { - isReader.close(); - } - - if (buffReader != null) - { - buffReader.close(); - } - } - } - return sb.toString(); - } - - public static void refreshBioJSVersionsInfo(String dirName) + public static void refreshVersionInfo(String dirName) throws URISyntaxException { File directory = new File(BJS_TEMPLATES_LOCAL_DIRECTORY); @@ -196,15 +97,20 @@ public class BioJsHTMLOutput { Thread updateThread = new Thread() { + @Override public void run() { try { - String gitRepoPkgJson = getURLContentAsString(BJS_TEMPLATE_GIT_REPO); - BioJSRepositoryPojo release = new BioJSRepositoryPojo( - gitRepoPkgJson); - syncUpdates(BJS_TEMPLATES_LOCAL_DIRECTORY, release); - refreshBioJSVersionsInfo(BJS_TEMPLATES_LOCAL_DIRECTORY); + String gitRepoPkgJson = getURLContentAsString( + BJS_TEMPLATE_GIT_REPO); + if (gitRepoPkgJson != null) + { + BioJSRepositoryPojo release = new BioJSRepositoryPojo( + gitRepoPkgJson); + syncUpdates(BJS_TEMPLATES_LOCAL_DIRECTORY, release); + refreshVersionInfo(BJS_TEMPLATES_LOCAL_DIRECTORY); + } } catch (URISyntaxException e) { e.printStackTrace(); @@ -215,7 +121,6 @@ public class BioJsHTMLOutput } - public static void syncUpdates(String localDir, BioJSRepositoryPojo repo) { for (BioJSReleasePojo bjsRelease : repo.getReleases()) @@ -300,8 +205,8 @@ public class BioJsHTMLOutput } } } - return responseStrBuilder == null ? null : responseStrBuilder - .toString(); + return responseStrBuilder == null ? null + : responseStrBuilder.toString(); } public static File getCurrentBJSTemplateFile() @@ -325,4 +230,50 @@ public class BioJsHTMLOutput BioJsHTMLOutput.bioJsMSAVersions = bioJsMSAVersions; } + @Override + public boolean isEmbedData() + { + return true; + } + + @Override + public boolean isLaunchInBrowserAfterExport() + { + return true; + } + + @Override + public void run() + { + try + { + String bioJSON = getBioJSONData(); + String bioJSTemplateString = HTMLOutput + .readFileAsString(getCurrentBJSTemplateFile()); + String generatedBioJsWithJalviewAlignmentAsJson = bioJSTemplateString + .replaceAll("#sequenceData#", bioJSON).toString(); + + PrintWriter out = new java.io.PrintWriter( + new java.io.FileWriter(generatedFile)); + out.print(generatedBioJsWithJalviewAlignmentAsJson); + out.flush(); + out.close(); + setProgressMessage(MessageManager + .formatMessage("status.export_complete", getDescription())); + exportCompleted(); + + } catch (OutOfMemoryError err) + { + System.out.println("########################\n" + "OUT OF MEMORY " + + generatedFile + "\n" + "########################"); + new OOMWarning("Creating Image for " + generatedFile, err); + } catch (Exception e) + { + setProgressMessage(MessageManager + .formatMessage("info.error_creating_file", getDescription())); + e.printStackTrace(); + } + + } + }