package org.araqne.rss.command; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; import org.apache.felix.ipojo.annotations.Component; import org.apache.felix.ipojo.annotations.Invalidate; import org.apache.felix.ipojo.annotations.Requires; import org.apache.felix.ipojo.annotations.Validate; import org.araqne.logdb.AbstractQueryCommandParser; import org.araqne.logdb.QueryCommand; import org.araqne.logdb.QueryContext; import org.araqne.logdb.QueryErrorMessage; import org.araqne.logdb.QueryParserService; import org.araqne.logdb.query.parser.CommandOptions; import org.araqne.logdb.query.parser.ParseResult; import org.araqne.logdb.query.parser.QueryTokenizer; import org.araqne.rss.RssReader; @Component(name = "rss-query-parser") public class RssCommandParser extends AbstractQueryCommandParser { @Requires private QueryParserService parserService; @Requires private RssReader rssReader; public RssCommandParser() { setOptions("strip", OPTIONAL, "strip html tag", "HTML 태그 제거 여부"); } @Validate public void start() { parserService.addCommandParser(this); } @Invalidate public void stop() { if (parserService != null) parserService.removeCommandParser(this); } @Override public String getCommandName() { return "rss"; } @Override public Map<String, QueryErrorMessage> getErrorMessages() { Map<String, QueryErrorMessage> m = new HashMap<String, QueryErrorMessage>(); m.put("23001", new QueryErrorMessage("cannot-read-rss", "RSS에 연결할 수 없습니다.")); return m; } @SuppressWarnings("unchecked") @Override public QueryCommand parse(QueryContext context, String commandString) { ParseResult r = QueryTokenizer.parseOptions(context, commandString, getCommandName().length(), new ArrayList<String>(), getFunctionRegistry()); Map<String, String> options = (Map<String, String>) r.value; boolean stripTag = false; if (options.get("strip") != null) stripTag = CommandOptions.parseBoolean(options.get("strip")); String rssUrl = commandString.substring(r.next).trim(); return new RssCommand(rssReader, rssUrl, stripTag); } }