@Override protected Object doGetValue() { return this.sourceObject.getValue(); }
@SuppressWarnings("unchecked") @Override public Property adapt(final ContextBoundValue sourceObject, Class<Property> targetType, ValueAccess... valueAccess) { final SimpleObjectProperty<Object> rv = new SimpleObjectProperty<>(sourceObject.getValue()); final InvalidationListener l = new InvalidationListener() { @Override public void invalidated(Observable observable) { sourceObject.publish(rv.get()); } }; rv.addListener(l); sourceObject.subscribeOnValueChange(new Callback() { @Override public void call(Object value) { if (rv.get() == null && value == null) return; if (rv.get() != null && rv.get().equals(value)) return; rv.set(value); } }); sourceObject.subscribeOnDispose(new Callback() { @Override public void call(Object value) { rv.removeListener(l); } }); return rv; }