X-Git-Url: http://wamblee.org/gitweb/?a=blobdiff_plain;f=crawler%2Fkiss%2Fsrc%2Forg%2Fwamblee%2Fcrawler%2Fkiss%2FProgramConfigurationParser.java;h=2c05b827233a82888c34be1452ef07e8ed5ff269;hb=3b725bcd2b10cb584352a0da92d07138282c4717;hp=5615ced2f6973d973c4cbcc623f35fa0a5f4bbc4;hpb=9d2a49c65872cd9330670a3cace19faf493df04d;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 5615ced2..2c05b827 100644 --- a/crawler/kiss/src/org/wamblee/crawler/kiss/ProgramConfigurationParser.java +++ b/crawler/kiss/src/org/wamblee/crawler/kiss/ProgramConfigurationParser.java @@ -21,21 +21,28 @@ import java.util.ArrayList; import java.util.Iterator; import java.util.List; +import org.dom4j.Attribute; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.io.SAXReader; +import org.wamblee.conditions.AndCondition; import org.wamblee.conditions.Condition; -import org.wamblee.conditions.OrCondition; +import org.wamblee.conditions.PropertyRegexCondition; +import org.wamblee.crawler.kiss.ProgramFilter.ProgramAction; /** * Parse the configuration of desired programs. */ -public class ProgramConfigurationParser { +class ProgramConfigurationParser { private static final String ELEM_PROGRAM = "program"; - private static final String ELEM_PATTERN = "name"; + private static final String ELEM_PATTERN = "match"; + + private static final String ELEM_ACTION = "action"; + + private static final String ACTION_NOTIFY = "notify"; /** * Parses the condition used to match the desired programs. @@ -44,21 +51,41 @@ public class ProgramConfigurationParser { * Input stream to parse from. * @return Condition. */ - Condition parse(InputStream aStream) { + List parse(InputStream aStream) { + List filters = new ArrayList(); try { SAXReader reader = new SAXReader(); Document document = reader.read(aStream); Element root = document.getRootElement(); - List> conditions = new ArrayList>(); for (Iterator i = root.elementIterator(ELEM_PROGRAM); i.hasNext();) { Element program = (Element) i.next(); - String pattern = ".*" + program.element(ELEM_PATTERN).getText() - + ".*"; - conditions.add(new ProgramNameMatcher(pattern)); + + Element actionElem = program.element(ELEM_ACTION); + ProgramAction action = ProgramAction.RECORD; + if (actionElem != null) { + if (actionElem.getText().equals(ACTION_NOTIFY)) { + action = ProgramAction.NOTIFY; + } + } + List> regexConditions = + new ArrayList>(); + for (Iterator j = program.elementIterator(ELEM_PATTERN); j.hasNext(); ) { + Element patternElem = (Element)j.next(); + String fieldName = "name"; + Attribute fieldAttribute = patternElem.attribute("field"); + if ( fieldAttribute != null ) { + fieldName = fieldAttribute.getText(); + } + String pattern = ".*(" + patternElem.getText() + + ").*"; + regexConditions.add(new PropertyRegexCondition(fieldName, pattern, true)); + } + Condition condition = new AndCondition(regexConditions); + filters.add(new ProgramFilter(condition, action)); } - return new OrCondition(conditions); + return filters; } catch (DocumentException e) { throw new RuntimeException("Error parsing program configuraiton", e); }