/*
* #%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;
import ij.IJ;
import ij.ImageJ;
import ij.gui.GenericDialog;
import ij.plugin.PlugIn;
import java.io.File;
import loci.formats.UpgradeChecker;
/**
* A plugin for updating the Bio-Formats plugins.
*
* @author Melissa Linkert melissa at glencoesoftware.com
*/
public class Updater implements PlugIn {
// -- Constants --
private static final String TRUNK = "Trunk build";
private static final String DAILY = "Daily build";
private static final String STABLE =
"Stable build (" + UpgradeChecker.STABLE_VERSION + ")";
// -- Fields --
/** Flag indicating whether last operation was canceled. */
public boolean canceled;
/** Path to ueber-jar whether bioformats_package.jar or loci_tools.jar. */
private String urlPath;
// -- PlugIn API methods --
@Override
public void run(String arg) {
if (isFiji()) {
IJ.showMessage("Please use 'Help > Update Fiji' to update.");
return;
}
GenericDialog upgradeDialog = new GenericDialog("Update Bio-Formats Plugins");
String[] options = new String[] {TRUNK, DAILY, STABLE};
upgradeDialog.addChoice("Release", options, options[0]);
upgradeDialog.showDialog();
if (upgradeDialog.wasCanceled()) {
canceled = true;
return;
}
String release = upgradeDialog.getNextChoice();
if (release.equals(TRUNK)) {
urlPath = UpgradeChecker.TRUNK_BUILD;
}
else if (release.equals(DAILY)) {
urlPath = UpgradeChecker.DAILY_BUILD;
}
else if (release.equals(STABLE)) {
urlPath = UpgradeChecker.STABLE_BUILD;
}
urlPath += UpgradeChecker.TOOLS;
install(urlPath);
}
/**
* Returns true if the current ImageJ instance is actually a Fiji instance.
*/
public static boolean isFiji() {
ImageJ ij = IJ.getInstance();
if (ij != null) {
String title = ij.getTitle();
if (title != null) {
return title.indexOf("Fiji") >= 0;
}
}
return false;
}
/**
* Install the tools bundle which can be retrieved from the specified path.
*/
public static void install(String urlPath) {
String pluginsDirectory = IJ.getDirectory("plugins");
String jarPath = pluginsDirectory;
if (!isFiji()) {
jarPath += UpgradeChecker.TOOLS;
}
BF.status(false, "Downloading...");
boolean success = false;
if (isFiji()) {
return;
}
else {
success = new UpgradeChecker().install(urlPath, jarPath);
}
BF.status(false, "");
if (!success) {
IJ.showMessage("An error occurred while downloading the Bio-Formats plugins");
}
else {
IJ.showMessage("The Bio-Formats plugins have been downloaded.\n" +
"Please restart ImageJ to complete the upgrade process.");
}
}
// -- Helper methods --
private static String find(String dir, String filename) {
File dirFile = new File(dir);
String[] list = dirFile.list();
for (String f : list) {
File nextFile = new File(dirFile, f);
if (nextFile.isDirectory()) {
String result = find(nextFile.getAbsolutePath(), filename);
if (result != null) {
return result;
}
}
else {
int dot = filename.indexOf(".");
if (f.startsWith(filename.substring(0, dot)) &&
f.endsWith(filename.substring(dot)))
{
return nextFile.getAbsolutePath();
}
}
}
return null;
}
}