/** * Get or create a matcher child node. * @param subtype The event string for the child matcher. * @return The child matcher. */ protected MatcherNode getOrCreateMatcherNode(String subtype) { MatcherNode node = getChild(subtype); if(node==null) { node = new MatcherNode(); putChild(subtype, node); } return node; }
/** * Remove a rule for event from a level. * @param type The event type. * @param rule The rule. * @param i The level. */ protected void removeRule(EventType type, IRule<?> rule, int i) { String[] subtypes = type.getTypes(); if(i+1==subtypes.length) { removeRule(subtypes[i], rule); } else { MatcherNode node = getOrCreateMatcherNode(subtypes[i]); node.removeRule(type, rule, i+1); } }
/** * Get all rules that are relevant for an event type. * @param event The event type. * @return The rules. */ public List<IRule<?>> getRules(EventType event) { // if(event.equals("factchanged.environment")) // System.out.println("ff"); return matcher==null? null: matcher.getRules(event); }
MatcherNode node = new MatcherNode(); Rule<?> r1 = new Rule<Object>("a.b.c.d", null, null, new EventType[]{new EventType("a.b.c.d")}); node.addRule(r1); node.addRule(new Rule<Object>("a.b", null, null, new EventType[]{new EventType("a.b")})); node.addRule(new Rule<Object>("a.b2", null, null, new EventType[]{new EventType("a.b2")})); node.addRule(new Rule<Object>("a.b.c2", null, null, new EventType[]{new EventType("a.b.c2")})); node.addRule(new Rule<Object>("a.b2", null, null, new EventType[]{new EventType("a.b2")})); node.addRule(new Rule<Object>("a.b2.c", null, null, new EventType[]{new EventType("a.b2.c")})); node.addRule(new Rule<Object>("a.b.c.d2", null, null, new EventType[]{new EventType("a.b.c.d")})); node.addRule(new Rule<Object>("a2", null, null, new EventType[]{new EventType("a2")})); node.addRule(new Rule<Object>("*", null, null, new EventType[]{new EventType("*")})); node.addRule(new Rule<Object>("a.b.*", null, null, new EventType[]{new EventType("a.b.*")})); node.addRule(new Rule<Object>("a.*", null, null, new EventType[]{new EventType("a.*")})); System.out.println("a.b.c: "+node.getRules("a.b.c")); System.out.println("a.b.c.d: "+node.getRules("a.b.c.d")); node.removeRule(r1);
/** * Get the rules for an event type at level i. * @param type The event type. * @param i The level. */ protected void getRules(EventType type, int i, List<IRule<?>> ret) { String[] subtypes = type.getTypes(); if(i+1==subtypes.length) { List<IRule<?>> tmp = internalGetRules(subtypes[i]); if(tmp!=null) ret.addAll(tmp); } else { MatcherNode node = getChild(subtypes[i]); if(node!=null) node.getRules(type, i+1, ret); } List<IRule<?>> tmp = internalGetRules("*"); if(tmp!=null) ret.addAll(tmp); }
/** * Add a rule for event at a level. * @param type The event type. * @param rule The rule. * @param i The level. */ protected void addRule(EventType type, IRule<?> rule, int i) { if(type==null) throw new IllegalArgumentException("Type must not null"); String[] subtypes = type.getTypes(); if(i+1==subtypes.length) { addRule(subtypes[i], rule); } else { MatcherNode node = getOrCreateMatcherNode(subtypes[i]); node.addRule(type, rule, i+1); } }
/** * Add a new rule. * @param rule The rule. */ public void addRule(IRule<?> rule) { if(rule.getEvents()==null || rule.getEvents().size()==0) throw new RuntimeException("Rule must have events: "+rule); if(rules==null) rules = new HashMap<String, IRule<?>>(); if(matcher==null) matcher = new MatcherNode(); if(rules.containsKey(rule.getName())) throw new IllegalArgumentException("Rule names must be unique: "+rule.getName()); rules.put(rule.getName(), rule); matcher.addRule(rule); // System.out.println("added rule: "+rule+" "+rule.getEvents()); // System.out.println("evrules: "+evrules); }
/** * Remove a rule. * @param rule The rule. */ public void removeRule(String rulename) { IRule<?> rule = null; if(rules!=null) { rule = rules.remove(rulename); if(rule==null) throw new RuntimeException("Rule not contained: "+rulename); } if(matcher!=null) matcher.removeRule(rule); }
/** * Remove a rule for an event type. * @param subtype The subtype. * @param rule The rule. */ protected void removeRule(String subtype, IRule<?> rule) { List<IRule<?>> rs = internalGetRules(subtype); if(rs==null) throw new IllegalStateException("Rule not contained: "+rule); rs.remove(rule); if(rs.isEmpty()) rules.remove(subtype); }
/** * Add a rule to the matcher. * @param rule The rule. */ public void addRule(IRule<?> rule) { for(EventType type: rule.getEvents()) { addRule(type, rule, 0); } }
/** * Remove a rule from the matcher. * @param rule The rule. */ public void removeRule(IRule<?> rule) { for(EventType type: rule.getEvents()) { removeRule(type, rule, 0); } }
/** * Add a rule for an event type. * @param subtype The subtype. * @param rule The rule. */ protected void addRule(String subtype, IRule<?> rule) { List<IRule<?>> rs = internalGetRules(subtype); if(rs==null) { rs = new ArrayList<IRule<?>>(); if(rules==null) rules = new HashMap<String, List<IRule<?>>>(); rules.put(subtype, rs); } rs.add(rule); // if(subtype.equals("d")) // System.out.println("add: "+subtype+" "+rs); }
/** * Get the rules for an event type. * @param type The event type. * @return The list of rules relevant for the event type. */ public List<IRule<?>> getRules(EventType type) { List<IRule<?>> ret = new ArrayList<IRule<?>>(); getRules(type, 0, ret); return ret; }
/** * Get the rules for an event type (as string, delim is .) * @param type The event type. * @return The list of rules relevant for the event type. */ public List<IRule<?>> getRules(String type) { return getRules(new EventType(type)); }