package org.ovirt.engine.ui.uicommonweb.models.providers; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import java.util.Set; import org.ovirt.engine.core.common.VdcObjectType; import org.ovirt.engine.core.common.action.VdcActionType; import org.ovirt.engine.core.common.businessentities.Provider; import org.ovirt.engine.core.common.businessentities.StoragePool; import org.ovirt.engine.core.common.businessentities.network.Network; import org.ovirt.engine.core.common.queries.IdQueryParameters; import org.ovirt.engine.core.common.queries.VdcQueryParametersBase; import org.ovirt.engine.core.common.queries.VdcQueryReturnValue; import org.ovirt.engine.core.common.queries.VdcQueryType; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.compat.StringHelper; import org.ovirt.engine.ui.frontend.Frontend; import org.ovirt.engine.ui.uicommonweb.UICommand; import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider; import org.ovirt.engine.ui.uicommonweb.help.HelpTag; import org.ovirt.engine.ui.uicommonweb.models.ConfirmationModel; import org.ovirt.engine.ui.uicommonweb.models.SearchableListModel; import org.ovirt.engine.ui.uicompat.ConstantsManager; @SuppressWarnings("deprecation") public class EditProviderModel extends ProviderModel { private static final String CMD_APPROVE = "OnApprove"; //$NON-NLS-1$ private static final String CMD_CANCEL = "OnCancel"; //$NON-NLS-1$ private final String oldUrl; private Collection<Network> providedNetworks = new ArrayList<>(); public EditProviderModel(SearchableListModel sourceListModel, Provider provider) { super(sourceListModel, VdcActionType.UpdateProvider, provider); setTitle(ConstantsManager.getInstance().getConstants().editProviderTitle()); setHelpTag(HelpTag.edit_provider); setHashName("edit_provider"); //$NON-NLS-1$ getName().setEntity(provider.getName()); getDescription().setEntity(provider.getDescription()); getType().setSelectedItem(provider.getType()); getType().setIsChangeable(false); getUrl().setEntity(provider.getUrl()); getRequiresAuthentication().setEntity(provider.isRequiringAuthentication()); getUsername().setEntity(provider.getUsername()); getPassword().setEntity(provider.getPassword()); getAuthUrl().setEntity(provider.getAuthUrl()); if (isTypeOpenStackNetwork()) { getNeutronAgentModel().init(provider); } if (isTypeVmware()) { getVmwarePropertiesModel().init(provider); } if (isTypeKVM()) { getKvmPropertiesModel().init(provider); } if (isTypeXEN()) { getXenPropertiesModel().init(provider); } oldUrl = provider.getUrl(); } @Override protected void preSave() { if (!StringHelper.stringsEqualIgnoreCase(getUrl().getEntity(), oldUrl)) { ArrayList<VdcQueryType> queryTypes = new ArrayList<>(); ArrayList<VdcQueryParametersBase> queryParams = new ArrayList<>(); final Set<VdcObjectType> providedTypes = provider.getType().getProvidedTypes(); if (providedTypes.contains(VdcObjectType.Network)) { queryTypes.add(VdcQueryType.GetAllNetworksForProvider); queryParams.add(new IdQueryParameters(provider.getId())); } if (!queryTypes.isEmpty()) { startProgress(); Frontend.getInstance().runMultipleQueries(queryTypes, queryParams, result -> { stopProgress(); Iterator<VdcQueryReturnValue> i = result.getReturnValues().iterator(); if (providedTypes.contains(VdcObjectType.Network)) { providedNetworks = i.next().getReturnValue(); } showConfirmation(); }); return; } } actualSave(); } private void showConfirmation() { if (providedNetworks.isEmpty()) { actualSave(); return; } StringBuilder networkList = new StringBuilder("Networks:\n"); //$NON-NLS-1$ for (Network network : providedNetworks) { networkList.append("- ").append(network.getName()).append('\n'); //$NON-NLS-1$ } ConfirmationModel confirmationModel = new ConfirmationModel(); confirmationModel.setTitle(ConstantsManager.getInstance().getConstants().providerUrlWarningTitle()); confirmationModel.setMessage(ConstantsManager.getInstance() .getMessages() .providerUrlWarningText(networkList.toString())); UICommand cmdOk = UICommand.createDefaultOkUiCommand(CMD_APPROVE, this); confirmationModel.getCommands().add(cmdOk); UICommand cmdCancel = UICommand.createCancelUiCommand(CMD_CANCEL, this); //$NON-NLS-1$ confirmationModel.getCommands().add(cmdCancel); sourceListModel.setConfirmWindow(confirmationModel); } private void cancel() { sourceListModel.setConfirmWindow(null); } @Override public void executeCommand(UICommand command) { super.executeCommand(command); if (CMD_APPROVE.equals(command.getName())) { cancel(); actualSave(); } else if (CMD_CANCEL.equals(command.getName())) { cancel(); } } @Override protected void updateDatacentersForVolumeProvider() { getDataCenter().setIsChangeable(false); AsyncDataProvider.getInstance().getStorageDomainByName(new AsyncQuery<>(storageDomainStatic -> AsyncDataProvider.getInstance().getDataCentersByStorageDomain(new AsyncQuery<>(dataCenters -> { if (dataCenters != null && !dataCenters.isEmpty()) { getDataCenter().setSelectedItem(dataCenters.get(0)); } else { StoragePool noneStoragePool = new StoragePool(); noneStoragePool.setId(Guid.Empty); noneStoragePool.setName("(none)"); //$NON-NLS-1$ getDataCenter().setSelectedItem(noneStoragePool); } }), storageDomainStatic.getId())), provider.getName()); } }