/*
* #%L
* Bio-Formats 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) 2006 - 2015 Open Microscopy Environment:
* - Board of Regents of the University of Wisconsin-Madison
* - Glencoe Software, Inc.
* - University of Dundee
* %%
* 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, see
* <http://www.gnu.org/licenses/gpl-2.0.html>.
* #L%
*/
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;
import loci.common.Constants;
/**
* A wizard for walking users through installation of third party
* libraries and plugins used by the Bio-Formats plugins.
*
* @author Curtis Rueden ctrueden at wisc.edu
*/
public class InstallWizard extends JFrame
{
// -- Fields --
// -- Constructor --
public InstallWizard() {
setTitle("Bio-Formats 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 plugins are running from a ueber 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(), Constants.ENCODING);
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();
}
}