package org.ovirt.engine.ui.webadmin.gin.uicommon; import org.ovirt.engine.core.common.businessentities.AuditLog; import org.ovirt.engine.core.common.businessentities.EventSubscriber; import org.ovirt.engine.core.common.businessentities.Permission; import org.ovirt.engine.core.common.businessentities.Quota; import org.ovirt.engine.core.common.businessentities.aaa.DbUser; import org.ovirt.engine.ui.common.presenter.AbstractModelBoundPopupPresenterWidget; import org.ovirt.engine.ui.common.presenter.popup.DefaultConfirmationPopupPresenterWidget; import org.ovirt.engine.ui.common.presenter.popup.RemoveConfirmationPopupPresenterWidget; import org.ovirt.engine.ui.common.presenter.popup.RolePermissionsRemoveConfirmationPopupPresenterWidget; import org.ovirt.engine.ui.common.uicommon.model.DetailModelProvider; import org.ovirt.engine.ui.common.uicommon.model.DetailTabModelProvider; import org.ovirt.engine.ui.common.uicommon.model.MainModelProvider; import org.ovirt.engine.ui.common.uicommon.model.MainTabModelProvider; import org.ovirt.engine.ui.common.uicommon.model.SearchableDetailModelProvider; import org.ovirt.engine.ui.common.uicommon.model.SearchableDetailTabModelProvider; import org.ovirt.engine.ui.uicommonweb.UICommand; import org.ovirt.engine.ui.uicommonweb.models.CommonModel; import org.ovirt.engine.ui.uicommonweb.models.ConfirmationModel; import org.ovirt.engine.ui.uicommonweb.models.Model; import org.ovirt.engine.ui.uicommonweb.models.users.UserEventListModel; import org.ovirt.engine.ui.uicommonweb.models.users.UserEventNotifierListModel; import org.ovirt.engine.ui.uicommonweb.models.users.UserGeneralModel; import org.ovirt.engine.ui.uicommonweb.models.users.UserGroup; import org.ovirt.engine.ui.uicommonweb.models.users.UserGroupListModel; import org.ovirt.engine.ui.uicommonweb.models.users.UserListModel; import org.ovirt.engine.ui.uicommonweb.models.users.UserPermissionListModel; import org.ovirt.engine.ui.uicommonweb.models.users.UserQuotaListModel; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.AssignTagsPopupPresenterWidget; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.PermissionsPopupPresenterWidget; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.event.EventPopupPresenterWidget; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.user.ManageEventsPopupPresenterWidget; import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.user.UserMainTabSelectedItems; import com.google.gwt.event.shared.EventBus; import com.google.gwt.inject.client.AbstractGinModule; import com.google.inject.Provider; import com.google.inject.Provides; import com.google.inject.Singleton; import com.google.inject.TypeLiteral; public class UserModule extends AbstractGinModule { // Main List Model @Provides @Singleton public MainModelProvider<DbUser, UserListModel> getUserListProvider(EventBus eventBus, Provider<DefaultConfirmationPopupPresenterWidget> defaultConfirmPopupProvider, final Provider<AssignTagsPopupPresenterWidget> assignTagsPopupProvider, final Provider<PermissionsPopupPresenterWidget> popupProvider, final Provider<RemoveConfirmationPopupPresenterWidget> removeConfirmPopupProvider, final Provider<UserListModel> modelProvider, final Provider<CommonModel> commonModelProvider) { MainTabModelProvider<DbUser, UserListModel> result = new MainTabModelProvider<DbUser, UserListModel>(eventBus, defaultConfirmPopupProvider, commonModelProvider) { @Override public AbstractModelBoundPopupPresenterWidget<? extends Model, ?> getModelPopup(UserListModel source, UICommand lastExecutedCommand, Model windowModel) { UserListModel model = getModel(); if (lastExecutedCommand == model.getAssignTagsCommand()) { return assignTagsPopupProvider.get(); } else if (lastExecutedCommand == model.getAddCommand()) { return popupProvider.get(); } else { return super.getModelPopup(source, lastExecutedCommand, windowModel); } } @Override public AbstractModelBoundPopupPresenterWidget<? extends ConfirmationModel, ?> getConfirmModelPopup(UserListModel source, UICommand lastExecutedCommand) { if (lastExecutedCommand == getModel().getRemoveCommand()) { return removeConfirmPopupProvider.get(); } else { return super.getConfirmModelPopup(source, lastExecutedCommand); } } }; result.setModelProvider(modelProvider); return result; } // Searchable Detail Models @Provides @Singleton public SearchableDetailModelProvider<EventSubscriber, UserListModel, UserEventNotifierListModel> getUserEventNotifierListProvider(EventBus eventBus, Provider<DefaultConfirmationPopupPresenterWidget> defaultConfirmPopupProvider, final Provider<ManageEventsPopupPresenterWidget> manageEventsPopupProvider, final Provider<UserListModel> mainModelProvider, final Provider<UserEventNotifierListModel> modelProvider) { SearchableDetailTabModelProvider<EventSubscriber, UserListModel, UserEventNotifierListModel> result = new SearchableDetailTabModelProvider<EventSubscriber, UserListModel, UserEventNotifierListModel>( eventBus, defaultConfirmPopupProvider) { @Override public AbstractModelBoundPopupPresenterWidget<? extends Model, ?> getModelPopup(UserEventNotifierListModel source, UICommand lastExecutedCommand, Model windowModel) { if (lastExecutedCommand == getModel().getManageEventsCommand()) { return manageEventsPopupProvider.get(); } else { return super.getModelPopup(source, lastExecutedCommand, windowModel); } } }; result.setMainModelProvider(mainModelProvider); result.setModelProvider(modelProvider); return result; } @Provides @Singleton public SearchableDetailModelProvider<Permission, UserListModel, UserPermissionListModel> getPermissionListProvider(EventBus eventBus, Provider<DefaultConfirmationPopupPresenterWidget> defaultConfirmPopupProvider, final Provider<PermissionsPopupPresenterWidget> popupProvider, final Provider<RolePermissionsRemoveConfirmationPopupPresenterWidget> removeConfirmPopupProvider, final Provider<UserListModel> mainModelProvider, final Provider<UserPermissionListModel> modelProvider) { SearchableDetailTabModelProvider<Permission, UserListModel, UserPermissionListModel> result = new SearchableDetailTabModelProvider<Permission, UserListModel, UserPermissionListModel>( eventBus, defaultConfirmPopupProvider) { @Override public AbstractModelBoundPopupPresenterWidget<? extends ConfirmationModel, ?> getConfirmModelPopup(UserPermissionListModel source, UICommand lastExecutedCommand) { if (lastExecutedCommand == getModel().getRemoveCommand()) { return removeConfirmPopupProvider.get(); } else { return super.getConfirmModelPopup(source, lastExecutedCommand); } } }; result.setMainModelProvider(mainModelProvider); result.setModelProvider(modelProvider); return result; } @Provides @Singleton public SearchableDetailModelProvider<AuditLog, UserListModel, UserEventListModel> getUserEventListProvider(EventBus eventBus, Provider<DefaultConfirmationPopupPresenterWidget> defaultConfirmPopupProvider, final Provider<EventPopupPresenterWidget> eventPopupProvider, final Provider<UserListModel> mainModelProvider, final Provider<UserEventListModel> modelProvider) { SearchableDetailTabModelProvider<AuditLog, UserListModel, UserEventListModel> result = new SearchableDetailTabModelProvider<AuditLog, UserListModel, UserEventListModel>( eventBus, defaultConfirmPopupProvider) { @Override public AbstractModelBoundPopupPresenterWidget<? extends Model, ?> getModelPopup(UserEventListModel source, UICommand lastExecutedCommand, Model windowModel) { if (lastExecutedCommand.equals(getModel().getDetailsCommand())) { return eventPopupProvider.get(); } else { return super.getModelPopup(source, lastExecutedCommand, windowModel); } } }; result.setMainModelProvider(mainModelProvider); result.setModelProvider(modelProvider); return result; } @Override protected void configure() { bind(UserListModel.class).in(Singleton.class); bind(UserGeneralModel.class).in(Singleton.class); bind(UserEventNotifierListModel.class).in(Singleton.class); bind(UserPermissionListModel.class).in(Singleton.class); bind(UserQuotaListModel.class).in(Singleton.class); bind(UserEventListModel.class).in(Singleton.class); bind(UserGroupListModel.class).in(Singleton.class); bind(UserMainTabSelectedItems.class).asEagerSingleton(); // Form Detail Models bind(new TypeLiteral<DetailModelProvider<UserListModel, UserGeneralModel>>(){}) .to(new TypeLiteral<DetailTabModelProvider<UserListModel, UserGeneralModel>>(){}).in(Singleton.class); // Search-able Detail Models bind(new TypeLiteral<SearchableDetailModelProvider<Quota, UserListModel, UserQuotaListModel>>(){}) .to(new TypeLiteral<SearchableDetailTabModelProvider<Quota, UserListModel, UserQuotaListModel>>(){}) .in(Singleton.class); bind(new TypeLiteral<SearchableDetailModelProvider<UserGroup, UserListModel, UserGroupListModel>>(){}) .to(new TypeLiteral<SearchableDetailTabModelProvider<UserGroup, UserListModel, UserGroupListModel>>(){}) .in(Singleton.class); } }