package org.araqne.rss.logger;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import org.araqne.log.api.AbstractLogger;
import org.araqne.log.api.LoggerFactory;
import org.araqne.log.api.LoggerSpecification;
import org.araqne.log.api.SimpleLog;
import org.araqne.rss.RssEntry;
import org.araqne.rss.RssFeed;
import org.araqne.rss.RssReader;
public class RssLogger extends AbstractLogger {
private RssReader reader;
public RssLogger(LoggerSpecification spec, LoggerFactory factory, RssReader reader) {
super(spec, factory);
this.reader = reader;
}
@Override
protected void runOnce() {
Map<String, String> configs = getConfigs();
String rssUrl = configs.get("rss");
boolean stripTag = false;
if (configs.get("strip") != null)
stripTag = Boolean.parseBoolean(configs.get("strip"));
String key = (String) getStates().get("key");
String lastKey = null;
try {
RssFeed feed = reader.read(rssUrl, stripTag);
Iterator<RssEntry> it = feed.getEntries();
while (it.hasNext()) {
RssEntry entry = it.next();
if (key != null) {
if ((entry.getGuid() != null && key.equals(entry.getGuid()))
|| (entry.getLink() != null && key.equals(entry.getLink())))
break;
}
write(new SimpleLog(entry.getCreatedAt(), getFullName(), entry.toMap()));
if (lastKey == null) {
if (entry.getGuid() != null)
lastKey = entry.getGuid();
else
lastKey = entry.getLink();
}
}
} finally {
if (lastKey != null) {
Map<String, Object> m = new HashMap<String, Object>();
m.put("key", lastKey);
setStates(m);
}
}
}
}