package org.ovirt.engine.ui.uicommonweb.models.templates; import java.util.ArrayList; import java.util.Collection; import java.util.List; import org.ovirt.engine.core.common.businessentities.VmTemplate; import org.ovirt.engine.core.common.businessentities.storage.Disk; import org.ovirt.engine.core.common.businessentities.storage.DiskImage; import org.ovirt.engine.core.common.interfaces.SearchType; import org.ovirt.engine.core.common.queries.SearchParameters; 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.ui.frontend.AsyncCallback; import org.ovirt.engine.ui.frontend.Frontend; import org.ovirt.engine.ui.uicommonweb.models.EntityModel; import org.ovirt.engine.ui.uicommonweb.models.HasEntity; import org.ovirt.engine.ui.uicommonweb.models.SearchableListModel; import org.ovirt.engine.ui.uicommonweb.models.clusters.ClusterListModel; import org.ovirt.engine.ui.uicommonweb.models.quota.QuotaListModel; import org.ovirt.engine.ui.uicommonweb.models.vms.ImportTemplateData; import org.ovirt.engine.ui.uicommonweb.models.vms.ImportVmFromExportDomainModel; import org.ovirt.engine.ui.uicommonweb.models.vms.VmImportAppListModel; import org.ovirt.engine.ui.uicommonweb.models.vms.VmImportDiskListModel; import org.ovirt.engine.ui.uicommonweb.models.vms.VmImportInterfaceListModel; import org.ovirt.engine.ui.uicompat.ConstantsManager; import org.ovirt.engine.ui.uicompat.UIConstants; import com.google.inject.Inject; public class ImportTemplateModel extends ImportVmFromExportDomainModel { private final TemplateImportDiskListModel templateImportDiskListModel; @Inject public ImportTemplateModel(final VmImportDiskListModel vmImportDiskListModel, final ClusterListModel<Void> cluster, final QuotaListModel clusterQuota, final TemplateImportGeneralModel templateImportGeneralModel, final VmImportInterfaceListModel vmImportInterfaceListModel, final VmImportAppListModel vmImportAppListModel, final TemplateImportDiskListModel templateImportDiskListModel, final TemplateImportInterfaceListModel templateImportInterfaceListModel) { super(vmImportDiskListModel, cluster, clusterQuota, null, vmImportInterfaceListModel, vmImportAppListModel); this.templateImportDiskListModel = templateImportDiskListModel; setDetailList(templateImportGeneralModel, templateImportInterfaceListModel); } private void setDetailList(final TemplateImportGeneralModel templateImportGeneralModel, final TemplateImportInterfaceListModel templateImportInterfaceListModel) { List<HasEntity> list = new ArrayList<>(); list.add(templateImportGeneralModel); list.add(templateImportInterfaceListModel); list.add(templateImportDiskListModel); setDetailModels(list); } private String createSearchPattern(Collection<VmTemplate> templates) { String vmt_guidKey = "_VMT_ID ="; //$NON-NLS-1$ String orKey = " or "; //$NON-NLS-1$ StringBuilder searchPattern = new StringBuilder(); searchPattern.append("Template: "); //$NON-NLS-1$ for (VmTemplate template : templates) { searchPattern.append(vmt_guidKey); searchPattern.append(template.getId().toString()); searchPattern.append(orKey); searchPattern.append(vmt_guidKey); searchPattern.append(template.getBaseTemplateId().toString()); searchPattern.append(orKey); } return searchPattern.substring(0, searchPattern.length() - orKey.length()); } public void init(final Collection<VmTemplate> externalTemplates, final Guid storageDomainId) { Frontend.getInstance().runQuery(VdcQueryType.Search, new SearchParameters(createSearchPattern(externalTemplates), SearchType.VmTemplate), new AsyncQuery<>(new AsyncCallback<VdcQueryReturnValue>() { @Override public void onSuccess(VdcQueryReturnValue returnValue) { UIConstants constants = ConstantsManager.getInstance().getConstants(); List<VmTemplate> vmtList = returnValue.getReturnValue(); List<ImportTemplateData> templateDataList = new ArrayList<>(); for (VmTemplate template : externalTemplates) { ImportTemplateData templateData = new ImportTemplateData(template); boolean templateExistsInSystem = vmtList.contains(template); templateData.setExistsInSystem(templateExistsInSystem); if (templateExistsInSystem) { templateData.enforceClone(constants.importTemplateThatExistsInSystemMustClone()); } else if (findAnyVmTemplateById(vmtList, template.getBaseTemplateId()) == null) { templateData.enforceClone(constants.importTemplateWithoutBaseMustClone()); } templateDataList.add(templateData); } setItems(templateDataList); withDataCenterLoaded(storageDomainId, r -> doInit()); } private VmTemplate findAnyVmTemplateById(List<VmTemplate> vmtList, Guid templateId) { for (VmTemplate vmt : vmtList) { if (templateId.equals(vmt.getId())) { return vmt; } } return null; } })); } @Override protected void checkDestFormatCompatibility() { } @Override protected void initDisksStorageDomainsList() { for (Object item : getItems()) { VmTemplate template = ((ImportTemplateData) item).getTemplate(); for (Disk disk : template.getDiskList()) { DiskImage diskImage = (DiskImage) disk; addDiskImportData(diskImage.getId(), filteredStorageDomains, diskImage.getVolumeType(), new EntityModel(true)); } } postInitDisks(); } @Override protected String getListName() { return "ImportTemplateModel"; //$NON-NLS-1$ } @Override public SearchableListModel getImportDiskListModel() { return templateImportDiskListModel; } @Override protected boolean validateNames() { return true; } }