All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.fxmisc.easybind.select.LeafSelectionElement Maven / Gradle / Ivy

The newest version!
package org.fxmisc.easybind.select;

import java.util.function.Function;

import javafx.beans.InvalidationListener;
import javafx.beans.value.ObservableValue;

class LeafSelectionElement implements NestedSelectionElement {
    private final InvalidationListener observableInvalidationListener = obs -> observableInvalidated();
    private final Runnable onInvalidation;
    private final Function> selector;

    private ObservableValue observable = null;

    public LeafSelectionElement(Runnable onInvalidation, Function> selector) {
        this.onInvalidation = onInvalidation;
        this.selector = selector;
    }

    @Override
    public void connect(T baseVal) {
        if(isConnected()) {
            throw new IllegalStateException("Already connected");
        }

        observable = selector.apply(baseVal);
        observable.addListener(observableInvalidationListener);
    }

    @Override
    public void disconnect() {
        if(isConnected()) {
            observable.removeListener(observableInvalidationListener);
            observable = null;
        }
    }

    @Override
    public final boolean isConnected() {
        return observable != null;
    }

    @Override
    public U getValue() {
        if(!isConnected()) {
            throw new IllegalStateException("Not connected");
        }

        return observable.getValue();
    }

    private void observableInvalidated() {
        onInvalidation.run();
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy