package org.ovirt.engine.ui.uicommonweb.models.vms.instancetypes; import org.ovirt.engine.core.common.businessentities.VM; import org.ovirt.engine.core.common.businessentities.VmBase; import org.ovirt.engine.core.common.businessentities.VmTemplate; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.ui.uicommonweb.models.templates.LatestVmTemplate; import org.ovirt.engine.ui.uicommonweb.models.vms.CustomInstanceType; import org.ovirt.engine.ui.uicommonweb.models.vms.UnitVmModel; public class ExistingPoolInstanceTypeManager extends InstanceTypeManager { private VM pool; public ExistingPoolInstanceTypeManager(UnitVmModel model, VM pool) { super(model); this.pool = pool; } @Override protected void doUpdateManagedFieldsFrom(VmBase vmBase) { boolean numOfSocketsChangable = getModel().getNumOfSockets().getIsChangable(); boolean coresPerSocket = getModel().getCoresPerSocket().getIsChangable(); boolean threadsPerCore = getModel().getThreadsPerCore().getIsChangable(); super.doUpdateManagedFieldsFrom(vmBase); deactivate(); getModel().getNumOfSockets().setIsChangeable(numOfSocketsChangable); getModel().getCoresPerSocket().setIsChangeable(coresPerSocket); getModel().getThreadsPerCore().setIsChangeable(threadsPerCore); activate(); } @Override protected VmBase getSource() { boolean customInstanceTypeUsed = getModel().getInstanceTypes() != null && getModel().getInstanceTypes().getSelectedItem() instanceof CustomInstanceType; if (!customInstanceTypeUsed) { return (VmBase) getModel().getInstanceTypes().getSelectedItem(); } if (getModel().getTemplateWithVersion() == null || getModel().getTemplateWithVersion().getSelectedItem() == null || getModel().getTemplateWithVersion().getSelectedItem().getTemplateVersion() == null) { return pool.getStaticData(); } VmTemplate template = getModel().getTemplateWithVersion().getSelectedItem().getTemplateVersion(); boolean isLatestPropertyChanged = pool.isUseLatestVersion() != (template instanceof LatestVmTemplate); // template ID changed but latest is not set, as it would cause false-positives boolean isTemplateIdChangedSinceInit = !pool.getVmtGuid().equals(template.getId()) && !pool.isUseLatestVersion(); if (isTemplateIdChangedSinceInit || isLatestPropertyChanged) { return template; } return pool.getStaticData(); } @Override protected Guid getSelectedInstanceTypeId() { return super.getSelectedInstanceTypeId() == null ? pool.getInstanceTypeId() : super.getSelectedInstanceTypeId(); } protected void maybeSetSingleQxlPci(VmBase vmBase) { maybeSetEntity(getModel().getIsSingleQxlEnabled(), pool.getSingleQxlPci()); getModel().getIsSingleQxlEnabled().setEntity(pool.getSingleQxlPci() && getModel().getIsQxlSupported()); } }