package org.ovirt.engine.ui.uicommonweb.models.vms;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.ovirt.engine.core.common.businessentities.Cluster;
import org.ovirt.engine.core.common.businessentities.StoragePool;
import org.ovirt.engine.core.common.businessentities.VmTemplate;
import org.ovirt.engine.core.compat.Guid;
import org.ovirt.engine.ui.frontend.AsyncQuery;
import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider;
import org.ovirt.engine.ui.uicompat.ConstantsManager;
public class NewVmFromTemplateModelBehavior extends NewVmModelBehavior {
private VmTemplate selectedTemplate;
public NewVmFromTemplateModelBehavior(VmTemplate template) {
this.selectedTemplate = template;
}
@Override
protected void postInitTemplate(List<VmTemplate> templates) {
DataCenterWithCluster selectedDCWithCluster = getModel().getDataCenterWithClustersList().getSelectedItem();
Guid clusterId =
selectedDCWithCluster != null ? selectedDCWithCluster.getCluster().getId()
: selectedTemplate.getClusterId();
VmTemplate baseTemplate = null;
if (selectedTemplate.isBaseTemplate()) {
baseTemplate = selectedTemplate;
}
Guid baseTemplateId = selectedTemplate.getBaseTemplateId();
List<VmTemplate> relatedTemplates = new ArrayList<>();
for (VmTemplate template : templates) {
if (template.getBaseTemplateId().equals(baseTemplateId)) {
if (template.getClusterId() == null || template.getClusterId().equals(clusterId)) {
relatedTemplates.add(template);
}
if (baseTemplate == null) {
if (template.getId().equals(baseTemplateId)) {
baseTemplate = template;
}
}
}
}
if (!relatedTemplates.contains(baseTemplate)) {
relatedTemplates.add(baseTemplate);
}
if (getModel().getTemplateWithVersion().getSelectedItem() == null) {
initTemplateWithVersion(relatedTemplates, selectedTemplate.getId(), false);
} else {
initTemplateWithVersion(relatedTemplates, null, false);
}
updateIsDisksAvailable();
}
protected void loadDataCenters() {
if (!selectedTemplate.getId().equals(Guid.Empty)) {
AsyncDataProvider.getInstance().getDataCenterById(new AsyncQuery<>(
dataCenter -> {
if (dataCenter != null) {
List<StoragePool> dataCenters =
new ArrayList<>(Arrays.asList(new StoragePool[] { dataCenter }));
initClusters(dataCenters);
} else {
getModel().disableEditing(ConstantsManager.getInstance().getConstants().notAvailableWithNoUpDC());
}
}),
selectedTemplate.getStoragePoolId());
} else {
// blank template lives on all data centers
super.loadDataCenters();
}
}
protected void initClusters(final List<StoragePool> dataCenters) {
AsyncDataProvider.getInstance().getClusterListByService(
new AsyncQuery<>(clusters -> {
List<Cluster> filteredClusters =
AsyncDataProvider.getInstance().filterByArchitecture(clusters,
selectedTemplate.getClusterArch());
getModel().setDataCentersAndClusters(getModel(),
dataCenters,
filteredClusters, selectedTemplate.getClusterId());
initCdImage();
}),
true,
false);
}
}