package xapi.inject.impl; import xapi.util.api.Bean; import xapi.util.api.ReceivesValue; import xapi.util.impl.Pojo; public abstract class LazyPojo <X> extends SingletonInitializer<X> implements Bean<X>{ protected class NullCheckOnSet extends Pojo<X>{ public NullCheckOnSet(X init) { super.set(init); } @Override public void set(X x) { if (x == null){ onDestroyed(get()); reset(); }else super.set(x); }; } protected void onDestroyed(X x){ } public void reset() { if (isSet()){ onDestroyed(get()); } proxy = new NullCheckOnGet(); } @Override public void set(X x) { //set our proxy correctly if (x == null){ reset(); }else proxy = createImmutableProvider(x); } @Override protected javax.inject.Provider<X> createImmutableProvider(X init) { return new NullCheckOnSet(init); }; @Override public boolean isSet(){ return proxy instanceof ReceivesValue; } }