package org.ovirt.engine.ui.webadmin.gin.uicommon;
import java.util.ArrayList;
import java.util.Map;
import org.ovirt.engine.core.common.businessentities.AuditLog;
import org.ovirt.engine.core.common.businessentities.Erratum;
import org.ovirt.engine.core.common.businessentities.HostDeviceView;
import org.ovirt.engine.core.common.businessentities.Permission;
import org.ovirt.engine.core.common.businessentities.VDS;
import org.ovirt.engine.core.common.businessentities.VM;
import org.ovirt.engine.core.common.businessentities.gluster.GlusterBrickEntity;
import org.ovirt.engine.core.common.businessentities.gluster.GlusterServerService;
import org.ovirt.engine.core.common.businessentities.gluster.StorageDevice;
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.HostMaintenanceConfirmationPopupPresenterWidget;
import org.ovirt.engine.ui.common.presenter.popup.RemoveConfirmationPopupPresenterWidget;
import org.ovirt.engine.ui.common.presenter.popup.numa.NumaSupportPopupPresenterWidget;
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.HostErrataCountModel;
import org.ovirt.engine.ui.uicommonweb.models.HostErrataListModel;
import org.ovirt.engine.ui.uicommonweb.models.Model;
import org.ovirt.engine.ui.uicommonweb.models.configure.PermissionListModel;
import org.ovirt.engine.ui.uicommonweb.models.gluster.HostGlusterStorageDevicesListModel;
import org.ovirt.engine.ui.uicommonweb.models.gluster.HostGlusterSwiftListModel;
import org.ovirt.engine.ui.uicommonweb.models.hosts.HostBricksListModel;
import org.ovirt.engine.ui.uicommonweb.models.hosts.HostEventListModel;
import org.ovirt.engine.ui.uicommonweb.models.hosts.HostGeneralModel;
import org.ovirt.engine.ui.uicommonweb.models.hosts.HostHardwareGeneralModel;
import org.ovirt.engine.ui.uicommonweb.models.hosts.HostHooksListModel;
import org.ovirt.engine.ui.uicommonweb.models.hosts.HostInterfaceLineModel;
import org.ovirt.engine.ui.uicommonweb.models.hosts.HostInterfaceListModel;
import org.ovirt.engine.ui.uicommonweb.models.hosts.HostListModel;
import org.ovirt.engine.ui.uicommonweb.models.hosts.HostSetupNetworksModel;
import org.ovirt.engine.ui.uicommonweb.models.hosts.HostVmListModel;
import org.ovirt.engine.ui.uicommonweb.models.hosts.NetworkAttachmentModel;
import org.ovirt.engine.ui.uicommonweb.models.hosts.SetupNetworksBondModel;
import org.ovirt.engine.ui.uicommonweb.models.hosts.SetupNetworksLabelModel;
import org.ovirt.engine.ui.uicommonweb.models.hosts.VfsConfigModel;
import org.ovirt.engine.ui.uicommonweb.models.vms.hostdev.HostDeviceListModel;
import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.AssignTagsPopupPresenterWidget;
import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.HostErrataListWithDetailsPopupPresenterWidget;
import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.event.EventPopupPresenterWidget;
import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.gluster.CreateBrickPopupPresenterWidget;
import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.host.ConfigureLocalStoragePopupPresenterWidget;
import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.host.HostInstallPopupPresenterWidget;
import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.host.HostPopupPresenterWidget;
import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.host.HostSetupNetworksPopupPresenterWidget;
import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.host.ManualFencePopupPresenterWidget;
import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.host.NetworkAttachmentPopupPresenterWidget;
import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.host.SetupNetworksBondPopupPresenterWidget;
import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.host.VfsConfigPopupPresenterWidget;
import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.vm.VmMigratePopupPresenterWidget;
import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.host.HostMainTabSelectedItems;
import org.ovirt.engine.ui.webadmin.section.main.view.popup.host.SetupNetworksLabelPopupPresenterWidget;
import org.ovirt.engine.ui.webadmin.uicommon.model.FenceAgentModelProvider;
import org.ovirt.engine.ui.webadmin.uicommon.model.FenceProxyModelProvider;
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;
/**
* Gin configuration module for Hosts tabs and popups.
*/
public class HostModule extends AbstractGinModule {
// Main List Model
@Provides
@Singleton
public MainModelProvider<VDS, HostListModel<Void>> getHostListProvider(EventBus eventBus,
Provider<DefaultConfirmationPopupPresenterWidget> defaultConfirmPopupProvider,
final Provider<HostPopupPresenterWidget> popupProvider,
final Provider<RemoveConfirmationPopupPresenterWidget> removeConfirmPopupProvider,
final Provider<HostMaintenanceConfirmationPopupPresenterWidget> hostMaintenanceConfirmationPopupProvider,
final Provider<ManualFencePopupPresenterWidget> manualFenceConfirmPopupProvider,
final Provider<AssignTagsPopupPresenterWidget> assignTagsPopupProvider,
final Provider<ConfigureLocalStoragePopupPresenterWidget> configureLocalStoragePopupProvider,
final Provider<HostInstallPopupPresenterWidget> installPopupProvider,
final Provider<NumaSupportPopupPresenterWidget> numaSupportPopupProvider,
final Provider<HostListModel<Void>> modelProvider,
final Provider<CommonModel> commonModelProvider) {
MainTabModelProvider<VDS, HostListModel<Void>> result =
new MainTabModelProvider<VDS, HostListModel<Void>>(eventBus, defaultConfirmPopupProvider,
commonModelProvider) {
@Override
public AbstractModelBoundPopupPresenterWidget<? extends Model, ?> getModelPopup(HostListModel<Void> source,
UICommand lastExecutedCommand, Model windowModel) {
if (lastExecutedCommand == getModel().getNewCommand()
|| lastExecutedCommand == getModel().getEditCommand()
|| lastExecutedCommand == getModel().getEditWithPMemphasisCommand()
|| lastExecutedCommand == getModel().getApproveCommand()) {
return popupProvider.get();
} else if (lastExecutedCommand == getModel().getInstallCommand()
|| lastExecutedCommand == getModel().getUpgradeCommand()) {
return installPopupProvider.get();
} else if (lastExecutedCommand == getModel().getAssignTagsCommand()) {
return assignTagsPopupProvider.get();
} else if (lastExecutedCommand == getModel().getConfigureLocalStorageCommand()) {
return configureLocalStoragePopupProvider.get();
} else if (lastExecutedCommand == getModel().getNumaSupportCommand()) {
return numaSupportPopupProvider.get();
}
return super.getModelPopup(source, lastExecutedCommand, windowModel);
}
@Override
public AbstractModelBoundPopupPresenterWidget<? extends ConfirmationModel, ?> getConfirmModelPopup(HostListModel<Void> source,
UICommand lastExecutedCommand) {
if (lastExecutedCommand == getModel().getRemoveCommand()) {
return removeConfirmPopupProvider.get();
} else if (lastExecutedCommand == getModel().getMaintenanceCommand()) {
return hostMaintenanceConfirmationPopupProvider.get();
} else if (lastExecutedCommand == getModel().getManualFenceCommand()) {
return manualFenceConfirmPopupProvider.get();
} else {
return super.getConfirmModelPopup(source, lastExecutedCommand);
}
}
};
result.setModelProvider(modelProvider);
return result;
}
// Form Detail Models
@Provides
@Singleton
public DetailModelProvider<HostListModel<Void>, HostGeneralModel> getHostGeneralProvider(EventBus eventBus,
Provider<DefaultConfirmationPopupPresenterWidget> defaultConfirmPopupProvider,
final Provider<HostListModel<Void>> mainModelProvider,
final Provider<HostGeneralModel> modelProvider,
final Provider<HostInstallPopupPresenterWidget> installPopupProvider) {
DetailTabModelProvider<HostListModel<Void>, HostGeneralModel> result =
new DetailTabModelProvider<HostListModel<Void>, HostGeneralModel>(
eventBus, defaultConfirmPopupProvider) {
@Override
public AbstractModelBoundPopupPresenterWidget<? extends Model, ?> getModelPopup(HostGeneralModel source,
UICommand lastExecutedCommand, Model windowModel) {
if (lastExecutedCommand == getModel().getUpgradeHostCommand()) {
return installPopupProvider.get();
}
return super.getModelPopup(source, lastExecutedCommand, windowModel);
}
};
result.setMainModelProvider(mainModelProvider);
result.setModelProvider(modelProvider);
return result;
}
// Search-able Detail Models
@Provides
@Singleton
public SearchableDetailModelProvider<HostInterfaceLineModel, HostListModel<Void>, HostInterfaceListModel> getHostInterfaceListProvider(EventBus eventBus,
Provider<DefaultConfirmationPopupPresenterWidget> defaultConfirmPopupProvider,
final Provider<NetworkAttachmentPopupPresenterWidget> setupNetworksInterfacePopupProvider,
final Provider<SetupNetworksBondPopupPresenterWidget> setupNetworksBondPopupProvider,
final Provider<VfsConfigPopupPresenterWidget> vfsConfigPopupProvider,
final Provider<SetupNetworksLabelPopupPresenterWidget> setupNetworksLabelPopupProvider,
final Provider<HostSetupNetworksPopupPresenterWidget> hostSetupNetworksPopupProvider,
final Provider<HostListModel<Void>> mainModelProvider,
final Provider<HostInterfaceListModel> modelProvider) {
SearchableDetailTabModelProvider<HostInterfaceLineModel, HostListModel<Void>, HostInterfaceListModel> result =
new SearchableDetailTabModelProvider<HostInterfaceLineModel, HostListModel<Void>, HostInterfaceListModel>(
eventBus, defaultConfirmPopupProvider) {
@Override
public AbstractModelBoundPopupPresenterWidget<? extends ConfirmationModel, ?> getConfirmModelPopup(HostInterfaceListModel source,
UICommand lastExecutedCommand) {
return super.getConfirmModelPopup(source, lastExecutedCommand);
}
@Override
public AbstractModelBoundPopupPresenterWidget<? extends Model, ?> getModelPopup(HostInterfaceListModel source,
UICommand lastExecutedCommand, Model windowModel) {
if (source.getWindow() instanceof HostSetupNetworksModel) {
// Resolve by dialog model
if (windowModel instanceof SetupNetworksBondModel) {
return setupNetworksBondPopupProvider.get();
} else if (windowModel instanceof NetworkAttachmentModel) {
return setupNetworksInterfacePopupProvider.get();
} else if (windowModel instanceof VfsConfigModel) {
return vfsConfigPopupProvider.get();
} else if (windowModel instanceof SetupNetworksLabelModel) {
return setupNetworksLabelPopupProvider.get();
}
}
// Resolve by last executed command
if (lastExecutedCommand == getModel().getSetupNetworksCommand()) {
return hostSetupNetworksPopupProvider.get();
} else {
return super.getModelPopup(source, lastExecutedCommand, windowModel);
}
}
@Override
protected void updateData() {
// Pass empty data to data provider, since Host NIC table is used as header-only table
updateDataProvider(new ArrayList<HostInterfaceLineModel>());
}
};
result.setMainModelProvider(mainModelProvider);
result.setModelProvider(modelProvider);
return result;
}
@Provides
@Singleton
public SearchableDetailModelProvider<VM, HostListModel<Void>, HostVmListModel> getHostVmListProvider(EventBus eventBus,
Provider<DefaultConfirmationPopupPresenterWidget> defaultConfirmPopupProvider,
final Provider<VmMigratePopupPresenterWidget> migratePopupProvider,
final Provider<HostListModel<Void>> mainModelProvider,
final Provider<RemoveConfirmationPopupPresenterWidget> removeConfirmPopupProvider,
final Provider<HostVmListModel> modelProvider) {
SearchableDetailTabModelProvider<VM, HostListModel<Void>, HostVmListModel> result =
new SearchableDetailTabModelProvider<VM, HostListModel<Void>, HostVmListModel>(
eventBus, defaultConfirmPopupProvider) {
@Override
public AbstractModelBoundPopupPresenterWidget<? extends Model, ?> getModelPopup(HostVmListModel source,
UICommand lastExecutedCommand, Model windowModel) {
if (lastExecutedCommand == getModel().getMigrateCommand()) {
return migratePopupProvider.get();
}
return super.getModelPopup(source, lastExecutedCommand, windowModel);
}
@Override
public AbstractModelBoundPopupPresenterWidget<? extends ConfirmationModel, ?> getConfirmModelPopup(
HostVmListModel sourceModel,
UICommand lastExecutedCommand) {
if (lastExecutedCommand == getModel().getStopCommand() ||
lastExecutedCommand == getModel().getShutdownCommand()) {
return removeConfirmPopupProvider.get();
}
return super.getConfirmModelPopup(sourceModel, lastExecutedCommand);
}
};
result.setMainModelProvider(mainModelProvider);
result.setModelProvider(modelProvider);
return result;
}
@Provides
@Singleton
public SearchableDetailModelProvider<StorageDevice, HostListModel<Void>, HostGlusterStorageDevicesListModel> getGlusterHostStorageDeviceProvider(EventBus eventBus,
Provider<DefaultConfirmationPopupPresenterWidget> defaultConfirmPopupProvider,
final Provider<CreateBrickPopupPresenterWidget> createBrickPopupProvider,
final Provider<HostListModel<Void>> mainModelProvider,
final Provider<HostGlusterStorageDevicesListModel> modelProvider) {
SearchableDetailTabModelProvider<StorageDevice, HostListModel<Void>, HostGlusterStorageDevicesListModel> result =
new SearchableDetailTabModelProvider<StorageDevice, HostListModel<Void>, HostGlusterStorageDevicesListModel>(
eventBus, defaultConfirmPopupProvider) {
@Override
public AbstractModelBoundPopupPresenterWidget<? extends Model, ?> getModelPopup(HostGlusterStorageDevicesListModel source,
UICommand lastExecutedCommand,
Model windowModel) {
if (lastExecutedCommand == getModel().getCreateBrickCommand()) {
return createBrickPopupProvider.get();
} else {
return super.getModelPopup(source, lastExecutedCommand, windowModel);
}
}
};
result.setMainModelProvider(mainModelProvider);
result.setModelProvider(modelProvider);
return result;
}
@Provides
@Singleton
public SearchableDetailModelProvider<AuditLog, HostListModel<Void>, HostEventListModel> getHostEventListProvider(EventBus eventBus,
Provider<DefaultConfirmationPopupPresenterWidget> defaultConfirmPopupProvider,
final Provider<EventPopupPresenterWidget> eventPopupProvider,
final Provider<HostListModel<Void>> mainModelProvider,
final Provider<HostEventListModel> modelProvider) {
SearchableDetailTabModelProvider<AuditLog, HostListModel<Void>, HostEventListModel> result =
new SearchableDetailTabModelProvider<AuditLog, HostListModel<Void>, HostEventListModel>(
eventBus, defaultConfirmPopupProvider) {
@Override
public AbstractModelBoundPopupPresenterWidget<? extends Model, ?> getModelPopup(HostEventListModel 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<Erratum, HostListModel<Void>, HostErrataListModel> getHostErrataListProvider(EventBus eventBus,
Provider<DefaultConfirmationPopupPresenterWidget> defaultConfirmPopupProvider,
final Provider<HostListModel<Void>> mainModelProvider,
final Provider<HostErrataListModel> modelProvider,
final Provider<HostErrataCountModel> countModelProvider) {
SearchableDetailTabModelProvider<Erratum, HostListModel<Void>, HostErrataListModel> result =
new SearchableDetailTabModelProvider<>(eventBus, defaultConfirmPopupProvider);
result.setMainModelProvider(mainModelProvider);
result.setModelProvider(modelProvider);
return result;
}
@Provides
@Singleton
public DetailTabModelProvider<HostListModel<Void>, HostErrataCountModel> getHostErrataCountProvider(EventBus eventBus,
Provider<DefaultConfirmationPopupPresenterWidget> defaultConfirmPopupProvider,
final Provider<HostErrataListWithDetailsPopupPresenterWidget> errataPopupProvider,
final Provider<HostErrataListModel> listModelProvider,
final Provider<HostListModel<Void>> mainModelProvider,
final Provider<HostErrataCountModel> modelProvider) {
DetailTabModelProvider<HostListModel<Void>, HostErrataCountModel> result = new DetailTabModelProvider<HostListModel<Void>, HostErrataCountModel>(
eventBus, defaultConfirmPopupProvider) {
@Override
public AbstractModelBoundPopupPresenterWidget<? extends Model, ?> getModelPopup(HostErrataCountModel source,
UICommand lastExecutedCommand,
Model windowModel) {
return errataPopupProvider.get();
}
};
result.setMainModelProvider(mainModelProvider);
result.setModelProvider(modelProvider);
return result;
}
@Override
protected void configure() {
bind(new TypeLiteral<HostListModel<Void>>() {}).in(Singleton.class);
bind(HostGeneralModel.class).in(Singleton.class);
bind(HostHardwareGeneralModel.class).in(Singleton.class);
bind(HostHooksListModel.class).in(Singleton.class);
bind(HostBricksListModel.class).in(Singleton.class);
bind(HostGlusterStorageDevicesListModel.class).in(Singleton.class);
bind(HostInterfaceListModel.class).in(Singleton.class);
bind(HostVmListModel.class).in(Singleton.class);
bind(HostGlusterSwiftListModel.class).in(Singleton.class);
bind(HostEventListModel.class).in(Singleton.class);
bind(HostDeviceListModel.class).in(Singleton.class);
bind(new TypeLiteral<PermissionListModel<VDS>>(){}).in(Singleton.class);
bind(FenceAgentModelProvider.class).in(Singleton.class);
bind(FenceProxyModelProvider.class).in(Singleton.class);
bind(HostErrataCountModel.class).in(Singleton.class);
bind(HostErrataListModel.class).in(Singleton.class);
bind(HostMainTabSelectedItems.class).asEagerSingleton();
// Form Detail Models
bind(new TypeLiteral<DetailModelProvider<HostListModel<Void>, HostHardwareGeneralModel>>(){})
.to(new TypeLiteral<DetailTabModelProvider<HostListModel<Void>, HostHardwareGeneralModel>>(){}).in(Singleton.class);
// Search-able Detail Models
bind(new TypeLiteral<SearchableDetailModelProvider<Map<String, String>, HostListModel<Void>, HostHooksListModel>>(){})
.to(new TypeLiteral<SearchableDetailTabModelProvider<Map<String, String>, HostListModel<Void>, HostHooksListModel>>(){})
.in(Singleton.class);
bind(new TypeLiteral<SearchableDetailModelProvider<GlusterBrickEntity, HostListModel<Void>, HostBricksListModel>>(){})
.to(new TypeLiteral<SearchableDetailTabModelProvider<GlusterBrickEntity, HostListModel<Void>, HostBricksListModel>>(){})
.in(Singleton.class);
bind(new TypeLiteral<SearchableDetailModelProvider<GlusterServerService, HostListModel<Void>, HostGlusterSwiftListModel>>(){})
.to(new TypeLiteral<SearchableDetailTabModelProvider<GlusterServerService, HostListModel<Void>, HostGlusterSwiftListModel>>(){})
.in(Singleton.class);
bind(new TypeLiteral<SearchableDetailModelProvider<HostDeviceView, HostListModel<Void>, HostDeviceListModel>>(){})
.to(new TypeLiteral<SearchableDetailTabModelProvider<HostDeviceView, HostListModel<Void>, HostDeviceListModel>>(){})
.in(Singleton.class);
// Permission Detail Model
bind(new TypeLiteral<SearchableDetailModelProvider<Permission, HostListModel<Void>, PermissionListModel<VDS>>>(){})
.to(new TypeLiteral<PermissionModelProvider<VDS, HostListModel<Void>>>() {}).in(Singleton.class);
}
}