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 extends ObservableListener { Helper func; public ObservableController(final JTextComponent text, final Helper func, final Function stringify) { super(text, stringify); this.func = func; AnyActionDocumentListener.skipEmpty(text, evt -> accept( ) ); } public ObservableController(final JTextComponent text, final Helper func, final Function stringify, final Consumer 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 ); } } }