1 package net.javacoding.jspider.core.rule.impl; 2 3 4 import net.javacoding.jspider.api.model.Decision; 5 import net.javacoding.jspider.api.model.Site; 6 import net.javacoding.jspider.core.SpiderContext; 7 import net.javacoding.jspider.core.model.DecisionInternal; 8 import net.javacoding.jspider.spi.Rule; 9 import net.javacoding.jspider.core.rule.Ruleset; 10 11 import java.net.URL ; 12 import java.util.List ; 13 14 15 21 public class RuleSetImpl implements Ruleset { 22 23 protected int type; 24 protected Ruleset generalRules; 25 protected List localRules; 26 27 public RuleSetImpl(int type, List rules) { 28 this(type, null, rules); 29 } 30 31 public RuleSetImpl(int type, Ruleset generalRules, List rules) { 32 this.type = type; 33 this.generalRules = generalRules; 34 this.localRules = rules; 35 } 36 37 public Decision applyRules(SpiderContext context, Site site, URL url) { 38 Decision decision = null; 39 40 if (generalRules != null) { 41 decision = generalRules.applyRules(context, site, url); 42 } else { 43 decision = new DecisionInternal(); 44 } 45 46 if (decision.isVetoable()) { 47 48 Rule[] rules = (Rule[]) localRules.toArray(new Rule[localRules.size()]); 49 for (int i = 0; i < rules.length; i++) { 50 Rule rule = rules[i]; 51 Decision lastDecision = rule.apply(context, site, url); 52 decision.addStep(rule.getName(), type, lastDecision.getDecision(), lastDecision.getComment() ); 53 decision.merge(lastDecision); 54 55 if (!lastDecision.isVetoable()) { 56 break; 57 } 58 } 59 } 60 61 decision.addStep("Ruleset",type, decision.getDecision(), "ruleset final decision"); 62 63 return decision; 64 } 65 66 public void addRule(Rule rule) { 67 localRules.add(rule); 68 } 69 70 public int getType() { 71 return type; 72 } 73 74 public String toString ( ) { 75 StringBuffer sb = new StringBuffer ( ); 76 sb.append ( "[" ); 77 sb.append (translate(type)); 78 sb.append ( " ruleset]"); 79 return sb.toString ( ); 80 } 81 82 public static String translate ( int type ) { 83 switch(type){ 84 case Ruleset.RULESET_GENERAL: 85 return "GENERAL"; 86 case Ruleset.RULESET_SITE: 87 return "SITE"; 88 } 89 return "ERROR!"; 90 } 91 92 93 } 94 | Popular Tags |