1 25 package org.archive.crawler.deciderules; 26 27 import java.util.Iterator ; 28 import java.util.logging.Level ; 29 import java.util.logging.Logger ; 30 31 import javax.management.AttributeNotFoundException ; 32 33 import org.archive.crawler.settings.MapType; 34 35 45 public class DecideRuleSequence extends DecideRule { 46 47 private static final long serialVersionUID = 8918111430698683110L; 48 49 private static final Logger logger = 50 Logger.getLogger(DecideRuleSequence.class.getName()); 51 52 public static final String ATTR_RULES = "rules"; 53 54 public DecideRuleSequence(String name) { 55 super(name); 56 setDescription("DecideRuleSequence. Multiple DecideRules applied in " + 57 "order with last non-PASS the resulting 'decision'."); 58 59 addElementToDefinition(new MapType(ATTR_RULES, 60 "This is a list of DecideRules to be applied in sequence.", 61 DecideRule.class)); 62 } 63 64 public Object decisionFor(Object object) { 65 Object runningAnswer = PASS; 66 for(Iterator iter = getRules(object).iterator(object); 67 iter.hasNext();) { 68 DecideRule r = (DecideRule)iter.next(); 69 if(runningAnswer==r.singlePossibleNonPassDecision(object)) { 70 continue; 72 } 73 Object answer = r.decisionFor(object); 74 if (logger.isLoggable(Level.FINE)) { 75 logger.fine("Rule " + r.getName() + " of " + this.getName() + 76 " decided " + answer + " on " + object); 77 } 78 if (answer != PASS) { 79 runningAnswer = answer; 80 } 81 } 82 if (logger.isLoggable(Level.FINE)) { 83 logger.fine("Decision of " + this.getName() + " was " + 84 runningAnswer); 85 } 86 return runningAnswer; 87 } 88 89 protected MapType getRules(Object o) { 90 MapType rules = null; 91 try { 92 rules = (MapType)getAttribute(o, ATTR_RULES); 93 } catch (AttributeNotFoundException e) { 94 logger.severe(e.getLocalizedMessage()); 95 } 96 return rules; 97 } 98 99 103 public void kickUpdate() { 104 for(Iterator iter = getRules(null).iterator(null); 105 iter.hasNext();) { 106 DecideRule r = (DecideRule)iter.next(); 107 r.kickUpdate(); 108 } 109 } 110 } 111 | Popular Tags |