// // InstallWizard.java // /* LOCI Plugins for ImageJ: a collection of ImageJ plugins including the Bio-Formats Importer, Bio-Formats Exporter, Bio-Formats Macro Extensions, Data Browser and Stack Slicer. Copyright (C) 2005-@year@ Melissa Linkert, Curtis Rueden and Christopher Peterson. This program 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 2 of the License, or (at your option) any later version. This program 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 this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ package loci.plugins.config; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.URL; import java.net.URLConnection; import javax.swing.JFrame; import javax.swing.WindowConstants; /** * A wizard for walking users through installation of third party * libraries and plugins used by the LOCI plugins. * * <dl><dt><b>Source code:</b></dt> * <dd><a href="http://trac.openmicroscopy.org.uk/ome/browser/bioformats.git/components/loci-plugins/src/loci/plugins/config/InstallWizard.java">Trac</a>, * <a href="http://git.openmicroscopy.org/?p=bioformats.git;a=blob;f=components/loci-plugins/src/loci/plugins/config/InstallWizard.java;hb=HEAD">Gitweb</a></dd></dl> * * @author Curtis Rueden ctrueden at wisc.edu */ public class InstallWizard extends JFrame { // -- Fields -- // -- Constructor -- public InstallWizard() { setTitle("LOCI Plugins Library Installer"); setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); /* 1. get JAR file associated with a particular FQ Java class; if present, make sure JAR file name matches expected value. if so: a. get datestamp; b. query server for newer version if newer version: i. ask user if they want to upgrade else: i. tell user they have latest version if not: a. tell user they have a non-standard installation and we can't upgrade automatically if not present, ask user if they want to install the lib */ // capabilities: // Check for ImageJ 1.43 or newer // download and install latest ij.jar // don't launch ImageJ updater plugin because it might not exist // check whether LOCI plugins are running as loci_tools.jar or as separate // JARs // check for conflicting JARs -- i.e., duplicate classes // Win32: download and install QuickTime // Download http://www.apple.com/quicktime/download/ // Find line with qtimewin, extract URL // Download the URL // Find line with QuickTimeInstaller.exe, extract URL // Download the URL // Execute program // Wait for process completion before continuing // Linux: download and install Image I/O Tools native codecs // Download http://download.java.net/media/jai-imageio/builds/release/1.1/jai_imageio-1_1-lib-linux-i586-jre.bin // Chmod 755 and execute? // Win32: download and install Image I/O Tools native codecs // Download http://download.java.net/media/jai-imageio/builds/release/1.1/jai_imageio-1_1-lib-windows-i586-jre.exe // Execute program // Wait for process completion before continuing // File: jre/bin/clib_jiio.dll // Find jre/bin folder by checking ImageJ.cfg file? // test with data/dicom/john/E724_S007_A0024.dcm // Win32: download and install Nikon ND2 plugin // (gray out option to use Nikon ND2 if plugin is not available) // Download http://rsb.info.nih.gov/ij/plugins/download/jars/ImageJND2ReaderPlugin.zip // Extract .msi file and execute it // Wait for process completion before continuing // Option to download Image5D // Download http://rsb.info.nih.gov/ij/plugins/download/jars/Image_5D.jar // Place in ImageJ plugins folder // Option to download View5D // Download http://wwwuser.gwdg.de/~rheintz/Nanoimaging/View5D/View5D_.jar // Place in ImageJ plugins folder // Check for upgrades to existing JAR libraries, and if available, // download and update them // Individual readers throw new MissingLibraryException // (extends FormatException) when required third party library is missing // This can allow importer plugin to prompt user to run LociInstaller to // install the missing library. } public static void checkLatest(String urlPath, String localPath) throws IOException { URL url = new URL(urlPath); URLConnection conn = url.openConnection(); long latest = conn.getLastModified(); File file = new File(localPath); long installed = file.lastModified(); if (installed < latest) { // TODO: prompt user to upgrade } } public static String download(URLConnection conn) throws IOException { InputStreamReader in = new InputStreamReader(conn.getInputStream()); char[] buf = new char[65536]; StringBuffer sb = new StringBuffer(); while (true) { int r = in.read(buf); if (r <= 0) break; sb.append(buf, 0, r); } in.close(); return sb.toString(); } public static void download(URLConnection conn, File dest) throws IOException { InputStream in = conn.getInputStream(); FileOutputStream out = new FileOutputStream(dest); byte[] buf = new byte[65536]; while (true) { int r = in.read(buf); if (r <= 0) break; out.write(buf, 0, r); } out.close(); in.close(); } }