1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package net.sf.json.filters;
18
19 import java.util.HashMap;
20 import java.util.Iterator;
21 import java.util.Map;
22
23 import net.sf.json.util.PropertyFilter;
24
25
26
27
28 public abstract class MappingPropertyFilter implements PropertyFilter {
29 private Map filters = new HashMap();
30
31 public MappingPropertyFilter() {
32 this( null );
33 }
34
35 public MappingPropertyFilter( Map filters ) {
36 if( filters != null ){
37 for( Iterator i = filters.entrySet()
38 .iterator(); i.hasNext(); ){
39 Map.Entry entry = (Map.Entry) i.next();
40 Object key = entry.getKey();
41 Object filter = entry.getValue();
42 if( filter instanceof PropertyFilter ){
43 this.filters.put( key, filter );
44 }
45 }
46 }
47 }
48
49 public void addPropertyFilter( Object target, PropertyFilter filter ) {
50 if( filter != null ){
51 filters.put( target, filter );
52 }
53 }
54
55 public boolean apply( Object source, String name, Object value ) {
56 for( Iterator i = filters.entrySet()
57 .iterator(); i.hasNext(); ){
58 Map.Entry entry = (Map.Entry) i.next();
59 Object key = entry.getKey();
60 if( keyMatches( key, source, name, value ) ){
61 PropertyFilter filter = (PropertyFilter) entry.getValue();
62 return filter.apply( source, name, value );
63 }
64 }
65 return false;
66 }
67
68 public void removePropertyFilter( Object target ) {
69 if( target != null ){
70 filters.remove( target );
71 }
72 }
73
74 protected abstract boolean keyMatches( Object key, Object source, String name, Object value );
75 }