package edu.sc.seis.sod.subsetter.requestGenerator;
import java.util.List;
import org.w3c.dom.Element;
import edu.iris.Fissures.IfSeismogramDC.RequestFilter;
import edu.iris.Fissures.network.ChannelImpl;
import edu.sc.seis.fissuresUtil.cache.CacheEvent;
import edu.sc.seis.sod.CookieJar;
import edu.sc.seis.sod.subsetter.AbstractScriptSubsetter;
import edu.sc.seis.sod.velocity.event.VelocityEvent;
import edu.sc.seis.sod.velocity.network.VelocityChannel;
public class RequestGeneratorScript extends AbstractScriptSubsetter implements RequestGenerator {
public RequestGeneratorScript(Element config) {
super(config);
}
public RequestFilter[] generateRequest(CacheEvent event, ChannelImpl channel, CookieJar cookieJar) throws Exception {
return runScript(new VelocityEvent(event),
new VelocityChannel(channel),
cookieJar);
}
/** Run the script with the arguments as predefined variables. */
public RequestFilter[] runScript(VelocityEvent event,
VelocityChannel channel,
CookieJar cookieJar) throws Exception {
engine.put("event", event);
engine.put("channel", channel);
engine.put("cookieJar", cookieJar);
Object result = preeval();
if (result == null) {
// try getting variable named result from engine
result = engine.get("result");
}
if (result == null) {
throw new Exception("Script had a null result");
}
if (result instanceof RequestFilter[]) {
return (RequestFilter[])result;
} else if (result instanceof List) {
return (RequestFilter[])((List)result).toArray(new RequestFilter[0]);
}
throw new Exception("Script did not return RequestFilter array or List: "+result.getClass().getName());
}
}