package udacity.storm.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 backtype.storm.utils.Utils; import java.util.Map; import java.util.Random; public class MyLikesSpout extends BaseRichSpout { SpoutOutputCollector _collector; Random _rand; @Override public void open(Map conf, TopologyContext context, SpoutOutputCollector collector) { _collector = collector; _rand = new Random(); } @Override public void nextTuple() { Utils.sleep(100); String[] pairs = new String[]{ "Lewis # Udacity", "Taylor # Cinematography", "Justine # Dogs", "Liz # Soccer", "Kim # Art" }; String pair = pairs[_rand.nextInt(pairs.length)]; String name = pair.split("#")[0].trim(); String favorite = pair.split("#")[1].trim(); //** TO DO: update emit and declareOutputFields to //** emit "name" and "favorite" instead of "pair" _collector.emit(new Values(pair)); } @Override public void declareOutputFields(OutputFieldsDeclarer declarer) { declarer.declare(new Fields("pair")); } }