/** * 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 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 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); }