001    /*
002    @license.text@
003     */
004    package biz.hammurapi.wrap;
005    
006    import java.lang.ref.Reference;
007    import java.lang.ref.WeakReference;
008    
009    /**
010     * @author Pavel Vlasov
011     * @version $Revision: 1.1 $
012     */
013    public abstract class WeakWrapperHandler extends WrapperHandler {
014            private Reference masterRef;
015            
016            public WeakWrapperHandler(Object master) {
017                    super(master);
018                    masterRef=new WeakReference(master);
019            }
020    
021            protected final Object getMaster() throws Throwable {
022                    Object master=masterRef.get();
023                    if (master==null) {
024                            master=getMasterInternal();
025                            masterRef=new WeakReference(master);
026                    }
027                    return master;
028            }
029    
030            protected abstract Object getMasterInternal() throws Throwable;
031    }