package org.appfuse.webapp.client.application.ioc;
import org.appfuse.webapp.client.application.Application;
import org.appfuse.webapp.client.application.ApplicationActivityMapper;
import org.appfuse.webapp.client.application.ApplicationPlaceHistoryFactory;
import org.appfuse.webapp.client.application.ApplicationPlaceHistoryMapper;
import org.appfuse.webapp.client.application.ApplicationProxyFactory;
import org.appfuse.webapp.client.application.DesktopApplication;
import org.appfuse.webapp.client.application.base.request.EventSourceRequestTransport;
import org.appfuse.webapp.client.requests.ApplicationRequestFactory;
import org.appfuse.webapp.client.ui.home.HomeActivity;
import org.appfuse.webapp.client.ui.home.HomeView;
import org.appfuse.webapp.client.ui.home.HomeViewDesktop;
import org.appfuse.webapp.client.ui.login.LoginActivity;
import org.appfuse.webapp.client.ui.login.LoginView;
import org.appfuse.webapp.client.ui.login.LoginViewImpl;
import org.appfuse.webapp.client.ui.logout.LogoutActivity;
import org.appfuse.webapp.client.ui.reloadOptions.ReloadOptionsActivity;
import org.appfuse.webapp.client.ui.upload.FileUploadActivity;
import org.appfuse.webapp.client.ui.upload.views.FileUploadView;
import org.appfuse.webapp.client.ui.upload.views.FileUploadViewImpl;
import org.appfuse.webapp.client.ui.upload.views.UploadedFileView;
import org.appfuse.webapp.client.ui.upload.views.UploadedFileViewImpl;
import org.appfuse.webapp.client.ui.users.active.ActiveUsersActivity;
import org.appfuse.webapp.client.ui.users.active.ActiveUsersView;
import org.appfuse.webapp.client.ui.users.active.ActiveUsersViewImpl;
import org.appfuse.webapp.client.ui.users.editProfile.EditProfileActivity;
import org.appfuse.webapp.client.ui.users.editProfile.EditProfileView;
import org.appfuse.webapp.client.ui.users.editProfile.EditProfileViewImpl;
import org.appfuse.webapp.client.ui.users.editUser.EditUserActivity;
import org.appfuse.webapp.client.ui.users.editUser.EditUserView;
import org.appfuse.webapp.client.ui.users.editUser.EditUserViewImpl;
import org.appfuse.webapp.client.ui.users.search.UsersSearchActivity;
import org.appfuse.webapp.client.ui.users.search.UsersSearchView;
import org.appfuse.webapp.client.ui.users.search.UsersSearchViewImpl;
import org.appfuse.webapp.client.ui.users.signUp.SignUpActivity;
import org.appfuse.webapp.client.ui.users.signUp.SignUpView;
import org.appfuse.webapp.client.ui.users.signUp.SignUpViewImpl;
import org.appfuse.webapp.client.ui.users.updatePassword.UpdatePasswordView;
import org.appfuse.webapp.client.ui.users.updatePassword.UpdatePasswordViewImpl;
import com.google.gwt.activity.shared.ActivityManager;
import com.google.gwt.activity.shared.ActivityMapper;
import com.google.gwt.core.client.GWT;
import com.google.gwt.inject.client.AbstractGinModule;
import com.google.gwt.place.shared.PlaceController;
import com.google.gwt.place.shared.PlaceHistoryHandler;
import com.google.gwt.place.shared.PlaceHistoryMapper;
import com.google.inject.Provides;
import com.google.inject.Singleton;
import com.google.web.bindery.event.shared.EventBus;
import com.google.web.bindery.event.shared.SimpleEventBus;
public class ClientGinModule extends AbstractGinModule {
@Override
protected void configure() {
bind(EventBus.class).to(SimpleEventBus.class).in(Singleton.class);
bind(Application.class).to(DesktopApplication.class).in(Singleton.class);
bind(ActivityMapper.class).to(ApplicationActivityMapper.class).in(Singleton.class);
bind(HomeActivity.class);
bind(LoginActivity.class);
bind(LogoutActivity.class);
bind(ReloadOptionsActivity.class);
bind(SignUpActivity.class);
bind(EditProfileActivity.class);
bind(ActiveUsersActivity.class);
bind(FileUploadActivity.class);
bind(EditUserActivity.class);
bind(UsersSearchActivity.class);
bind(HomeView.class).to(HomeViewDesktop.class).in(Singleton.class);
bind(LoginView.class).to(LoginViewImpl.class).in(Singleton.class);
bind(UpdatePasswordView.class).to(UpdatePasswordViewImpl.class).in(Singleton.class);
bind(SignUpView.class).to(SignUpViewImpl.class).in(Singleton.class);
bind(EditProfileView.class).to(EditProfileViewImpl.class).in(Singleton.class);
bind(ActiveUsersView.class).to(ActiveUsersViewImpl.class).in(Singleton.class);
bind(FileUploadView.class).to(FileUploadViewImpl.class).in(Singleton.class);
bind(UploadedFileView.class).to(UploadedFileViewImpl.class).in(Singleton.class);
bind(EditUserView.class).to(EditUserViewImpl.class).in(Singleton.class);
bind(UsersSearchView.class).to(UsersSearchViewImpl.class).in(Singleton.class);
}
@Provides
@Singleton
public PlaceController providePlaceController(final EventBus eventBus) {
final PlaceController placeController = new PlaceController(eventBus);
return placeController;
}
@Provides
@Singleton
public ApplicationRequestFactory provideRequestFactory(final EventBus eventBus) {
final ApplicationRequestFactory requestFactory = GWT.create(ApplicationRequestFactory.class);
requestFactory.initialize(eventBus, new EventSourceRequestTransport(eventBus));
return requestFactory;
}
@Provides
@Singleton
PlaceHistoryMapper providePlaceHistoryMapper(final ApplicationRequestFactory requestFactory, final ApplicationProxyFactory proxyFactory) {
final ApplicationPlaceHistoryMapper historyMapper = GWT.create(ApplicationPlaceHistoryMapper.class);
historyMapper.setFactory(new ApplicationPlaceHistoryFactory(requestFactory, proxyFactory));
return historyMapper;
}
@Provides
@Singleton
PlaceHistoryHandler providePlaceHistoryHandler(final PlaceHistoryMapper historyMapper) {
return new PlaceHistoryHandler(historyMapper);
}
@Provides
@Singleton
ActivityManager provideActivityManager(final ActivityMapper activityMapper, final EventBus eventBus) {
return new ActivityManager(activityMapper, eventBus);
}
}