package org.ovirt.engine.ui.webadmin.gin.uicommon; import org.ovirt.engine.core.common.businessentities.Permission; import org.ovirt.engine.core.common.businessentities.StorageDomain; import org.ovirt.engine.core.common.businessentities.VM; import org.ovirt.engine.core.common.businessentities.VmTemplate; import org.ovirt.engine.core.common.businessentities.storage.Disk; import org.ovirt.engine.ui.common.presenter.AbstractModelBoundPopupPresenterWidget; import org.ovirt.engine.ui.common.presenter.popup.DefaultConfirmationPopupPresenterWidget; 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.disks.DiskGeneralModel; import org.ovirt.engine.ui.uicommonweb.models.disks.DiskListModel; import org.ovirt.engine.ui.uicommonweb.models.disks.DiskStorageListModel; import org.ovirt.engine.ui.uicommonweb.models.disks.DiskTemplateListModel; import org.ovirt.engine.ui.uicommonweb.models.disks.DiskVmListModel; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.quota.ChangeQuotaPopupPresenterWidget; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.storage.DisksAllocationPopupPresenterWidget; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.storage.ImportExportImagePopupPresenterWidget; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.storage.UploadImagePopupPresenterWidget; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.vm.VmDiskPopupPresenterWidget; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.vm.VmDiskRemovePopupPresenterWidget; import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.disk.DiskMainTabSelectedItems; 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 DiskModule extends AbstractGinModule { // Main List Model @Provides @Singleton public MainModelProvider<Disk, DiskListModel> getDiskListProvider(EventBus eventBus, Provider<DefaultConfirmationPopupPresenterWidget> defaultConfirmPopupProvider, final Provider<VmDiskPopupPresenterWidget> newPopupProvider, final Provider<VmDiskRemovePopupPresenterWidget> removeConfirmPopupProvider, final Provider<UploadImagePopupPresenterWidget> uploadImagePopupProvider, final Provider<DisksAllocationPopupPresenterWidget> moveOrCopyPopupProvider, final Provider<ChangeQuotaPopupPresenterWidget> changeQutoaPopupProvider, final Provider<ImportExportImagePopupPresenterWidget> importExportImagePopupPresenterWidgetProvider, final Provider<DiskListModel> modelProvider, final Provider<CommonModel> commonModelProvider) { MainTabModelProvider<Disk, DiskListModel> result = new MainTabModelProvider<Disk, DiskListModel>(eventBus, defaultConfirmPopupProvider, commonModelProvider) { @Override public AbstractModelBoundPopupPresenterWidget<? extends Model, ?> getModelPopup(DiskListModel source, UICommand lastExecutedCommand, Model windowModel) { if (lastExecutedCommand == getModel().getNewCommand()) { return newPopupProvider.get(); } else if (lastExecutedCommand == getModel().getMoveCommand() || lastExecutedCommand == getModel().getCopyCommand()) { return moveOrCopyPopupProvider.get(); } else if (lastExecutedCommand == getModel().getChangeQuotaCommand()) { return changeQutoaPopupProvider.get(); } else if (lastExecutedCommand == getModel().getExportCommand()) { return importExportImagePopupPresenterWidgetProvider.get(); } else if (lastExecutedCommand == getModel().getUploadCommand() || lastExecutedCommand == getModel().getResumeUploadCommand()) { return uploadImagePopupProvider.get(); } else { return super.getModelPopup(source, lastExecutedCommand, windowModel); } } @Override public AbstractModelBoundPopupPresenterWidget<? extends ConfirmationModel, ?> getConfirmModelPopup(DiskListModel source, UICommand lastExecutedCommand) { if (lastExecutedCommand == getModel().getRemoveCommand()) { return removeConfirmPopupProvider.get(); } else { return super.getConfirmModelPopup(source, lastExecutedCommand); } } @Override public void onMainTabSelected() { super.onMainTabSelected(); getModel().getDiskViewType().setEntity(null); } }; result.setModelProvider(modelProvider); return result; } @Override protected void configure() { bind(DiskListModel.class).in(Singleton.class); bind(DiskGeneralModel.class).in(Singleton.class); bind(DiskVmListModel.class).in(Singleton.class); bind(DiskTemplateListModel.class).in(Singleton.class); bind(DiskStorageListModel.class).in(Singleton.class); bind(new TypeLiteral<PermissionListModel<Disk>>(){}).in(Singleton.class); bind(DiskMainTabSelectedItems.class).asEagerSingleton(); // Form Detail Models bind(new TypeLiteral<DetailModelProvider<DiskListModel, DiskGeneralModel>>(){}) .to(new TypeLiteral<DetailTabModelProvider<DiskListModel, DiskGeneralModel>>(){}).in(Singleton.class); // Search-able Detail Models bind(new TypeLiteral<SearchableDetailModelProvider<VM, DiskListModel, DiskVmListModel>>(){}) .to(new TypeLiteral<SearchableDetailTabModelProvider<VM, DiskListModel, DiskVmListModel>>(){}) .in(Singleton.class); bind(new TypeLiteral<SearchableDetailModelProvider<VmTemplate, DiskListModel, DiskTemplateListModel>>(){}) .to(new TypeLiteral<SearchableDetailTabModelProvider<VmTemplate, DiskListModel, DiskTemplateListModel>>(){}) .in(Singleton.class); bind(new TypeLiteral<SearchableDetailModelProvider<StorageDomain, DiskListModel, DiskStorageListModel>>(){}) .to(new TypeLiteral<SearchableDetailTabModelProvider<StorageDomain, DiskListModel, DiskStorageListModel>>(){}) .in(Singleton.class); // Permission Detail Model bind(new TypeLiteral<SearchableDetailModelProvider<Permission, DiskListModel, PermissionListModel<Disk>>>(){}) .to(new TypeLiteral<PermissionModelProvider<Disk, DiskListModel>>(){}).in(Singleton.class); } }