Martin Betak has uploaded a new change for review.

Change subject: restapi: Refactor VM and Template mappers
......................................................................

restapi: Refactor VM and Template mappers

Refactor VmMapper and TemplateMapper classe and extract common set of
field mappings to newly created VmBaseMapper class.

Also introduce new base resource class VmBase from which the VM and
Template are derived similarly as they are implemented on the backend.

Change-Id: Iddd80e10360234d75d142f224ecb8ad920fbf282
Signed-off-by: Martin Betak <mbe...@redhat.com>
---
M 
backend/manager/modules/restapi/interface/definition/src/main/resources/api.xsd
M 
backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/TemplateMapper.java
A 
backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/VmBaseMapper.java
M 
backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/VmMapper.java
M 
backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/VmMapperTest.java
5 files changed, 305 insertions(+), 593 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/89/30189/1

diff --git 
a/backend/manager/modules/restapi/interface/definition/src/main/resources/api.xsd
 
b/backend/manager/modules/restapi/interface/definition/src/main/resources/api.xsd
index 5ff3af2..173db62 100644
--- 
a/backend/manager/modules/restapi/interface/definition/src/main/resources/api.xsd
+++ 
b/backend/manager/modules/restapi/interface/definition/src/main/resources/api.xsd
@@ -2607,38 +2607,11 @@
 
   <xs:complexType name="Template">
     <xs:complexContent>
-      <xs:extension base="BaseResource">
+      <xs:extension base="VmBase">
         <xs:sequence>
           <xs:element ref="vm" minOccurs="0" maxOccurs="1"/>
-          <xs:element name="type" type="xs:string" minOccurs="0"/>
-          <xs:element ref="status" minOccurs="0" maxOccurs="1"/>
-          <xs:element name="memory" type="xs:long" minOccurs="0"/>
-          <xs:element name="cpu" type="CPU" minOccurs="0"/>
-          <xs:element name="cpu_shares" type="xs:int" minOccurs="0" 
maxOccurs="1"/>
-          <xs:element name="bios" type="Bios" minOccurs="0" maxOccurs="1" />
-          <xs:element name="os" type="OperatingSystem" minOccurs="0"/>
-          <xs:element ref="cluster" minOccurs="0" maxOccurs="1"/>
-          <xs:element ref="storage_domain" minOccurs="0" maxOccurs="1"/>
-          <xs:element name="creation_time" type="xs:dateTime" minOccurs="0"/>
-          <xs:element name="origin" type="xs:string" minOccurs="0"/>
-          <xs:element name="high_availability" type="HighAvailability" 
minOccurs="0"/>
-          <xs:element name="display" type="Display" minOccurs="0" 
maxOccurs="1"/>
-          <xs:element name="stateless" type="xs:boolean" minOccurs="0"/>
-          <xs:element name="delete_protected" type="xs:boolean" minOccurs="0"/>
-          <xs:element ref="sso" minOccurs="0" maxOccurs="1"/>
-          <xs:element ref="rng_device" minOccurs="0" maxOccurs="1"/>
-          <xs:element ref="console" minOccurs="0" maxOccurs="1"/>
-          <xs:element name="timezone" type="xs:string" minOccurs="0" 
maxOccurs="1"/>
-          <xs:element ref="domain" minOccurs="0" maxOccurs="1"/>
-          <xs:element ref="usb" minOccurs="0" maxOccurs="1"/>
-          <xs:element name="tunnel_migration" type="xs:boolean" minOccurs="0" 
maxOccurs="1"/>
-          <xs:element name="migration_downtime" type="xs:int" minOccurs="0" 
maxOccurs="1" />
-          <xs:element ref="virtio_scsi" minOccurs="0" maxOccurs="1"/>
-          <xs:element ref="permissions" minOccurs="0" maxOccurs="1"/>
           <!-- also rel="cdroms/disks/nics/watchdogs" links, see Devices below 
-->
           <xs:element name="version" type="TemplateVersion" minOccurs="0" 
maxOccurs="1"/>
-          <xs:element ref="serial_number" minOccurs="0" maxOccurs="1" />
-          <xs:element name="start_paused" type="xs:boolean" minOccurs="0" 
maxOccurs="1" />
         </xs:sequence>
       </xs:extension>
     </xs:complexContent>
@@ -3000,6 +2973,42 @@
     </xs:sequence>
   </xs:complexType>
 
+  <xs:complexType name="VmBase">
+    <xs:complexContent>
+      <xs:extension base="BaseResource">
+        <xs:sequence>
+          <xs:element name="type" type="xs:string" minOccurs="0"/>
+          <xs:element ref="status" minOccurs="0" maxOccurs="1"/>
+          <xs:element name="memory" type="xs:long" minOccurs="0"/>
+          <xs:element name="cpu" type="CPU" minOccurs="0"/>
+          <xs:element name="cpu_shares" type="xs:int" minOccurs="0" 
maxOccurs="1"/>
+          <xs:element name="bios" type="Bios" minOccurs="0" maxOccurs="1" />
+          <xs:element name="os" type="OperatingSystem" minOccurs="0"/>
+          <xs:element ref="cluster" minOccurs="0" maxOccurs="1"/>
+          <xs:element ref="storage_domain" minOccurs="0" maxOccurs="1"/>
+          <xs:element name="creation_time" type="xs:dateTime" minOccurs="0"/>
+          <xs:element name="origin" type="xs:string" minOccurs="0"/>
+          <xs:element name="stateless" type="xs:boolean" minOccurs="0"/>
+          <xs:element name="delete_protected" type="xs:boolean" minOccurs="0"/>
+          <xs:element name="high_availability" type="HighAvailability" 
minOccurs="0"/>
+          <xs:element name="display" type="Display" minOccurs="0" 
maxOccurs="1"/>
+          <xs:element ref="sso" minOccurs="0" maxOccurs="1"/>
+          <xs:element ref="rng_device" minOccurs="0" maxOccurs="1"/>
+          <xs:element ref="console" minOccurs="0" maxOccurs="1"/>
+          <xs:element name="timezone" type="xs:string" minOccurs="0" 
maxOccurs="1"/>
+          <xs:element ref="domain" minOccurs="0" maxOccurs="1"/>
+          <xs:element ref="usb" minOccurs="0" maxOccurs="1"/>
+          <xs:element name="tunnel_migration" type="xs:boolean" minOccurs="0" 
maxOccurs="1"/>
+          <xs:element name="migration_downtime" type="xs:int" minOccurs="0" 
maxOccurs="1" />
+          <xs:element ref="virtio_scsi" minOccurs="0" maxOccurs="1"/>
+          <xs:element ref="permissions" minOccurs="0" maxOccurs="1"/>
+          <xs:element ref="serial_number" minOccurs="0" maxOccurs="1" />
+          <xs:element name="start_paused" type="xs:boolean" minOccurs="0" 
maxOccurs="1" />
+        </xs:sequence>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+
   <xs:element name="vms" type="VMs"/>
   <xs:element name="vm" type="VM"/>
 
@@ -3010,34 +3019,14 @@
       </xs:appinfo>
     </xs:annotation>
     <xs:complexContent>
-      <xs:extension base="BaseResource">
+      <xs:extension base="VmBase">
         <xs:sequence>
-          <xs:element name="type" type="xs:string" minOccurs="0"/>
-          <xs:element ref="status" minOccurs="0" maxOccurs="1"/>
           <xs:element name="stop_reason" type="xs:string" minOccurs="0" 
maxOccurs="1"/>
-          <xs:element name="memory" type="xs:long" minOccurs="0"/>
-          <xs:element name="cpu" type="CPU" minOccurs="0"/>
-          <xs:element name="cpu_shares" type="xs:int" minOccurs="0" 
maxOccurs="1"/>
-          <xs:element name="bios" type="Bios" minOccurs="0" maxOccurs="1" />
-          <xs:element name="os" type="OperatingSystem" minOccurs="0"/>
-          <xs:element name="high_availability" type="HighAvailability" 
minOccurs="0"/>
-          <xs:element name="display" type="Display" minOccurs="0" 
maxOccurs="1"/>
           <xs:element ref="host" minOccurs="0" maxOccurs="1"/>
-          <xs:element ref="cluster" minOccurs="0" maxOccurs="1"/>
           <xs:element ref="template" minOccurs="0" maxOccurs="1"/>
           <xs:element ref="instance_type" minOccurs="0" maxOccurs="1"/>
-          <xs:element ref="storage_domain" minOccurs="0" maxOccurs="1"/>
           <xs:element name="start_time" type="xs:dateTime" minOccurs="0"/>
           <xs:element name="stop_time" type="xs:dateTime" minOccurs="0"/>
-          <xs:element name="creation_time" type="xs:dateTime" minOccurs="0"/>
-          <xs:element name="origin" type="xs:string" minOccurs="0"/>
-          <xs:element name="stateless" type="xs:boolean" minOccurs="0"/>
-          <xs:element name="delete_protected" type="xs:boolean" minOccurs="0"/>
-          <xs:element ref="sso" minOccurs="0" maxOccurs="1"/>
-          <xs:element ref="rng_device" minOccurs="0" maxOccurs="1"/>
-          <xs:element ref="console" minOccurs="0" maxOccurs="1"/>
-          <xs:element name="timezone" type="xs:string" minOccurs="0" 
maxOccurs="1"/>
-          <xs:element ref="domain" minOccurs="0" maxOccurs="1"/>
           <xs:element name="custom_properties" type="CustomProperties" 
minOccurs="0"/>
           <xs:element name="payloads" type="Payloads" minOccurs="0"/>
           <xs:element name="statistics" type="Statistics" minOccurs="0" 
maxOccurs="1"/>
@@ -3050,11 +3039,6 @@
           <xs:element name="memory_policy" type="MemoryPolicy" minOccurs="0" 
maxOccurs="1"/>
           <xs:element name="guest_info" type="GuestInfo" minOccurs="0" 
maxOccurs="1"/>
           <xs:element ref="quota" minOccurs="0" maxOccurs="1"/>
-          <xs:element ref="usb" minOccurs="0" maxOccurs="1"/>
-          <xs:element name="tunnel_migration" type="xs:boolean" minOccurs="0" 
maxOccurs="1"/>
-          <xs:element name="migration_downtime" type="xs:int" minOccurs="0" 
maxOccurs="1" />
-          <xs:element ref="virtio_scsi" minOccurs="0" maxOccurs="1"/>
-          <xs:element ref="permissions" minOccurs="0" maxOccurs="1"/>
           <xs:element ref="vmpool" minOccurs="0" maxOccurs="1">
             <xs:annotation>
               <xs:appinfo>
@@ -3074,10 +3058,8 @@
           <xs:element ref="reported_devices" minOccurs="0" maxOccurs="1"/>
           <xs:element ref="watchdogs" minOccurs="0" maxOccurs="1"/>
           <xs:element name="use_latest_template_version" type="xs:boolean" 
minOccurs="0" maxOccurs="1"/>
-          <xs:element ref="serial_number" minOccurs="0" maxOccurs="1" />
           <xs:element name="next_run_configuration_exists" type="xs:boolean" 
minOccurs="0" maxOccurs="1"/>
           <xs:element name="numa_tune_mode" type="xs:string" minOccurs="0" 
maxOccurs="1"/>
-          <xs:element name="start_paused" type="xs:boolean" minOccurs="0" 
maxOccurs="1" />
         </xs:sequence>
       </xs:extension>
     </xs:complexContent>
diff --git 
a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/TemplateMapper.java
 
b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/TemplateMapper.java
index 6024b72..e9bc667 100644
--- 
a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/TemplateMapper.java
+++ 
b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/TemplateMapper.java
@@ -3,27 +3,13 @@
 import org.apache.commons.lang.StringUtils;
 import org.ovirt.engine.api.common.util.StatusUtils;
 import org.ovirt.engine.api.model.Architecture;
-import org.ovirt.engine.api.model.Bios;
 import org.ovirt.engine.api.model.Boot;
-import org.ovirt.engine.api.model.BootMenu;
-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.Display;
-import org.ovirt.engine.api.model.DisplayType;
-import org.ovirt.engine.api.model.Domain;
-import org.ovirt.engine.api.model.HighAvailability;
 import org.ovirt.engine.api.model.OperatingSystem;
 import org.ovirt.engine.api.model.Template;
 import org.ovirt.engine.api.model.TemplateStatus;
 import org.ovirt.engine.api.model.TemplateVersion;
-import org.ovirt.engine.api.model.Usb;
-import org.ovirt.engine.api.model.UsbType;
-import org.ovirt.engine.api.model.VmType;
-import org.ovirt.engine.api.restapi.utils.GuidUtils;
-import org.ovirt.engine.api.restapi.utils.UsbMapperUtils;
 import org.ovirt.engine.core.common.action.UpdateVmTemplateParameters;
-import org.ovirt.engine.core.common.businessentities.OriginType;
 import org.ovirt.engine.core.common.businessentities.VmInit;
 import org.ovirt.engine.core.common.businessentities.VmStatic;
 import org.ovirt.engine.core.common.businessentities.VmTemplate;
@@ -32,68 +18,16 @@
 import org.ovirt.engine.core.common.utils.SimpleDependecyInjector;
 import org.ovirt.engine.core.compat.Guid;
 
-import static 
org.ovirt.engine.api.restapi.types.IntegerMapper.mapNullToMinusOne;
-import static 
org.ovirt.engine.api.restapi.types.IntegerMapper.mapMinusOneToNull;
-
-public class TemplateMapper {
+public class TemplateMapper extends VmBaseMapper {
 
     private static final int BYTES_PER_MB = 1024 * 1024;
 
     @Mapping(from = Template.class, to = VmTemplate.class)
     public static VmTemplate map(Template model, VmTemplate incoming) {
         VmTemplate entity = incoming != null ? incoming : new VmTemplate();
-        if (model.isSetName()) {
-            entity.setName(model.getName());
-        }
-        if (model.isSetId()) {
-            entity.setId(GuidUtils.asGuid(model.getId()));
-        }
-        if (model.isSetDescription()) {
-            entity.setDescription(model.getDescription());
-        }
-        if (model.isSetComment()) {
-            entity.setComment(model.getComment());
-        }
-        if (model.isSetCluster() && model.getCluster().getId() != null) {
-            entity.setVdsGroupId(GuidUtils.asGuid(model.getCluster().getId()));
-        }
-        if (model.isSetHighAvailability()) {
-            if (model.getHighAvailability().isSetEnabled()) {
-                entity.setAutoStartup(model.getHighAvailability().isEnabled());
-            }
-            if (model.getHighAvailability().isSetPriority()) {
-                entity.setPriority(model.getHighAvailability().getPriority());
-            }
-        }
-        if (model.isSetStateless()) {
-            entity.setStateless(model.isStateless());
-        }
-        if (model.isSetDeleteProtected()) {
-            entity.setDeleteProtected(model.isDeleteProtected());
-        }
-        if (model.isSetSso() && model.getSso().isSetMethods()) {
-            entity.setSsoMethod(SsoMapper.map(model.getSso(), null));
-        }
-        if (model.isSetType()) {
-            VmType vmType = VmType.fromValue(model.getType());
-            if (vmType != null) {
-                entity.setVmType(VmMapper.map(vmType, null));
-            }
-        }
-        if (model.isSetOrigin()) {
-            entity.setOrigin(VmMapper.map(model.getOrigin(), 
(OriginType)null));
-        }
-        if (model.isSetMemory()) {
-            entity.setMemSizeMb((int)(model.getMemory() / BYTES_PER_MB));
-        }
-        if (model.isSetCpu() && model.getCpu().isSetTopology()) {
-            if (model.getCpu().getTopology().getCores()!=null) {
-                
entity.setCpuPerSocket(model.getCpu().getTopology().getCores());
-            }
-            if (model.getCpu().getTopology().getSockets()!=null) {
-                
entity.setNumOfSockets(model.getCpu().getTopology().getSockets());
-            }
-        }
+
+        mapVmBaseModelToEntity(entity, model);
+
         if (model.isSetCpu() && model.getCpu().isSetArchitecture()) {
             Architecture archType = 
Architecture.fromValue(model.getCpu().getArchitecture());
 
@@ -101,82 +35,11 @@
                 entity.setClusterArch(CPUMapper.map(archType, null));
             }
         }
-        if (model.isSetBios()) {
-            if (model.getBios().isSetBootMenu()) {
-                
entity.setBootMenuEnabled(model.getBios().getBootMenu().isEnabled());
-            }
-        }
-        if (model.isSetCpuShares()) {
-            entity.setCpuShares(model.getCpuShares());
-        }
-        if (model.isSetOs()) {
-            if (model.getOs().isSetType()) {
-                entity.setOsId(VmMapper.mapOsType(model.getOs().getType()));
-            }
-            if (model.getOs().isSetBoot() && model.getOs().getBoot().size() > 
0) {
-                
entity.setDefaultBootSequence(VmMapper.map(model.getOs().getBoot(), null));
-            }
-            if (model.getOs().isSetKernel()) {
-                entity.setKernelUrl(model.getOs().getKernel());
-            }
-            if (model.getOs().isSetInitrd()) {
-                entity.setInitrdUrl(model.getOs().getInitrd());
-            }
-            if (model.getOs().isSetCmdline()) {
-                entity.setKernelParams(model.getOs().getCmdline());
-            }
-        }
-        if (model.isSetDisplay()) {
-            if (model.getDisplay().isSetType()) {
-                DisplayType displayType = 
DisplayType.fromValue(model.getDisplay().getType());
-                if (displayType != null) {
-                    entity.setDefaultDisplayType(VmMapper.map(displayType, 
null));
-                }
-            }
-            if (model.getDisplay().isSetMonitors()) {
-                entity.setNumOfMonitors(model.getDisplay().getMonitors());
-            }
-            if (model.getDisplay().isSetSingleQxlPci()) {
-                entity.setSingleQxlPci(model.getDisplay().isSingleQxlPci());
-            }
-            if (model.getDisplay().isSetAllowOverride()) {
-                
entity.setAllowConsoleReconnect(model.getDisplay().isAllowOverride());
-            }
-            if (model.getDisplay().isSetSmartcardEnabled()) {
-                
entity.setSmartcardEnabled(model.getDisplay().isSmartcardEnabled());
-            }
-            if (model.getDisplay().isSetKeyboardLayout()) {
-                String layout = model.getDisplay().getKeyboardLayout();
-                if (layout.isEmpty()) {
-                    layout = null;  // uniquely represent unset keyboard 
layout as null
-                }
-                entity.setVncKeyboardLayout(layout);
-            }
-            if (model.getDisplay().isSetFileTransferEnabled()) {
-                
entity.setSpiceFileTransferEnabled(model.getDisplay().isFileTransferEnabled());
-            }
-            if (model.getDisplay().isSetCopyPasteEnabled()) {
-                
entity.setSpiceCopyPasteEnabled(model.getDisplay().isCopyPasteEnabled());
-            }
-        }
         if (model.isSetDomain() && model.getDomain().isSetName()) {
             if (entity.getVmInit() == null) {
                 entity.setVmInit(new VmInit());
             }
             entity.getVmInit().setDomain(model.getDomain().getName());
-        }
-        if (model.isSetTimezone()) {
-            String timezone = model.getTimezone();
-            if (timezone.isEmpty()) {
-                timezone = null;  // normalize default timezone representation
-            }
-            entity.setTimeZone(timezone);
-        }
-        if (model.isSetTunnelMigration()) {
-            entity.setTunnelMigration(model.isTunnelMigration());
-        }
-        if (model.isSetMigrationDowntime()) {
-            
entity.setMigrationDowntime(mapMinusOneToNull(model.getMigrationDowntime()));
         }
         if (model.getVersion() != null) {
             if (model.getVersion().getBaseTemplate() != null
@@ -189,144 +52,20 @@
             // numbering is generated in the backend, hence even if user 
specified version number, we ignore it.
         }
 
-        if (model.isSetSerialNumber()) {
-            SerialNumberMapper.copySerialNumber(model.getSerialNumber(), 
entity);
-        }
-        if (model.isSetStartPaused()) {
-            entity.setRunAndPause(model.isStartPaused());
-        }
-
         return entity;
     }
 
     @Mapping(from = Template.class, to = VmStatic.class)
     public static VmStatic map(Template model, VmStatic incoming) {
         VmStatic staticVm = incoming != null ? incoming : new VmStatic();
-        if (model.isSetName()) {
-            staticVm.setName(model.getName());
-        }
-        if (model.isSetId()) {
-            staticVm.setId(GuidUtils.asGuid(model.getId()));
-        }
-        if (model.isSetDescription()) {
-            staticVm.setDescription(model.getDescription());
-        }
-        if (model.isSetComment()) {
-            staticVm.setComment(model.getComment());
-        }
-        if (model.isSetCluster() && model.getCluster().getId() != null) {
-            
staticVm.setVdsGroupId(GuidUtils.asGuid(model.getCluster().getId()));
-        }
-        if (model.isSetHighAvailability()) {
-            if (model.getHighAvailability().isSetEnabled()) {
-                
staticVm.setAutoStartup(model.getHighAvailability().isEnabled());
-            }
-            if (model.getHighAvailability().isSetPriority()) {
-                
staticVm.setPriority(model.getHighAvailability().getPriority());
-            }
-        }
-        if (model.isSetStateless()) {
-            staticVm.setStateless(model.isStateless());
-        }
-        if (model.isSetDeleteProtected()) {
-            staticVm.setDeleteProtected(model.isDeleteProtected());
-        }
-        if (model.isSetSso() && model.getSso().isSetMethods()) {
-            staticVm.setSsoMethod(SsoMapper.map(model.getSso(), null));
-        }
-        if (model.isSetType()) {
-            VmType vmType = VmType.fromValue(model.getType());
-            if (vmType != null) {
-                staticVm.setVmType(VmMapper.map(vmType, null));
-            }
-        }
-        if (model.isSetOrigin()) {
-            staticVm.setOrigin(VmMapper.map(model.getOrigin(), 
(OriginType)null));
-        }
-        if (model.isSetMemory()) {
-            staticVm.setMemSizeMb((int)(model.getMemory() / BYTES_PER_MB));
-        }
-        if (model.isSetCpu() && model.getCpu().isSetTopology()) {
-            if (model.getCpu().getTopology().getCores()!=null) {
-                
staticVm.setCpuPerSocket(model.getCpu().getTopology().getCores());
-            }
-            if (model.getCpu().getTopology().getSockets()!=null) {
-                
staticVm.setNumOfSockets(model.getCpu().getTopology().getSockets());
-            }
-        }
-        if (model.isSetCpuShares()) {
-            staticVm.setCpuShares(model.getCpuShares());
-        }
-        if (model.isSetOs()) {
-            if (model.getOs().isSetType()) {
-                staticVm.setOsId(VmMapper.mapOsType(model.getOs().getType()));
-            }
-            if (model.getOs().isSetBoot() && model.getOs().getBoot().size() > 
0) {
-                
staticVm.setDefaultBootSequence(VmMapper.map(model.getOs().getBoot(), null));
-            }
-            if (model.getOs().isSetKernel()) {
-                staticVm.setKernelUrl(model.getOs().getKernel());
-            }
-            if (model.getOs().isSetInitrd()) {
-                staticVm.setInitrdUrl(model.getOs().getInitrd());
-            }
-            if (model.getOs().isSetCmdline()) {
-                staticVm.setKernelParams(model.getOs().getCmdline());
-            }
-        }
-        if (model.isSetDisplay()) {
-            if (model.getDisplay().isSetType()) {
-                DisplayType displayType = 
DisplayType.fromValue(model.getDisplay().getType());
-                if (displayType != null) {
-                    staticVm.setDefaultDisplayType(VmMapper.map(displayType, 
null));
-                }
-            }
-            if (model.getDisplay().isSetMonitors()) {
-                staticVm.setNumOfMonitors(model.getDisplay().getMonitors());
-            }
-            if (model.getDisplay().isSetSingleQxlPci()) {
-                staticVm.setSingleQxlPci(model.getDisplay().isSingleQxlPci());
-            }
-            if (model.getDisplay().isSetAllowOverride()) {
-                
staticVm.setAllowConsoleReconnect(model.getDisplay().isAllowOverride());
-            }
-            if (model.getDisplay().isSmartcardEnabled()) {
-                
staticVm.setSmartcardEnabled(model.getDisplay().isSmartcardEnabled());
-            }
-            if (model.getDisplay().isSetKeyboardLayout()) {
-                String layout = model.getDisplay().getKeyboardLayout();
-                if (layout.isEmpty()) {
-                    layout = null;  // uniquely represent unset keyboard 
layout as null
-                }
-                staticVm.setVncKeyboardLayout(layout);
-            }
-            if (model.getDisplay().isSetFileTransferEnabled()) {
-                
staticVm.setSpiceFileTransferEnabled(model.getDisplay().isFileTransferEnabled());
-            }
-            if (model.getDisplay().isSetCopyPasteEnabled()) {
-                
staticVm.setSpiceCopyPasteEnabled(model.getDisplay().isCopyPasteEnabled());
-            }
-        }
+
+        mapVmBaseModelToEntity(staticVm, model);
+
         if (model.isSetDomain() && model.getDomain().isSetName()) {
             if (staticVm.getVmInit() == null) {
                 staticVm.setVmInit(new VmInit());
             }
             staticVm.getVmInit().setDomain(model.getDomain().getName());
-        }
-        if (model.isSetTimezone()) {
-            staticVm.setTimeZone(model.getTimezone());
-        }
-        if (model.isSetTunnelMigration()) {
-            staticVm.setTunnelMigration(model.isTunnelMigration());
-        }
-        if (model.isSetMigrationDowntime()) {
-            
staticVm.setMigrationDowntime(mapMinusOneToNull(model.getMigrationDowntime()));
-        }
-        if (model.isSetSerialNumber()) {
-            SerialNumberMapper.copySerialNumber(model.getSerialNumber(), 
staticVm);
-        }
-        if (model.isSetStartPaused()) {
-            staticVm.setRunAndPause(model.isStartPaused());
         }
         return staticVm;
     }
@@ -334,23 +73,9 @@
     @Mapping(from = VmTemplate.class, to = Template.class)
     public static Template map(VmTemplate entity, Template incoming) {
         Template model = incoming != null ? incoming : new Template();
-        model.setId(entity.getId().toString());
-        model.setName(entity.getName());
-        model.setDescription(entity.getDescription());
-        model.setComment(entity.getComment());
-        model.setMemory((long) entity.getMemSizeMb() * BYTES_PER_MB);
-        model.setHighAvailability(new HighAvailability());
-        model.getHighAvailability().setEnabled(entity.isAutoStartup());
-        model.getHighAvailability().setPriority(entity.getPriority());
-        model.setStateless(entity.isStateless());
-        model.setDeleteProtected(entity.isDeleteProtected());
-        model.setSso(SsoMapper.map(entity.getSsoMethod(), null));
-        if (entity.getVmType() != null) {
-            model.setType(VmMapper.map(entity.getVmType(), null));
-        }
-        if (entity.getOrigin() != null) {
-            model.setOrigin(VmMapper.map(entity.getOrigin(), null));
-        }
+
+        mapVmBaseEntityToModel(model, entity);
+
         if (entity.getStatus() != null) {
             model.setStatus(StatusUtils.create(map(entity.getStatus(), null)));
         }
@@ -372,20 +97,6 @@
             os.setCmdline(entity.getKernelParams());
             model.setOs(os);
         }
-        model.setBios(new Bios());
-        model.getBios().setBootMenu(new BootMenu());
-        model.getBios().getBootMenu().setEnabled(entity.isBootMenuEnabled());
-        if (entity.getVdsGroupId() != null) {
-            Cluster cluster = new Cluster();
-            cluster.setId(entity.getVdsGroupId().toString());
-            model.setCluster(cluster);
-        }
-        CpuTopology topology = new CpuTopology();
-        topology.setSockets(entity.getNumOfSockets());
-        topology.setCores(entity.getNumOfCpus() / entity.getNumOfSockets());
-        model.setCpu(new CPU());
-        model.getCpu().setTopology(topology);
-        model.setCpuShares(entity.getCpuShares());
         if (entity.getDefaultDisplayType() != null) {
             model.setDisplay(new Display());
             
model.getDisplay().setType(VmMapper.map(entity.getDefaultDisplayType(), null));
@@ -400,28 +111,6 @@
         if (entity.getClusterArch() != null) {
             
model.getCpu().setArchitecture(CPUMapper.map(entity.getClusterArch(), null));
         }
-        if (entity.getCreationDate() != null) {
-            model.setCreationTime(DateMapper.map(entity.getCreationDate(), 
null));
-        }
-        if (entity.getVmInit() != null &&
-                entity.getVmInit().getDomain() != null &&
-                !entity.getVmInit().getDomain().isEmpty()) {
-            Domain domain = new Domain();
-            domain.setName(entity.getVmInit().getDomain());
-            model.setDomain(domain);
-        }
-        if (entity.getUsbPolicy()!=null) {
-            Usb usb = new Usb();
-            
usb.setEnabled(UsbMapperUtils.getIsUsbEnabled(entity.getUsbPolicy()));
-            UsbType usbType = UsbMapperUtils.getUsbType(entity.getUsbPolicy());
-            if (usbType != null) {
-                usb.setType(usbType.value());
-            }
-            model.setUsb(usb);
-        }
-        model.setTimezone(entity.getTimeZone());
-        model.setTunnelMigration(entity.getTunnelMigration());
-        
model.setMigrationDowntime(mapNullToMinusOne(entity.getMigrationDowntime()));
         // if this is not a base template, that means this is a template 
version
         // so need to populate template version properties
         if (!entity.isBaseTemplate()) {
@@ -433,12 +122,6 @@
             version.setBaseTemplate(baseTemplate);
             model.setVersion(version);
         }
-
-        if (entity.getSerialNumberPolicy() != null) {
-            model.setSerialNumber(SerialNumberMapper.map(entity, null));
-        }
-
-        model.setStartPaused(entity.isRunAndPause());
 
         return model;
     }
diff --git 
a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/VmBaseMapper.java
 
b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/VmBaseMapper.java
new file mode 100644
index 0000000..0e8b591
--- /dev/null
+++ 
b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/VmBaseMapper.java
@@ -0,0 +1,244 @@
+package org.ovirt.engine.api.restapi.types;
+
+import org.ovirt.engine.api.model.Bios;
+import org.ovirt.engine.api.model.BootMenu;
+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.DisplayType;
+import org.ovirt.engine.api.model.Domain;
+import org.ovirt.engine.api.model.HighAvailability;
+import org.ovirt.engine.api.model.Usb;
+import org.ovirt.engine.api.model.UsbType;
+import org.ovirt.engine.api.model.VmBase;
+import org.ovirt.engine.api.model.VmType;
+import org.ovirt.engine.api.restapi.utils.GuidUtils;
+import org.ovirt.engine.api.restapi.utils.UsbMapperUtils;
+import org.ovirt.engine.core.common.businessentities.OriginType;
+
+import static 
org.ovirt.engine.api.restapi.types.IntegerMapper.mapMinusOneToNull;
+import static 
org.ovirt.engine.api.restapi.types.IntegerMapper.mapNullToMinusOne;
+
+public class VmBaseMapper {
+    protected static final int BYTES_PER_MB = 1024 * 1024;
+
+    protected static void 
mapVmBaseModelToEntity(org.ovirt.engine.core.common.businessentities.VmBase 
entity, VmBase model) {
+        if (model.isSetName()) {
+            entity.setName(model.getName());
+        }
+        if (model.isSetMemory()) {
+            entity.setMemSizeMb((int)(model.getMemory() / BYTES_PER_MB));
+        }
+        if (model.isSetId()) {
+            entity.setId(GuidUtils.asGuid(model.getId()));
+        }
+        if (model.isSetDescription()) {
+            entity.setDescription(model.getDescription());
+        }
+        if (model.isSetComment()) {
+            entity.setComment(model.getComment());
+        }
+        if (model.isSetCluster() && model.getCluster().getId() != null) {
+            entity.setVdsGroupId(GuidUtils.asGuid(model.getCluster().getId()));
+        }
+        if (model.isSetCpu() && model.getCpu().isSetTopology()) {
+            if (model.getCpu().getTopology().getCores() != null) {
+                
entity.setCpuPerSocket(model.getCpu().getTopology().getCores());
+            }
+            if (model.getCpu().getTopology().getSockets() != null) {
+                
entity.setNumOfSockets(model.getCpu().getTopology().getSockets());
+            }
+        }
+        if (model.isSetHighAvailability()) {
+            if (model.getHighAvailability().isSetEnabled()) {
+                entity.setAutoStartup(model.getHighAvailability().isEnabled());
+            }
+            if (model.getHighAvailability().isSetPriority()) {
+                entity.setPriority(model.getHighAvailability().getPriority());
+            }
+        }
+        if (model.isSetOs()) {
+            if (model.getOs().isSetType()) {
+                entity.setOsId(VmMapper.mapOsType(model.getOs().getType()));
+            }
+            if (model.getOs().isSetBoot() && model.getOs().getBoot().size() > 
0) {
+                
entity.setDefaultBootSequence(VmMapper.map(model.getOs().getBoot(), null));
+            }
+            if (model.getOs().isSetKernel()) {
+                entity.setKernelUrl(model.getOs().getKernel());
+            }
+            if (model.getOs().isSetInitrd()) {
+                entity.setInitrdUrl(model.getOs().getInitrd());
+            }
+            if (model.getOs().isSetCmdline()) {
+                entity.setKernelParams(model.getOs().getCmdline());
+            }
+        }
+        if (model.isSetBios()) {
+            if (model.getBios().isSetBootMenu()) {
+                
entity.setBootMenuEnabled(model.getBios().getBootMenu().isEnabled());
+            }
+        }
+        if (model.isSetCpuShares()) {
+            entity.setCpuShares(model.getCpuShares());
+        }
+        if (model.isSetDisplay()) {
+            if (model.getDisplay().isSetType()) {
+                DisplayType displayType = 
DisplayType.fromValue(model.getDisplay().getType());
+                if (displayType != null) {
+                    entity.setDefaultDisplayType(VmMapper.map(displayType, 
null));
+                }
+            }
+            if (model.getDisplay().isSetMonitors()) {
+                entity.setNumOfMonitors(model.getDisplay().getMonitors());
+            }
+            if (model.getDisplay().isSetSingleQxlPci()) {
+                entity.setSingleQxlPci(model.getDisplay().isSingleQxlPci());
+            }
+            if (model.getDisplay().isSetAllowOverride()) {
+                
entity.setAllowConsoleReconnect(model.getDisplay().isAllowOverride());
+            }
+            if (model.getDisplay().isSetSmartcardEnabled()) {
+                
entity.setSmartcardEnabled(model.getDisplay().isSmartcardEnabled());
+            }
+            if (model.getDisplay().isSetKeyboardLayout()) {
+                String layout = model.getDisplay().getKeyboardLayout();
+                if (layout.isEmpty()) {
+                    layout = null;  // uniquely represent unset keyboard 
layout as null
+                }
+                entity.setVncKeyboardLayout(layout);
+            }
+            if (model.getDisplay().isSetFileTransferEnabled()) {
+                
entity.setSpiceFileTransferEnabled(model.getDisplay().isFileTransferEnabled());
+            }
+            if (model.getDisplay().isSetCopyPasteEnabled()) {
+                
entity.setSpiceCopyPasteEnabled(model.getDisplay().isCopyPasteEnabled());
+            }
+        }
+        if (model.isSetTimezone()) {
+            String timezone = model.getTimezone();
+            if (timezone.isEmpty()) {
+                timezone = null;  // normalize default timezone representation
+            }
+            entity.setTimeZone(timezone);
+        }
+        if (model.isSetOrigin()) {
+            entity.setOrigin(VmMapper.map(model.getOrigin(), (OriginType) 
null));
+        }
+        if (model.isSetStateless()) {
+            entity.setStateless(model.isStateless());
+        }
+        if (model.isSetDeleteProtected()) {
+            entity.setDeleteProtected(model.isDeleteProtected());
+        }
+        if (model.isSetSso() && model.getSso().isSetMethods()) {
+            entity.setSsoMethod(SsoMapper.map(model.getSso(), null));
+        }
+        if (model.isSetType()) {
+            VmType vmType = VmType.fromValue(model.getType());
+            if (vmType != null) {
+                entity.setVmType(VmMapper.map(vmType, null));
+            }
+        }
+        if (model.isSetTunnelMigration()) {
+            entity.setTunnelMigration(model.isTunnelMigration());
+        }
+        if (model.isSetMigrationDowntime()) {
+            
entity.setMigrationDowntime(mapMinusOneToNull(model.getMigrationDowntime()));
+        }
+        if (model.isSetSerialNumber()) {
+            SerialNumberMapper.copySerialNumber(model.getSerialNumber(), 
entity);
+        }
+        if (model.isSetStartPaused()) {
+            entity.setRunAndPause(model.isStartPaused());
+        }
+    }
+
+    protected static void mapVmBaseEntityToModel(VmBase model, 
org.ovirt.engine.core.common.businessentities.VmBase entity) {
+        model.setId(entity.getId().toString());
+        model.setName(entity.getName());
+        model.setDescription(entity.getDescription());
+        model.setComment(entity.getComment());
+        model.setMemory((long) entity.getMemSizeMb() * BYTES_PER_MB);
+
+        if (entity.getVdsGroupId() != null) {
+            Cluster cluster = new Cluster();
+            cluster.setId(entity.getVdsGroupId().toString());
+            model.setCluster(cluster);
+        }
+
+        if (entity.getVmType() != null) {
+            model.setType(map(entity.getVmType(), null));
+        }
+
+        if (entity.getOrigin() != null) {
+            model.setOrigin(map(entity.getOrigin(), null));
+        }
+
+        model.setBios(new Bios());
+        model.getBios().setBootMenu(new BootMenu());
+        model.getBios().getBootMenu().setEnabled(entity.isBootMenuEnabled());
+
+        model.setTimezone(entity.getTimeZone());
+
+        if (entity.getCreationDate() != null) {
+            model.setCreationTime(DateMapper.map(entity.getCreationDate(), 
null));
+        }
+
+        if (entity.getUsbPolicy() != null) {
+            Usb usb = new Usb();
+            
usb.setEnabled(UsbMapperUtils.getIsUsbEnabled(entity.getUsbPolicy()));
+            UsbType usbType = UsbMapperUtils.getUsbType(entity.getUsbPolicy());
+            if (usbType != null) {
+                usb.setType(usbType.value());
+            }
+            model.setUsb(usb);
+        }
+
+        if (entity.getVmInit() != null && entity.getVmInit().getDomain() != 
null && !entity.getVmInit().getDomain().isEmpty()) {
+            Domain domain = new Domain();
+            domain.setName(entity.getVmInit().getDomain());
+            model.setDomain(domain);
+        }
+
+        CpuTopology topology = new CpuTopology();
+        topology.setSockets(entity.getNumOfSockets());
+        topology.setCores(entity.getNumOfCpus() / entity.getNumOfSockets());
+        model.setCpu(new CPU());
+        model.getCpu().setTopology(topology);
+        model.setCpuShares(entity.getCpuShares());
+
+        model.setHighAvailability(new HighAvailability());
+        model.getHighAvailability().setEnabled(entity.isAutoStartup());
+        model.getHighAvailability().setPriority(entity.getPriority());
+        model.setStateless(entity.isStateless());
+        model.setDeleteProtected(entity.isDeleteProtected());
+        model.setSso(SsoMapper.map(entity.getSsoMethod(), null));
+
+        model.setTunnelMigration(entity.getTunnelMigration());
+        
model.setMigrationDowntime(mapNullToMinusOne(entity.getMigrationDowntime()));
+
+        if (entity.getSerialNumberPolicy() != null) {
+            model.setSerialNumber(SerialNumberMapper.map(entity, null));
+        }
+
+        model.setStartPaused(entity.isRunAndPause());
+    }
+
+    @Mapping(from = OriginType.class, to = String.class)
+    public static String map(OriginType type, String incoming) {
+        return type.name().toLowerCase();
+    }
+
+    @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;
+        }
+    }
+}
diff --git 
a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/VmMapper.java
 
b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/VmMapper.java
index 00dc7dd..c7c1beb 100644
--- 
a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/VmMapper.java
+++ 
b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/VmMapper.java
@@ -1,7 +1,5 @@
 package org.ovirt.engine.api.restapi.types;
 
-import static 
org.ovirt.engine.api.restapi.types.IntegerMapper.mapMinusOneToNull;
-import static 
org.ovirt.engine.api.restapi.types.IntegerMapper.mapNullToMinusOne;
 import static org.ovirt.engine.core.compat.Guid.createGuidFromString;
 
 import java.util.ArrayList;
@@ -12,18 +10,13 @@
 import org.apache.commons.lang.StringUtils;
 import org.ovirt.engine.api.common.util.StatusUtils;
 import org.ovirt.engine.api.model.AuthorizedKey;
-import org.ovirt.engine.api.model.Bios;
 import org.ovirt.engine.api.model.Boot;
 import org.ovirt.engine.api.model.BootDevice;
-import org.ovirt.engine.api.model.BootMenu;
 import org.ovirt.engine.api.model.BootProtocol;
-import org.ovirt.engine.api.model.CPU;
 import org.ovirt.engine.api.model.CloudInit;
-import org.ovirt.engine.api.model.Cluster;
 import org.ovirt.engine.api.model.Configuration;
 import org.ovirt.engine.api.model.ConfigurationType;
 import org.ovirt.engine.api.model.CpuMode;
-import org.ovirt.engine.api.model.CpuTopology;
 import org.ovirt.engine.api.model.CpuTune;
 import org.ovirt.engine.api.model.CustomProperties;
 import org.ovirt.engine.api.model.CustomProperty;
@@ -63,7 +56,6 @@
 import org.ovirt.engine.api.model.VmType;
 import org.ovirt.engine.api.restapi.utils.CustomPropertiesParser;
 import org.ovirt.engine.api.restapi.utils.GuidUtils;
-import org.ovirt.engine.api.restapi.utils.UsbMapperUtils;
 import org.ovirt.engine.core.common.action.RunVmOnceParams;
 import org.ovirt.engine.core.common.businessentities.BootSequence;
 import org.ovirt.engine.core.common.businessentities.MigrationSupport;
@@ -82,9 +74,8 @@
 import org.ovirt.engine.core.compat.Guid;
 import org.ovirt.engine.core.compat.Version;
 
-public class VmMapper {
+public class VmMapper extends VmBaseMapper {
 
-    private static final int BYTES_PER_MB = 1024 * 1024;
     // REVISIT retrieve from configuration
     private static final int DEFAULT_MEMORY_SIZE = 10 * 1024;
 
@@ -136,21 +127,10 @@
     @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.setName(vm.getName());
-        }
-        if (vm.isSetId()) {
-            staticVm.setId(GuidUtils.asGuid(vm.getId()));
-        }
-        if (vm.isSetDescription()) {
-            staticVm.setDescription(vm.getDescription());
-        }
-        if (vm.isSetComment()) {
-            staticVm.setComment(vm.getComment());
-        }
-        if (vm.isSetMemory()) {
-            staticVm.setMemSizeMb((int) (vm.getMemory() / BYTES_PER_MB));
-        } else if (staticVm.getMemSizeMb()==0){
+
+        mapVmBaseModelToEntity(staticVm, vm);
+
+        if (!vm.isSetMemory() && staticVm.getMemSizeMb()==0){
           //TODO: Get rid of this logic code when Backend supports default 
memory.
             staticVm.setMemSizeMb(DEFAULT_MEMORY_SIZE);
         }
@@ -166,112 +146,15 @@
                 staticVm.setUseLatestVersion(vm.isUseLatestTemplateVersion());
             }
         }
-        if (vm.isSetCluster() && vm.getCluster().getId() != null) {
-            staticVm.setVdsGroupId(GuidUtils.asGuid(vm.getCluster().getId()));
-        }
         if (vm.isSetCpu()) {
             if (vm.getCpu().isSetMode()) {
                 
staticVm.setUseHostCpuFlags(CpuMode.fromValue(vm.getCpu().getMode()) == 
CpuMode.HOST_PASSTHROUGH);
-            }
-            if (vm.getCpu().isSetTopology()) {
-                if (vm.getCpu().getTopology().getCores()!=null) {
-                    
staticVm.setCpuPerSocket(vm.getCpu().getTopology().getCores());
-                }
-                if (vm.getCpu().getTopology().getSockets()!=null) {
-                    
staticVm.setNumOfSockets(vm.getCpu().getTopology().getSockets());
-                }
             }
             if (vm.getCpu().isSetCpuTune()) {
                 
staticVm.setCpuPinning(cpuTuneToString(vm.getCpu().getCpuTune()));
             }
         }
-        if (vm.isSetCpuShares()) {
-            staticVm.setCpuShares(vm.getCpuShares());
-        }
-        if (vm.isSetOs()) {
-            if (vm.getOs().isSetType()) {
-                staticVm.setOsId(mapOsType(vm.getOs().getType()));
-            }
-            if (vm.getOs().isSetBoot() && vm.getOs().getBoot().size() > 0) {
-                staticVm.setDefaultBootSequence(map(vm.getOs().getBoot(), 
null));
-            }
-            if (vm.getOs().isSetKernel()) {
-                staticVm.setKernelUrl(vm.getOs().getKernel());
-            }
-            if (vm.getOs().isSetInitrd()) {
-                staticVm.setInitrdUrl(vm.getOs().getInitrd());
-            }
-            if (vm.getOs().isSetCmdline()) {
-                staticVm.setKernelParams(vm.getOs().getCmdline());
-            }
-        }
-        if (vm.isSetBios()) {
-            if (vm.getBios().isSetBootMenu()) {
-                
staticVm.setBootMenuEnabled(vm.getBios().getBootMenu().isEnabled());
-            }
-        }
-        if (vm.isSetType()) {
-            VmType vmType = VmType.fromValue(vm.getType());
-            if (vmType != null) {
-                staticVm.setVmType(map(vmType, null));
-            }
-        }
-        if (vm.isSetStateless()) {
-            staticVm.setStateless(vm.isStateless());
-        }
-        if (vm.isSetDeleteProtected()) {
-            staticVm.setDeleteProtected(vm.isDeleteProtected());
-        }
 
-        if (vm.isSetSso() && vm.getSso().isSetMethods()) {
-            staticVm.setSsoMethod(SsoMapper.map(vm.getSso(), null));
-        }
-
-        if (vm.isSetHighAvailability()) {
-            HighAvailability ha = vm.getHighAvailability();
-            if (ha.isSetEnabled()) {
-                staticVm.setAutoStartup(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.setDefaultDisplayType(map(displayType, null));
-                }
-            }
-            if (vm.getDisplay().isSetMonitors()) {
-                staticVm.setNumOfMonitors(vm.getDisplay().getMonitors());
-            }
-            if (vm.getDisplay().isSetSingleQxlPci()) {
-                staticVm.setSingleQxlPci(vm.getDisplay().isSingleQxlPci());
-            }
-            if (vm.getDisplay().isSetAllowOverride()) {
-                
staticVm.setAllowConsoleReconnect(vm.getDisplay().isAllowOverride());
-            }
-            if (vm.getDisplay().isSetSmartcardEnabled()) {
-                
staticVm.setSmartcardEnabled(vm.getDisplay().isSmartcardEnabled());
-            }
-            if (vm.getDisplay().isSetKeyboardLayout()) {
-                String layout = vm.getDisplay().getKeyboardLayout();
-                if (layout.isEmpty()) {
-                    layout = null;  // uniquely represent unset keyboard 
layout as null
-                }
-                staticVm.setVncKeyboardLayout(layout);
-            }
-            if (vm.getDisplay().isSetFileTransferEnabled()) {
-                
staticVm.setSpiceFileTransferEnabled(vm.getDisplay().isSetFileTransferEnabled());
-            }
-            if (vm.getDisplay().isSetCopyPasteEnabled()) {
-                
staticVm.setSpiceCopyPasteEnabled(vm.getDisplay().isSetCopyPasteEnabled());
-            }
-        }
         if (vm.isSetPlacementPolicy() && 
vm.getPlacementPolicy().isSetAffinity()) {
             VmAffinity vmAffinity = 
VmAffinity.fromValue(vm.getPlacementPolicy().getAffinity());
             if (vmAffinity!=null) {
@@ -285,24 +168,11 @@
             Long memGuaranteed = vm.getMemoryPolicy().getGuaranteed() / 
BYTES_PER_MB;
             staticVm.setMinAllocatedMem(memGuaranteed.intValue());
         }
-        if (vm.isSetTimezone()) {
-            String timezone = vm.getTimezone();
-            if (timezone.isEmpty()) {
-                timezone = null;  // normalize default timezone representation
-            }
-            staticVm.setTimeZone(timezone);
-        }
         if (vm.isSetCustomProperties()) {
             
staticVm.setCustomProperties(CustomPropertiesParser.parse(vm.getCustomProperties().getCustomProperty()));
         }
         if (vm.isSetQuota() && vm.getQuota().isSetId()) {
             staticVm.setQuotaId(GuidUtils.asGuid(vm.getQuota().getId()));
-        }
-        if (vm.isSetTunnelMigration()) {
-            staticVm.setTunnelMigration(vm.isTunnelMigration());
-        }
-        if (vm.isSetMigrationDowntime()) {
-            
staticVm.setMigrationDowntime(mapMinusOneToNull(vm.getMigrationDowntime()));
         }
         if (vm.isSetInitialization()) {
             staticVm.setVmInit(map(vm.getInitialization(), new VmInit()));
@@ -320,19 +190,11 @@
             }
         }
 
-        if (vm.isSetSerialNumber()) {
-            SerialNumberMapper.copySerialNumber(vm.getSerialNumber(), 
staticVm);
-        }
-
         if (vm.isSetNumaTuneMode()) {
             NumaTuneMode mode = NumaTuneMode.fromValue(vm.getNumaTuneMode());
             if (mode != null) {
                 staticVm.setNumaTuneMode(map(mode, null));
             }
-        }
-
-        if (vm.isSetStartPaused()) {
-            staticVm.setRunAndPause(vm.isStartPaused());
         }
 
         return staticVm;
@@ -384,11 +246,9 @@
     @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.getId().toString());
-        model.setName(entity.getName());
-        model.setDescription(entity.getVmDescription());
-        model.setComment(entity.getComment());
-        model.setMemory((long) entity.getMemSizeMb() * BYTES_PER_MB);
+
+        mapVmBaseEntityToModel(model, entity.getStaticData());
+
         if (entity.getVmtGuid() != null) {
             model.setTemplate(new Template());
             model.getTemplate().setId(entity.getVmtGuid().toString());
@@ -411,9 +271,6 @@
         if (entity.getStopReason() != null) {
             model.setStopReason(entity.getStopReason());
         }
-        model.setBios(new Bios());
-        model.getBios().setBootMenu(new BootMenu());
-        model.getBios().getBootMenu().setEnabled(entity.isBootMenuEnabled());
         if (entity.getBootSequence() != null ||
             entity.getKernelUrl() != null ||
             entity.getInitrdUrl() != null ||
@@ -427,24 +284,12 @@
             os.setCmdline(entity.getKernelParams());
             model.setOs(os);
         }
-        if (entity.getVdsGroupId() != null) {
-            Cluster cluster = new Cluster();
-            cluster.setId(entity.getVdsGroupId().toString());
-            model.setCluster(cluster);
-        }
-        CpuTopology topology = new CpuTopology();
-        topology.setSockets(entity.getNumOfSockets());
-        topology.setCores(entity.getNumOfCpus() / entity.getNumOfSockets());
-        final CPU cpu = new CPU();
-        model.setCpu(cpu);
         if(entity.isUseHostCpuFlags()) {
-            cpu.setMode(CpuMode.HOST_PASSTHROUGH.value());
+            model.getCpu().setMode(CpuMode.HOST_PASSTHROUGH.value());
         }
-        cpu.setCpuTune(stringToCpuTune(entity.getCpuPinning()));
-        cpu.setTopology(topology);
-        model.setCpuShares(entity.getCpuShares());
+        model.getCpu().setCpuTune(stringToCpuTune(entity.getCpuPinning()));
 
-        cpu.setArchitecture(CPUMapper.map(entity.getClusterArch(), null));
+        model.getCpu().setArchitecture(CPUMapper.map(entity.getClusterArch(), 
null));
 
         if (entity.getVmPoolId() != null) {
             VmPool pool = new VmPool();
@@ -519,7 +364,6 @@
             
model.getDisplay().setFileTransferEnabled(entity.isSpiceFileTransferEnabled());
             
model.getDisplay().setCopyPasteEnabled(entity.isSpiceCopyPasteEnabled());
         }
-        model.setType(map(entity.getVmType(), null));
         model.setStateless(entity.isStateless());
         model.setDeleteProtected(entity.isDeleteProtected());
         model.setSso(SsoMapper.map(entity.getSsoMethod(), null));
@@ -528,9 +372,6 @@
         model.getHighAvailability().setPriority(entity.getPriority());
         if (entity.getOrigin() != null) {
             model.setOrigin(map(entity.getOrigin(), null));
-        }
-        if (entity.getVmCreationDate() != null) {
-            model.setCreationTime(DateMapper.map(entity.getVmCreationDate(), 
null));
         }
         model.setPlacementPolicy(new VmPlacementPolicy());
         if(entity.getDedicatedVmForVds() !=null){
@@ -544,43 +385,22 @@
         MemoryPolicy policy = new MemoryPolicy();
         policy.setGuaranteed((long)entity.getMinAllocatedMem() * 
(long)BYTES_PER_MB);
         model.setMemoryPolicy(policy);
-        model.setTimezone(entity.getTimeZone());
         if (!StringUtils.isEmpty(entity.getCustomProperties())) {
             CustomProperties hooks = new CustomProperties();
             
hooks.getCustomProperty().addAll(CustomPropertiesParser.parse(entity.getCustomProperties(),
 false));
             model.setCustomProperties(hooks);
-        }
-        if (entity.getUsbPolicy()!=null) {
-            Usb usb = new Usb();
-            
usb.setEnabled(UsbMapperUtils.getIsUsbEnabled(entity.getUsbPolicy()));
-            UsbType usbType = UsbMapperUtils.getUsbType(entity.getUsbPolicy());
-            if (usbType != null) {
-                usb.setType(usbType.value());
-            }
-            model.setUsb(usb);
         }
         if (entity.getQuotaId()!=null) {
             Quota quota = new Quota();
             quota.setId(entity.getQuotaId().toString());
             model.setQuota(quota);
         }
-        model.setTunnelMigration(entity.getTunnelMigration());
-        
model.setMigrationDowntime(mapNullToMinusOne(entity.getMigrationDowntime()));
 
         if (entity.getVmInit() != null) {
             model.setInitialization(map(entity.getVmInit(), null));
-            if (entity.getVmInit().getDomain() != null) {
-                Domain domain = new Domain();
-                domain.setName(entity.getVmInit().getDomain());
-                model.setDomain(domain);
-            }
-        }
-        if (entity.getSerialNumberPolicy() != null) {
-            
model.setSerialNumber(SerialNumberMapper.map(entity.getStaticData(), null));
         }
         
model.setNextRunConfigurationExists(entity.isNextRunConfigurationExists());
         model.setNumaTuneMode(map(entity.getNumaTuneMode(), null));
-        model.setStartPaused(entity.isRunAndPause());
         return model;
     }
 
@@ -717,18 +537,6 @@
         }
     }
 
-    @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) {
@@ -760,11 +568,6 @@
         } catch (IllegalArgumentException e) {
             return null;
         }
-    }
-
-    @Mapping(from = OriginType.class, to = String.class)
-    public static String map(OriginType type, String incoming) {
-        return type.name().toLowerCase();
     }
 
     @Mapping(from = ConfigurationType.class, to = 
org.ovirt.engine.core.common.businessentities.ConfigurationType.class)
diff --git 
a/backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/VmMapperTest.java
 
b/backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/VmMapperTest.java
index 60805f8..f7be2bc 100644
--- 
a/backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/VmMapperTest.java
+++ 
b/backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/VmMapperTest.java
@@ -243,7 +243,7 @@
 
     @Test
     public void testMapOriginTypeRhev() {
-        String s = VmMapper.map(OriginType.RHEV, null);
+        String s = VmBaseMapper.map(OriginType.RHEV, null);
         assertEquals(s, "rhev");
         OriginType s2 = VmMapper.map(s, OriginType.RHEV);
         assertEquals(s2, OriginType.RHEV);
@@ -251,7 +251,7 @@
 
     @Test
     public void testMapOriginTypeOvirt() {
-        String s = VmMapper.map(OriginType.OVIRT, null);
+        String s = VmBaseMapper.map(OriginType.OVIRT, null);
         assertEquals(s, "ovirt");
         OriginType s2 = VmMapper.map(s, OriginType.OVIRT);
         assertEquals(s2, OriginType.OVIRT);


-- 
To view, visit http://gerrit.ovirt.org/30189
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Iddd80e10360234d75d142f224ecb8ad920fbf282
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Martin Betak <mbe...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to