1 20 21 package net.innig.macker.rule.filter; 22 23 import net.innig.macker.rule.*; 24 import net.innig.macker.structure.ClassInfo; 25 import net.innig.macker.structure.AccessModifier; 26 import java.util.Map ; 27 import java.util.List ; 28 29 public class AccessFilter 30 implements Filter 31 { 32 public Pattern createPattern( 33 RuleSet ruleSet, 34 List params, 35 Map options) 36 throws RulesException 37 { 38 if(params.size() != 0) 39 throw new FilterSyntaxException( 40 this, 41 "Filter \"" + options.get("filter") + "\" expects no parameters, but has " + params.size()); 42 43 String 44 maxS = (String ) options.get("max"), 45 minS = (String ) options.get("min"); 46 final AccessModifier 47 max = (maxS != null) ? AccessModifier.fromName(maxS) : AccessModifier.PUBLIC, 48 min = (minS != null) ? AccessModifier.fromName(minS) : AccessModifier.PRIVATE; 49 50 if(maxS == null && minS == null) 51 throw new FilterSyntaxException( 52 this, options.get("filter") + " requires a \"max\" or \"min\" option (or both)"); 53 if(max == null && maxS != null) 54 throw new FilterSyntaxException( 55 this, 56 '"' + maxS + "\" is not a valid access level; expected one of: " 57 + AccessModifier.allTypesSorted(AccessModifier.class)); 58 if(min == null && minS != null) 59 throw new FilterSyntaxException( 60 this, 61 '"' + minS + "\" is not a valid access level; expected one of: " 62 + AccessModifier.allTypesSorted(AccessModifier.class)); 63 64 return new Pattern() 65 { 66 public boolean matches(EvaluationContext context, ClassInfo classInfo) 67 throws RulesException 68 { 69 return classInfo.getAccessModifier().greaterThanEq(min) 70 && classInfo.getAccessModifier(). lessThanEq(max); 71 } 72 }; 73 } 74 } 75 | Popular Tags |