package main.java.bolts; import java.util.ArrayList; import java.util.List; import java.util.Map; import main.java.utils.WorkberchTuple; import main.java.utils.redis.RedisException; import main.java.utils.redis.RedisHandeler; import org.apache.commons.lang.StringUtils; import backtype.storm.topology.BasicOutputCollector; import com.google.common.base.Throwables; public abstract class WorkberchProvenanceBolt extends WorkberchGenericBolt { private static final long serialVersionUID = 1L; private final String guid; @Override protected void emitTuple(final List<Object> tuple, final BasicOutputCollector collector, final boolean lastValue, final String uuid) { try { RedisHandeler.setProvenanceEmitedInfo(guid, getBoltId(), getOutputFields(), tuple, uuid); super.emitTuple(tuple, collector, lastValue, uuid); } catch (final RedisException e) { Throwables.propagate(e); } } protected String getGuid() { return guid; } public WorkberchProvenanceBolt(final String guid, final List<String> outputFields) { super(outputFields); this.guid = guid; } @Override public void executeProvenance(final WorkberchTuple input, final BasicOutputCollector collector, final boolean lastValues) { final Map<String, Object> valuesMap = input.getValues(); final List<String> fields = new ArrayList<String>(); final List<Object> values = new ArrayList<Object>(); for (final String key : valuesMap.keySet()) { fields.add(key); values.add(valuesMap.get(key)); } String uuid = StringUtils.EMPTY; try { uuid = RedisHandeler.setProvenanceReceivedInfo(guid, getBoltId(), fields, values); } catch (final RedisException e) { Throwables.propagate(e); } executeLogic(input, collector, lastValues, uuid); } abstract public void executeLogic(WorkberchTuple input, BasicOutputCollector collector, boolean lastValues, String uuid); }