package org.ovirt.engine.core.vdsbroker.vdsbroker;
import java.util.Map;
import org.ovirt.engine.core.common.businessentities.Cluster;
import org.ovirt.engine.core.common.businessentities.SerialNumberPolicy;
import org.ovirt.engine.core.common.businessentities.VM;
import org.ovirt.engine.core.common.config.Config;
import org.ovirt.engine.core.common.config.ConfigValues;
public class VmSerialNumberBuilder {
private VM vm;
private Cluster cluster;
private Map<String, Object> createInfo;
public VmSerialNumberBuilder(VM vm, Cluster cluster, Map<String, Object> createInfo) {
this.vm = vm;
this.cluster = cluster;
this.createInfo = createInfo;
}
public void buildVmSerialNumber() {
if (vm.getSerialNumberPolicy() != null) {
setSerialNumber(getSerialNumberFromPolicy(vm.getSerialNumberPolicy(), vm.getCustomSerialNumber()));
} else {
buildVmSerialNumberFromCluster();
}
}
private void buildVmSerialNumberFromCluster() {
if (cluster.getSerialNumberPolicy() != null) {
setSerialNumber(getSerialNumberFromPolicy(cluster.getSerialNumberPolicy(), cluster.getCustomSerialNumber()));
} else {
buildVmSerialNumberFromConfig();
}
}
private void buildVmSerialNumberFromConfig() {
final SerialNumberPolicy policy = Config.getValue(ConfigValues.DefaultSerialNumberPolicy);
final String customSerialNumber = Config.getValue(ConfigValues.DefaultCustomSerialNumber);
setSerialNumber(getSerialNumberFromPolicy(policy, customSerialNumber));
}
private void setSerialNumber(String serialNumber) {
if (serialNumber != null) {
createInfo.put(VdsProperties.SERIAL_NUMBER, serialNumber);
}
}
private String getSerialNumberFromPolicy(SerialNumberPolicy serialNumberPolicy, String customSerialNumber) {
switch (serialNumberPolicy) {
default:
case HOST_ID:
return null;
case VM_ID:
return vm.getId().toString();
case CUSTOM:
return customSerialNumber;
}
}
}