Class FilterModel.AbstractRefresher<T>

java.lang.Object
is.codion.common.model.FilterModel.AbstractRefresher<T>
Type Parameters:
T - the model item type
All Implemented Interfaces:
FilterModel.Refresher<T>
Direct Known Subclasses:
AbstractFilterModelRefresher
Enclosing interface:
FilterModel<T>

public abstract static class FilterModel.AbstractRefresher<T> extends Object implements FilterModel.Refresher<T>
An abstract base implementation of FilterModel.Refresher.
  • Constructor Details

    • AbstractRefresher

      protected AbstractRefresher(Supplier<Collection<T>> supplier)
      Parameters:
      supplier - supplies the items when refreshing
  • Method Details

    • async

      public final State async()
      Description copied from interface: FilterModel.Refresher
      Sometimes we'd like to be able to refresh one or more models and perform some action on the refreshed data, after the refresh has finished, such as selecting a particular item or such. This is quite difficult to achieve with asynchronous refresh enabled, so here's a way to temporarily disable asynchronous refresh, for a more predictable behaviour.
      Specified by:
      async in interface FilterModel.Refresher<T>
      Returns:
      the State controlling whether asynchronous refreshing is enabled
      See Also:
    • observer

      public final StateObserver observer()
      Specified by:
      observer in interface FilterModel.Refresher<T>
      Returns:
      an observer active while a refresh is in progress
    • success

      public final Observer<Collection<T>> success()
      Specified by:
      success in interface FilterModel.Refresher<T>
      Returns:
      an observer notified each time a successful refresh has been performed
    • failure

      public final Observer<Exception> failure()
      Specified by:
      failure in interface FilterModel.Refresher<T>
      Returns:
      an observer notified each time an asynchronous refresh has failed
    • supplier

      protected final Supplier<Collection<T>> supplier()
      Returns:
      the item supplier for this refresher instance
    • refresh

      protected final void refresh(Consumer<Collection<T>> onRefresh)
      Refreshes the data. Note that this method only throws exceptions when run synchronously. Use failure() to listen for exceptions that happen during asynchronous refresh.
      Parameters:
      onRefresh - called after a successful refresh, may be null
      Throws:
      RuntimeException - in case of an exception when running synchronously.
      See Also:
    • setRefreshing

      protected final void setRefreshing(boolean refreshing)
      Sets the refreshing (active) state of this refresher
      Parameters:
      refreshing - true if refresh is starting, false if ended
    • notifySuccess

      protected final void notifySuccess(Collection<T> items)
      Triggers the successful refresh event with the given items
      Parameters:
      items - the refresh result
      See Also:
    • notifyFailure

      protected final void notifyFailure(Exception exception)
      Triggers the refresh failed event
      Parameters:
      exception - the refresh exception
      See Also:
    • supportsAsyncRefresh

      protected abstract boolean supportsAsyncRefresh()
      Returns:
      true if we're running on a thread which supports async refresh, such as a UI or application thread
    • refreshAsync

      protected abstract void refreshAsync(Consumer<Collection<T>> onRefresh)
      Performes an async refresh
      Parameters:
      onRefresh - if specified will be called after a successful refresh
    • refreshSync

      protected abstract void refreshSync(Consumer<Collection<T>> onRefresh)
      Performs a sync refresh
      Parameters:
      onRefresh - if specified will be called after a successful refresh
    • processResult

      protected abstract void processResult(Collection<T> items)
      Processes the refresh result, by replacing the current model items by the result items.
      Parameters:
      items - the items resulting from the refresh operation