| 123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- package org.leumasjaffe.observer;
- import java.util.Objects;
- import java.util.function.BiConsumer;
- import java.util.function.BiFunction;
- import java.util.function.Consumer;
- import javax.swing.text.JTextComponent;
- import org.leumasjaffe.event.AnyActionDocumentListener;
- import lombok.experimental.FieldDefaults;
- import lombok.AccessLevel;
- @FieldDefaults(level=AccessLevel.PRIVATE, makeFinal=true)
- public class ObservableController<S extends JTextComponent, T extends Observable> extends ObservableListener<S, T> {
- BiFunction<String, T, Boolean> func;
- public ObservableController(final S comp, final BiFunction<String, T, Boolean> func,
- final BiConsumer<? super S, ? super T> update) {
- super(comp, update);
- this.func = func;
- AnyActionDocumentListener.skipEmpty(comp, evt -> accept( ) );
- }
-
- public ObservableController(final S comp, final BiFunction<String, T, Boolean> func,
- final BiConsumer<? super S, ? super T> update, final Consumer<T> onEmpty) {
- super(comp, update);
- this.func = func;
- AnyActionDocumentListener.emptyOrText( comp,
- e -> onEmpty.accept( impl.getModel() ),
- evt -> accept( ) );
- }
- private boolean update() {
- return func.apply( impl.getComponent().getText( ), impl.getModel() );
- }
- private void accept() {
- Objects.requireNonNull( impl.getModel() );
- if ( update( ) ) {
- impl.notifySubscribers(impl.getModel());
- }
- }
- }
|