package org.krakenapps.logdb.query.command;
import java.util.Map;
import org.krakenapps.logdb.LogQueryCommand;
import org.krakenapps.logdb.LogScript;
import org.krakenapps.logdb.LogScriptInput;
import org.krakenapps.logdb.LogScriptOutput;
import org.osgi.framework.BundleContext;
public class Script extends LogQueryCommand {
private BundleContext bc;
private LogScript script;
private String[] args;
private DefaultScriptInput input;
private DefaultScriptOutput output;
public Script(BundleContext bc, LogScript script, String[] args) {
this.bc = bc;
this.script = script;
this.args = args;
this.input = new DefaultScriptInput();
this.output = new DefaultScriptOutput();
}
@Override
public void push(LogMap m) {
input.data = m.map();
for (int i = 0; i < args.length; i++) {
String k = "args" + (i + 1);
input.data.put(k, args[i]);
}
script.handle(input, output);
}
@Override
public boolean isReducer() {
return true;
}
@Override
public void eof() {
this.status = Status.Finalizing;
script.eof(output);
super.eof();
}
private void out(LogMap data) {
write(data);
}
private class DefaultScriptInput implements LogScriptInput {
private Map<String, Object> data;
@Override
public BundleContext getBundleContext() {
return bc;
}
@Override
public Map<String, Object> getData() {
return data;
}
}
private class DefaultScriptOutput implements LogScriptOutput {
@Override
public void write(Map<String, Object> data) {
out(new LogMap(data));
}
}
}