package org.ovirt.engine.core.bll;
import javax.enterprise.context.RequestScoped;
import javax.inject.Inject;
import org.apache.commons.lang.StringUtils;
import org.ovirt.engine.core.common.businessentities.Cluster;
import org.ovirt.engine.core.common.businessentities.VM;
import org.ovirt.engine.core.common.errors.EngineMessage;
@RequestScoped
public class UnsupportedVmCpuClusterEditChecker implements ClusterEditChecker<VM> {
private String newCpuName;
@Inject
private CpuFlagsManagerHandler cpuFlagsManagerHandler;
@Override
public boolean isApplicable(Cluster oldCluster, Cluster newCluster) {
newCpuName = newCluster.getCpuName();
final String oldCpuName = oldCluster.getCpuName();
return newCpuName != null && !newCpuName.equals(oldCpuName);
}
@Override
public boolean check(VM vm) {
if (newCpuName == null) {
throw new IllegalStateException("check() called before isApplicable()");
}
if (!StringUtils.isEmpty(vm.getCustomCpuName())) {
String vmCpuName = cpuFlagsManagerHandler.getCpuNameByCpuId(vm.getCustomCpuName(), cpuFlagsManagerHandler.getLatestDictionaryVersion());
if (vmCpuName == null || cpuFlagsManagerHandler.compareCpuLevels(vmCpuName, newCpuName, cpuFlagsManagerHandler.getLatestDictionaryVersion()) > 0) {
return false;
}
}
return true;
}
@Override
public String getMainMessage() {
return EngineMessage.CLUSTER_WARN_VM_DUE_TO_DECREASED_CLUSTER_CPU_LEVEL.name();
}
@Override
public String getDetailMessage(VM vm) {
return vm.getCustomCpuName();
}
}