package org.ovirt.engine.ui.webadmin.gin.uicommon; import org.ovirt.engine.core.common.businessentities.AuditLog; import org.ovirt.engine.core.common.businessentities.DbUser; import org.ovirt.engine.core.common.businessentities.event_subscriber; import org.ovirt.engine.core.common.businessentities.permissions; import org.ovirt.engine.ui.uicommonweb.UICommand; 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.webadmin.gin.ClientGinjector; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.AbstractModelBoundPopupPresenterWidget; 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.RemoveConfirmationPopupPresenterWidget; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.user.ManageEventsPopupPresenterWidget; import org.ovirt.engine.ui.webadmin.uicommon.model.DetailModelProvider; import org.ovirt.engine.ui.webadmin.uicommon.model.DetailTabModelProvider; import org.ovirt.engine.ui.webadmin.uicommon.model.MainModelProvider; import org.ovirt.engine.ui.webadmin.uicommon.model.MainTabModelProvider; import org.ovirt.engine.ui.webadmin.uicommon.model.SearchableDetailModelProvider; import org.ovirt.engine.ui.webadmin.uicommon.model.SearchableDetailTabModelProvider; import com.google.gwt.inject.client.AbstractGinModule; import com.google.inject.Provider; import com.google.inject.Provides; import com.google.inject.Singleton; public class UserModule extends AbstractGinModule { // Main List Model @Provides @Singleton public MainModelProvider<DbUser, UserListModel> getUserListProvider(ClientGinjector ginjector, final Provider<AssignTagsPopupPresenterWidget> assignTagsPopupProvider, final Provider<PermissionsPopupPresenterWidget> popupProvider, final Provider<RemoveConfirmationPopupPresenterWidget> removeConfirmPopupProvider) { return new MainTabModelProvider<DbUser, UserListModel>(ginjector, UserListModel.class) { @Override protected AbstractModelBoundPopupPresenterWidget<? extends Model, ?> getModelPopup(UICommand lastExecutedCommand) { UserListModel model = getModel(); if (lastExecutedCommand == model.getAssignTagsCommand()) { return assignTagsPopupProvider.get(); } else if (lastExecutedCommand == model.getAddCommand()) { return popupProvider.get(); } else { return super.getModelPopup(lastExecutedCommand); } } @Override protected AbstractModelBoundPopupPresenterWidget<? extends ConfirmationModel, ?> getConfirmModelPopup(UICommand lastExecutedCommand) { if (lastExecutedCommand == getModel().getRemoveCommand()) { return removeConfirmPopupProvider.get(); } else { return super.getConfirmModelPopup(lastExecutedCommand); } } }; } // Form Detail Models @Provides @Singleton public DetailModelProvider<UserListModel, UserGeneralModel> getUserGeneralProvider(ClientGinjector ginjector) { return new DetailTabModelProvider<UserListModel, UserGeneralModel>(ginjector, UserListModel.class, UserGeneralModel.class); } // Searchable Detail Models @Provides @Singleton public SearchableDetailModelProvider<event_subscriber, UserListModel, UserEventNotifierListModel> getUserEventNotifierListProvider(ClientGinjector ginjector, final Provider<ManageEventsPopupPresenterWidget> manageEventsPopupProvider) { return new SearchableDetailTabModelProvider<event_subscriber, UserListModel, UserEventNotifierListModel>(ginjector, UserListModel.class, UserEventNotifierListModel.class) { @Override protected AbstractModelBoundPopupPresenterWidget<? extends Model, ?> getModelPopup(UICommand lastExecutedCommand) { if (lastExecutedCommand == getModel().getManageEventsCommand()) { return manageEventsPopupProvider.get(); } else { return super.getConfirmModelPopup(lastExecutedCommand); } } }; } @Provides @Singleton public SearchableDetailModelProvider<permissions, UserListModel, UserPermissionListModel> getPermissionListProvider(ClientGinjector ginjector, final Provider<PermissionsPopupPresenterWidget> popupProvider, final Provider<RemoveConfirmationPopupPresenterWidget> removeConfirmPopupProvider) { return new SearchableDetailTabModelProvider<permissions, UserListModel, UserPermissionListModel>(ginjector, UserListModel.class, UserPermissionListModel.class) { @Override protected AbstractModelBoundPopupPresenterWidget<? extends ConfirmationModel, ?> getConfirmModelPopup(UICommand lastExecutedCommand) { if (lastExecutedCommand == getModel().getRemoveCommand()) { return removeConfirmPopupProvider.get(); } else { return super.getConfirmModelPopup(lastExecutedCommand); } } }; } @Provides @Singleton public SearchableDetailModelProvider<AuditLog, UserListModel, UserEventListModel> getUserEventListProvider(ClientGinjector ginjector) { return new SearchableDetailTabModelProvider<AuditLog, UserListModel, UserEventListModel>(ginjector, UserListModel.class, UserEventListModel.class); } @Provides @Singleton public SearchableDetailModelProvider<UserGroup, UserListModel, UserGroupListModel> getUserGroupListProvider(ClientGinjector ginjector) { return new SearchableDetailTabModelProvider<UserGroup, UserListModel, UserGroupListModel>(ginjector, UserListModel.class, UserGroupListModel.class); } @Override protected void configure() { } }