package eu.europeana.cloud.service.dps.examples;
import java.util.Date;
import java.util.List;
import java.util.Map;
import org.apache.storm.spout.SpoutOutputCollector;
import org.apache.storm.task.TopologyContext;
import org.apache.storm.topology.OutputFieldsDeclarer;
import org.apache.storm.topology.base.BaseRichSpout;
import org.apache.storm.tuple.Fields;
import org.apache.storm.utils.Utils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import eu.europeana.cloud.service.dps.DpsTask;
import eu.europeana.cloud.service.dps.storm.StormTaskTuple;
import eu.europeana.cloud.service.dps.storm.StormTupleKeys;
/**
* Always uses the same {@link DpsTask} (instead of consuming tasks from a Kafka Topic)
*
* Useful for testing without having Kafka deployed.
*
* @author manos
*/
public class StaticDpsTaskSpout extends BaseRichSpout {
private SpoutOutputCollector collector;
private static final Logger LOGGER = LoggerFactory.getLogger(StaticDpsTaskSpout.class);
/** The task to be consumed */
private DpsTask task;
public StaticDpsTaskSpout(DpsTask task) {
this.task = task;
}
@Override
public void open(Map conf, TopologyContext context,
SpoutOutputCollector collector) {
this.collector = collector;
}
@Override
public void nextTuple() {
try {
Map<String, String> taskParameters = task.getParameters();
LOGGER.info("taskParameters size=" + taskParameters.size());
List<String> files = task.getDataEntry(DpsTask.FILE_URLS);
LOGGER.info("files size=" + files.size());
for (String fileUrl : files) {
LOGGER.info("emmiting..." + fileUrl);
collector.emit(new StormTaskTuple(task.getTaskId(), task.getTaskName(), fileUrl, null, taskParameters).toStormTuple());
}
Utils.sleep(6000000);
} catch (Exception e) {
LOGGER.error("StaticDpsTaskSpout error:" + e.getMessage());
}
}
@Override
public void ack(Object id) {
}
@Override
public void fail(Object id) {
}
@Override
public void declareOutputFields(OutputFieldsDeclarer declarer) {
declarer.declare(new Fields(
StormTupleKeys.TASK_ID_TUPLE_KEY,
StormTupleKeys.TASK_NAME_TUPLE_KEY,
StormTupleKeys.INPUT_FILES_TUPLE_KEY,
StormTupleKeys.FILE_CONTENT_TUPLE_KEY,
StormTupleKeys.PARAMETERS_TUPLE_KEY));
}
}