com.google.web.bindery.requestfactory.gwt.client

## Class RequestBatcher<F extends RequestFactory,C extends RequestContext>

- java.lang.Object
- - com.google.web.bindery.requestfactory.gwt.client.RequestBatcher<F,C>

Type Parameters:
  `F` - the type of RequestFactory
  `C` - any RequestContext type

    public abstract class RequestBatcher<F extends RequestFactory,C extends RequestContext>
    extends java.lang.Object

A RequestBatcher is a convenience class that allows RequestFactory operations to be aggregated over a single tick of the event loop and sent as one HTTP request. Instances of RequestBatcher are reusable, so they may be used as application-wide singleton objects or within a particular subsystem or UI.

Subclasses need only to provide the instance of the RequestFactory used by the application and a method to provide a "default" RequestContext from the RequestFactory.

     public class MyRequestBatcher extends RequestBatcher<MyRequestFactory, MyRequestContext> {
       public MyRequestBatcher() {
         // MyRequestFactory could also be injected
         super(GWT.create(MyRequestFactory.class));
       }

       protected MyRequestContext createContext(MyRequestFactory factory) {
         return factory.myRequestContext();
       }
     }

A singleton or otherwise scoped instance of RequestBatcher should be injected into consuming classes. The `RequestContext.fire()` and `Request.fire()` methods reachable from the RequestContext returned from `get()` will not trigger an HTTP request. The `RequestContext.fire(Receiver)` and `Request.fire(Receiver)` methods will register their associated Receivers as usual. This allows consuming code to be written that can be used with or without a RequestBatcher.

When an application uses multiple RequestContext types, the `RequestContext.append(RequestContext)` method can be used to chain multiple RequestContext objects together:

     class MyRequestBatcher {
       public OtherRequestContext otherContext() {
         return get().append(getFactory().otherContext());
       }
     }

See Also:
  `Scheduler.scheduleFinally(ScheduledCommand)`

### Constructor Summary

Constructors
`protected` `RequestBatcher(F requestFactory)`

### Method Summary

All Methods Instance Methods Abstract Methods Concrete Methods
`protected abstract C` `createContext(F requestFactory)` Subclasses must implement this method to return an instance of a RequestContext.
`C` `get()` Returns a mutable `RequestContext`.
`C` `get(Receiver<java.lang.Void> receiver)` Returns a mutable `RequestContext` and enqueues the given receiver to be called as though it had been passed directly to `RequestContext.fire(Receiver)`.
`F` `getRequestFactory()` Convenience access to the RequestFactory instance to aid developers using multiple RequestContext types.
`protected Scheduler` `getScheduler()` Returns `Scheduler.get()`, but may be overridden for testing purposes.

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Constructor Detail

#### RequestBatcher

    protected RequestBatcher(F requestFactory)

### Method Detail

#### get

    public C get()

Returns a mutable `RequestContext`.

#### get

    public C get(Receiver<java.lang.Void> receiver)

Returns a mutable `RequestContext` and enqueues the given receiver to be called as though it had been passed directly to `RequestContext.fire(Receiver)`.

#### getRequestFactory

    public F getRequestFactory()

Convenience access to the RequestFactory instance to aid developers using multiple RequestContext types.

     RequestBatcher <MyRequestFactory, MyRequestContext> batcher;

     public void useOtherRequestContext() {
       OtherRequestContext ctx = batcher.get().append(batcher.getFactory().otherContext());
       ctx.someOtherMethod().to(someReceiver);
     }

#### createContext

    protected abstract C createContext(F requestFactory)

Subclasses must implement this method to return an instance of a RequestContext.

#### getScheduler

    protected Scheduler getScheduler()

Returns `Scheduler.get()`, but may be overridden for testing purposes.