package org.ovirt.engine.ui.webadmin.gin.uicommon; import org.ovirt.engine.core.common.businessentities.network.NetworkView; import org.ovirt.engine.core.common.businessentities.storage.LibvirtSecret; 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.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.providers.ProviderGeneralModel; import org.ovirt.engine.ui.uicommonweb.models.providers.ProviderListModel; import org.ovirt.engine.ui.uicommonweb.models.providers.ProviderNetworkListModel; import org.ovirt.engine.ui.uicommonweb.models.providers.ProviderSecretListModel; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.provider.ImportNetworksPopupPresenterWidget; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.provider.ProviderPopupPresenterWidget; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.provider.ProviderSecretPopupPresenterWidget; import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.provider.ProviderMainTabSelectedItems; 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 ProviderModule extends AbstractGinModule { // Main List Model @Provides @Singleton public MainModelProvider<org.ovirt.engine.core.common.businessentities.Provider, ProviderListModel> getProviderListProvider(EventBus eventBus, final Provider<DefaultConfirmationPopupPresenterWidget> defaultConfirmPopupProvider, final Provider<ProviderPopupPresenterWidget> providerPopupProvider, final Provider<RemoveConfirmationPopupPresenterWidget> removeConfirmPopupProvider, final Provider<ProviderListModel> modelProvider, final Provider<CommonModel> commonModelProvider) { MainTabModelProvider<org.ovirt.engine.core.common.businessentities.Provider, ProviderListModel> result = new MainTabModelProvider<org.ovirt.engine.core.common.businessentities.Provider, ProviderListModel>( eventBus, defaultConfirmPopupProvider, commonModelProvider) { @Override public AbstractModelBoundPopupPresenterWidget<? extends Model, ?> getModelPopup(ProviderListModel source, UICommand lastExecutedCommand, Model windowModel) { if (lastExecutedCommand == getModel().getAddCommand() || lastExecutedCommand == getModel().getEditCommand()) { return providerPopupProvider.get(); } else { return super.getModelPopup(source, lastExecutedCommand, windowModel); } } @Override public AbstractModelBoundPopupPresenterWidget<? extends ConfirmationModel, ?> getConfirmModelPopup(ProviderListModel source, UICommand lastExecutedCommand) { if (lastExecutedCommand == getModel().getRemoveCommand()) { return removeConfirmPopupProvider.get(); } else if (lastExecutedCommand == getModel().getAddCommand() || lastExecutedCommand == getModel().getEditCommand()) { return defaultConfirmPopupProvider.get(); } else { return super.getConfirmModelPopup(source, lastExecutedCommand); } } }; result.setModelProvider(modelProvider); return result; } // Searchable Detail Models @Provides @Singleton public SearchableDetailModelProvider<NetworkView, ProviderListModel, ProviderNetworkListModel> getProviderNetworkListProvider(EventBus eventBus, Provider<DefaultConfirmationPopupPresenterWidget> defaultConfirmPopupProvider, final Provider<ImportNetworksPopupPresenterWidget> discoverNetworkPopupProvider, final Provider<ProviderListModel> mainModelProvider, final Provider<ProviderNetworkListModel> modelProvider) { SearchableDetailTabModelProvider<NetworkView, ProviderListModel, ProviderNetworkListModel> result = new SearchableDetailTabModelProvider<NetworkView, ProviderListModel, ProviderNetworkListModel>( eventBus, defaultConfirmPopupProvider) { @Override public AbstractModelBoundPopupPresenterWidget<? extends Model, ?> getModelPopup(ProviderNetworkListModel source, UICommand lastExecutedCommand, Model windowModel) { if (lastExecutedCommand == getModel().getDiscoverCommand()) { return discoverNetworkPopupProvider.get(); } else { return super.getModelPopup(source, lastExecutedCommand, windowModel); } } }; result.setMainModelProvider(mainModelProvider); result.setModelProvider(modelProvider); return result; } @Provides @Singleton public SearchableDetailModelProvider<LibvirtSecret, ProviderListModel, ProviderSecretListModel> getProviderSecretListProvider(EventBus eventBus, Provider<DefaultConfirmationPopupPresenterWidget> defaultConfirmPopupProvider, final Provider<RemoveConfirmationPopupPresenterWidget> removeConfirmPopupProvider, final Provider<ProviderSecretPopupPresenterWidget> popupProvider, final Provider<ProviderListModel> mainModelProvider, final Provider<ProviderSecretListModel> modelProvider) { SearchableDetailTabModelProvider<LibvirtSecret, ProviderListModel, ProviderSecretListModel> result = new SearchableDetailTabModelProvider<LibvirtSecret, ProviderListModel, ProviderSecretListModel>( eventBus, defaultConfirmPopupProvider) { @Override public AbstractModelBoundPopupPresenterWidget<? extends Model, ?> getModelPopup(ProviderSecretListModel source, UICommand lastExecutedCommand, Model windowModel) { if (lastExecutedCommand == getModel().getNewCommand() || lastExecutedCommand == getModel().getEditCommand()) { return popupProvider.get(); } else { return super.getModelPopup(source, lastExecutedCommand, windowModel); } } @Override public AbstractModelBoundPopupPresenterWidget<? extends ConfirmationModel, ?> getConfirmModelPopup( ProviderSecretListModel source, UICommand lastExecutedCommand) { if (lastExecutedCommand == getModel().getRemoveCommand()) { return removeConfirmPopupProvider.get(); } else { return super.getConfirmModelPopup(source, lastExecutedCommand); } } }; result.setMainModelProvider(mainModelProvider); result.setModelProvider(modelProvider); return result; } @Override protected void configure() { bind(ProviderListModel.class).in(Singleton.class); bind(ProviderGeneralModel.class).in(Singleton.class); bind(ProviderNetworkListModel.class).in(Singleton.class); bind(ProviderSecretListModel.class).in(Singleton.class); bind(ProviderMainTabSelectedItems.class).asEagerSingleton(); // Form Detail Models bind(new TypeLiteral<DetailModelProvider<ProviderListModel, ProviderGeneralModel>>() { }) .to(new TypeLiteral<DetailTabModelProvider<ProviderListModel, ProviderGeneralModel>>() { }).in(Singleton.class); } }