package org.ovirt.engine.ui.webadmin.gin.uicommon; import org.ovirt.engine.core.common.businessentities.AuditLog; import org.ovirt.engine.core.common.businessentities.Permission; import org.ovirt.engine.core.common.businessentities.StorageDomain; import org.ovirt.engine.core.common.businessentities.StorageDomainDR; import org.ovirt.engine.core.common.businessentities.VM; import org.ovirt.engine.core.common.businessentities.VmTemplate; import org.ovirt.engine.core.common.businessentities.profiles.DiskProfile; import org.ovirt.engine.core.common.businessentities.storage.Disk; import org.ovirt.engine.core.common.businessentities.storage.RepoImage; 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.configure.PermissionListModel; import org.ovirt.engine.ui.uicommonweb.models.profiles.DiskProfileListModel; import org.ovirt.engine.ui.uicommonweb.models.storage.ImportCloneModel; import org.ovirt.engine.ui.uicommonweb.models.storage.StorageDRListModel; import org.ovirt.engine.ui.uicommonweb.models.storage.StorageDataCenterListModel; import org.ovirt.engine.ui.uicommonweb.models.storage.StorageDiskListModel; import org.ovirt.engine.ui.uicommonweb.models.storage.StorageEventListModel; import org.ovirt.engine.ui.uicommonweb.models.storage.StorageGeneralModel; import org.ovirt.engine.ui.uicommonweb.models.storage.StorageIsoListModel; import org.ovirt.engine.ui.uicommonweb.models.storage.StorageListModel; import org.ovirt.engine.ui.uicommonweb.models.storage.StorageRegisterDiskImageListModel; import org.ovirt.engine.ui.uicommonweb.models.storage.StorageRegisterDiskListModel; import org.ovirt.engine.ui.uicommonweb.models.storage.StorageRegisterTemplateListModel; import org.ovirt.engine.ui.uicommonweb.models.storage.StorageRegisterVmListModel; import org.ovirt.engine.ui.uicommonweb.models.storage.StorageSnapshotListModel; import org.ovirt.engine.ui.uicommonweb.models.storage.StorageTemplateListModel; import org.ovirt.engine.ui.uicommonweb.models.storage.StorageVmListModel; import org.ovirt.engine.ui.uicommonweb.models.storage.TemplateBackupModel; import org.ovirt.engine.ui.uicommonweb.models.storage.VmBackupModel; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.event.EventPopupPresenterWidget; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.profile.DiskProfilePopupPresenterWidget; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.storage.DisksAllocationPopupPresenterWidget; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.storage.FindMultiDcPopupPresenterWidget; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.storage.FindSingleDcPopupPresenterWidget; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.storage.ImportExportImagePopupPresenterWidget; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.storage.RegisterTemplatePopupPresenterWidget; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.storage.RegisterVmPopupPresenterWidget; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.storage.StorageDRPopupPresenterWidget; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.storage.StorageDestroyPopupPresenterWidget; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.storage.StorageForceCreatePopupPresenterWidget; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.storage.StoragePopupPresenterWidget; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.storage.StorageRemovePopupPresenterWidget; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.storage.UploadImagePopupPresenterWidget; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.storage.backup.ImportCloneDialogPresenterWidget; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.storage.backup.ImportTemplatePopupPresenterWidget; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.storage.backup.ImportVmFromExportDomainPopupPresenterWidget; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.vm.VmDiskRemovePopupPresenterWidget; import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.storage.StorageMainTabSelectedItems; import org.ovirt.engine.ui.webadmin.uicommon.model.PermissionModelProvider; 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 StorageModule extends AbstractGinModule { // Main List Model @Provides @Singleton public MainModelProvider<StorageDomain, StorageListModel> getStorageListProvider(EventBus eventBus, Provider<DefaultConfirmationPopupPresenterWidget> defaultConfirmPopupProvider, final Provider<StoragePopupPresenterWidget> popupProvider, final Provider<StorageRemovePopupPresenterWidget> removePopupProvider, final Provider<StorageDestroyPopupPresenterWidget> destroyConfirmPopupProvider, final Provider<StorageForceCreatePopupPresenterWidget> forceCreateConfirmPopupProvider, final Provider<StorageListModel> modelProvider, final Provider<CommonModel> commonModelProvider) { MainTabModelProvider<StorageDomain, StorageListModel> result = new MainTabModelProvider<StorageDomain, StorageListModel>(eventBus, defaultConfirmPopupProvider, commonModelProvider) { @Override public AbstractModelBoundPopupPresenterWidget<? extends Model, ?> getModelPopup(StorageListModel source, UICommand lastExecutedCommand, Model windowModel) { if (lastExecutedCommand == getModel().getNewDomainCommand() || lastExecutedCommand == getModel().getImportDomainCommand() || lastExecutedCommand == getModel().getEditCommand()) { return popupProvider.get(); } else if (lastExecutedCommand == getModel().getRemoveCommand()) { return removePopupProvider.get(); } else { return super.getModelPopup(source, lastExecutedCommand, windowModel); } } @Override public AbstractModelBoundPopupPresenterWidget<? extends ConfirmationModel, ?> getConfirmModelPopup(StorageListModel source, UICommand lastExecutedCommand) { if (lastExecutedCommand == getModel().getDestroyCommand()) { return destroyConfirmPopupProvider.get(); } else if (lastExecutedCommand.getName().equals("OnSave") //$NON-NLS-1$ || lastExecutedCommand.getName().equals("OnImport")) { //$NON-NLS-1$ return forceCreateConfirmPopupProvider.get(); } else { return super.getConfirmModelPopup(source, lastExecutedCommand); } } }; result.setModelProvider(modelProvider); return result; } // Searchable Detail Models @Provides @Singleton public SearchableDetailModelProvider<StorageDomain, StorageListModel, StorageDataCenterListModel> getStorageDataCenterListProvider(EventBus eventBus, Provider<DefaultConfirmationPopupPresenterWidget> defaultConfirmPopupProvider, final Provider<FindSingleDcPopupPresenterWidget> singlePopupProvider, final Provider<FindMultiDcPopupPresenterWidget> multiPopupProvider, final Provider<RemoveConfirmationPopupPresenterWidget> removeConfirmPopupProvider, final Provider<StorageListModel> mainModelProvider, final Provider<StorageDataCenterListModel> modelProvider) { SearchableDetailTabModelProvider<StorageDomain, StorageListModel, StorageDataCenterListModel> result = new SearchableDetailTabModelProvider<StorageDomain, StorageListModel, StorageDataCenterListModel>( eventBus, defaultConfirmPopupProvider) { @Override public AbstractModelBoundPopupPresenterWidget<? extends Model, ?> getModelPopup(StorageDataCenterListModel source, UICommand lastExecutedCommand, Model windowModel) { StorageDataCenterListModel model = getModel(); if (lastExecutedCommand == model.getAttachCommand()) { if (model.getAttachMultiple()) { return multiPopupProvider.get(); } else { return singlePopupProvider.get(); } } else { return super.getModelPopup(source, lastExecutedCommand, windowModel); } } @Override public AbstractModelBoundPopupPresenterWidget<? extends ConfirmationModel, ?> getConfirmModelPopup(StorageDataCenterListModel source, UICommand lastExecutedCommand) { if (lastExecutedCommand == getModel().getDetachCommand() || lastExecutedCommand.getName().equals("OnAttach")) { //$NON-NLS-1$) { return removeConfirmPopupProvider.get(); } else { return super.getConfirmModelPopup(source, lastExecutedCommand); } } }; result.setMainModelProvider(mainModelProvider); result.setModelProvider(modelProvider); return result; } @Provides @Singleton public SearchableDetailModelProvider<RepoImage, StorageListModel, StorageIsoListModel> getStorageIsoListProvider(EventBus eventBus, Provider<DefaultConfirmationPopupPresenterWidget> defaultConfirmPopupProvider, final Provider<ImportExportImagePopupPresenterWidget> importExportPopupProvider, final Provider<StorageListModel> mainModelProvider, final Provider<StorageIsoListModel> modelProvider) { SearchableDetailTabModelProvider<RepoImage, StorageListModel, StorageIsoListModel> result = new SearchableDetailTabModelProvider<RepoImage, StorageListModel, StorageIsoListModel>( eventBus, defaultConfirmPopupProvider) { @Override public AbstractModelBoundPopupPresenterWidget<? extends Model, ?> getModelPopup(StorageIsoListModel source, UICommand lastExecutedCommand, Model windowModel) { if (lastExecutedCommand == getModel().getImportImagesCommand()) { return importExportPopupProvider.get(); } else { return super.getModelPopup(source, lastExecutedCommand, windowModel); } } }; result.setMainModelProvider(mainModelProvider); result.setModelProvider(modelProvider); return result; } @Provides @Singleton public SearchableDetailModelProvider<Disk, StorageListModel, StorageDiskListModel> getStorageDiskListProvider(EventBus eventBus, Provider<DefaultConfirmationPopupPresenterWidget> defaultConfirmPopupProvider, final Provider<VmDiskRemovePopupPresenterWidget> removeConfirmPopupProvider, final Provider<UploadImagePopupPresenterWidget> uploadImagePopupProvider, final Provider<StorageListModel> mainModelProvider, final Provider<StorageDiskListModel> modelProvider) { SearchableDetailTabModelProvider<Disk, StorageListModel, StorageDiskListModel> result = new SearchableDetailTabModelProvider<Disk, StorageListModel, StorageDiskListModel>( eventBus, defaultConfirmPopupProvider) { @Override public AbstractModelBoundPopupPresenterWidget<? extends Model, ?> getModelPopup(StorageDiskListModel source, UICommand lastExecutedCommand, Model windowModel) { if (lastExecutedCommand == getModel().getUploadCommand() || lastExecutedCommand == getModel().getResumeUploadCommand()) { return uploadImagePopupProvider.get(); } else { return super.getModelPopup(source, lastExecutedCommand, windowModel); } } @Override public AbstractModelBoundPopupPresenterWidget<? extends ConfirmationModel, ?> getConfirmModelPopup(StorageDiskListModel 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<Disk, StorageListModel, StorageRegisterDiskListModel> getStorageRegisterDiskListProvider(EventBus eventBus, Provider<DefaultConfirmationPopupPresenterWidget> defaultConfirmPopupProvider, final Provider<StorageListModel> mainModelProvider, final Provider<StorageRegisterDiskListModel> modelProvider) { SearchableDetailTabModelProvider<Disk, StorageListModel, StorageRegisterDiskListModel> result = new SearchableDetailTabModelProvider<Disk, StorageListModel, StorageRegisterDiskListModel>( eventBus, defaultConfirmPopupProvider) { @Override public AbstractModelBoundPopupPresenterWidget<? extends ConfirmationModel, ?> getConfirmModelPopup( StorageRegisterDiskListModel source, UICommand lastExecutedCommand) { return super.getConfirmModelPopup(source, lastExecutedCommand); } }; result.setMainModelProvider(mainModelProvider); result.setModelProvider(modelProvider); return result; } @Provides @Singleton public SearchableDetailModelProvider<Disk, StorageListModel, StorageRegisterDiskImageListModel> getStorageRegisterDiskImageListProvider(EventBus eventBus, Provider<DefaultConfirmationPopupPresenterWidget> defaultConfirmPopupProvider, final Provider<StorageListModel> mainModelProvider, final Provider<StorageRegisterDiskImageListModel> modelProvider, final Provider<DisksAllocationPopupPresenterWidget> registerDiskPopupProvider) { SearchableDetailTabModelProvider<Disk, StorageListModel, StorageRegisterDiskImageListModel> result = new SearchableDetailTabModelProvider<Disk, StorageListModel, StorageRegisterDiskImageListModel>( eventBus, defaultConfirmPopupProvider) { @Override public AbstractModelBoundPopupPresenterWidget<? extends ConfirmationModel, ?> getConfirmModelPopup( StorageRegisterDiskImageListModel source, UICommand lastExecutedCommand) { return super.getConfirmModelPopup(source, lastExecutedCommand); } @Override public AbstractModelBoundPopupPresenterWidget<? extends Model, ?> getModelPopup( StorageRegisterDiskImageListModel source, UICommand lastExecutedCommand, Model windowModel) { if (lastExecutedCommand == getModel().getRegisterCommand()) { return registerDiskPopupProvider.get(); } else { return super.getModelPopup(source, lastExecutedCommand, windowModel); } } }; result.setMainModelProvider(mainModelProvider); result.setModelProvider(modelProvider); return result; } @Provides @Singleton public SearchableDetailModelProvider<Disk, StorageListModel, StorageSnapshotListModel> getStorageSnapshotListProvider(EventBus eventBus, Provider<DefaultConfirmationPopupPresenterWidget> defaultConfirmPopupProvider, final Provider<RemoveConfirmationPopupPresenterWidget> removeConfirmPopupProvider, final Provider<StorageListModel> mainModelProvider, final Provider<StorageSnapshotListModel> modelProvider) { SearchableDetailTabModelProvider<Disk, StorageListModel, StorageSnapshotListModel> result = new SearchableDetailTabModelProvider<Disk, StorageListModel, StorageSnapshotListModel>( eventBus, defaultConfirmPopupProvider) { @Override public AbstractModelBoundPopupPresenterWidget<? extends ConfirmationModel, ?> getConfirmModelPopup(StorageSnapshotListModel 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<VmTemplate, StorageListModel, TemplateBackupModel> getTemplateBackupProvider(EventBus eventBus, Provider<DefaultConfirmationPopupPresenterWidget> defaultConfirmPopupProvider, final Provider<ImportTemplatePopupPresenterWidget> importTemplatePopupProvider, final Provider<ImportCloneDialogPresenterWidget> importClonePopupProvider, final Provider<RemoveConfirmationPopupPresenterWidget> removeConfirmPopupProvider, final Provider<StorageListModel> mainModelProvider, final Provider<TemplateBackupModel> modelProvider) { SearchableDetailTabModelProvider<VmTemplate, StorageListModel, TemplateBackupModel> result = new SearchableDetailTabModelProvider<VmTemplate, StorageListModel, TemplateBackupModel>( eventBus, defaultConfirmPopupProvider) { @Override public AbstractModelBoundPopupPresenterWidget<? extends Model, ?> getModelPopup(TemplateBackupModel source, UICommand lastExecutedCommand, Model windowModel) { if (lastExecutedCommand == getModel().getRestoreCommand()) { return importTemplatePopupProvider.get(); } else { return super.getModelPopup(source, lastExecutedCommand, windowModel); } } @Override public AbstractModelBoundPopupPresenterWidget<? extends ConfirmationModel, ?> getConfirmModelPopup(TemplateBackupModel source, UICommand lastExecutedCommand) { if (lastExecutedCommand == getModel().getRemoveCommand()) { return removeConfirmPopupProvider.get(); } else if (source.getConfirmWindow() instanceof ImportCloneModel) { return importClonePopupProvider.get(); } else { return super.getConfirmModelPopup(source, lastExecutedCommand); } } }; result.setMainModelProvider(mainModelProvider); result.setModelProvider(modelProvider); return result; } @Provides @Singleton public SearchableDetailModelProvider<VM, StorageListModel, StorageRegisterVmListModel> getStorageRegisterVmListProvider( EventBus eventBus, Provider<DefaultConfirmationPopupPresenterWidget> defaultConfirmPopupProvider, final Provider<RegisterVmPopupPresenterWidget> registerEntityPopupProvider, final Provider<StorageListModel> mainModelProvider, final Provider<StorageRegisterVmListModel> modelProvider) { SearchableDetailTabModelProvider<VM, StorageListModel, StorageRegisterVmListModel> result = new SearchableDetailTabModelProvider<VM, StorageListModel, StorageRegisterVmListModel>( eventBus, defaultConfirmPopupProvider) { @Override public AbstractModelBoundPopupPresenterWidget<? extends Model, ?> getModelPopup( StorageRegisterVmListModel source, UICommand lastExecutedCommand, Model windowModel) { if (lastExecutedCommand == getModel().getImportCommand()) { return registerEntityPopupProvider.get(); } else { return super.getModelPopup(source, lastExecutedCommand, windowModel); } } }; result.setMainModelProvider(mainModelProvider); result.setModelProvider(modelProvider); return result; } @Provides @Singleton public SearchableDetailModelProvider<VmTemplate, StorageListModel, StorageRegisterTemplateListModel> getStorageRegisterTemplateListProvider( EventBus eventBus, Provider<DefaultConfirmationPopupPresenterWidget> defaultConfirmPopupProvider, final Provider<RegisterTemplatePopupPresenterWidget> registerEntityPopupProvider, final Provider<StorageListModel> mainModelProvider, final Provider<StorageRegisterTemplateListModel> modelProvider) { SearchableDetailTabModelProvider<VmTemplate, StorageListModel, StorageRegisterTemplateListModel> result = new SearchableDetailTabModelProvider<VmTemplate, StorageListModel, StorageRegisterTemplateListModel>( eventBus, defaultConfirmPopupProvider) { @Override public AbstractModelBoundPopupPresenterWidget<? extends Model, ?> getModelPopup( StorageRegisterTemplateListModel source, UICommand lastExecutedCommand, Model windowModel) { if (lastExecutedCommand == getModel().getImportCommand()) { return registerEntityPopupProvider.get(); } else { return super.getModelPopup(source, lastExecutedCommand, windowModel); } } }; result.setMainModelProvider(mainModelProvider); result.setModelProvider(modelProvider); return result; } @Provides @Singleton public SearchableDetailModelProvider<VM, StorageListModel, VmBackupModel> getVmBackupProvider(EventBus eventBus, Provider<DefaultConfirmationPopupPresenterWidget> defaultConfirmPopupProvider, final Provider<ImportVmFromExportDomainPopupPresenterWidget> importVmPopupProvider, final Provider<ImportCloneDialogPresenterWidget> importClonePopupProvider, final Provider<RemoveConfirmationPopupPresenterWidget> removeConfirmPopupProvider, final Provider<StorageListModel> mainModelProvider, final Provider<VmBackupModel> modelProvider) { SearchableDetailTabModelProvider<VM, StorageListModel, VmBackupModel> result = new SearchableDetailTabModelProvider<VM, StorageListModel, VmBackupModel>( eventBus, defaultConfirmPopupProvider) { @Override public AbstractModelBoundPopupPresenterWidget<? extends Model, ?> getModelPopup(VmBackupModel source, UICommand lastExecutedCommand, Model windowModel) { if (lastExecutedCommand == getModel().getRestoreCommand()) { return importVmPopupProvider.get(); } else { return super.getModelPopup(source, lastExecutedCommand, windowModel); } } @Override public AbstractModelBoundPopupPresenterWidget<? extends ConfirmationModel, ?> getConfirmModelPopup(VmBackupModel source, UICommand lastExecutedCommand) { if (lastExecutedCommand == getModel().getRemoveCommand()) { return removeConfirmPopupProvider.get(); } else if (source.getConfirmWindow() instanceof ImportCloneModel) { return importClonePopupProvider.get(); } else { return super.getConfirmModelPopup(source, lastExecutedCommand); } } }; result.setMainModelProvider(mainModelProvider); result.setModelProvider(modelProvider); return result; } @Provides @Singleton public SearchableDetailModelProvider<AuditLog, StorageListModel, StorageEventListModel> getStorageEventListProvider(EventBus eventBus, Provider<DefaultConfirmationPopupPresenterWidget> defaultConfirmPopupProvider, final Provider<EventPopupPresenterWidget> eventPopupProvider, final Provider<StorageListModel> mainModelProvider, final Provider<StorageEventListModel> modelProvider) { SearchableDetailTabModelProvider<AuditLog, StorageListModel, StorageEventListModel> result = new SearchableDetailTabModelProvider<AuditLog, StorageListModel, StorageEventListModel>( eventBus, defaultConfirmPopupProvider) { @Override public AbstractModelBoundPopupPresenterWidget<? extends Model, ?> getModelPopup(StorageEventListModel 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; } @Provides @Singleton public SearchableDetailModelProvider<DiskProfile, StorageListModel, DiskProfileListModel> getStorageDiskProfileListProvider(EventBus eventBus, Provider<DefaultConfirmationPopupPresenterWidget> defaultConfirmPopupProvider, final Provider<DiskProfilePopupPresenterWidget> newProfilePopupProvider, final Provider<DiskProfilePopupPresenterWidget> editProfilePopupProvider, final Provider<RemoveConfirmationPopupPresenterWidget> removeConfirmPopupProvider, final Provider<StorageListModel> mainModelProvider, final Provider<DiskProfileListModel> modelProvider) { SearchableDetailTabModelProvider<DiskProfile, StorageListModel, DiskProfileListModel> result = new SearchableDetailTabModelProvider<DiskProfile, StorageListModel, DiskProfileListModel>(eventBus, defaultConfirmPopupProvider) { @Override public AbstractModelBoundPopupPresenterWidget<? extends Model, ?> getModelPopup(DiskProfileListModel source, UICommand lastExecutedCommand, Model windowModel) { if (lastExecutedCommand == getModel().getNewCommand()) { return newProfilePopupProvider.get(); } else if (lastExecutedCommand == getModel().getEditCommand()) { return editProfilePopupProvider.get(); } else { return super.getModelPopup(source, lastExecutedCommand, windowModel); } } @Override public AbstractModelBoundPopupPresenterWidget<? extends ConfirmationModel, ?> getConfirmModelPopup(DiskProfileListModel source, UICommand lastExecutedCommand) { if (lastExecutedCommand == getModel().getRemoveCommand()) { //$NON-NLS-1$ return removeConfirmPopupProvider.get(); } else { return super.getConfirmModelPopup(source, lastExecutedCommand); } } }; result.setMainModelProvider(mainModelProvider); result.setModelProvider(modelProvider); return result; } @Provides @Singleton public SearchableDetailModelProvider<StorageDomainDR, StorageListModel, StorageDRListModel> getStorageDRListProvider(EventBus eventBus, Provider<DefaultConfirmationPopupPresenterWidget> defaultConfirmPopupProvider, final Provider<StorageDRPopupPresenterWidget> storageDRPopupProvider, final Provider<StorageListModel> mainModelProvider, final Provider<StorageDRListModel> modelProvider) { SearchableDetailTabModelProvider<StorageDomainDR, StorageListModel, StorageDRListModel> result = new SearchableDetailTabModelProvider<StorageDomainDR, StorageListModel, StorageDRListModel>( eventBus, defaultConfirmPopupProvider) { @Override public AbstractModelBoundPopupPresenterWidget<? extends Model, ?> getModelPopup(StorageDRListModel source, UICommand lastExecutedCommand, Model windowModel) { if (lastExecutedCommand == getModel().getNewCommand()) { return storageDRPopupProvider.get(); } else if (lastExecutedCommand == getModel().getEditCommand()) { return storageDRPopupProvider.get(); } else { return super.getModelPopup(source, lastExecutedCommand, windowModel); } } }; result.setMainModelProvider(mainModelProvider); result.setModelProvider(modelProvider); return result; } @Override protected void configure() { bind(StorageListModel.class).in(Singleton.class); bind(StorageGeneralModel.class).in(Singleton.class); bind(StorageDataCenterListModel.class).in(Singleton.class); bind(StorageIsoListModel.class).in(Singleton.class); bind(StorageDiskListModel.class).in(Singleton.class); bind(StorageRegisterDiskListModel.class).in(Singleton.class); bind(StorageRegisterDiskImageListModel.class).in(Singleton.class); bind(StorageSnapshotListModel.class).in(Singleton.class); bind(StorageTemplateListModel.class).in(Singleton.class); bind(StorageVmListModel.class).in(Singleton.class); bind(TemplateBackupModel.class).in(Singleton.class); bind(StorageRegisterVmListModel.class).in(Singleton.class); bind(StorageRegisterTemplateListModel.class).in(Singleton.class); bind(VmBackupModel.class).in(Singleton.class); bind(StorageEventListModel.class).in(Singleton.class); bind(DiskProfileListModel.class).in(Singleton.class); bind(StorageDRListModel.class).in(Singleton.class); bind(new TypeLiteral<PermissionListModel<StorageDomain>>(){}).in(Singleton.class); bind(new TypeLiteral<PermissionListModel<DiskProfile>>(){}).in(Singleton.class); bind(StorageMainTabSelectedItems.class).asEagerSingleton(); // Form Detail Models bind(new TypeLiteral<DetailModelProvider<StorageListModel, StorageGeneralModel>>(){}) .to(new TypeLiteral<DetailTabModelProvider<StorageListModel, StorageGeneralModel>>(){}).in(Singleton.class); // Search-able Detail Models bind(new TypeLiteral<SearchableDetailModelProvider<VmTemplate, StorageListModel, StorageTemplateListModel>>(){}) .to(new TypeLiteral<SearchableDetailTabModelProvider<VmTemplate, StorageListModel, StorageTemplateListModel>>(){}) .in(Singleton.class); bind(new TypeLiteral<SearchableDetailModelProvider<VM, StorageListModel, StorageVmListModel>>(){}) .to(new TypeLiteral<SearchableDetailTabModelProvider<VM, StorageListModel, StorageVmListModel>>(){}) .in(Singleton.class); // Permission Detail Model bind(new TypeLiteral<SearchableDetailModelProvider<Permission, StorageListModel, PermissionListModel<StorageDomain>>>(){}) .to(new TypeLiteral<PermissionModelProvider<StorageDomain, StorageListModel>>(){}).in(Singleton.class); // Permission Disk Profiles bind(new TypeLiteral<SearchableDetailModelProvider<Permission, DiskProfileListModel, PermissionListModel<DiskProfile>>>(){}) .to(new TypeLiteral<PermissionModelProvider<DiskProfile, DiskProfileListModel>>(){}).in(Singleton.class); } }