blob: 308d51dd74ae5b7b0049751ea90a091c5a7afd0e [file] [log] [blame]
package net.sf.taverna.t2.workbench.ui.impl.menu;
import static java.lang.Runtime.getRuntime;
import static javax.swing.JOptionPane.INFORMATION_MESSAGE;
import static javax.swing.JOptionPane.showInputDialog;
import static net.sf.taverna.t2.workbench.MainWindow.getMainWindow;
import static net.sf.taverna.t2.workbench.ui.impl.menu.AdvancedMenu.ADVANCED_URI;
import java.awt.event.ActionEvent;
import java.io.File;
import javax.swing.AbstractAction;
import javax.swing.Action;
import net.sf.taverna.t2.ui.menu.AbstractMenuAction;
import org.apache.log4j.Logger;
import uk.org.taverna.configuration.app.ApplicationConfiguration;
public class ShowLogsAndDataMenuAction extends AbstractMenuAction {
private static final String OPEN = "open";
private static final String EXPLORER = "explorer";
// TODO Consider using xdg-open instead of gnome-open
private static final String GNOME_OPEN = "gnome-open";
private static final String WINDOWS = "Windows";
private static final String MAC_OS_X = "Mac OS X";
private ApplicationConfiguration applicationConfiguration;
public ShowLogsAndDataMenuAction() {
super(ADVANCED_URI, 200);
}
private static Logger logger = Logger.getLogger(ShowLogsAndDataMenuAction.class);
@Override
protected Action createAction() {
return new AbstractAction("Show logs and data folder") {
private static final long serialVersionUID = 1L;
@Override
public void actionPerformed(ActionEvent e) {
File logsAndDataDir = applicationConfiguration.getApplicationHomeDir();
showDirectory(logsAndDataDir, "Taverna logs and data folder");
}
};
}
public static void showDirectory(File dir, String title) {
String path = dir.getAbsolutePath();
String os = System.getProperty("os.name");
String cmd;
boolean isWindows = false;
if (os.equals(MAC_OS_X))
cmd = OPEN;
else if (os.startsWith(WINDOWS)) {
cmd = EXPLORER;
isWindows = true;
} else
// Assume Unix - best option is gnome-open
cmd = GNOME_OPEN;
String[] cmdArray = new String[2];
cmdArray[0] = cmd;
cmdArray[1] = path;
try {
Process exec = getRuntime().exec(cmdArray);
Thread.sleep(300);
exec.getErrorStream().close();
exec.getInputStream().close();
exec.getOutputStream().close();
exec.waitFor();
if (exec.exitValue() == 0 || isWindows && exec.exitValue() == 1)
// explorer.exe thinks 1 means success
return;
logger.warn("Exit value from " + cmd + " " + path + ": " + exec.exitValue());
} catch (Exception ex) {
logger.warn("Could not call " + cmd + " " + path, ex);
}
// Fall-back - just show a dialogue with the path
showInputDialog(getMainWindow(), "Copy path from below:", title,
INFORMATION_MESSAGE, null, null, path);
}
public void setApplicationConfiguration(ApplicationConfiguration applicationConfiguration) {
this.applicationConfiguration = applicationConfiguration;
}
}