View Javadoc

1   package com.eviware.soapui.support;
2   
3   import java.beans.PropertyChangeEvent;
4   import java.beans.PropertyChangeListener;
5   import java.lang.ref.WeakReference;
6   import java.lang.reflect.Method;
7   
8   public class WeakPropertyChangeListener implements PropertyChangeListener
9   {
10  	WeakReference<?> listenerRef;
11  	Object src;
12  
13  	@SuppressWarnings( "unchecked" )
14  	public WeakPropertyChangeListener( PropertyChangeListener listener, Object src )
15  	{
16  		listenerRef = new WeakReference( listener );
17  		this.src = src;
18  	}
19  
20  	public void propertyChange( PropertyChangeEvent evt )
21  	{
22  		PropertyChangeListener listener = ( PropertyChangeListener )listenerRef.get();
23  		if( listener == null )
24  		{
25  			removeListener();
26  		}
27  		else
28  			listener.propertyChange( evt );
29  	}
30  
31  	private void removeListener()
32  	{
33  		try
34  		{
35  			Method method = src.getClass().getMethod( "removePropertyChangeListener",
36  					new Class[] { PropertyChangeListener.class } );
37  			method.invoke( src, new Object[] { this } );
38  		}
39  		catch( Exception e )
40  		{
41  			e.printStackTrace();
42  		}
43  	}
44  }