X-Git-Url: http://wamblee.org/gitweb/?a=blobdiff_plain;f=crawler%2Fkiss%2Fsrc%2Forg%2Fwamblee%2Fcrawler%2Fkiss%2FProgramConfigurationParser.java;h=b75d3e058b765f4a470ed39675b9d8b416adeddc;hb=6c499198b6f0e13d9ee02cbfcb547952b7c6af67;hp=b8d5c67863adcd9406c3bae2fc76d6f11f86b829;hpb=c78140d07025961d92a4635b6e30f4bf66725746;p=utils diff --git a/crawler/kiss/src/org/wamblee/crawler/kiss/ProgramConfigurationParser.java b/crawler/kiss/src/org/wamblee/crawler/kiss/ProgramConfigurationParser.java index b8d5c678..b75d3e05 100644 --- a/crawler/kiss/src/org/wamblee/crawler/kiss/ProgramConfigurationParser.java +++ b/crawler/kiss/src/org/wamblee/crawler/kiss/ProgramConfigurationParser.java @@ -18,9 +18,14 @@ package org.wamblee.crawler.kiss; import java.io.InputStream; import java.util.ArrayList; +import java.util.Arrays; +import java.util.Date; import java.util.Iterator; import java.util.List; +import javax.mail.internet.InternetAddress; + +import org.apache.commons.mail.SimpleEmail; import org.dom4j.Attribute; import org.dom4j.Document; import org.dom4j.DocumentException; @@ -29,7 +34,6 @@ import org.dom4j.io.SAXReader; import org.wamblee.conditions.AndCondition; import org.wamblee.conditions.Condition; import org.wamblee.conditions.PropertyRegexCondition; -import org.wamblee.crawler.kiss.ProgramFilter.ProgramAction; /** * Parse the configuration of desired programs. @@ -41,8 +45,19 @@ class ProgramConfigurationParser { private static final String ELEM_PATTERN = "match"; private static final String ELEM_ACTION = "action"; + + private static final String ELEM_CATEGORY = "category"; private static final String ACTION_NOTIFY = "notify"; + + private List _filters; + + private Notifier _notifier; + + ProgramConfigurationParser() { + _filters = null; + _notifier = null; + } /** * Parses the condition used to match the desired programs. @@ -51,7 +66,7 @@ class ProgramConfigurationParser { * Input stream to parse from. * @return Condition. */ - List parse(InputStream aStream) { + void parse(InputStream aStream) { List filters = new ArrayList(); try { SAXReader reader = new SAXReader(); @@ -62,13 +77,20 @@ class ProgramConfigurationParser { for (Iterator i = root.elementIterator(ELEM_PROGRAM); i.hasNext();) { Element program = (Element) i.next(); + Element categoryElem = program.element(ELEM_CATEGORY); + String category = ""; + if ( categoryElem != null ) { + category = categoryElem.getText().trim(); + } + Element actionElem = program.element(ELEM_ACTION); - ProgramAction action = ProgramAction.RECORD; + ProgramAction action = new RecordProgramAction(); if (actionElem != null) { if (actionElem.getText().equals(ACTION_NOTIFY)) { - action = ProgramAction.NOTIFY; + action = new InterestingProgramAction(category); } } + List> regexConditions = new ArrayList>(); for (Iterator j = program.elementIterator(ELEM_PATTERN); j.hasNext(); ) { @@ -78,16 +100,73 @@ class ProgramConfigurationParser { if ( fieldAttribute != null ) { fieldName = fieldAttribute.getText(); } - String pattern = ".*" + patternElem.getText() - + ".*"; + String pattern = ".*(" + patternElem.getText() + + ").*"; regexConditions.add(new PropertyRegexCondition(fieldName, pattern, true)); } Condition condition = new AndCondition(regexConditions); filters.add(new ProgramFilter(condition, action)); } - return filters; + _filters = filters; + + Element notifier = root.element("notification"); + _notifier = parseNotifier(notifier); + } catch (DocumentException e) { throw new RuntimeException("Error parsing program configuraiton", e); } } + + /** + * Parses the notifier + * @return Notifier + */ + private Notifier parseNotifier(Element aNotifier) { + String from = aNotifier.elementTextTrim("from"); + String to = aNotifier.elementTextTrim("to"); + String subject = aNotifier.elementTextTrim("subject"); + + Element smtp = aNotifier.element("smtp"); + MailServer server = parseMailServer( smtp ); + + Element format = aNotifier.element("format"); + String htmlXslt = format.elementTextTrim("html"); + String textXslt = format.elementTextTrim("text"); + + return new MailNotifier(from, to, subject, htmlXslt, textXslt, server); + } + + /** + * @param smtp + * @return + */ + private MailServer parseMailServer( Element smtp ) { + String host = smtp.elementTextTrim("host"); + Element portElem = smtp.element("port"); + int port = 25; + if ( portElem != null ) { + port = Integer.valueOf(portElem.getTextTrim()); + } + String username = smtp.elementTextTrim("username"); + String password = smtp.elementTextTrim("password"); + + MailServer server = new MailServer(host, port, username, password); + return server; + } + + /** + * Returns the list of program filters. + * @return Filter list. + */ + public List getFilters() { + return _filters; + } + + /** + * Returns the notifier to use. + * @return Notifier. + */ + public Notifier getNotifier() { + return _notifier; + } }