KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > samples > Beans


1
2
3 package samples;
4
5 import java.beans.*;
6 import java.lang.reflect.*;
7 import net.sf.cglib.proxy.*;
8
9 /**
10  *
11  * @author baliuka
12  */

13 public class Beans implements MethodInterceptor {
14     
15     private PropertyChangeSupport propertySupport;
16    
17     public void addPropertyChangeListener(PropertyChangeListener listener) {
18         
19         propertySupport.addPropertyChangeListener(listener);
20         
21     }
22     
23     public void removePropertyChangeListener(PropertyChangeListener listener) {
24         propertySupport.removePropertyChangeListener(listener);
25     }
26     
27     public static Object JavaDoc newInstance( Class JavaDoc clazz ){
28         try{
29             Beans interceptor = new Beans();
30             Enhancer e = new Enhancer();
31             e.setSuperclass(clazz);
32             e.setCallback(interceptor);
33             Object JavaDoc bean = e.create();
34             interceptor.propertySupport = new PropertyChangeSupport( bean );
35             return bean;
36         }catch( Throwable JavaDoc e ){
37             e.printStackTrace();
38             throw new Error JavaDoc(e.getMessage());
39         }
40         
41     }
42     
43     static final Class JavaDoc C[] = new Class JavaDoc[0];
44     static final Object JavaDoc emptyArgs [] = new Object JavaDoc[0];
45
46
47     public Object JavaDoc intercept(Object JavaDoc obj, Method method, Object JavaDoc[] args, MethodProxy proxy) throws Throwable JavaDoc {
48         Object JavaDoc retValFromSuper = null;
49         try {
50             if (!Modifier.isAbstract(method.getModifiers())) {
51                 retValFromSuper = proxy.invokeSuper(obj, args);
52             }
53         } finally {
54             String JavaDoc name = method.getName();
55             if( name.equals("addPropertyChangeListener")) {
56                 addPropertyChangeListener((PropertyChangeListener)args[0]);
57             }else if ( name.equals( "removePropertyChangeListener" ) ){
58                 removePropertyChangeListener((PropertyChangeListener)args[0]);
59             }
60             if( name.startsWith("set") &&
61                 args.length == 1 &&
62                 method.getReturnType() == Void.TYPE ){
63             
64                 char propName[] = name.substring("set".length()).toCharArray();
65             
66                 propName[0] = Character.toLowerCase( propName[0] );
67                 propertySupport.firePropertyChange( new String JavaDoc( propName ) , null , args[0]);
68             
69             }
70         }
71         return retValFromSuper;
72     }
73     
74     public static void main( String JavaDoc args[] ){
75         
76         Bean bean = (Bean)newInstance( Bean.class );
77         
78         bean.addPropertyChangeListener(
79         new PropertyChangeListener(){
80             public void propertyChange(PropertyChangeEvent evt){
81                 System.out.println(evt);
82             }
83         }
84         );
85         
86         bean.setSampleProperty("TEST");
87         
88         
89     }
90     
91     
92 }
93
Popular Tags