package main.java.bolts;
import static main.java.utils.constants.WorkberchConstants.INDEX_FIELD;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import main.java.utils.WorkberchTuple;
import backtype.storm.topology.BasicOutputCollector;
import backtype.storm.topology.OutputFieldsDeclarer;
import backtype.storm.tuple.Fields;
public class WorkberchNameMaperBolt extends WorkberchProvenanceBolt {
private static final long serialVersionUID = -755957444551948715L;
private final Map<String, String> mapedInputs = new HashMap<String, String>();
public WorkberchNameMaperBolt(final String guid, final List<String> outputFields) {
super(guid, outputFields);
}
public void addLink(final String sourceField, final String toName) {
mapedInputs.put(toName, sourceField);
}
@Override
public void declareOutputFields(final OutputFieldsDeclarer declarer) {
declarer.declare(new Fields(getOutputFields()));
}
@Override
public void executeLogic(final WorkberchTuple input, final BasicOutputCollector collector, final boolean lastValues, final String uuid) {
final List<Object> emitTuple = new ArrayList<Object>();
for (final String output : getOutputFields()) {
if (!output.equals(INDEX_FIELD)) {
Object outputValue = null;
final String inputField = mapedInputs.get(output);
if (inputField != null) {
outputValue = input.getValues().get(inputField);
}
emitTuple.add(outputValue);
}
}
emitTuple.add(input.getValues().get(INDEX_FIELD));
emitTuple(emitTuple, collector, lastValues, uuid);
}
}