1 package compbio.ws.server;
\r
4 import java.io.IOException;
\r
6 import javax.servlet.ServletContextEvent;
\r
7 import javax.servlet.ServletContextListener;
\r
9 import org.apache.log4j.Logger;
\r
11 import compbio.engine.client.Executable.ExecProvider;
\r
12 import compbio.engine.client.EngineUtil;
\r
13 import compbio.engine.conf.PropertyHelperManager;
\r
14 import compbio.runner.disorder.IUPred;
\r
15 import compbio.runner.msa.Muscle;
\r
16 import compbio.util.SysPrefs;
\r
19 * Run setexecflag.sh script if executable flag is not set
\r
24 public class SetExecutableFlag implements ServletContextListener {
\r
26 private final Logger log = Logger.getLogger(SetExecutableFlag.class);
\r
29 public void contextDestroyed(ServletContextEvent arg0) {
\r
34 * This listener is designed to run only once when the web application is
\r
35 * deployed to set executable flag for binaries.
\r
41 public void contextInitialized(ServletContextEvent arg0) {
\r
42 // Assume at least one of these is configured
\r
43 // Do not even bother with cluster execution, sysadmins set the flag
\r
45 String command = EngineUtil.getCommand(ExecProvider.Local, Muscle.class);
\r
46 if (compbio.util.Util.isEmpty(command)) {
\r
47 command = EngineUtil.getCommand(ExecProvider.Local, IUPred.class);
\r
49 boolean isExec = true;
\r
50 if (!compbio.util.Util.isEmpty(command)) {
\r
51 File file = new File(command);
\r
52 isExec = file.canExecute();
\r
55 String workDir = PropertyHelperManager.getLocalPath() + "binaries/src";
\r
56 String script = "setexecflag.sh";
\r
58 // Run only one once if not on Windows
\r
59 if (!SysPrefs.isWindows && !isExec) {
\r
61 // verify script exists
\r
62 File scriptFile = new File(workDir, script);
\r
63 if (!scriptFile.exists()) {
\r
64 log.debug("Setexecflag.sh script is NOT found in " + scriptFile.getAbsolutePath());
\r
67 scriptFile.setExecutable(true);
\r
68 log.debug("Setexecflag.sh script is found");
\r
72 log.debug("Executable flag is NOT set for the binaries - attemping to set it");
\r
73 ProcessBuilder pb = new ProcessBuilder(scriptFile.getAbsolutePath());
\r
74 pb.directory(new File(workDir));
\r
75 Process process = pb.start();
\r
78 } catch (IOException e) {
\r
79 log.debug("Failed to execute set executable flag script due to IOException! Please run it manually!");
\r
80 log.debug(e.getMessage(), e);
\r
81 } catch (InterruptedException e) {
\r
82 log.debug("Failed to execute set executable flag script due to Interruption! Please run it manually!");
\r
85 log.debug("Executable flag is already set for the binaries.");
\r