X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fio%2FBioJsHTMLOutput.java;h=9b9be60964f1922504bbf94d14c7002014132df5;hb=6f2610ec4d7a79dde17f9b3d02225c62aa52cfd8;hp=ff554007201ff55bbfcc13d304f1fa6619e334f7;hpb=245733144fbe63d71454b0a00ebc21e84458bab2;p=jalview.git diff --git a/src/jalview/io/BioJsHTMLOutput.java b/src/jalview/io/BioJsHTMLOutput.java index ff55400..9b9be60 100644 --- a/src/jalview/io/BioJsHTMLOutput.java +++ b/src/jalview/io/BioJsHTMLOutput.java @@ -1,11 +1,31 @@ +/* + * 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.datamodel.AlignmentExportData; import jalview.exceptions.NoFileSelectedException; -import jalview.gui.AlignViewport; -import jalview.gui.AlignmentPanel; -import jalview.gui.FeatureRenderer; -import jalview.json.binding.v1.BioJSReleasePojo; -import jalview.json.binding.v1.BioJSRepositoryPojo; +import jalview.json.binding.biojs.BioJSReleasePojo; +import jalview.json.binding.biojs.BioJSRepositoryPojo; import jalview.util.MessageManager; import java.io.BufferedInputStream; @@ -20,30 +40,30 @@ import java.net.URL; import java.util.Objects; import java.util.TreeMap; - public class BioJsHTMLOutput { - private AlignViewport av; + private AlignmentViewPanel ap; private static File currentBJSTemplateFile; private static TreeMap bioJsMSAVersions; + 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 - .getDefault("biojs_template_directory", "/biojs_templates/"); + .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"); + "https://raw.githubusercontent.com/jalview/exporter-templates/master/biojs/package.json"); - public BioJsHTMLOutput(AlignmentPanel ap, - FeatureRenderer fr1) + public BioJsHTMLOutput(AlignmentViewPanel ap) { if (ap != null) { - this.av = ap.av; - av.setFeatureRenderer(new FeatureRenderer(ap)); + this.ap = ap; } } @@ -52,11 +72,62 @@ public class BioJsHTMLOutput try { String outputFile = getOutputFile(); - String jalviewAlignmentJson = JSONFile.getJSONData(av); + // String jalviewAlignmentJson = JSONFile.getJSONData(ap); + 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, + 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 bioJSTemplateString = getBioJsTemplateAsString(); String generatedBioJsWithJalviewAlignmentAsJson = bioJSTemplateString - .replaceAll( -"#sequenceData#", jalviewAlignmentJson) + .replaceAll("#sequenceData#", jalviewAlignmentJson) .toString(); PrintWriter out = new java.io.PrintWriter(new java.io.FileWriter( @@ -78,15 +149,13 @@ public class BioJsHTMLOutput { String selectedFile = null; JalviewFileChooser jvFileChooser = new JalviewFileChooser( - jalview.bin.Cache.getProperty("LAST_DIRECTORY"), new String[] - { "html" }, new String[] - { "HTML files" }, "HTML files"); + 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); @@ -103,9 +172,7 @@ public class BioJsHTMLOutput return selectedFile; } - - public static String getBioJsTemplateAsString() - throws IOException + public static String getBioJsTemplateAsString() throws IOException { InputStreamReader isReader = null; BufferedReader buffReader = null; @@ -146,11 +213,10 @@ public class BioJsHTMLOutput return sb.toString(); } - public void refreshBioJSVersionsInfo(String dirName) + public static void refreshBioJSVersionsInfo(String dirName) throws URISyntaxException { - URL url = getClass().getResource(dirName); - File directory = new File(url.toURI()); + File directory = new File(BJS_TEMPLATES_LOCAL_DIRECTORY); Objects.requireNonNull(dirName, "dirName MUST not be null!"); Objects.requireNonNull(directory, "directory MUST not be null!"); TreeMap versionFileMap = new TreeMap(); @@ -180,23 +246,33 @@ public class BioJsHTMLOutput setBioJsMSAVersions(versionFileMap); } - public void updateBioJS() + public static void updateBioJS() { - try - { - String gitRepoPkgJson = getURLContentAsString(BJS_TEMPLATE_GIT_REPO); - BioJSRepositoryPojo release = new BioJSRepositoryPojo(gitRepoPkgJson); - syncUpdates(BJS_TEMPLATES_LOCAL_DIRECTORY, release); - refreshBioJSVersionsInfo(BJS_TEMPLATES_LOCAL_DIRECTORY); - } catch (URISyntaxException e) + Thread updateThread = new Thread() { - e.printStackTrace(); - } - } + public void run() + { + try + { + String gitRepoPkgJson = getURLContentAsString(BJS_TEMPLATE_GIT_REPO); + if (gitRepoPkgJson != null) + { + BioJSRepositoryPojo release = new BioJSRepositoryPojo( + gitRepoPkgJson); + syncUpdates(BJS_TEMPLATES_LOCAL_DIRECTORY, release); + refreshBioJSVersionsInfo(BJS_TEMPLATES_LOCAL_DIRECTORY); + } + } catch (URISyntaxException e) + { + e.printStackTrace(); + } + } + }; + updateThread.start(); + } - public void syncUpdates(String localDir, BioJSRepositoryPojo repo) - throws URISyntaxException + public static void syncUpdates(String localDir, BioJSRepositoryPojo repo) { for (BioJSReleasePojo bjsRelease : repo.getReleases()) { @@ -207,23 +283,22 @@ public class BioJsHTMLOutput { releaseFile = "Latest_BioJsMSA_" + releaseVersion + ".txt"; } - File file = null; - URL url = getClass().getResource( - BJS_TEMPLATES_LOCAL_DIRECTORY + releaseFile); - if (url == null) - { - String path = getClass().getResource(BJS_TEMPLATES_LOCAL_DIRECTORY) - .getPath(); - System.out.println("------> " + path); - file = new File(path + releaseFile); - } - else + + File biojsDirectory = new File(BJS_TEMPLATES_LOCAL_DIRECTORY); + if (!biojsDirectory.exists()) { - file = new File(url.toURI()); + if (!biojsDirectory.mkdirs()) + { + System.out.println("Couldn't create local directory : " + + BJS_TEMPLATES_LOCAL_DIRECTORY); + return; + } } + File file = new File(BJS_TEMPLATES_LOCAL_DIRECTORY + releaseFile); if (!file.exists()) { + PrintWriter out = null; try {