package org.calrissian.flowbox.spout; 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.calrissian.flowbox.model.Event; import org.calrissian.flowbox.model.Tuple; import java.util.Map; import java.util.UUID; import static java.util.Collections.singleton; public class MockEventGeneratorSpout extends BaseRichSpout{ SpoutOutputCollector collector; int sleepBetweenEvents = 5000; public MockEventGeneratorSpout(int sleepBetweenEvents) { this.sleepBetweenEvents = sleepBetweenEvents; } @Override public void declareOutputFields(OutputFieldsDeclarer outputFieldsDeclarer) { outputFieldsDeclarer.declare(new Fields("event")); } @Override public void open(Map map, TopologyContext topologyContext, SpoutOutputCollector spoutOutputCollector) { this.collector = spoutOutputCollector; } @Override public void nextTuple() { Event event = new Event(UUID.randomUUID().toString(), System.currentTimeMillis()); event.put(new Tuple("key1", "val1")); event.put(new Tuple("key2", "val2")); event.put(new Tuple("key3", "val3")); event.put(new Tuple("key4", "val4")); event.put(new Tuple("key5", "val5")); collector.emit(new Values(singleton(event))); try { Thread.sleep(sleepBetweenEvents); } catch (InterruptedException e) { throw new RuntimeException(e); } } }