blob: 4e73915c21aced1f6112679fdf72c452bc6aca35 [file] [log] [blame]
package org.eclipse.fx.core.bindings.internal;
import java.lang.ref.WeakReference;
import org.eclipse.fx.core.ThreadSynchronize;
import javafx.beans.InvalidationListener;
import javafx.beans.Observable;
import javafx.beans.binding.Binding;
public class SyncedBindingHelperObserver implements InvalidationListener {
private final ThreadSynchronize thread;
private final WeakReference<Binding<?>> ref;
public SyncedBindingHelperObserver(ThreadSynchronize thread, Binding<?> binding) {
if (binding == null) {
throw new NullPointerException("Binding has to be specified."); //$NON-NLS-1$
}
this.ref = new WeakReference<Binding<?>>(binding);
this.thread = thread;
}
@Override
public void invalidated(Observable observable) {
this.thread.asyncExec(()->syncedInvalidated(observable));
}
private void syncedInvalidated(Observable observable) {
final Binding<?> binding = this.ref.get();
if (binding == null) {
observable.removeListener(this);
} else {
binding.invalidate();
}
}
}