X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fio%2FBioJsHTMLOutput.java;h=e8e993b491d0e65e6cf11fcdfcf69d518da80133;hb=67b3acb8df1438ef37a756c04e14f5a3b8406808;hp=9c159911ea93920f05a887ae6804bcb6875ae8ac;hpb=64fb69927bb37d8773a75b684a3e7ab3f0c5c212;p=jalview.git diff --git a/src/jalview/io/BioJsHTMLOutput.java b/src/jalview/io/BioJsHTMLOutput.java index 9c15991..e8e993b 100644 --- a/src/jalview/io/BioJsHTMLOutput.java +++ b/src/jalview/io/BioJsHTMLOutput.java @@ -1,15 +1,20 @@ package jalview.io; +import jalview.api.AlignmentViewPanel; +import jalview.bin.Cache; +import jalview.datamodel.AlignmentExportData; import jalview.exceptions.NoFileSelectedException; -import jalview.ftp.FtpClient; -import jalview.gui.AlignViewport; -import jalview.gui.AlignmentPanel; -import jalview.gui.FeatureRenderer; +import jalview.gui.AlignFrame; +import jalview.json.binding.v1.BioJSReleasePojo; +import jalview.json.binding.v1.BioJSRepositoryPojo; +import jalview.util.BrowserLauncher; import jalview.util.MessageManager; +import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.File; import java.io.IOException; +import java.io.InputStream; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.URISyntaxException; @@ -17,45 +22,32 @@ import java.net.URL; import java.util.Objects; import java.util.TreeMap; -import org.apache.commons.net.ftp.FTP; -import org.apache.commons.net.ftp.FTPClient; -import org.apache.commons.net.ftp.FTPFile; - public class BioJsHTMLOutput { - private AlignViewport av; + private AlignmentViewPanel ap; private static File currentBJSTemplateFile; private static TreeMap bioJsMSAVersions; - public static final String BJS_TEMPLATES_LOCAL_DIRECTORY = jalview.bin.Cache - .getDefault("biojs_template_directory", "/biojs_templates/"); - - public static final String BJS_FTP_USER = jalview.bin.Cache.getDefault( - "biojs_ftp_user", "test"); + public static final String DEFAULT_DIR = System.getProperty("user.home") + + File.separatorChar + ".biojs_templates" + File.separatorChar; - public static final String BJS_FTP_PWD = jalview.bin.Cache.getDefault( - "biojs_ftp_pwd", "test"); + public static final String BJS_TEMPLATES_LOCAL_DIRECTORY = Cache + .getDefault("biojs_template_directory", DEFAULT_DIR); - public static final String BJS_FTP_PORT = jalview.bin.Cache.getDefault( - "biojs_ftp_port", "22"); + public static final String BJS_TEMPLATE_GIT_REPO = Cache + .getDefault( + "biojs_template_git_repo", + "https://raw.githubusercontent.com/tcofoegbu/bjs-template/master/package.json"); - public static final String BJS_FTP_SERVER = jalview.bin.Cache.getDefault( - "biojs_ftp_server", "localhost"); - - 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; } - } public void exportJalviewAlignmentAsBioJsHtmlFile() @@ -63,7 +55,20 @@ public class BioJsHTMLOutput try { String outputFile = getOutputFile(); - String jalviewAlignmentJson = JSONFile.getJSONData(av); + // String jalviewAlignmentJson = JSONFile.getJSONData(ap); + AlignmentExportData exportData = 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( @@ -75,7 +80,7 @@ public class BioJsHTMLOutput out.print(generatedBioJsWithJalviewAlignmentAsJson); out.flush(); out.close(); - jalview.util.BrowserLauncher.openURL("file:///" + outputFile); + BrowserLauncher.openURL("file:///" + outputFile); } catch (NoFileSelectedException ex) { // do noting if no file was selected @@ -89,12 +94,11 @@ public class BioJsHTMLOutput { String selectedFile = null; JalviewFileChooser jvFileChooser = new JalviewFileChooser( - jalview.bin.Cache.getProperty("LAST_DIRECTORY"), new String[] + 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"); @@ -103,7 +107,7 @@ 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(); } @@ -157,11 +161,10 @@ public class BioJsHTMLOutput return sb.toString(); } - public TreeMap updateBioJSVersionsInfo(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(); @@ -188,54 +191,123 @@ public class BioJsHTMLOutput { setCurrentBJSTemplateFile(versionFileMap.lastEntry().getValue()); } - return versionFileMap; + setBioJsMSAVersions(versionFileMap); } - public void updateBioJS() + public static void updateBioJS() { - TreeMap versionLists = null; - try + Thread updateThread = new Thread() { - // downlaodNewBioJsTemplates(BJS_TEMPLATES_LOCAL_DIRECTORY); - versionLists = updateBioJSVersionsInfo(BJS_TEMPLATES_LOCAL_DIRECTORY); - setBioJsMSAVersions(versionLists); - } catch (URISyntaxException e) - { - 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 downlaodNewBioJsTemplates(String localDirectory) + + public static void syncUpdates(String localDir, BioJSRepositoryPojo repo) { - FTPClient client = FtpClient.getFtpClient(BJS_FTP_SERVER); - if (FtpClient.authenticateUser(client, BJS_FTP_USER, BJS_FTP_PWD)) + for (BioJSReleasePojo bjsRelease : repo.getReleases()) { - client.enterLocalPassiveMode(); - try + String releaseUrl = bjsRelease.getUrl(); + String releaseVersion = bjsRelease.getVersion(); + String releaseFile = "BioJsMSA_" + releaseVersion + ".txt"; + if (releaseVersion.equals(repo.getLatestReleaseVersion())) + { + releaseFile = "Latest_BioJsMSA_" + releaseVersion + ".txt"; + } + + File biojsDirectory = new File(BJS_TEMPLATES_LOCAL_DIRECTORY); + if (!biojsDirectory.exists()) { - client.setFileType(FTP.BINARY_FILE_TYPE); - for (FTPFile fFile : client.listFiles()) + if (!biojsDirectory.mkdirs()) { - String localFileName = BJS_TEMPLATES_LOCAL_DIRECTORY - + fFile.getName(); - String remoteFileName = fFile.getName(); - FtpClient.downloadFile(client, remoteFileName, localFileName); + System.out.println("Couldn't create local directory : " + + BJS_TEMPLATES_LOCAL_DIRECTORY); + return; } - } catch (IOException e) + } + + File file = new File(BJS_TEMPLATES_LOCAL_DIRECTORY + releaseFile); + if (!file.exists()) { - e.printStackTrace(); + + PrintWriter out = null; + try + { + out = new java.io.PrintWriter(new java.io.FileWriter(file)); + out.print(getURLContentAsString(releaseUrl)); + } catch (IOException e) + { + e.printStackTrace(); + } finally + { + if (out != null) + { + out.flush(); + out.close(); + } + } } } + } - // public static void main(String[] args) throws IOException - // { - // Document doc = Jsoup.connect("http://howto.unixdev.net").get(); - // for (Element file : doc.select("td.right td a")) - // { - // System.out.println(file.attr("href")); - // } - // } + public static String getURLContentAsString(String url) + throws OutOfMemoryError + { + StringBuilder responseStrBuilder = null; + InputStream is = null; + try + { + URL resourceUrl = new URL(url); + is = new BufferedInputStream(resourceUrl.openStream()); + BufferedReader br = new BufferedReader(new InputStreamReader(is)); + responseStrBuilder = new StringBuilder(); + String lineContent; + + while ((lineContent = br.readLine()) != null) + { + responseStrBuilder.append(lineContent).append("\n"); + } + } catch (OutOfMemoryError er) + { + er.printStackTrace(); + } catch (Exception ex) + { + ex.printStackTrace(); + } finally + { + if (is != null) + { + try + { + is.close(); + } catch (IOException e) + { + e.printStackTrace(); + } + } + } + return responseStrBuilder == null ? null : responseStrBuilder + .toString(); + } public static File getCurrentBJSTemplateFile() { @@ -258,5 +330,4 @@ public class BioJsHTMLOutput BioJsHTMLOutput.bioJsMSAVersions = bioJsMSAVersions; } - }