package edu.mbl.jif.imaging.nav;
import ij.IJ;
import java.io.File;
/**
* This determines how to handle a given type of file or set of files.
*
* @author GBH
*/
public class FileOpener {
// <editor-fold defaultstate="collapsed" desc=" === Image Opening =============================">
/*
* Open Images
* If Micro-Manager type, using Micro-Manager, if available and open
* else ImageJ, if available,
* else ImageIO.
*
* TODO Bundle ImageIO for Tiffs with OneJar...
* TODO Fall-back image viewer?
*/
//
String defaultImageOpener = "edu.mbl.jif.imaging.nav.ImageOpenerIJ";
public void setDefaultImageOpener(String defaultImageOpener) {
this.defaultImageOpener = defaultImageOpener;
}
public void openFile(String localFilepath) {
OpenImageThread oit = new OpenImageThread(localFilepath);
oit.start();
}
class OpenImageThread extends Thread {
private final String file;
public OpenImageThread(String file) {
this.file = file;
}
public void run() {
openBasedOnType(file);
}
}
public void openBasedOnType(String localFilepath) {
File[] files = new File[]{new File(localFilepath)};
// TODO: extension to application lookup
// Open based on type...
if (isMicroManagerType(localFilepath)) {
try {
// Open using Micro-Manager
System.out.println("Is a Micro-Manager dataset.");
openImagesUsing(files, "edu.mbl.jif.imaging.nav.mmgr.ImageOpenerMmgr");
} catch (Exception ex) {
System.out.println(".mmgr.ImageOpenerMmgr threw exception");
try {
openImagesUsing(files, defaultImageOpener);
//openWithImageIO(files);
} catch (Exception ex1) {
System.err.println("Default opener failed (" + defaultImageOpener + ")");
}
}
} else {
// Open using default
try {
openImagesUsing(files, defaultImageOpener);
} catch (Exception ex) {
openWithImageIO(files);
}
}
}
public void openWithImageIO(final File[] files) {
//ImageIO.createImageInputStream(files)
//openImagesUsing(files, "edu.mbl.jif.imaging.nav.mmgr.ImageOpenerMmgr");
}
// Image Types...
public static boolean isMicroManagerType(String localFilepath) {
// Determine type of file/dataset
File f = new File(localFilepath);
boolean isMmgr = false;
if (f.isFile()) {
if (f.getName().contains("ome")) {
return true;
}
File[] files = f.getParentFile().listFiles();
for (File file : files) {
if (file.getName().contains("metadata.txt")) {
return true;
}
}
return false;
}
if (f.isDirectory()) {
File[] files = f.listFiles();
for (File file : files) {
if (file.getName().contains("metadata.txt")) {
return true;
}
}
return false;
}
return false;
}
void openImagesUsing(final File[] files, String procClassName)
throws Exception {
try {
DatasetOpener proc = (DatasetOpener) Class.forName(procClassName).newInstance();
if (proc != null) {
proc.openDataset(files);
}
} catch (Exception exception) {
throw exception;
}
}
private String pluginToRun = "Orientation_Indicators";
public void setPluginToRun(String pluginToRun) {
this.pluginToRun = pluginToRun;
}
private void runPlugin() {
if (pluginToRun != null) {
IJ.run(pluginToRun);
}
}
// TODO
public void openInExternalViewer() {
}
// </editor-fold>
}