package de.fhb.twitalyse.bolt.status.coords; import java.util.Map; import backtype.storm.task.OutputCollector; import backtype.storm.task.TopologyContext; import backtype.storm.topology.OutputFieldsDeclarer; import backtype.storm.tuple.Fields; import backtype.storm.tuple.Tuple; import backtype.storm.tuple.Values; import de.fhb.twitalyse.bolt.redis.BaseRedisBolt; import de.fhb.twitalyse.utils.CalcCoordinates; import de.fhb.twitalyse.utils.Point; /** * @author Christoph Ott <ott@fh-brandenburg.de> * */ public class FilterCoordsBolt extends BaseRedisBolt { /** * */ private static final long serialVersionUID = 6617639744490449642L; private Point centerPoint; private double radius; public FilterCoordsBolt(Point centerPoint, double radius, String host, int port) { super(host, port); this.centerPoint = centerPoint; this.radius = radius; } @Override public void prepare(Map stormConf, TopologyContext context, OutputCollector collector) { super.prepare(stormConf, context, collector); this.collector = collector; } @Override public void execute(Tuple input) { Point p = new Point(input.getFloat(1), input.getFloat(2)); if (CalcCoordinates.isPointInCircle(centerPoint, p, radius)) { this.incr("#stati_inCircle"); this.collector.emit(input, new Values(input.getLong(0), input.getString(3))); } this.collector.ack(input); } @Override public void declareOutputFields(OutputFieldsDeclarer declarer) { declarer.declare(new Fields("id", "text")); } }