package org.ovirt.engine.api.restapi.types;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
import org.ovirt.engine.api.common.util.StatusUtils;
import org.ovirt.engine.api.common.util.TimeZoneMapping;
import org.ovirt.engine.api.model.Boot;
import org.ovirt.engine.api.model.BootDevice;
import org.ovirt.engine.api.model.CPU;
import org.ovirt.engine.api.model.Cluster;
import org.ovirt.engine.api.model.CpuTopology;
import org.ovirt.engine.api.model.CustomProperties;
import org.ovirt.engine.api.model.CustomProperty;
import org.ovirt.engine.api.model.Display;
import org.ovirt.engine.api.model.DisplayType;
import org.ovirt.engine.api.model.Domain;
import org.ovirt.engine.api.model.GuestInfo;
import org.ovirt.engine.api.model.HighAvailability;
import org.ovirt.engine.api.model.Host;
import org.ovirt.engine.api.model.IP;
import org.ovirt.engine.api.model.IPs;
import org.ovirt.engine.api.model.OperatingSystem;
import org.ovirt.engine.api.model.OsType;
import org.ovirt.engine.api.model.Template;
import org.ovirt.engine.api.model.Usb;
import org.ovirt.engine.api.model.VM;
import org.ovirt.engine.api.model.VmAffinity;
import org.ovirt.engine.api.model.VmPlacementPolicy;
import org.ovirt.engine.api.model.VmMemoryPolicy;
import org.ovirt.engine.api.model.VmPool;
import org.ovirt.engine.api.model.VmStatus;
import org.ovirt.engine.api.model.VmType;
import org.ovirt.engine.core.common.action.RunVmOnceParams;
import org.ovirt.engine.core.common.businessentities.BootSequence;
import org.ovirt.engine.core.common.businessentities.MigrationSupport;
import org.ovirt.engine.core.common.businessentities.OriginType;
import org.ovirt.engine.core.common.businessentities.UsbPolicy;
import org.ovirt.engine.core.common.businessentities.VMStatus;
import org.ovirt.engine.core.common.businessentities.VmOsType;
import org.ovirt.engine.core.common.businessentities.VmStatic;
import org.ovirt.engine.core.common.businessentities.VmTemplate;
import org.ovirt.engine.core.compat.Guid;
import org.ovirt.engine.core.compat.NGuid;
import org.ovirt.engine.core.compat.StringHelper;
import org.ovirt.engine.api.restapi.utils.CustomPropertiesParser;
import static org.ovirt.engine.core.compat.NGuid.createGuidFromString;
public class VmMapper {
private static final String RHEV = "rhev";
private static final String ENGINE = "engine";
private static final int BYTES_PER_MB = 1024 * 1024;
// REVISIT retrieve from configuration
private static final int DEFAULT_MEMORY_SIZE = 10 * 1024;
// REVISIT once #712661 implemented by BE
@Mapping(from = VmTemplate.class, to = VmStatic.class)
public static VmStatic map(VmTemplate entity, VmStatic template) {
VmStatic staticVm = template != null ? template : new VmStatic();
staticVm.setId(NGuid.Empty);
staticVm.setvmt_guid(entity.getId());
staticVm.setdomain(entity.getdomain());
staticVm.setvds_group_id(entity.getvds_group_id());
staticVm.setmem_size_mb(entity.getmem_size_mb());
staticVm.setos(entity.getos());
staticVm.setnice_level(entity.getnice_level());
staticVm.setfail_back(entity.getfail_back());
staticVm.setauto_startup(entity.getauto_startup());
staticVm.setis_stateless(entity.getis_stateless());
staticVm.setauto_startup(entity.getauto_startup());
staticVm.setdefault_boot_sequence(entity.getdefault_boot_sequence());
staticVm.setvm_type(entity.getvm_type());
entity.setdefault_display_type(entity.getdefault_display_type());
staticVm.setiso_path(entity.getiso_path());
staticVm.setnum_of_sockets(entity.getnum_of_sockets());
staticVm.setcpu_per_socket(entity.getcpu_per_socket());
staticVm.setkernel_url(entity.getkernel_url());
staticVm.setkernel_params(entity.getkernel_params());
staticVm.setinitrd_url(entity.getinitrd_url());
staticVm.sethypervisor_type(entity.gethypervisor_type());
staticVm.settime_zone(entity.gettime_zone());
staticVm.setnum_of_monitors(entity.getnum_of_monitors());
staticVm.setpriority(entity.getpriority());
staticVm.setusb_policy(entity.getusb_policy());
return staticVm;
}
@Mapping(from = VM.class, to = VmStatic.class)
public static VmStatic map(VM vm, VmStatic template) {
VmStatic staticVm = template != null ? template : new VmStatic();
if (vm.isSetName()) {
staticVm.setvm_name(vm.getName());
}
if (vm.isSetId()) {
staticVm.setId(new Guid(vm.getId()));
}
if (vm.isSetDescription()) {
staticVm.setdescription(vm.getDescription());
}
if (vm.isSetMemory()) {
staticVm.setmem_size_mb((int) (vm.getMemory() / BYTES_PER_MB));
} else {
staticVm.setmem_size_mb(DEFAULT_MEMORY_SIZE);
}
if (vm.isSetTemplate() && vm.getTemplate().getId() != null) {
staticVm.setvmt_guid(new Guid(vm.getTemplate().getId()));
}
if (vm.isSetCluster() && vm.getCluster().getId() != null) {
staticVm.setvds_group_id(new Guid(vm.getCluster().getId()));
}
if (vm.isSetCpu() && vm.getCpu().isSetTopology()) {
if (vm.getCpu().getTopology().isSetCores()) {
staticVm.setcpu_per_socket(vm.getCpu().getTopology().getCores());
}
if (vm.getCpu().getTopology().isSetSockets()) {
staticVm.setnum_of_sockets(vm.getCpu().getTopology().getSockets());
}
}
if (vm.isSetOs()) {
if (vm.getOs().isSetType()) {
OsType osType = OsType.fromValue(vm.getOs().getType());
if (osType != null) {
staticVm.setos(map(osType, null));
}
}
if (vm.getOs().isSetBoot() && vm.getOs().getBoot().size() > 0) {
staticVm.setdefault_boot_sequence(map(vm.getOs().getBoot(), null));
}
if (vm.getOs().isSetKernel()) {
staticVm.setkernel_url(vm.getOs().getKernel());
}
if (vm.getOs().isSetInitrd()) {
staticVm.setinitrd_url(vm.getOs().getInitrd());
}
if (vm.getOs().isSetCmdline()) {
staticVm.setkernel_params(vm.getOs().getCmdline());
}
}
if (vm.isSetType()) {
VmType vmType = VmType.fromValue(vm.getType());
if (vmType != null) {
staticVm.setvm_type(map(vmType, null));
}
}
if (vm.isSetStateless()) {
staticVm.setis_stateless(vm.isStateless());
}
if (vm.isSetHighAvailability()) {
HighAvailability ha = vm.getHighAvailability();
if (ha.isSetEnabled()) {
staticVm.setauto_startup(ha.isEnabled());
}
if (ha.isSetPriority()) {
staticVm.setpriority(ha.getPriority());
}
}
if (vm.isSetOrigin()) {
staticVm.setorigin(map(vm.getOrigin(), (OriginType)null));
}
if (vm.isSetDisplay()) {
if (vm.getDisplay().isSetType()) {
DisplayType displayType = DisplayType.fromValue(vm.getDisplay().getType());
if (displayType != null) {
staticVm.setdefault_display_type(map(displayType, null));
}
}
if (vm.getDisplay().isSetMonitors()) {
staticVm.setnum_of_monitors(vm.getDisplay().getMonitors());
}
}
if (vm.isSetPlacementPolicy() && vm.getPlacementPolicy().isSetAffinity()) {
VmAffinity vmAffinity = VmAffinity.fromValue(vm.getPlacementPolicy().getAffinity());
if (vmAffinity!=null) {
staticVm.setMigrationSupport(map(vmAffinity, null));
}
}
if (vm.isSetPlacementPolicy() && vm.getPlacementPolicy().isSetHost()) {
staticVm.setdedicated_vm_for_vds(createGuidFromString(vm.getPlacementPolicy().getHost().getId()));
}
if (vm.isSetDomain() && vm.getDomain().isSetName()) {
staticVm.setdomain(vm.getDomain().getName());
}
if (vm.isSetMemoryPolicy() && vm.getMemoryPolicy().isSetGuaranteed()) {
Long memGuaranteed = vm.getMemoryPolicy().getGuaranteed() / BYTES_PER_MB;
staticVm.setMinAllocatedMem(memGuaranteed.intValue());
}
if (vm.isSetTimezone()) {
staticVm.settime_zone(TimeZoneMapping.getWindows(vm.getTimezone()));
}
if (vm.isSetCustomProperties() && vm.getCustomProperties().isSetCustomProperty()) {
staticVm.setCustomProperties(CustomPropertiesParser.parse(vm.getCustomProperties().getCustomProperty()));
}
if (vm.isSetUsb() && vm.getUsb().isSetEnabled()) {
staticVm.setusb_policy(vm.getUsb().isEnabled() ? UsbPolicy.Enabled : UsbPolicy.Disabled);
}
return staticVm;
}
@Mapping(from = VmAffinity.class, to = MigrationSupport.class)
public static MigrationSupport map(VmAffinity vmAffinity, MigrationSupport template) {
if(vmAffinity!=null){
switch (vmAffinity) {
case MIGRATABLE:
return MigrationSupport.MIGRATABLE;
case USER_MIGRATABLE:
return MigrationSupport.IMPLICITLY_NON_MIGRATABLE;
case PINNED:
return MigrationSupport.PINNED_TO_HOST;
default:
return null;
}
}
return null;
}
@Mapping(from = MigrationSupport.class, to = VmAffinity.class)
public static VmAffinity map(MigrationSupport migrationSupport, VmAffinity template) {
if(migrationSupport!=null){
switch (migrationSupport) {
case MIGRATABLE:
return VmAffinity.MIGRATABLE;
case IMPLICITLY_NON_MIGRATABLE:
return VmAffinity.USER_MIGRATABLE;
case PINNED_TO_HOST:
return VmAffinity.PINNED;
default:
return null;
}
}
return null;
}
@Mapping(from = org.ovirt.engine.core.common.businessentities.VM.class, to = org.ovirt.engine.api.model.VM.class)
public static VM map(org.ovirt.engine.core.common.businessentities.VM entity, VM template) {
VM model = template != null ? template : new VM();
model.setId(entity.getvm_guid().toString());
model.setName(entity.getvm_name());
model.setDescription(entity.getvm_description());
model.setMemory((long) entity.getmem_size_mb() * BYTES_PER_MB);
if (entity.getvmt_guid() != null) {
model.setTemplate(new Template());
model.getTemplate().setId(entity.getvmt_guid().toString());
}
if (entity.getstatus() != null) {
model.setStatus(StatusUtils.create(map(entity.getstatus(), null)));
if (entity.getstatus()==VMStatus.Paused) {
model.getStatus().setDetail(entity.getVmPauseStatus().name().toLowerCase());
}
}
if (entity.getvm_os() != null ||
entity.getboot_sequence() != null ||
entity.getkernel_url() != null ||
entity.getinitrd_url() != null ||
entity.getkernel_params() != null) {
OperatingSystem os = new OperatingSystem();
if (entity.getvm_os() != null) {
OsType osType = VmMapper.map(entity.getos(), null);
if (osType != null) {
os.setType(osType.value());
}
}
if (entity.getboot_sequence() != null) {
for (Boot boot : map(entity.getdefault_boot_sequence(), null)) {
os.getBoot().add(boot);
}
}
os.setKernel(entity.getkernel_url());
os.setInitrd(entity.getinitrd_url());
os.setCmdline(entity.getkernel_params());
model.setOs(os);
}
if (entity.getvds_group_id() != null) {
Cluster cluster = new Cluster();
cluster.setId(entity.getvds_group_id().toString());
model.setCluster(cluster);
}
CpuTopology topology = new CpuTopology();
topology.setSockets(entity.getnum_of_sockets());
topology.setCores(entity.getnum_of_cpus() / entity.getnum_of_sockets());
model.setCpu(new CPU());
model.getCpu().setTopology(topology);
if (entity.getVmPoolId() != null) {
VmPool pool = new VmPool();
pool.setId(entity.getVmPoolId().toString());
model.setVmPool(pool);
}
if (entity.getrun_on_vds() != null) {
model.setHost(new Host());
model.getHost().setId(entity.getrun_on_vds().toString());
}
if (entity.getdisplay_type() != null) {
model.setDisplay(new Display());
model.getDisplay().setType(map(entity.getdisplay_type(), null));
model.getDisplay().setAddress(entity.getdisplay_ip());
Integer displayPort = entity.getdisplay();
model.getDisplay().setPort(displayPort==null || displayPort==-1 ? null : displayPort);
Integer displaySecurePort = entity.getdisplay_secure_port();
model.getDisplay().setSecurePort(displaySecurePort==null || displaySecurePort==-1 ? null : displaySecurePort);
model.getDisplay().setMonitors(entity.getnum_of_monitors());
}
model.setType(map(entity.getvm_type(), null));
model.setStateless(entity.getis_stateless());
model.setHighAvailability(new HighAvailability());
model.getHighAvailability().setEnabled(entity.getauto_startup());
model.getHighAvailability().setPriority(entity.getpriority());
if (entity.getorigin() != null) {
model.setOrigin(map(entity.getorigin(), null));
}
if (entity.getvm_creation_date() != null) {
model.setCreationTime(DateMapper.map(entity.getvm_creation_date(), null));
}
if (entity.getelapsed_time() != null) {
model.setStartTime(DateMapper.map(new BigDecimal(entity.getelapsed_time()), null));
}
model.setPlacementPolicy(new VmPlacementPolicy());
if(entity.getdedicated_vm_for_vds() !=null){
model.getPlacementPolicy().setHost(new Host());
model.getPlacementPolicy().getHost().setId(entity.getdedicated_vm_for_vds().toString());
}
VmAffinity vmAffinity = map(entity.getMigrationSupport(),null);
if(vmAffinity !=null){
model.getPlacementPolicy().setAffinity(vmAffinity.value());
}
if (entity.getvm_domain()!=null && !entity.getvm_domain().isEmpty()) {
Domain domain = new Domain();
domain.setName(entity.getvm_domain());
model.setDomain(domain);
}
if (entity.getvm_ip()!=null && !entity.getvm_ip().isEmpty()) {
model.setGuestInfo(new GuestInfo());
model.getGuestInfo().setIps(new IPs());
for (String item : entity.getvm_ip().split(" ")) {
if (!item.equals("")) {
IP ip = new IP();
ip.setAddress(item.trim());
model.getGuestInfo().getIps().getIPs().add(ip);
}
}
}
VmMemoryPolicy policy = new VmMemoryPolicy();
policy.setGuaranteed(new Long(entity.getMinAllocatedMem()) * BYTES_PER_MB);
model.setMemoryPolicy(policy);
model.setTimezone(TimeZoneMapping.getJava(entity.gettime_zone()));
if (!StringHelper.isNullOrEmpty(entity.getCustomProperties())) {
CustomProperties hooks = new CustomProperties();
hooks.getCustomProperty().addAll(CustomPropertiesParser.parse(entity.getCustomProperties(), false));
model.setCustomProperties(hooks);
}
if (entity.getusb_policy()!=null) {
Usb usb = new Usb();
usb.setEnabled(entity.getusb_policy()==UsbPolicy.Enabled ? true : false);
model.setUsb(usb);
}
return model;
}
@Mapping(from = VM.class, to = RunVmOnceParams.class)
public static RunVmOnceParams map(VM vm, RunVmOnceParams template) {
RunVmOnceParams params = template != null ? template : new RunVmOnceParams();
if (vm.isSetStateless() && vm.isStateless()) {
params.setRunAsStateless(true);
}
if (vm.isSetDisplay() && vm.getDisplay().isSetType()) {
DisplayType displayType = DisplayType.fromValue(vm.getDisplay().getType());
if (displayType != null) {
params.setUseVnc(displayType == DisplayType.VNC);
}
}
if (vm.isSetOs() && vm.getOs().getBoot().size() > 0) {
params.setBootSequence(map(vm.getOs().getBoot(), null));
}
if (vm.isSetCdroms() && vm.getCdroms().isSetCdRoms()) {
String file = vm.getCdroms().getCdRoms().get(0).getFile().getId();
if (file != null) {
params.setDiskPath(file);
}
}
if (vm.isSetFloppies() && vm.getFloppies().isSetFloppies()) {
String file = vm.getFloppies().getFloppies().get(0).getFile().getId();
if (file != null) {
params.setFloppyPath(file);
}
}
if (vm.isSetCustomProperties() && vm.getCustomProperties().isSetCustomProperty()) {
params.setCustomProperties(CustomPropertiesParser.parse(vm.getCustomProperties().getCustomProperty()));
}
if (vm.isSetOs()) {
if (vm.getOs().isSetBoot() && vm.getOs().getBoot().size() > 0) {
params.setBootSequence(map(vm.getOs().getBoot(), null));
}
if (vm.getOs().isSetKernel()) {
params.setkernel_url(vm.getOs().getKernel());
}
if (vm.getOs().isSetInitrd()) {
params.setinitrd_url(vm.getOs().getInitrd());
}
if (vm.getOs().isSetCmdline()) {
params.setkernel_params(vm.getOs().getCmdline());
}
}
if (vm.isSetDomain() && vm.getDomain().isSetName()) {
params.setSysPrepDomainName(vm.getDomain().getName());
if (vm.getDomain().isSetUser()) {
if (vm.getDomain().getUser().isSetUserName()) {
params.setSysPrepUserName(vm.getDomain().getUser().getUserName());
}
if (vm.getDomain().getUser().isSetPassword()) {
params.setSysPrepPassword(vm.getDomain().getUser().getPassword());
}
}
}
return params;
}
@Mapping(from = String.class, to = CustomProperties.class)
public static CustomProperties map(String entity, CustomProperties template) {
CustomProperties model = template != null ? template : new CustomProperties();
if (entity != null) {
for (String envStr : entity.split(";", -1)) {
String[] parts = envStr.split("=", -1);
if (parts.length >= 1) {
CustomProperty env = new CustomProperty();
env.setName(parts[0]);
if (parts.length == 1) {
env.setValue(parts[1]);
}
model.getCustomProperty().add(env);
}
}
}
return model;
}
@Mapping(from = CustomProperties.class, to = String.class)
public static String map(CustomProperties model, String template) {
StringBuilder buf = template != null ? new StringBuilder(template) : new StringBuilder();
for (CustomProperty env : model.getCustomProperty()) {
String envStr = map(env, null);
if (envStr != null) {
if (buf.length() > 0) {
buf.append(";");
}
buf.append(envStr);
}
}
return buf.toString();
}
@Mapping(from = CustomProperty.class, to = String.class)
public static String map(CustomProperty model, String template) {
if (model.isSetName()) {
String ret = model.getName() + "=";
if (model.isSetValue()) {
ret += model.getValue();
}
return ret;
} else {
return template;
}
}
@Mapping(from = VmType.class, to = org.ovirt.engine.core.common.businessentities.VmType.class)
public static org.ovirt.engine.core.common.businessentities.VmType map(VmType type,
org.ovirt.engine.core.common.businessentities.VmType incoming) {
switch (type) {
case DESKTOP:
return org.ovirt.engine.core.common.businessentities.VmType.Desktop;
case SERVER:
return org.ovirt.engine.core.common.businessentities.VmType.Server;
default:
return null;
}
}
@Mapping(from = org.ovirt.engine.core.common.businessentities.VmType.class, to = String.class)
public static String map(org.ovirt.engine.core.common.businessentities.VmType type, String incoming) {
switch (type) {
case Desktop:
return VmType.DESKTOP.value();
case Server:
return VmType.SERVER.value();
default:
return null;
}
}
@Mapping(from = DisplayType.class, to = org.ovirt.engine.core.common.businessentities.DisplayType.class)
public static org.ovirt.engine.core.common.businessentities.DisplayType map(DisplayType type, org.ovirt.engine.core.common.businessentities.DisplayType incoming) {
switch(type) {
case VNC:
return org.ovirt.engine.core.common.businessentities.DisplayType.vnc;
case SPICE:
return org.ovirt.engine.core.common.businessentities.DisplayType.qxl;
default:
return null;
}
}
@Mapping(from = org.ovirt.engine.core.common.businessentities.DisplayType.class, to = String.class)
public static String map(org.ovirt.engine.core.common.businessentities.DisplayType type, String incoming) {
switch(type) {
case vnc:
return DisplayType.VNC.value();
case qxl:
return DisplayType.SPICE.value();
default:
return null;
}
}
@Mapping(from = String.class, to = OriginType.class)
public static OriginType map(String type, OriginType incoming) {
try {
return type.equals(RHEV) ? OriginType.valueOf(ENGINE.toUpperCase()) : OriginType.valueOf(type.toUpperCase());
} catch (IllegalArgumentException e) {
return null;
}
}
@Mapping(from = OriginType.class, to = String.class)
public static String map(OriginType type, String incoming) {
String typeStr = type.name().toLowerCase();
return typeStr.equals(ENGINE) ? RHEV : typeStr;
}
@Mapping(from = VMStatus.class, to = VmStatus.class)
public static VmStatus map(VMStatus entityStatus, VmStatus template) {
switch (entityStatus) {
case Unassigned: return VmStatus.UNASSIGNED;
case Down: return VmStatus.DOWN;
case Up: return VmStatus.UP;
case PoweringUp: return VmStatus.POWERING_UP;
case PoweredDown: return VmStatus.POWERED_DOWN;
case Paused: return VmStatus.PAUSED;
case MigratingFrom: return VmStatus.MIGRATING;
case MigratingTo: return VmStatus.MIGRATING;
case Unknown: return VmStatus.UNKNOWN;
case NotResponding: return VmStatus.NOT_RESPONDING;
case WaitForLaunch: return VmStatus.WAIT_FOR_LAUNCH;
case RebootInProgress: return VmStatus.REBOOT_IN_PROGRESS;
case SavingState: return VmStatus.SAVING_STATE;
case RestoringState: return VmStatus.RESTORING_STATE;
case Suspended: return VmStatus.SUSPENDED;
case ImageLocked: return VmStatus.IMAGE_LOCKED;
case PoweringDown: return VmStatus.POWERING_DOWN;
default: return null;
}
}
@Mapping(from = BootSequence.class, to = List.class)
public static List<Boot> map(BootSequence bootSequence,
List<Boot> template) {
List<Boot> boots = template != null ? template
: new ArrayList<Boot>();
switch (bootSequence) {
case C:
boots.add(getBoot(BootDevice.HD));
break;
case DC:
boots.add(getBoot(BootDevice.CDROM));
boots.add(getBoot(BootDevice.HD));
break;
case N:
boots.add(getBoot(BootDevice.NETWORK));
break;
case CDN:
boots.add(getBoot(BootDevice.HD));
boots.add(getBoot(BootDevice.CDROM));
boots.add(getBoot(BootDevice.NETWORK));
break;
case CND:
boots.add(getBoot(BootDevice.HD));
boots.add(getBoot(BootDevice.NETWORK));
boots.add(getBoot(BootDevice.CDROM));
break;
case DCN:
boots.add(getBoot(BootDevice.CDROM));
boots.add(getBoot(BootDevice.HD));
boots.add(getBoot(BootDevice.NETWORK));
break;
case DNC:
boots.add(getBoot(BootDevice.CDROM));
boots.add(getBoot(BootDevice.NETWORK));
boots.add(getBoot(BootDevice.HD));
break;
case NCD:
boots.add(getBoot(BootDevice.NETWORK));
boots.add(getBoot(BootDevice.HD));
boots.add(getBoot(BootDevice.CDROM));
break;
case NDC:
boots.add(getBoot(BootDevice.NETWORK));
boots.add(getBoot(BootDevice.CDROM));
boots.add(getBoot(BootDevice.HD));
break;
case CD:
boots.add(getBoot(BootDevice.HD));
boots.add(getBoot(BootDevice.CDROM));
break;
case D:
boots.add(getBoot(BootDevice.CDROM));
break;
case CN:
boots.add(getBoot(BootDevice.HD));
boots.add(getBoot(BootDevice.NETWORK));
break;
case DN:
boots.add(getBoot(BootDevice.CDROM));
boots.add(getBoot(BootDevice.NETWORK));
break;
case NC:
boots.add(getBoot(BootDevice.NETWORK));
boots.add(getBoot(BootDevice.HD));
break;
case ND:
boots.add(getBoot(BootDevice.NETWORK));
boots.add(getBoot(BootDevice.CDROM));
break;
}
return boots;
}
private static Boot getBoot(BootDevice device) {
Boot boot = new Boot();
boot.setDev(device.value());
return boot;
}
@Mapping(from = Boot.class, to = List.class)
public static BootSequence map(List<Boot> boot, BootSequence template) {
Set<BootDevice> devSet = new LinkedHashSet<BootDevice>();
for (Boot b : boot) {
if (b.isSetDev()) {
BootDevice dev = BootDevice.fromValue(b.getDev());
if (dev != null) {
devSet.add(dev);
}
}
}
List<BootDevice> devs = new ArrayList<BootDevice>(devSet);
if (devs.size() == 1) {
switch (devs.get(0)) {
case CDROM:
return BootSequence.D;
case HD:
return BootSequence.C;
case NETWORK:
return BootSequence.N;
}
} else if (devs.size() == 2) {
switch (devs.get(0)) {
case CDROM:
switch (devs.get(1)) {
case HD:
return BootSequence.DC;
case NETWORK:
return BootSequence.DN;
}
break;
case HD:
switch (devs.get(1)) {
case CDROM:
return BootSequence.CD;
case NETWORK:
return BootSequence.CN;
}
break;
case NETWORK:
switch (devs.get(1)) {
case HD:
return BootSequence.NC;
case CDROM:
return BootSequence.ND;
}
break;
}
} else if (devs.size() == 3) {
switch (devs.get(0)) {
case CDROM:
switch (devs.get(1)) {
case HD:
return BootSequence.DCN;
case NETWORK:
return BootSequence.DNC;
}
break;
case HD:
switch (devs.get(1)) {
case CDROM:
return BootSequence.CDN;
case NETWORK:
return BootSequence.CND;
}
break;
case NETWORK:
switch (devs.get(1)) {
case HD:
return BootSequence.NCD;
case CDROM:
return BootSequence.NDC;
}
break;
}
}
return null;
}
@Mapping(from = VmOsType.class, to = OsType.class)
public static OsType map(VmOsType type, OsType incoming) {
switch (type) {
case Unassigned:
return OsType.UNASSIGNED;
case WindowsXP:
return OsType.WINDOWS_XP;
case Windows2003:
return OsType.WINDOWS_2003;
case Windows2008:
return OsType.WINDOWS_2008;
case Other:
return OsType.OTHER;
case OtherLinux:
return OsType.OTHER_LINUX;
case RHEL5:
return OsType.RHEL_5;
case RHEL4:
return OsType.RHEL_4;
case RHEL3:
return OsType.RHEL_3;
case Windows2003x64:
return OsType.WINDOWS_2003X64;
case Windows7:
return OsType.WINDOWS_7;
case Windows7x64:
return OsType.WINDOWS_7X64;
case RHEL5x64:
return OsType.RHEL_5X64;
case RHEL4x64:
return OsType.RHEL_4X64;
case RHEL3x64:
return OsType.RHEL_3X64;
case Windows2008x64:
return OsType.WINDOWS_2008X64;
case Windows2008R2x64:
return OsType.WINDOWS_2008R2;
case RHEL6:
return OsType.RHEL_6;
case RHEL6x64:
return OsType.RHEL_6X64;
default:
return null;
}
}
@Mapping(from = OsType.class, to = VmOsType.class)
public static VmOsType map(OsType type, VmOsType incoming) {
switch (type) {
case UNASSIGNED:
return VmOsType.Unassigned;
case WINDOWS_XP:
return VmOsType.WindowsXP;
case WINDOWS_2003:
return VmOsType.Windows2003;
case WINDOWS_2008:
return VmOsType.Windows2008;
case OTHER:
return VmOsType.Other;
case OTHER_LINUX:
return VmOsType.OtherLinux;
case RHEL_5:
return VmOsType.RHEL5;
case RHEL_4:
return VmOsType.RHEL4;
case RHEL_3:
return VmOsType.RHEL3;
case WINDOWS_2003X64:
return VmOsType.Windows2003x64;
case WINDOWS_7:
return VmOsType.Windows7;
case WINDOWS_7X64:
return VmOsType.Windows7x64;
case RHEL_5X64:
return VmOsType.RHEL5x64;
case RHEL_4X64:
return VmOsType.RHEL4x64;
case RHEL_3X64:
return VmOsType.RHEL3x64;
case WINDOWS_2008X64:
return VmOsType.Windows2008x64;
case WINDOWS_2008R2:
return VmOsType.Windows2008R2x64;
case RHEL_6:
return VmOsType.RHEL6;
case RHEL_6X64:
return VmOsType.RHEL6x64;
default:
return null;
}
}
}