package __TOP_LEVEL_PACKAGE__.client.scaffold.ioc;
import __TOP_LEVEL_PACKAGE__.client.managed.request.ApplicationRequestFactory;
import __TOP_LEVEL_PACKAGE__.client.scaffold.request.EventSourceRequestTransport;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.shared.EventBus;
import com.google.gwt.event.shared.SimpleEventBus;
import com.google.gwt.inject.client.AbstractGinModule;
import com.google.gwt.place.shared.PlaceController;
import com.google.inject.Inject;
import com.google.inject.Provider;
import com.google.inject.Singleton;
__GAE_IMPORT__
public class ScaffoldModule extends AbstractGinModule {
@Override
protected void configure() {
bind(EventBus.class).to(SimpleEventBus.class).in(Singleton.class);
bind(ApplicationRequestFactory.class).toProvider(RequestFactoryProvider.class).in(Singleton.class);
bind(PlaceController.class).toProvider(PlaceControllerProvider.class).in(Singleton.class);
}
static class PlaceControllerProvider implements Provider<PlaceController> {
private final PlaceController placeController;
@Inject
public PlaceControllerProvider(EventBus eventBus) {
this.placeController = new PlaceController(eventBus);
}
public PlaceController get() {
return placeController;
}
}
static class RequestFactoryProvider implements Provider<ApplicationRequestFactory> {
private final ApplicationRequestFactory requestFactory;
@Inject
public RequestFactoryProvider(EventBus eventBus) {
requestFactory = GWT.create(ApplicationRequestFactory.class);
requestFactory.initialize(eventBus, new EventSourceRequestTransport(eventBus__GAE_REQUEST_TRANSPORT__));
}
public ApplicationRequestFactory get() {
return requestFactory;
}
}
}