package stormapplied.heatmap.topology; import backtype.storm.spout.SpoutOutputCollector; import backtype.storm.task.TopologyContext; import backtype.storm.topology.OutputFieldsDeclarer; import backtype.storm.topology.base.BaseRichSpout; import backtype.storm.tuple.Fields; import backtype.storm.tuple.Values; import org.apache.commons.io.IOUtils; import java.io.IOException; import java.nio.charset.Charset; import java.util.List; import java.util.Map; public class Checkins extends BaseRichSpout { private List<String> checkins; private int nextEmitIndex; private SpoutOutputCollector outputCollector; @Override public void declareOutputFields(OutputFieldsDeclarer declarer) { declarer.declare(new Fields("time", "address")); } @Override public void open(Map map, TopologyContext topologyContext, SpoutOutputCollector spoutOutputCollector) { this.outputCollector = spoutOutputCollector; this.nextEmitIndex = 0; try { checkins = IOUtils.readLines(ClassLoader.getSystemResourceAsStream("checkins.txt"), Charset.defaultCharset().name()); } catch (IOException e) { throw new RuntimeException(e); } } @Override public void nextTuple() { String checkin = checkins.get(nextEmitIndex); String[] parts = checkin.split(","); Long time = Long.valueOf(parts[0]); String address = parts[1]; outputCollector.emit(new Values(time, address)); nextEmitIndex = (nextEmitIndex + 1) % checkins.size(); } }