package org.ovirt.engine.ui.uicommonweb.models.hosts; import java.util.ArrayList; import java.util.List; import org.ovirt.engine.core.common.businessentities.Cluster; import org.ovirt.engine.core.common.businessentities.ExternalDiscoveredHost; import org.ovirt.engine.core.common.businessentities.ExternalHostGroup; import org.ovirt.engine.core.common.businessentities.Provider; import org.ovirt.engine.core.common.businessentities.StoragePool; import org.ovirt.engine.core.common.businessentities.VDS; import org.ovirt.engine.core.common.mode.ApplicationMode; import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider; import org.ovirt.engine.ui.uicommonweb.models.ApplicationModeHelper; import org.ovirt.engine.ui.uicommonweb.models.ListModel; public class NewHostModel extends HostModel { public static final int NewHostDefaultPort = 54321; public NewHostModel() { getExternalHostName().getSelectedItemChangedEvent().addListener((ev, sender, args) -> hostName_SelectedItemChanged()); getExternalHostName().setIsAvailable(ApplicationModeHelper.getUiMode() != ApplicationMode.GlusterOnly); getExternalDiscoveredHosts().getSelectedItemChangedEvent().addListener((ev, sender, args) -> discoverHostName_SelectedItemChanged()); getExternalDiscoveredHosts().setIsAvailable(ApplicationModeHelper.getUiMode() != ApplicationMode.GlusterOnly); getExternalHostProviderEnabled().setIsAvailable(ApplicationModeHelper.getUiMode() != ApplicationMode.GlusterOnly); getProviders().getSelectedItemChangedEvent().addListener((ev, sender, args) -> { // While load don't let user to change provider getProviders().setIsChangeable(false); providers_SelectedItemChanged(); updateHostList(); }); getExternalHostGroups().getSelectedItemChangedEvent().addListener((ev, sender, args) -> externalHostGroups_SelectedItemChanged()); getIsDiscoveredHosts().getEntityChangedEvent().addListener((ev, sender, args) -> { if (Boolean.TRUE.equals(getIsDiscoveredHosts().getEntity())) { discoverHostName_SelectedItemChanged(); } else if (Boolean.FALSE.equals(getIsDiscoveredHosts().getEntity())) { hostName_SelectedItemChanged(); } }); getProviders().setIsAvailable(ApplicationModeHelper.getUiMode() != ApplicationMode.GlusterOnly); getProviderSearchFilter().setIsAvailable(ApplicationModeHelper.getUiMode() != ApplicationMode.GlusterOnly); getProviderSearchFilterLabel().setIsAvailable(ApplicationModeHelper.getUiMode() != ApplicationMode.GlusterOnly); getExternalHostProviderEnabled().setEntity(false); setEnableSearchHost(false); } // Define events: private void hostName_SelectedItemChanged() { if (Boolean.FALSE.equals(getIsDiscoveredHosts().getEntity())) { VDS vds = getExternalHostName().getSelectedItem(); if (vds != null) { setOriginalName(vds.getName()); getName().setEntity(vds.getName()); getHost().setEntity(vds.getHostName()); } } } private void discoverHostName_SelectedItemChanged() { if (Boolean.TRUE.equals(getIsDiscoveredHosts().getEntity())) { ExternalDiscoveredHost dhost = (ExternalDiscoveredHost) getExternalDiscoveredHosts().getSelectedItem(); ExternalHostGroup dhg = (ExternalHostGroup) getExternalHostGroups().getSelectedItem(); if (dhost != null && dhg != null) { setOriginalName(dhost.getName()); getName().setEntity(dhost.getName()); getHost().setEntity(dhost.getName() + "." + //$NON-NLS-1$ (dhg.getDomainName() != null ? dhg.getDomainName() : "")); //$NON-NLS-1$ } } } private void externalHostGroups_SelectedItemChanged() { ExternalHostGroup dhg = (ExternalHostGroup) getExternalHostGroups().getSelectedItem(); if (dhg != null) { getHost().setEntity(getName().getEntity() + "." + //$NON-NLS-1$ (dhg.getDomainName() != null ? dhg.getDomainName() : "")); //$NON-NLS-1$ } } private void providers_SelectedItemChanged() { cleanHostParametersFields(); Provider provider = getProviders().getSelectedItem(); setEnableSearchHost(provider != null); } private void updateHostList() { Provider provider = getProviders().getSelectedItem(); if (provider == null) { return; } AsyncDataProvider.getInstance().getExternalProviderHostList(new AsyncQuery<>(hosts -> { ListModel<VDS> hostNameListModel = getExternalHostName(); hostNameListModel.setItems(hosts); hostNameListModel.setIsChangeable(true); setEnableSearchHost(true); getProviders().setIsChangeable(true); }), provider.getId(), true, getProviderSearchFilter().getEntity()); AsyncDataProvider.getInstance().getExternalProviderHostGroupList(new AsyncQuery<>(hostGroups -> { ListModel externalHostGroupsListModel = getExternalHostGroups(); externalHostGroupsListModel.setItems(hostGroups); externalHostGroupsListModel.setIsChangeable(true); AsyncDataProvider.getInstance().getExternalProviderDiscoveredHostList(new AsyncQuery<>(hosts -> { ListModel externalDiscoveredHostsListModel = getExternalDiscoveredHosts(); externalDiscoveredHostsListModel.setItems(hosts); externalDiscoveredHostsListModel.setIsChangeable(true); }), getProviders().getSelectedItem()); }), provider); AsyncDataProvider.getInstance().getExternalProviderComputeResourceList(new AsyncQuery<>(computeResources -> { ListModel externalComputeResourceListModel = getExternalComputeResource(); externalComputeResourceListModel.setItems(computeResources); externalComputeResourceListModel.setIsChangeable(true); }), provider); } private void updateDiscoveredHostList(String searchFilter) { Provider provider = getProviders().getSelectedItem(); if (provider != null ) { AsyncDataProvider.getInstance().getExternalProviderHostList(new AsyncQuery<>(hosts -> { ListModel<VDS> hostNameListModel = getExternalHostName(); hostNameListModel.setItems(hosts); hostNameListModel.setIsChangeable(true); setEnableSearchHost(true); }), provider.getId(), true, searchFilter); } else { getExternalHostName().setItems(null); getExternalHostName().setIsChangeable(false); setEnableSearchHost(false); } } @Override protected boolean showInstallationProperties() { return true; } @Override protected void updateModelDataCenterFromVds(List<StoragePool> dataCenters, VDS vds) { } @Override protected void setAllowChangeHost(VDS vds) { if (getHost().getEntity() != null) { getHost().setIsChangeable(false); } else { getHost().setIsChangeable(true); } } @Override protected void setAllowChangeHostPlacementPropertiesWhenNotInMaintenance() { getDataCenter().setIsChangeable(true); getCluster().setIsChangeable(true); } @Override protected void updateProvisionedHosts() { updateDiscoveredHostList(getProviderSearchFilter().getEntity()); } @Override public boolean showExternalProviderPanel() { return ApplicationModeHelper.getUiMode() != ApplicationMode.GlusterOnly; } @Override protected void setPort(VDS vds) { // If port is "0" then we set it to the default port if (vds.getPort() == 0) { getPort().setEntity(NewHostDefaultPort); } } @Override protected void updateModelClusterFromVds(ArrayList<Cluster> clusters, VDS vds) { } private void setEnableSearchHost(boolean value) { getProviderSearchFilter().setIsChangeable(value); getProviderSearchFilterLabel().setIsChangeable(value); getUpdateHostsCommand().setIsExecutionAllowed(value); } @Override public boolean showNetworkProviderTab() { return ApplicationModeHelper.getUiMode() != ApplicationMode.GlusterOnly; } @Override protected boolean editTransportProperties(VDS vds) { return true; } protected void cpuVendorChanged() { resetKernelCmdline(); } }