package org.ovirt.engine.ui.uicommonweb.models.vms; import java.util.ArrayList; import java.util.List; import java.util.Map; import org.ovirt.engine.core.common.action.ImportVmFromExternalProviderParameters; import org.ovirt.engine.core.common.action.VdcActionParametersBase; import org.ovirt.engine.core.common.action.VdcActionType; import org.ovirt.engine.core.common.businessentities.OriginType; import org.ovirt.engine.core.common.businessentities.StorageDomain; import org.ovirt.engine.core.common.businessentities.VM; import org.ovirt.engine.core.common.businessentities.profiles.CpuProfile; import org.ovirt.engine.core.common.businessentities.storage.Disk; import org.ovirt.engine.core.common.businessentities.storage.DiskImage; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.ui.frontend.Frontend; import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider; import org.ovirt.engine.ui.uicommonweb.models.ListModel; import org.ovirt.engine.ui.uicommonweb.models.clusters.ClusterListModel; import org.ovirt.engine.ui.uicommonweb.models.quota.QuotaListModel; import org.ovirt.engine.ui.uicompat.ConstantsManager; import org.ovirt.engine.ui.uicompat.IFrontendMultipleActionAsyncCallback; import org.ovirt.engine.ui.uicompat.UIConstants; import com.google.inject.Inject; public class ImportVmFromExternalSourceModel extends ImportVmFromExternalProviderModel { private String url; private String username; private String password; private Guid proxyHostId; private static UIConstants constants = ConstantsManager.getInstance().getConstants(); @Inject public ImportVmFromExternalSourceModel(VmImportGeneralModel vmImportGeneralModel, VmImportDiskListModel importDiskListModel, VmImportInterfaceListModel vmImportInterfaceListModel, ClusterListModel<Void> cluster, QuotaListModel clusterQuota) { super(vmImportGeneralModel, importDiskListModel, vmImportInterfaceListModel, cluster, clusterQuota); getStorage().getSelectedItemChangedEvent().addListener((ev, sender, args) -> { @SuppressWarnings("unchecked") ListModel<StorageDomain> list = (ListModel<StorageDomain>) sender; if (list.getSelectedItem() != null && list.getSelectedItem().getStorageType().isBlockDomain() && containsKvmOrigin()) { setMessage(constants.kvmBlockDomainWraning()); } else { setMessage(""); //$NON-NLS-1$ } }); } private boolean containsKvmOrigin() { for (Object item : getItems()) { ImportVmData importVmData = (ImportVmData) item; if (importVmData.getVm().getOrigin() == OriginType.KVM) { return true; } } return false; } void setUrl(String url) { this.url = url; } void setUsername(String username) { this.username = username; } void setPassword(String password) { this.password = password; } void setProxyHostId(Guid proxyHostId) { this.proxyHostId = proxyHostId; } public String getUrl() { return url; } public String getUsername() { return username; } public String getPassword() { return password; } public Guid getProxyHostId() { return proxyHostId; } @Override public void importVms(IFrontendMultipleActionAsyncCallback callback) { Frontend.getInstance().runMultipleAction( VdcActionType.ImportVmFromExternalProvider, buildImportVmFromExternalProviderParameters(), true, callback, null); } private List<VdcActionParametersBase> buildImportVmFromExternalProviderParameters() { List<VdcActionParametersBase> prms = new ArrayList<>(); for (Object item : getItems()) { ImportVmData importVmData = (ImportVmData) item; VM vm = importVmData.getVm(); ImportVmFromExternalProviderParameters prm = new ImportVmFromExternalProviderParameters( vm, getStorage().getSelectedItem().getId(), getStoragePool().getId(), getCluster().getSelectedItem().getId()); prm.setUrl(url); prm.setUsername(username); prm.setPassword(password); prm.setProxyHostId(proxyHostId); prm.setVirtioIsoName(getIso().getIsChangable() ? getIso().getSelectedItem() : null); prm.setExternalName(importVmData.getName()); if (getClusterQuota().getSelectedItem() != null && getClusterQuota().getIsAvailable()) { prm.setQuotaId(getClusterQuota().getSelectedItem().getId()); } CpuProfile cpuProfile = getCpuProfiles().getSelectedItem(); if (cpuProfile != null) { prm.setCpuProfileId(cpuProfile.getId()); } prm.setForceOverride(true); prm.setCopyCollapse(importVmData.getCollapseSnapshots().getEntity()); for (Map.Entry<Guid, Disk> entry : vm.getDiskMap().entrySet()) { DiskImage disk = (DiskImage) entry.getValue(); ImportDiskData importDiskData = getDiskImportData(disk.getDiskAlias()); disk.setVolumeType(getAllocation().getSelectedItem()); // in kvm we just copy the image, in other modes such as vmware or xen we use // virt-v2v which converts the image format as well if (vm.getOrigin() != OriginType.KVM) { disk.setVolumeFormat(AsyncDataProvider.getInstance().getDiskVolumeFormat( disk.getVolumeType(), getStorage().getSelectedItem().getStorageType())); } if (getDiskImportData(disk.getDiskAlias()).getSelectedQuota() != null) { disk.setQuotaId(importDiskData.getSelectedQuota().getId()); } } updateNetworkInterfacesForVm(vm); if (importVmData.isExistsInSystem() || importVmData.getClone().getEntity()) { prm.setImportAsNewEntity(true); prm.setCopyCollapse(true); } prms.add(prm); } return prms; } }