package main.java.bolts;
import static main.java.utils.constants.WorkberchConstants.INDEX_FIELD;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import main.java.parser.model.BeanshellLogicExecutor;
import main.java.utils.WorkberchTuple;
import main.java.utils.constants.WorkberchConstants;
import backtype.storm.topology.BasicOutputCollector;
import com.fasterxml.jackson.databind.JsonNode;
public class BeanshellBolt extends WorkberchTavernaProcessorBolt {
private static final long serialVersionUID = -4520749632325572455L;
private BeanshellLogicExecutor logicExecuter;
public BeanshellBolt(final String guid, final List<String> inputFields, final List<String> outputFields, final JsonNode node) {
super(guid, inputFields, outputFields, node);
final List<String> scriptOutputs = new ArrayList<String>();
for (final String string : getOutputFields()) {
if (!string.equals(WorkberchConstants.INDEX_FIELD)) {
scriptOutputs.add(string.split("\\" + WorkberchConstants.NAME_DELIMITER)[1]);
}
}
logicExecuter.setOutputNames(scriptOutputs);
}
@Override
public void executeLogic(final WorkberchTuple tuple, final BasicOutputCollector collector, final boolean lastValues, final String uuid) {
for (final String param : tuple.getValues().keySet()) {
if (!param.equals(WorkberchConstants.INDEX_FIELD)) {
final String localParam = param.split("\\" + WorkberchConstants.NAME_DELIMITER)[1];
logicExecuter.setParam(localParam, tuple.getValues().get(param));
}
}
final Map<String, Object> outputs = logicExecuter.executeLogic();
final ArrayList<Object> values = new ArrayList<Object>();
for (final String outuput : outputs.keySet()) {
values.add(outputs.get(outuput));
}
values.add(tuple.getValues().get(INDEX_FIELD));
emitTuple(values, collector, lastValues, uuid);
}
public BeanshellLogicExecutor getLogicExecuter() {
return logicExecuter;
}
public void setLogicExecuter(final BeanshellLogicExecutor logicExecuter) {
this.logicExecuter = logicExecuter;
}
@Override
protected void initFromJsonNode(final JsonNode jsonNode) {
logicExecuter = new BeanshellLogicExecutor();
logicExecuter.setScript(jsonNode.get("script").asText());
}
}