Class AsyncDataProvider<T>

  • Type Parameters:
    T - the data type of records in the list
    All Implemented Interfaces:
    ProvidesKey<T>

    public abstract class AsyncDataProvider<T>
    extends AbstractDataProvider<T>
    An implementation of AbstractDataProvider that allows the data to be modified.

    Example

    public class AsyncDataProviderExample implements EntryPoint {
    
      /**
       * A custom {@link AsyncDataProvider}.
       */
      private static class MyDataProvider extends AsyncDataProvider<String> {
        /**
         * {@link #onRangeChanged(HasData)} is called when the table requests a new
         * range of data. You can push data back to the displays using
         * {@link #updateRowData(int, List)}.
         */
        @Override
        protected void onRangeChanged(HasData<String> display) {
          // Get the new range.
          final Range range = display.getVisibleRange();
    
          /*
           * Query the data asynchronously. If you are using a database, you can
           * make an RPC call here. We'll use a Timer to simulate a delay.
           */
          new Timer() {
            @Override
            public void run() {
              // We are creating fake data. Normally, the data will come from a
              // server.
              int start = range.getStart();
              int length = range.getLength();
              List<String> newData = new ArrayList<String>();
              for (int i = start; i < start + length; i++) {
                newData.add("Item " + i);
              }
    
              // Push the data to the displays. AsyncDataProvider will only update
              // displays that are within range of the data.
              updateRowData(start, newData);
            }
          }.schedule(3000);
        }
      }
    
      public void onModuleLoad() {
        // Create a CellList.
        CellList<String> cellList = new CellList<String>(new TextCell());
    
        // Create a data provider.
        MyDataProvider dataProvider = new MyDataProvider();
    
        // Add the cellList to the dataProvider.
        dataProvider.addDataDisplay(cellList);
    
        // Create paging controls.
        SimplePager pager = new SimplePager();
        pager.setDisplay(cellList);
    
        // Add the widgets to the root panel.
        VerticalPanel vPanel = new VerticalPanel();
        vPanel.add(pager);
        vPanel.add(cellList);
        RootPanel.get().add(vPanel);
      }
    }
    

    • Constructor Detail

      • AsyncDataProvider

        protected AsyncDataProvider()
        Constructs an AsyncDataProvider without a key provider.
      • AsyncDataProvider

        protected AsyncDataProvider​(ProvidesKey<T> keyProvider)
        Constructs an AsyncDataProvider with the given key provider.
        Parameters:
        keyProvider - an instance of ProvidesKey, or null if the record object should act as its own key
    • Method Detail

      • updateRowCount

        public void updateRowCount​(int size,
                                   boolean exact)
        Description copied from class: AbstractDataProvider
        Inform the displays of the total number of items that are available.
        Overrides:
        updateRowCount in class AbstractDataProvider<T>
        Parameters:
        size - the new total row count
        exact - true if the count is exact, false if it is an estimate
      • updateRowData

        public void updateRowData​(int start,
                                  java.util.List<T> values)
        Description copied from class: AbstractDataProvider
        Inform the displays of the new data.
        Overrides:
        updateRowData in class AbstractDataProvider<T>
        Parameters:
        start - the start index
        values - the data values