1 package jfun.yan.xml; 2 3 final class Filter { 4 private final String [] includes; 5 private final String [] excludes; 6 7 Filter(String [] includes, String [] excludes) { 8 this.excludes = excludes; 9 this.includes = includes; 10 } 11 12 String [] getExcludes() { 13 return excludes; 14 } 15 16 String [] getIncludes() { 17 return includes; 18 } 19 20 StringPredicate getPredicate(){ 21 if(excludes==null){ 22 return StringPredicates.never(); 23 } 24 else{ 25 final StringPredicate ip = toPredicate(includes); 26 final StringPredicate ep = toPredicate(excludes); 27 return new StringPredicate(){ 28 public boolean isString(String s){ 29 return !ep.isString(s) && ip.isString(s); 30 } 31 public String toString(){ 32 return "!"+ep+"&&"+ip; 33 } 34 }; 35 } 36 } 37 static StringPredicate toPredicate(String [] names){ 38 if(names==null) 39 return StringPredicates.always(); 40 final StringPredicate[] preds = new StringPredicate[names.length]; 41 for(int i=0; i<names.length; i++){ 42 preds[i] = toPredicate(names[i]); 43 } 44 return StringPredicates.or(preds); 45 } 46 static StringPredicate toPredicate(String name){ 47 if(name==null) 48 return StringPredicates.always(); 49 if(Constants.WILDCARD.equals(name)){ 50 return StringPredicates.always(); 51 } 52 if(name.endsWith(Constants.WILDCARD)){ 53 return StringPredicates.startsWith(name.substring(0, name.length()-1)); 54 } 55 else{ 56 return StringPredicates.equals(name); 57 } 58 } 59 } 60 | Popular Tags |