package railo.runtime.spooler;
import railo.runtime.config.Config;
import railo.runtime.config.RemoteClient;
import railo.runtime.exp.PageException;
import railo.runtime.net.rpc.client.RPCClient;
import railo.runtime.op.Caster;
import railo.runtime.type.Struct;
import railo.runtime.type.StructImpl;
public abstract class SpoolerTaskWS extends SpoolerTaskSupport {
private RemoteClient client;
public SpoolerTaskWS(ExecutionPlan[] plans,RemoteClient client) {
super(plans);
this.client=client;
}
@Override
public final Object execute(Config config) throws PageException {
try {
RPCClient rpc = getRPCClient(client);
return rpc.callWithNamedValues(config, getMethodName(), getArguments());
}
catch (Throwable t) {
throw Caster.toPageException(t);
}
}
@Override
public String subject() {
return client.getLabel();
}
@Override
public Struct detail() {
Struct sct=new StructImpl();
sct.setEL("label", client.getLabel());
sct.setEL("url", client.getUrl());
return sct;
}
public static RPCClient getRPCClient(RemoteClient client) throws PageException {
return new RPCClient(client.getUrl(),client.getServerUsername(),client.getServerPassword(),client.getProxyData());
}
protected abstract String getMethodName();
protected abstract Struct getArguments();
}