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