package org.rzo.yajsw.condition;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;
import org.jboss.netty.logging.InternalLogger;
import org.rzo.yajsw.config.YajswConfigurationImpl;
import org.rzo.yajsw.script.Script;
import org.rzo.yajsw.script.ScriptFactory;
import org.rzo.yajsw.wrapper.WrappedProcess;
public class Condition
{
Script _script;
/** The _config. */
YajswConfigurationImpl _config;
/** The _wp. */
WrappedProcess _wp;
/** The _has trigger. */
boolean _hasTrigger = false;
/** The _triggered. */
boolean _triggered = false;
long _period = -1;
static Timer _timer = new Timer("yajsw.condition");
InternalLogger _log;
public Condition(YajswConfigurationImpl config, WrappedProcess wrappedProcess, InternalLogger log)
{
_config = config;
_wp = wrappedProcess;
_log = log;
}
public void init()
{
String fileName = _config.getString("wrapper.condition.script");
if (fileName == null)
return;
File f = new File(fileName);
if (!f.exists() || !f.isFile())
{
try
{
System.out.println("file not found -> ignoring condition script " + f.getCanonicalPath());
}
catch (IOException e)
{
e.printStackTrace();
}
}
List args = _config.getList("wrapper.condition.script.args", new ArrayList());
String[] argsArr = new String[args.size()];
for (int i = 0; i < argsArr.length; i++)
argsArr[i] = args.get(i).toString();
_script = ScriptFactory.createScript(fileName, "condition", _wp, argsArr, _log, 0);
_hasTrigger = _script != null;
_period = _config.getLong("wrapper.condition.cycle", -1) * 1000;
}
public void stop()
{
_timer.cancel();
_triggered = false;
}
public boolean isHasTrigger()
{
return _hasTrigger;
}
public boolean isTriggered()
{
return _triggered;
}
public void start()
{
_triggered = true;
if (_period > 0)
_timer.schedule(new TimerTask()
{
@Override
public void run()
{
_script.execute();
}
}, new Date(), _period);
else
_timer.schedule(new TimerTask()
{
@Override
public void run()
{
_script.execute();
}
}, new Date());
}
}