Frank Kobzik has uploaded a new change for review.

Change subject: restapi: adjust api to new graphics representation
......................................................................

restapi: adjust api to new graphics representation

This patch changes REST API to internally use (new) graphics device
representation. Backwards compatibility is preserved (the interface for clients
is unchanged).

Change-Id: Ibed6bbbce8a36dff82a0903c3478cfb656589fb4
Signed-off-by: Frantisek Kobzik <[email protected]>
Bug-Url: https://bugzilla.redhat.com/1033547
---
M 
backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/model/DisplayType.java
M 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendInstanceTypeResource.java
M 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendInstanceTypesResource.java
M 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendTemplateResource.java
M 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendTemplatesResource.java
M 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmResource.java
M 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmsResource.java
M 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/util/VmHelper.java
M 
backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendInstanceTypeResourceTest.java
M 
backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendInstanceTypesResourceTest.java
M 
backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendTemplateBasedResourceTest.java
M 
backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendTemplateResourceTest.java
M 
backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendTemplatesBasedResourceTest.java
M 
backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendTemplatesResourceTest.java
M 
backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendVmPoolsResourceTest.java
M 
backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendVmResourceTest.java
M 
backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendVmsResourceTest.java
M 
backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/TemplateMapper.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/TemplateMapperTest.java
M 
backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/VmMapperTest.java
21 files changed, 478 insertions(+), 131 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/81/35281/1

diff --git 
a/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/model/DisplayType.java
 
b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/model/DisplayType.java
index b502f01..a3bb412 100644
--- 
a/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/model/DisplayType.java
+++ 
b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/model/DisplayType.java
@@ -16,6 +16,8 @@
 
 package org.ovirt.engine.api.model;
 
+import org.ovirt.engine.core.common.businessentities.GraphicsType;
+
 public enum DisplayType {
     VNC, SPICE;
 
@@ -30,4 +32,24 @@
             return null;
         }
     }
+
+    public static DisplayType fromGraphicsType(GraphicsType graphicsType) {
+        if (graphicsType == GraphicsType.SPICE) {
+            return DisplayType.SPICE;
+        } else if (graphicsType == GraphicsType.VNC) {
+            return DisplayType.VNC;
+        }
+        return null;
+    }
+
+    public GraphicsType toGraphicsType() {
+        switch (this) {
+            case SPICE:
+                return GraphicsType.SPICE;
+            case VNC:
+                return GraphicsType.VNC;
+            default:
+                return null;
+        }
+    }
 }
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendInstanceTypeResource.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendInstanceTypeResource.java
index 08b9285..e9e3a58 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendInstanceTypeResource.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendInstanceTypeResource.java
@@ -32,13 +32,18 @@
 
     static final String[] SUB_COLLECTIONS = { "nics", "watchdogs" };
 
-    public BackendInstanceTypeResource(String id) {
+    private final BackendInstanceTypesResource parent;
+
+    public BackendInstanceTypeResource(String id, BackendInstanceTypesResource 
parent) {
         super(id, InstanceType.class, 
org.ovirt.engine.core.common.businessentities.InstanceType.class, 
SUB_COLLECTIONS);
+        this.parent = parent;
     }
 
     @Override
     public InstanceType get() {
-        return performGet(VdcQueryType.GetVmTemplate, new 
GetVmTemplateParameters(guid));
+        InstanceType instanceType = performGet(VdcQueryType.GetVmTemplate, new 
GetVmTemplateParameters(guid));
+        parent.adjustDisplayData(instanceType);
+        return instanceType;
     }
 
     @Override
@@ -110,6 +115,8 @@
                 
updateParams.setRngDevice(RngDeviceMapper.map(incoming.getRngDevice(), null));
             }
 
+            BackendTemplatesResource.setGraphicsToParams(incoming, 
updateParams);
+
             return getMapper(modelType, 
UpdateVmTemplateParameters.class).map(incoming, updateParams);
         }
     }
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendInstanceTypesResource.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendInstanceTypesResource.java
index 8afcdb0..3765bb0 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendInstanceTypesResource.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendInstanceTypesResource.java
@@ -1,6 +1,7 @@
 package org.ovirt.engine.api.restapi.resource;
 
 import org.ovirt.engine.api.model.Console;
+import org.ovirt.engine.api.model.DisplayType;
 import org.ovirt.engine.api.model.InstanceType;
 import org.ovirt.engine.api.model.InstanceTypes;
 import org.ovirt.engine.api.model.VirtIOSCSI;
@@ -11,6 +12,7 @@
 import org.ovirt.engine.core.common.action.AddVmTemplateParameters;
 import org.ovirt.engine.core.common.action.VdcActionType;
 import org.ovirt.engine.core.common.action.VmTemplateParametersBase;
+import org.ovirt.engine.core.common.businessentities.GraphicsType;
 import org.ovirt.engine.core.common.businessentities.VM;
 import org.ovirt.engine.core.common.businessentities.VmEntityType;
 import org.ovirt.engine.core.common.businessentities.VmRngDevice;
@@ -84,7 +86,7 @@
     @Override
     @SingleEntityResource
     public InstanceTypeResource getInstanceTypeSubResource(String id) {
-        return inject(new BackendInstanceTypeResource(id));
+        return inject(new BackendInstanceTypeResource(id, this));
     }
 
     @Override
@@ -95,7 +97,9 @@
     protected InstanceTypes 
mapCollection(List<org.ovirt.engine.core.common.businessentities.InstanceType> 
entities) {
         InstanceTypes collection = new InstanceTypes();
         for (org.ovirt.engine.core.common.businessentities.InstanceType entity 
: entities) {
-            collection.getInstanceTypes().add(addLinks(populate(map(entity), 
entity)));
+            InstanceType instanceType = map(entity);
+            adjustDisplayData(instanceType);
+            collection.getInstanceTypes().add(addLinks(populate(instanceType, 
entity)));
         }
         return collection;
     }
@@ -133,4 +137,26 @@
                 "GetConsoleDevices", true);
     }
 
+
+    /**
+     * Sets static display info (derived from graphics device) to the Instance 
Type.
+     * Serves for BC purposes as VM can have more graphics devices, but old 
restapi allows us to set only one.
+     * If there are multiple graphics, SPICE is preferred.
+     *
+     * @param instanceType
+     */
+    public void adjustDisplayData(InstanceType instanceType) {
+        if (!instanceType.getDisplay().isSetType()) {
+            List<GraphicsType> graphicsTypes = 
VmHelper.getInstance().getGraphicsTypesForEntity(new 
Guid(instanceType.getId()));
+
+            if (graphicsTypes.contains(GraphicsType.SPICE)) {
+                instanceType.getDisplay().setType(DisplayType.SPICE.value());
+            } else if (graphicsTypes.contains(GraphicsType.VNC)) {
+                instanceType.getDisplay().setType(DisplayType.VNC.value());
+            } else {
+                instanceType.setDisplay(null);
+            }
+        }
+    }
+
 }
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendTemplateResource.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendTemplateResource.java
index b174f04..d5cbf7a 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendTemplateResource.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendTemplateResource.java
@@ -45,13 +45,18 @@
 
     static final String[] SUB_COLLECTIONS = { "disks", "nics", "cdroms", 
"tags", "permissions", "watchdogs" };
 
-    public BackendTemplateResource(String id) {
+    private final BackendTemplatesResource parent;
+
+    public BackendTemplateResource(String id, BackendTemplatesResource parent) 
{
         super(id, Template.class, VmTemplate.class, SUB_COLLECTIONS);
+        this.parent = parent;
     }
 
     @Override
     public Template get() {
-        return performGet(VdcQueryType.GetVmTemplate, new 
GetVmTemplateParameters(guid));
+        Template template = performGet(VdcQueryType.GetVmTemplate, new 
GetVmTemplateParameters(guid));
+        parent.adjustDisplayData(template);
+        return template;
     }
 
     @Override
@@ -133,6 +138,9 @@
                 params.setUpdateRngDevice(true);
                 
params.setRngDevice(RngDeviceMapper.map(incoming.getRngDevice(), null));
             }
+
+            BackendTemplatesResource.setGraphicsToParams(incoming, params);
+
             return getMapper(modelType, 
UpdateVmTemplateParameters.class).map(incoming, params);
         }
     }
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendTemplatesResource.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendTemplatesResource.java
index 337012b..d076caf 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendTemplatesResource.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendTemplatesResource.java
@@ -9,6 +9,7 @@
 
 import org.ovirt.engine.api.model.Console;
 import org.ovirt.engine.api.model.Disk;
+import org.ovirt.engine.api.model.DisplayType;
 import org.ovirt.engine.api.model.Template;
 import org.ovirt.engine.api.model.Templates;
 import org.ovirt.engine.api.model.VM;
@@ -23,6 +24,8 @@
 import org.ovirt.engine.core.common.action.VmTemplateParametersBase;
 import org.ovirt.engine.core.common.businessentities.DiskImage;
 import org.ovirt.engine.core.common.businessentities.Entities;
+import org.ovirt.engine.core.common.businessentities.GraphicsDevice;
+import org.ovirt.engine.core.common.businessentities.GraphicsType;
 import org.ovirt.engine.core.common.businessentities.VDSGroup;
 import org.ovirt.engine.core.common.businessentities.VmInit;
 import org.ovirt.engine.core.common.businessentities.VmRngDevice;
@@ -61,7 +64,7 @@
     @Override
     @SingleEntityResource
     public TemplateResource getTemplateSubResource(String id) {
-        return inject(new BackendTemplateResource(id));
+        return inject(new BackendTemplateResource(id, this));
     }
 
     @Override
@@ -103,6 +106,8 @@
             params.setUpdateRngDevice(true);
             params.setRngDevice(RngDeviceMapper.map(template.getRngDevice(), 
null));
         }
+
+        setGraphicsToParams(template, params);
 
         boolean isDomainSet = false;
         if (template.isSetStorageDomain() && 
template.getStorageDomain().isSetId()) {
@@ -172,7 +177,9 @@
 
         Templates collection = new Templates();
         for (VmTemplate entity : entities) {
-            collection.getTemplates().add(addLinks(populate(map(entity), 
entity)));
+            Template template = map(entity);
+            adjustDisplayData(template);
+            collection.getTemplates().add(addLinks(populate(template, 
entity)));
         }
         return collection;
     }
@@ -242,4 +249,47 @@
                 "GetConsoleDevices", true);
     }
 
+
+    /**
+     * Sets static display info (derived from graphics device) to the Template.
+     * Serves for BC purposes as VM can have more graphics devices, but old 
restapi allows us to set only one.
+     * If there are multiple graphics, SPICE is preferred.
+     *
+     * @param template
+     */
+    protected void adjustDisplayData(Template template) {
+        if (!template.getDisplay().isSetType()) {
+            List<GraphicsType> graphicsTypes = 
VmHelper.getInstance().getGraphicsTypesForEntity(new Guid(template.getId()));
+
+            if (graphicsTypes.contains(GraphicsType.SPICE)) {
+                template.getDisplay().setType(DisplayType.SPICE.value());
+            } else if (graphicsTypes.contains(GraphicsType.VNC)) {
+                template.getDisplay().setType(DisplayType.VNC.value());
+            } else {
+                template.setDisplay(null);
+            }
+        }
+    }
+
+    /**
+     * Set data about graphics from (REST) Template to parameters.
+     * @param template - template that contains graphics data
+     * @param params - parameters to be updated with graphics data
+     */
+    public static void setGraphicsToParams(Template template, 
VmTemplateParametersBase params) {
+        if (template.isSetDisplay() && template.getDisplay().isSetType()) {
+            DisplayType newDisplayType = 
DisplayType.fromValue(template.getDisplay().getType());
+
+            if (newDisplayType != null) {
+                for (GraphicsType graphicsType : GraphicsType.values()) {
+                    params.getGraphicsDevices().put(graphicsType, null); // 
reset graphics devices
+                }
+
+                GraphicsType newGraphicsType = newDisplayType.toGraphicsType();
+                params.getGraphicsDevices().put(newGraphicsType,
+                        new 
GraphicsDevice(newGraphicsType.getCorrespondingDeviceType()));
+            }
+        }
+    }
+
 }
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmResource.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmResource.java
index fd4bfa6..f8279a3 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmResource.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmResource.java
@@ -108,6 +108,7 @@
         } else {
             vm = performGet(VdcQueryType.GetVmByVmId, new 
IdQueryParameters(guid));
         }
+        parent.adjustDisplayData(vm);
         return removeRestrictedInfo(vm);
     }
 
@@ -537,6 +538,9 @@
                 params.setUpdateRngDevice(true);
                 
params.setRngDevice(RngDeviceMapper.map(incoming.getRngDevice(), null));
             }
+
+            BackendVmsResource.setGraphicsToParams(incoming, params);
+
             if (incoming.isSetInstanceType() && 
(incoming.getInstanceType().isSetId() || 
incoming.getInstanceType().isSetName())) {
                 
updated.setInstanceTypeId(lookupInstanceTypeId(incoming.getInstanceType()));
             } else if (incoming.isSetInstanceType()) {
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmsResource.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmsResource.java
index d37afe2..b3084b3 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmsResource.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmsResource.java
@@ -6,10 +6,8 @@
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
-
 import javax.ws.rs.WebApplicationException;
 import javax.ws.rs.core.Response;
-
 import org.ovirt.engine.api.common.util.DetailHelper;
 import org.ovirt.engine.api.common.util.DetailHelper.Detail;
 import org.ovirt.engine.api.model.Action;
@@ -20,6 +18,7 @@
 import org.ovirt.engine.api.model.Disk;
 import org.ovirt.engine.api.model.Disks;
 import org.ovirt.engine.api.model.Display;
+import org.ovirt.engine.api.model.DisplayType;
 import org.ovirt.engine.api.model.Initialization;
 import org.ovirt.engine.api.model.MemoryPolicy;
 import org.ovirt.engine.api.model.Nics;
@@ -47,6 +46,8 @@
 import org.ovirt.engine.core.common.action.VmManagementParametersBase;
 import org.ovirt.engine.core.common.businessentities.DiskImage;
 import org.ovirt.engine.core.common.businessentities.Entities;
+import org.ovirt.engine.core.common.businessentities.GraphicsDevice;
+import org.ovirt.engine.core.common.businessentities.GraphicsType;
 import org.ovirt.engine.core.common.businessentities.VDSGroup;
 import org.ovirt.engine.core.common.businessentities.VdsStatic;
 import org.ovirt.engine.core.common.businessentities.VmInit;
@@ -119,9 +120,7 @@
                     staticVm.setOsId(OsRepository.AUTO_SELECT_OS);
                 }
 
-                if (Guid.Empty.equals(templateId) && !vm.isSetDisplay()) {
-                    staticVm.setDefaultDisplayType(null);
-                }
+                staticVm.setDefaultDisplayType(null); // let backend decide 
based on osinfo
 
                 
staticVm.setUsbPolicy(VmMapper.getUsbPolicyOnCreate(vm.getUsb(),
                         cluster.getcompatibility_version()));
@@ -297,6 +296,8 @@
             params.setRngDevice(RngDeviceMapper.map(vm.getRngDevice(), null));
         }
 
+        setGraphicsToParams(vm, params);
+
         return performCreate(VdcActionType.AddVmFromSnapshot,
                                 params,
                                 new 
QueryIdResolver<Guid>(VdcQueryType.GetVmByVmId, IdQueryParameters.class));
@@ -319,11 +320,34 @@
             params.setRngDevice(RngDeviceMapper.map(vm.getRngDevice(), null));
         }
 
+        setGraphicsToParams(vm, params);
+
         params.setMakeCreatorExplicitOwner(shouldMakeCreatorExplicitOwner());
         setupCloneTemplatePermissions(vm, params);
         return performCreate(VdcActionType.AddVmFromTemplate,
                                params,
                                new 
QueryIdResolver<Guid>(VdcQueryType.GetVmByVmId, IdQueryParameters.class));
+    }
+
+    /**
+     * Set data about graphics from (REST) VM to parameters.
+     * @param vm - vm that contains graphics data
+     * @param params - parameters to be updated with graphics data
+     */
+    public static void setGraphicsToParams(VM vm, VmManagementParametersBase 
params) {
+        if (vm.isSetDisplay() && vm.getDisplay().isSetType()) {
+            DisplayType newDisplayType = 
DisplayType.fromValue(vm.getDisplay().getType());
+
+            if (newDisplayType != null) {
+                for (GraphicsType graphicsType : GraphicsType.values()) {
+                    params.getGraphicsDevices().put(graphicsType, null); // 
reset graphics devices
+                }
+
+                GraphicsType newGraphicsType = newDisplayType.toGraphicsType();
+                params.getGraphicsDevices().put(newGraphicsType,
+                        new 
GraphicsDevice(newGraphicsType.getCorrespondingDeviceType()));
+            }
+        }
     }
 
     private HashMap<Guid, DiskImage> getDisksToClone(Disks disks, Guid 
templateId) {
@@ -382,6 +406,8 @@
             params.setRngDevice(RngDeviceMapper.map(vm.getRngDevice(), null));
         }
 
+        setGraphicsToParams(vm, params);
+
         return performCreate(VdcActionType.AddVm,
                                params,
                                new 
QueryIdResolver<Guid>(VdcQueryType.GetVmByVmId, IdQueryParameters.class));
@@ -412,6 +438,8 @@
             params.setUpdateRngDevice(true);
             params.setRngDevice(RngDeviceMapper.map(vm.getRngDevice(), null));
         }
+
+        setGraphicsToParams(vm, params);
 
         return performCreate(VdcActionType.AddVmFromScratch,
                                params,
@@ -505,6 +533,9 @@
         VMs collection = new VMs();
         for (org.ovirt.engine.core.common.businessentities.VM entity : 
entities) {
             VM vm = map(entity);
+
+            adjustDisplayData(vm);
+
          // Filtered users are not allowed to view host related information
             if (isFiltered) {
                 removeRestrictedInfoFromVM(vm);
@@ -514,6 +545,27 @@
         return collection;
     }
 
+    /**
+     * Sets static display info (derived from graphics device) to the VM.
+     * Serves for BC purposes as VM can have more graphics devices, but old 
restapi allows us to set only one.
+     * If there are multiple graphics, SPICE is preferred.
+     *
+     * @param vm
+     */
+    protected void adjustDisplayData(VM vm) {
+        if (!vm.getDisplay().isSetType()) { // non running/paused vm
+            List<GraphicsType> graphicsTypes = 
VmHelper.getInstance().getGraphicsTypesForEntity(new Guid(vm.getId()));
+
+            if (graphicsTypes.contains(GraphicsType.SPICE)) {
+                vm.getDisplay().setType(DisplayType.SPICE.value());
+            } else if (graphicsTypes.contains(GraphicsType.VNC)) {
+                vm.getDisplay().setType(DisplayType.VNC.value());
+            } else {
+                vm.setDisplay(null);
+            }
+        }
+    }
+
     protected void setPayload(VM vm) {
         try {
             VmPayload payload = getEntity(VmPayload.class,
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/util/VmHelper.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/util/VmHelper.java
index 33d7901..d2ad4fa 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/util/VmHelper.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/util/VmHelper.java
@@ -1,5 +1,8 @@
 package org.ovirt.engine.api.restapi.util;
 
+import java.util.ArrayList;
+import org.ovirt.engine.core.common.businessentities.GraphicsDevice;
+import org.ovirt.engine.core.common.businessentities.GraphicsType;
 import org.ovirt.engine.core.common.queries.IdQueryParameters;
 import org.ovirt.engine.core.common.queries.VdcQueryType;
 import org.ovirt.engine.core.compat.Guid;
@@ -24,4 +27,25 @@
                 new IdQueryParameters(id),
                 "GetVirtioScsiControllers", true);
     }
+
+    /**
+     * Returs graphics types of graphics devices of entity with given id.
+     */
+    public List<GraphicsType> getGraphicsTypesForEntity(Guid id) {
+        List<GraphicsType> graphicsTypes = new ArrayList<>();
+
+        List<GraphicsDevice> graphicsDevices = getEntity(List.class,
+                VdcQueryType.GetGraphicsDevices,
+                new IdQueryParameters(id),
+                "GetGraphicsDevices", true);
+
+        if (graphicsDevices != null) {
+            for (GraphicsDevice graphicsDevice : graphicsDevices) {
+                graphicsTypes.add(graphicsDevice.getGraphicsType());
+            }
+        }
+
+        return graphicsTypes;
+    }
+
 }
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendInstanceTypeResourceTest.java
 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendInstanceTypeResourceTest.java
index 424d073..026d5cd 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendInstanceTypeResourceTest.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendInstanceTypeResourceTest.java
@@ -11,7 +11,7 @@
     extends BackendTemplateBasedResourceTest<InstanceType, 
org.ovirt.engine.core.common.businessentities.InstanceType, 
BackendInstanceTypeResource> {
 
     public BackendInstanceTypeResourceTest() {
-        super(new BackendInstanceTypeResource(GUIDS[0].toString()));
+        super(new BackendInstanceTypeResource(GUIDS[0].toString(), new 
BackendInstanceTypesResource()));
     }
 
     @Override
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendInstanceTypesResourceTest.java
 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendInstanceTypesResourceTest.java
index c196b28..04bc91d 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendInstanceTypesResourceTest.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendInstanceTypesResourceTest.java
@@ -86,4 +86,16 @@
         assertEquals(4, model.getCpu().getTopology().getCores().intValue());
         assertEquals(2, model.getCpu().getTopology().getSockets().intValue());
     }
+
+    @Override
+    public void testQuery() throws Exception {
+        setUpGetGraphicsExpectations(3);
+        super.testQuery();
+    }
+
+    @Override
+    public void testList() throws Exception {
+        setUpGetGraphicsExpectations(3);
+        super.testList();
+    }
 }
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendTemplateBasedResourceTest.java
 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendTemplateBasedResourceTest.java
index 6f641a1..dd8242c 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendTemplateBasedResourceTest.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendTemplateBasedResourceTest.java
@@ -1,11 +1,13 @@
 package org.ovirt.engine.api.restapi.resource;
 
+import java.util.Arrays;
 import org.junit.Test;
 import org.ovirt.engine.api.model.Template;
 import org.ovirt.engine.api.resource.UpdatableResource;
 import org.ovirt.engine.api.restapi.util.VmHelper;
 import org.ovirt.engine.core.common.action.UpdateVmTemplateParameters;
 import org.ovirt.engine.core.common.action.VdcActionType;
+import org.ovirt.engine.core.common.businessentities.GraphicsDevice;
 import org.ovirt.engine.core.common.queries.GetVmTemplateParameters;
 import org.ovirt.engine.core.common.queries.IdQueryParameters;
 import org.ovirt.engine.core.common.queries.VdcQueryType;
@@ -13,6 +15,8 @@
 import javax.ws.rs.WebApplicationException;
 import java.util.ArrayList;
 import java.util.List;
+import org.ovirt.engine.core.common.utils.VmDeviceType;
+
 
 import static org.easymock.EasyMock.expect;
 
@@ -37,7 +41,7 @@
     public void testBadGuid() throws Exception {
         control.replay();
         try {
-            new BackendTemplateResource("foo");
+            new BackendTemplateResource("foo", new BackendTemplatesResource());
             fail("expected WebApplicationException");
         } catch (WebApplicationException wae) {
             verifyNotFoundException(wae);
@@ -60,6 +64,7 @@
     @Test
     public void testGet() throws Exception {
         setUriInfo(setUpBasicUriExpectations());
+        setUpGetGraphicsExpectations(1);
         setUpGetEntityExpectations(1);
         control.replay();
 
@@ -102,6 +107,7 @@
             setUpGetVirtioScsiExpectations(new int[]{0});
             setUpGetRngDeviceExpectations(new int [] {0});
         }
+        setUpGetGraphicsExpectations(1);
         control.replay();
 
         R response = resource.get();
@@ -196,4 +202,14 @@
     }
 
     protected abstract R getRestModel(int index);
+
+    protected void setUpGetGraphicsExpectations(int times) throws Exception {
+        for (int i = 0; i < times; i++) {
+            setUpGetEntityExpectations(VdcQueryType.GetGraphicsDevices,
+                    IdQueryParameters.class,
+                    new String[]{"Id"},
+                    new Object[]{GUIDS[i]},
+                    Arrays.asList(new GraphicsDevice(VmDeviceType.SPICE)));
+        }
+    }
 }
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendTemplateResourceTest.java
 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendTemplateResourceTest.java
index 6d304fb..167cfc8 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendTemplateResourceTest.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendTemplateResourceTest.java
@@ -30,7 +30,7 @@
     extends BackendTemplateBasedResourceTest<Template, VmTemplate, 
BackendTemplateResource> {
 
     public BackendTemplateResourceTest() {
-        super(new BackendTemplateResource(GUIDS[0].toString()));
+        super(new BackendTemplateResource(GUIDS[0].toString(), new 
BackendTemplatesResource()));
     }
 
     public void testUpdate() throws Exception {
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendTemplatesBasedResourceTest.java
 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendTemplatesBasedResourceTest.java
index 2388f51..7cab07d 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendTemplatesBasedResourceTest.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendTemplatesBasedResourceTest.java
@@ -1,6 +1,7 @@
 package org.ovirt.engine.api.restapi.resource;
 
 
+import java.util.Arrays;
 import org.junit.Test;
 import org.ovirt.engine.api.model.Template;
 import org.ovirt.engine.api.restapi.util.VmHelper;
@@ -9,6 +10,7 @@
 import org.ovirt.engine.core.common.action.VmTemplateParametersBase;
 import org.ovirt.engine.core.common.businessentities.AsyncTaskStatus;
 import org.ovirt.engine.core.common.businessentities.AsyncTaskStatusEnum;
+import org.ovirt.engine.core.common.businessentities.GraphicsDevice;
 import org.ovirt.engine.core.common.interfaces.SearchType;
 import org.ovirt.engine.core.common.queries.GetVmTemplateParameters;
 import org.ovirt.engine.core.common.queries.IdQueryParameters;
@@ -19,6 +21,8 @@
 import javax.ws.rs.core.UriInfo;
 import java.util.ArrayList;
 import java.util.List;
+import org.ovirt.engine.core.common.utils.VmDeviceType;
+
 
 import static org.easymock.EasyMock.expect;
 
@@ -40,6 +44,7 @@
     @Test
     public void testRemove() throws Exception {
         setUpGetEntityExpectations(0);
+        setUpGetGraphicsExpectations(1);
         setUriInfo(setUpActionExpectations(VdcActionType.RemoveVmTemplate,
                 VmTemplateParametersBase.class,
                 new String[] { "VmTemplateId" },
@@ -78,6 +83,7 @@
 
     protected void doTestBadRemove(boolean canDo, boolean success, String 
detail) throws Exception {
         setUpGetEntityExpectations(0);
+        setUpGetGraphicsExpectations(1);
         setUriInfo(setUpActionExpectations(VdcActionType.RemoveVmTemplate,
                 VmTemplateParametersBase.class,
                 new String[] { "VmTemplateId" },
@@ -168,6 +174,7 @@
             setUpGetRngDeviceExpectations(new int[] {0, 1, 2});
         }
 
+        setUpGetGraphicsExpectations(3);
         setUpQueryExpectations("");
         collection.setUriInfo(uriInfo);
         verifyCollection(getCollection());
@@ -203,6 +210,16 @@
                 getEntity(index));
     }
 
+    protected void setUpGetGraphicsExpectations(int times) throws Exception {
+        for (int i = 0; i < times; i++) {
+            setUpGetEntityExpectations(VdcQueryType.GetGraphicsDevices,
+                    IdQueryParameters.class,
+                    new String[] { "Id" },
+                    new Object[] { GUIDS[i] },
+                    Arrays.asList(new GraphicsDevice(VmDeviceType.SPICE)));
+        }
+    }
+
     protected abstract Response doAdd(R model);
 
     protected abstract R getRestModel(int index);
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendTemplatesResourceTest.java
 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendTemplatesResourceTest.java
index 09a581d..a19bc57 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendTemplatesResourceTest.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendTemplatesResourceTest.java
@@ -177,6 +177,20 @@
     }
 
     @Override
+    @Test
+    public void testQuery() throws Exception {
+        setUpGetGraphicsExpectations(3);
+        super.testQuery();
+    }
+
+    @Override
+    @Test
+    public void testList() throws Exception {
+        setUpGetGraphicsExpectations(3);
+        super.testList();
+    }
+
+    @Override
     protected Response doAdd(Template model) {
         return collection.add(model);
     }
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendVmPoolsResourceTest.java
 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendVmPoolsResourceTest.java
index 18ba214..9d9e1c2 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendVmPoolsResourceTest.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendVmPoolsResourceTest.java
@@ -62,7 +62,7 @@
         expect(entity.getDescription()).andReturn(DESCRIPTIONS[1]).anyTimes();
         expect(entity.getNumOfCpus()).andReturn(8).anyTimes();
         expect(entity.getNumOfSockets()).andReturn(2).anyTimes();
-        
expect(entity.getDefaultDisplayType()).andReturn(DisplayType.cirrus).anyTimes();
 // todo restapi follow up
+        
expect(entity.getDefaultDisplayType()).andReturn(DisplayType.vga).anyTimes();
         expect(entity.getNumOfMonitors()).andReturn(2).anyTimes();
         expect(entity.getVmType()).andReturn(VmType.Server).anyTimes();
         return entity;
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendVmResourceTest.java
 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendVmResourceTest.java
index f2f252a..9677168 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendVmResourceTest.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendVmResourceTest.java
@@ -8,6 +8,8 @@
 
 import java.math.BigDecimal;
 import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 
@@ -26,6 +28,8 @@
 import org.ovirt.engine.api.model.CdRoms;
 import org.ovirt.engine.api.model.Cluster;
 import org.ovirt.engine.api.model.CreationStatus;
+import org.ovirt.engine.api.model.Display;
+import org.ovirt.engine.api.model.DisplayType;
 import org.ovirt.engine.api.model.File;
 import org.ovirt.engine.api.model.Floppies;
 import org.ovirt.engine.api.model.Floppy;
@@ -62,6 +66,8 @@
 import org.ovirt.engine.core.common.businessentities.AsyncTaskStatus;
 import org.ovirt.engine.core.common.businessentities.AsyncTaskStatusEnum;
 import org.ovirt.engine.core.common.businessentities.BootSequence;
+import org.ovirt.engine.core.common.businessentities.GraphicsDevice;
+import org.ovirt.engine.core.common.businessentities.GraphicsType;
 import org.ovirt.engine.core.common.businessentities.SnapshotActionEnum;
 import org.ovirt.engine.core.common.businessentities.VDS;
 import org.ovirt.engine.core.common.businessentities.VDSGroup;
@@ -134,6 +140,7 @@
         setUpGetEntityExpectations(1);
         setUpGetPayloadExpectations(0, 1);
         setUpGetBallooningExpectations();
+        setUpGetGraphicsExpectations(1);
         setUpGetCertuficateExpectations();
         control.replay();
         VM response = resource.get();
@@ -147,6 +154,7 @@
         setUpGetEntityNextRunExpectations();
         setUpGetPayloadExpectations(0, 1);
         setUpGetBallooningExpectations();
+        setUpGetGraphicsExpectations(1);
         setUpGetCertuficateExpectations();
         control.replay();
         VM response = resource.get();
@@ -162,6 +170,7 @@
             setUpGetEntityExpectations(1);
             setUpGetPayloadExpectations(0, 1);
             setUpGetBallooningExpectations();
+            setUpGetGraphicsExpectations(1);
             control.replay();
 
             VM vm = resource.get();
@@ -196,6 +205,7 @@
         setUpGetEntityExpectations(1);
         setUpGetPayloadExpectations(0, 1);
         setUpGetBallooningExpectations();
+        setUpGetGraphicsExpectations(1);
         setUpGetCertuficateExpectations();
         control.replay();
         VM response = resource.get();
@@ -232,16 +242,17 @@
         setUpGetPayloadExpectations(0, 2);
         setUpGetBallooningExpectations();
         setUpGetBallooningExpectations();
+        setUpGetGraphicsExpectations(1);
         setUpGetConsoleExpectations(new int[]{0});
         setUpGetVmOvfExpectations(new int[]{0});
         setUpGetVirtioScsiExpectations(new int[] {0});
         setUpGetRngDeviceExpectations(new int[]{0});
         setUriInfo(setUpActionExpectations(VdcActionType.UpdateVm,
-                                           VmManagementParametersBase.class,
-                                           new String[] {},
-                                           new Object[] {},
-                                           true,
-                                           true));
+                VmManagementParametersBase.class,
+                new String[]{},
+                new Object[]{},
+                true,
+                true));
 
         verifyModel(resource.update(getModel(0)), 0);
     }
@@ -251,8 +262,8 @@
         setUpGetEntityExpectations(3);
         setUpEntityQueryExpectations(VdcQueryType.GetVdsGroupByVdsGroupId,
                 IdQueryParameters.class,
-                new String[] { "Id" },
-                new Object[] { GUIDS[2] },
+                new String[]{"Id"},
+                new Object[]{GUIDS[2]},
                 getVdsGroupEntity());
 
         setUpGetPayloadExpectations(0, 1);
@@ -260,6 +271,7 @@
 
         setUpGetBallooningExpectations();
         setUpGetBallooningExpectations();
+        setUpGetGraphicsExpectations(1);
         setUpGetConsoleExpectations(new int[]{0});
         setUpGetVmOvfExpectations(new int[]{0});
         setUpGetVirtioScsiExpectations(new int[] {0});
@@ -303,6 +315,7 @@
         setUpGetPayloadExpectations(0, 2);
         setUpGetBallooningExpectations();
         setUpGetBallooningExpectations();
+        setUpGetGraphicsExpectations(1);
         setUpGetConsoleExpectations(new int[]{0});
         setUpGetVmOvfExpectations(new int[]{0});
         setUpGetVirtioScsiExpectations(new int[] {0});
@@ -344,24 +357,25 @@
         setUpGetPayloadExpectations(0, 2);
         setUpGetBallooningExpectations();
         setUpGetBallooningExpectations();
+        setUpGetGraphicsExpectations(1);
         setUpGetConsoleExpectations(new int[]{0});
         setUpGetVmOvfExpectations(new int[]{0});
         setUpGetVirtioScsiExpectations(new int[] {0});
         setUpGetRngDeviceExpectations(new int[]{0});
         setUriInfo(setUpActionExpectations(VdcActionType.ChangeVMCluster,
-                                           ChangeVMClusterParameters.class,
-                                           new String[] {"ClusterId", "VmId"},
-                                           new Object[] {GUIDS[1], GUIDS[0]},
-                                           true,
-                                           true,
-                                           false));
+                ChangeVMClusterParameters.class,
+                new String[]{"ClusterId", "VmId"},
+                new Object[]{GUIDS[1], GUIDS[0]},
+                true,
+                true,
+                false));
 
         setUpActionExpectations(VdcActionType.UpdateVm,
-                                VmManagementParametersBase.class,
-                                new String[] {},
-                                new Object[] {},
-                                true,
-                                true);
+                VmManagementParametersBase.class,
+                new String[]{},
+                new Object[]{},
+                true,
+                true);
 
         VM model = getModel(0);
         model.setId(GUIDS[0].toString());
@@ -390,6 +404,7 @@
 
         setUpGetPayloadExpectations(0, 1);
         setUpGetBallooningExpectations();
+        setUpGetGraphicsExpectations(1);
         setUriInfo(setUpActionExpectations(VdcActionType.UpdateVm,
                                            VmManagementParametersBase.class,
                                            new String[] {},
@@ -411,6 +426,7 @@
 
         setUpGetPayloadExpectations(0, 1);
         setUpGetBallooningExpectations();
+        setUpGetGraphicsExpectations(1);
 
         setUriInfo(setUpBasicUriExpectations());
         control.replay();
@@ -428,9 +444,9 @@
     @Test
     public void testStart() throws Exception {
         setUriInfo(setUpActionExpectations(VdcActionType.RunVm,
-                                           RunVmParams.class,
-                                           new String[] { "VmId" },
-                                           new Object[] { GUIDS[0] }));
+                RunVmParams.class,
+                new String[]{"VmId"},
+                new Object[]{GUIDS[0]}));
 
         Response response = resource.start(new Action());
         verifyActionResponse(response);
@@ -442,9 +458,9 @@
         setUpWindowsGetEntityExpectations(1, false);
 
         setUriInfo(setUpActionExpectations(VdcActionType.RunVmOnce,
-                                           RunVmOnceParams.class,
-                                           new String[] { "VmId" },
-                                           new Object[] { GUIDS[0] }));
+                RunVmOnceParams.class,
+                new String[]{"VmId"},
+                new Object[]{GUIDS[0]}));
 
         Action action = new Action();
         action.setVm(new VM());
@@ -469,22 +485,33 @@
         verifyActionResponse(resource.start(action));
     }
 
-    // todo  restapi follow up
-//    @Test
-//    public void testStartWithVnc() throws Exception {
-//        setUpWindowsGetEntityExpectations(1, false);
-//        setUriInfo(setUpActionExpectations(VdcActionType.RunVmOnce,
-//                                           RunVmOnceParams.class,
-//                                           new String[] { "VmId", "UseVnc" },
-//                                           new Object[] { GUIDS[0], 
Boolean.TRUE }));
-//
-//        Action action = new Action();
-//        action.setVm(new VM());
-//        action.getVm().setDisplay(new Display());
-//        action.getVm().getDisplay().setType(DisplayType.VNC.value());
-//
-//        verifyActionResponse(resource.start(action));
-//    }
+    @Test
+    public void testStartWithSpice() throws Exception {
+        testStartWithModifiedGraphics(GraphicsType.SPICE);
+    }
+
+    @Test
+    public void testStartWithVnc() throws Exception {
+        testStartWithModifiedGraphics(GraphicsType.VNC);
+    }
+
+    private void testStartWithModifiedGraphics(GraphicsType graphicsType) 
throws Exception {
+        setUpWindowsGetEntityExpectations(1, false);
+        setUriInfo(setUpActionExpectations(VdcActionType.RunVmOnce,
+                                           RunVmOnceParams.class,
+                                           new String[] { "VmId", 
"RunOnceGraphics" },
+                                           new Object[] { GUIDS[0], 
Collections.singleton(graphicsType) }));
+
+        Action action = new Action();
+        action.setVm(new VM());
+        action.getVm().setDisplay(new Display());
+        DisplayType display = (graphicsType == GraphicsType.VNC)
+                ? DisplayType.VNC
+                : DisplayType.SPICE;
+        action.getVm().getDisplay().setType(display.value());
+
+        verifyActionResponse(resource.start(action));
+    }
 
     @Test
     public void testStartWithBootDev() throws Exception {
@@ -891,9 +918,9 @@
 
     protected void doTestMove(StorageDomain storageDomain) throws Exception {
         setUriInfo(setUpActionExpectations(VdcActionType.MoveVm,
-                       MoveVmParameters.class,
-                       new String[] { "ContainerId", "StorageDomainId" },
-                       new Object[] { GUIDS[0], GUIDS[2] }));
+                MoveVmParameters.class,
+                new String[]{"ContainerId", "StorageDomainId"},
+                new Object[]{GUIDS[0], GUIDS[2]}));
 
         Action action = new Action();
         action.setStorageDomain(storageDomain);
@@ -942,9 +969,9 @@
         assertSame(entity, query.resolve(GUIDS[0]));
         List<Statistic> statistics = query.getStatistics(entity);
         verifyStatistics(statistics,
-                         new String[] {"memory.installed", "memory.used", 
"cpu.current.guest",
-                                       "cpu.current.hypervisor", 
"cpu.current.total", "migration.progress"},
-                         new BigDecimal[] {asDec(10*Mb), asDec(2*Mb), 
asDec(30), asDec(40), asDec(70), asDec(50)});
+                new String[]{"memory.installed", "memory.used", 
"cpu.current.guest",
+                        "cpu.current.hypervisor", "cpu.current.total", 
"migration.progress"},
+                new BigDecimal[]{asDec(10 * Mb), asDec(2 * Mb), asDec(30), 
asDec(40), asDec(70), asDec(50)});
         Statistic adopted = query.adopt(new Statistic());
         assertTrue(adopted.isSetVm());
         assertEquals(GUIDS[0].toString(), adopted.getVm().getId());
@@ -953,10 +980,10 @@
     protected void setUpGetHostIdExpectations(int idx) throws Exception {
         VDS host = 
BackendHostsResourceTest.setUpEntityExpectations(control.createMock(VDS.class), 
idx);
         setUpGetEntityExpectations(VdcQueryType.GetVdsByName,
-                                   NameQueryParameters.class,
-                                   new String[] { "Name" },
-                                   new Object[] { NAMES[idx] },
-                                   host);
+                NameQueryParameters.class,
+                new String[]{"Name"},
+                new Object[]{NAMES[idx]},
+                host);
     }
 
     protected void setUpGetEntityExpectations(int times) throws Exception {
@@ -1098,6 +1125,16 @@
                 true);
     }
 
+    protected void setUpGetGraphicsExpectations(int times) throws Exception {
+        for (int i = 0; i < times; i++) {
+            setUpGetEntityExpectations(VdcQueryType.GetGraphicsDevices,
+                    IdQueryParameters.class,
+                    new String[] { "Id" },
+                    new Object[] { GUIDS[i] },
+                    Arrays.asList(new GraphicsDevice(VmDeviceType.SPICE)));
+        }
+    }
+
     private void setUpGetCertuficateExpectations() throws Exception {
         setUpGetEntityExpectations(VdcQueryType.GetVdsCertificateSubjectByVmId,
                 IdQueryParameters.class,
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendVmsResourceTest.java
 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendVmsResourceTest.java
index 25f0737..a64cadf 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendVmsResourceTest.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendVmsResourceTest.java
@@ -3,6 +3,7 @@
 import static org.easymock.EasyMock.expect;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -45,6 +46,9 @@
 import org.ovirt.engine.core.common.businessentities.DiskImage;
 import org.ovirt.engine.core.common.businessentities.DiskImageBase;
 import org.ovirt.engine.core.common.businessentities.DisplayType;
+import org.ovirt.engine.core.common.businessentities.GraphicsDevice;
+import org.ovirt.engine.core.common.businessentities.GraphicsInfo;
+import org.ovirt.engine.core.common.businessentities.GraphicsType;
 import org.ovirt.engine.core.common.businessentities.VDSGroup;
 import org.ovirt.engine.core.common.businessentities.VdsStatic;
 import org.ovirt.engine.core.common.businessentities.VmInit;
@@ -107,6 +111,7 @@
                         new Object[] { GUIDS[i] },
                         vm);
             }
+            setUpGetGraphicsExpectations(3);
             setUpQueryExpectations("");
             collection.setUriInfo(uriInfo);
             List<VM> vms = getCollection();
@@ -123,9 +128,20 @@
         setUpGetEntityExpectations();
         setUpGetPayloadExpectations(1, 0);
         setUpGetBallooningExpectations(1);
+        setUpGetGraphicsExpectations(1);
         setUpActionExpectations(VdcActionType.RemoveVm, 
RemoveVmParameters.class, new String[] {
                 "VmId", "Force" }, new Object[] { GUIDS[0], Boolean.FALSE }, 
true, true);
         verifyRemove(collection.remove(GUIDS[0].toString()));
+    }
+
+    protected void setUpGetGraphicsExpectations(int times) throws Exception {
+        for (int i = 0; i < times; i++) {
+            setUpGetEntityExpectations(VdcQueryType.GetGraphicsDevices,
+                    IdQueryParameters.class,
+                    new String[] { "Id" },
+                    new Object[] { GUIDS[i] },
+                    Arrays.asList(new GraphicsDevice(VmDeviceType.SPICE)));
+        }
     }
 
     @Test
@@ -134,6 +150,7 @@
         setUpGetEntityExpectations();
         setUpGetPayloadExpectations(1, 0);
         setUpGetBallooningExpectations(1);
+        setUpGetGraphicsExpectations(1);
         setUpActionExpectations(VdcActionType.RemoveVm, 
RemoveVmParameters.class, new String[] {
             "VmId", "Force" }, new Object[] { GUIDS[0], Boolean.TRUE }, true, 
true);
         verifyRemove(collection.remove(GUIDS[0].toString(), new 
Action(){{setForce(true);}}));
@@ -145,6 +162,7 @@
         setUpGetEntityExpectations();
         setUpGetPayloadExpectations(1, 0);
         setUpGetBallooningExpectations(1);
+        setUpGetGraphicsExpectations(1);
         setUpActionExpectations(VdcActionType.RemoveVm, 
RemoveVmParameters.class, new String[] {
                 "VmId", "RemoveDisks" }, new Object[] { GUIDS[0], 
Boolean.FALSE }, true, true);
 
@@ -161,6 +179,7 @@
         setUpGetEntityExpectations();
         setUpGetPayloadExpectations(1, 0);
         setUpGetBallooningExpectations(1);
+        setUpGetGraphicsExpectations(1);
         setUpActionExpectations(VdcActionType.RemoveVm, 
RemoveVmParameters.class, new String[] {
                                 "VmId", "Force" }, new Object[] { GUIDS[0], 
Boolean.FALSE }, true, true);
         verifyRemove(collection.remove(GUIDS[0].toString(), new Action(){{}}));
@@ -206,6 +225,7 @@
         setUpGetEntityExpectations();
         setUpGetPayloadExpectations(1, 0);
         setUpGetBallooningExpectations(1);
+        setUpGetGraphicsExpectations(1);
         setUriInfo(setUpActionExpectations(VdcActionType.RemoveVm,
                                            RemoveVmParameters.class,
                                            new String[] { "VmId", "Force" },
@@ -1160,6 +1180,7 @@
     public void testList() throws Exception {
         UriInfo uriInfo = setUpUriExpectations(null);
 
+        setUpGetGraphicsExpectations(3);
         setUpQueryExpectations("");
         collection.setUriInfo(uriInfo);
         verifyCollection(getCollection());
@@ -1177,6 +1198,7 @@
 
     private void testListAllConsoleAware(boolean allContent) throws Exception {
         UriInfo uriInfo = setUpUriExpectations(null);
+        setUpGetGraphicsExpectations(3);
         if (allContent) {
             List<String> populates = new ArrayList<String>();
             populates.add("true");
@@ -1203,6 +1225,7 @@
         
expect(httpHeaders.getRequestHeader(BackendResource.POPULATE)).andReturn(populates).anyTimes();
         setUpGetPayloadExpectations(3);
         setUpGetBallooningExpectations(3);
+        setUpGetGraphicsExpectations(3);
         setUpGetConsoleExpectations(new int[]{0, 1, 2});
         setUpGetVmOvfExpectations(new int[]{0, 1, 2});
         setUpGetVirtioScsiExpectations(new int[]{0, 1, 2});
@@ -1245,6 +1268,7 @@
     public void testQuery() throws Exception {
         UriInfo uriInfo = setUpUriExpectations(QUERY);
 
+        setUpGetGraphicsExpectations(3);
         setUpQueryExpectations(QUERY);
         collection.setUriInfo(uriInfo);
         verifyCollection(getCollection());
@@ -1335,7 +1359,9 @@
         expect(entity.getNumOfCpus()).andReturn(8).anyTimes();
         expect(entity.getNumOfSockets()).andReturn(2).anyTimes();
         
expect(entity.getUsageMemPercent()).andReturn(Integer.valueOf(20)).anyTimes();
-        
expect(entity.getDisplayType()).andReturn(DisplayType.cirrus).anyTimes(); // 
todo restapi follow up
+        Map<GraphicsType, GraphicsInfo> graphics = new HashMap<>();
+        graphics.put(GraphicsType.VNC, new GraphicsInfo());
+        expect(entity.getGraphicsInfos()).andReturn(graphics).anyTimes();
         expect(entity.getDisplaySecurePort()).andReturn(5900).anyTimes();
         expect(entity.getNumOfMonitors()).andReturn(2).anyTimes();
         expect(entity.getVmType()).andReturn(VmType.Server).anyTimes();
@@ -1358,7 +1384,7 @@
         
expect(entity.getDescription()).andReturn(DESCRIPTIONS[index]).anyTimes();
         expect(entity.getNumOfCpus()).andReturn(8).anyTimes();
         expect(entity.getNumOfSockets()).andReturn(2).anyTimes();
-        
expect(entity.getDefaultDisplayType()).andReturn(DisplayType.cirrus).anyTimes();
 // todo restapi follow up
+        
expect(entity.getDefaultDisplayType()).andReturn(DisplayType.vga).anyTimes();
         expect(entity.getNumOfMonitors()).andReturn(2).anyTimes();
         expect(entity.getVmType()).andReturn(VmType.Server).anyTimes();
         return entity;
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 d5ea4d3..7066cc2 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
@@ -10,7 +10,6 @@
 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;
@@ -127,12 +126,6 @@
             }
         }
         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());
             }
@@ -275,12 +268,6 @@
             }
         }
         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());
             }
@@ -386,17 +373,14 @@
         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));
-            model.getDisplay().setMonitors(entity.getNumOfMonitors());
-            model.getDisplay().setSingleQxlPci(entity.getSingleQxlPci());
-            
model.getDisplay().setAllowOverride(entity.isAllowConsoleReconnect());
-            
model.getDisplay().setSmartcardEnabled(entity.isSmartcardEnabled());
-            
model.getDisplay().setKeyboardLayout(entity.getVncKeyboardLayout());
-            
model.getDisplay().setFileTransferEnabled(entity.isSpiceFileTransferEnabled());
-            
model.getDisplay().setCopyPasteEnabled(entity.isSpiceCopyPasteEnabled());
-        }
+        model.setDisplay(new Display());
+        model.getDisplay().setMonitors(entity.getNumOfMonitors());
+        model.getDisplay().setSingleQxlPci(entity.getSingleQxlPci());
+        model.getDisplay().setAllowOverride(entity.isAllowConsoleReconnect());
+        model.getDisplay().setSmartcardEnabled(entity.isSmartcardEnabled());
+        model.getDisplay().setKeyboardLayout(entity.getVncKeyboardLayout());
+        
model.getDisplay().setFileTransferEnabled(entity.isSpiceFileTransferEnabled());
+        
model.getDisplay().setCopyPasteEnabled(entity.isSpiceCopyPasteEnabled());
         if (entity.getClusterArch() != null) {
             
model.getCpu().setArchitecture(CPUMapper.map(entity.getClusterArch(), 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 483a449..af12cd8 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
@@ -5,6 +5,7 @@
 import static org.ovirt.engine.core.compat.Guid.createGuidFromString;
 
 import java.util.ArrayList;
+import java.util.HashSet;
 import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Map;
@@ -66,6 +67,8 @@
 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.GraphicsInfo;
+import org.ovirt.engine.core.common.businessentities.GraphicsType;
 import org.ovirt.engine.core.common.businessentities.MigrationSupport;
 import org.ovirt.engine.core.common.businessentities.OriginType;
 import org.ovirt.engine.core.common.businessentities.UsbPolicy;
@@ -240,12 +243,6 @@
             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());
             }
@@ -381,7 +378,7 @@
         return null;
     }
 
-    @Mapping(from = org.ovirt.engine.core.common.businessentities.VM.class, to 
= org.ovirt.engine.api.model.VM.class)
+    @Mapping(from = org.ovirt.engine.core.common.businessentities.VM.class, to 
= 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());
@@ -451,7 +448,23 @@
             pool.setId(entity.getVmPoolId().toString());
             model.setVmPool(pool);
         }
+
+        model.setDisplay(new Display());
+
         if (entity.getDynamicData() != null && 
entity.getStatus().isRunningOrPaused()) {
+
+            GraphicsType graphicsType = 
deriveGraphicsType(entity.getGraphicsInfos());
+            if (graphicsType != null) {
+                
model.getDisplay().setType(DisplayType.fromGraphicsType(graphicsType).value());
+
+                GraphicsInfo graphicsInfo = 
entity.getGraphicsInfos().get(graphicsType);
+                model.getDisplay().setAddress(graphicsInfo == null ? null : 
graphicsInfo.getIp());
+                Integer displayPort = graphicsInfo == null ? null : 
graphicsInfo.getPort();
+                model.getDisplay().setPort(displayPort == null || 
displayPort.equals(-1) ? null : displayPort);
+                Integer displaySecurePort = graphicsInfo == null ? null : 
graphicsInfo.getTlsPort();
+                model.getDisplay().setSecurePort(displaySecurePort==null || 
displaySecurePort.equals(-1) ? null : displaySecurePort);
+            }
+
             if (model.getOs() != null && entity.getBootSequence() != null) {
                 for (Boot boot : map(entity.getBootSequence(), null)) {
                     model.getOs().getBoot().add(boot);
@@ -487,38 +500,25 @@
             if (entity.getLastStartTime() != null) {
                 model.setStartTime(DateMapper.map(entity.getLastStartTime(), 
null));
             }
-            model.setDisplay(new Display());
-            model.getDisplay().setType(map(entity.getDisplayType(), null));
-            model.getDisplay().setAddress(entity.getDisplayIp());
-            Integer displayPort = entity.getDisplay();
-            model.getDisplay().setPort(displayPort==null || displayPort==-1 ? 
null : displayPort);
-            Integer displaySecurePort = entity.getDisplaySecurePort();
-            model.getDisplay().setSecurePort(displaySecurePort==null || 
displaySecurePort==-1 ? null : displaySecurePort);
-            model.getDisplay().setMonitors(entity.getNumOfMonitors());
-            model.getDisplay().setSingleQxlPci(entity.getSingleQxlPci());
         } else {
             if (model.getOs() != null) {
                 for (Boot boot : map(entity.getDefaultBootSequence(), null)) {
                     model.getOs().getBoot().add(boot);
                 }
             }
-            if (entity.getDefaultDisplayType() != null) {
-                model.setDisplay(new Display());
-                model.getDisplay().setType(map(entity.getDefaultDisplayType(), 
null));
-            }
         }
         if (entity.getLastStopTime() != null) {
             model.setStopTime(DateMapper.map(entity.getLastStopTime(), null));
         }
-        if (model.getDisplay() != null) {
-            model.getDisplay().setMonitors(entity.getNumOfMonitors());
-            model.getDisplay().setSingleQxlPci(entity.getSingleQxlPci());
-            
model.getDisplay().setAllowOverride(entity.getAllowConsoleReconnect());
-            
model.getDisplay().setSmartcardEnabled(entity.isSmartcardEnabled());
-            
model.getDisplay().setKeyboardLayout(entity.getDefaultVncKeyboardLayout());
-            
model.getDisplay().setFileTransferEnabled(entity.isSpiceFileTransferEnabled());
-            
model.getDisplay().setCopyPasteEnabled(entity.isSpiceCopyPasteEnabled());
-        }
+
+        model.getDisplay().setMonitors(entity.getNumOfMonitors());
+        model.getDisplay().setSingleQxlPci(entity.getSingleQxlPci());
+        model.getDisplay().setAllowOverride(entity.getAllowConsoleReconnect());
+        model.getDisplay().setSmartcardEnabled(entity.isSmartcardEnabled());
+        
model.getDisplay().setKeyboardLayout(entity.getDefaultVncKeyboardLayout());
+        
model.getDisplay().setFileTransferEnabled(entity.isSpiceFileTransferEnabled());
+        
model.getDisplay().setCopyPasteEnabled(entity.isSpiceCopyPasteEnabled());
+
         model.setType(map(entity.getVmType(), null));
         model.setStateless(entity.isStateless());
         model.setDeleteProtected(entity.isDeleteProtected());
@@ -584,6 +584,20 @@
         return model;
     }
 
+    // for backwards compatibility
+    // returns graphics type of a running vm (can be different than static 
graphics in vm device due to run once)
+    // if vm has multiple graphics, returns SPICE
+    private static GraphicsType deriveGraphicsType(Map<GraphicsType, 
GraphicsInfo> graphicsInfos) {
+        if (graphicsInfos != null) {
+            if (graphicsInfos.containsKey(GraphicsType.SPICE)) {
+                return GraphicsType.SPICE;
+            }
+            if (graphicsInfos.containsKey(GraphicsType.VNC)) {
+                return GraphicsType.VNC;
+            }
+        }
+        return null;
+    }
     @Mapping(from = VM.class, to = RunVmOnceParams.class)
     public static RunVmOnceParams map(VM vm, RunVmOnceParams template) {
         RunVmOnceParams params = template != null ? template : new 
RunVmOnceParams();
@@ -591,11 +605,12 @@
             params.setRunAsStateless(true);
         }
         if (vm.isSetDisplay()) {
-            // todo rest api follow up
             if (vm.getDisplay().isSetKeyboardLayout()) {
                 String vncKeyboardLayout = vm.getDisplay().getKeyboardLayout();
                 params.setVncKeyboardLayout(vncKeyboardLayout);
             }
+
+            setGraphicsFromLegacyDisplay(vm, params);
         }
         if (vm.isSetOs() && vm.getOs().getBoot().size() > 0) {
             params.setBootSequence(map(vm.getOs().getBoot(), null));
@@ -650,6 +665,33 @@
         }
 
         return params;
+    }
+
+    /**
+     * For backwards compatibility. Derives graphics type (backend) from 
display (rest).
+     * @param vm
+     * @param params
+     */
+    private static void setGraphicsFromLegacyDisplay(VM vm, RunVmOnceParams 
params) {
+        if (vm.getDisplay().isSetType()) {
+            DisplayType displayType = 
DisplayType.fromValue(vm.getDisplay().getType());
+            if (displayType != null) {
+                org.ovirt.engine.core.common.businessentities.DisplayType 
display = map(displayType, null);
+                if (display != null) {
+                    Set<GraphicsType> graphics = new HashSet<>();
+                    switch (display) {
+                        case qxl:
+                            graphics.add(GraphicsType.SPICE);
+                            break;
+                        case vga:
+                        case cirrus:
+                            graphics.add(GraphicsType.VNC);
+                            break;
+                    }
+                    params.setRunOnceGraphics(graphics);
+                }
+            }
+        }
     }
 
     @Mapping(from = String.class, to = CustomProperties.class)
@@ -728,7 +770,7 @@
     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.cirrus; // todo 
restapi follow up
+            return 
org.ovirt.engine.core.common.businessentities.DisplayType.vga;
         case SPICE:
             return 
org.ovirt.engine.core.common.businessentities.DisplayType.qxl;
         default:
@@ -739,7 +781,7 @@
     @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 cirrus: // todo restapi follow up
+        case vga:
             return DisplayType.VNC.value();
         case qxl:
             return DisplayType.SPICE.value();
diff --git 
a/backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/TemplateMapperTest.java
 
b/backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/TemplateMapperTest.java
index 2ecadbf..862c9ac 100644
--- 
a/backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/TemplateMapperTest.java
+++ 
b/backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/TemplateMapperTest.java
@@ -72,7 +72,6 @@
         assertEquals(model.getOs().getInitrd(), transform.getOs().getInitrd());
         assertEquals(model.getOs().getCmdline(), 
transform.getOs().getCmdline());
         assertNotNull(model.getDisplay());
-        assertEquals(model.getDisplay().getType(), 
transform.getDisplay().getType());
         assertEquals(model.getDisplay().getMonitors(), 
transform.getDisplay().getMonitors());
         assertEquals(model.getDisplay().isSingleQxlPci(), 
transform.getDisplay().isSingleQxlPci());
         assertEquals(model.getDisplay().isAllowOverride(), 
transform.getDisplay().isAllowOverride());
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..7d30729 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
@@ -22,6 +22,8 @@
 import org.ovirt.engine.api.model.VmPlacementPolicy;
 import org.ovirt.engine.api.model.VmType;
 import org.ovirt.engine.api.restapi.utils.OsTypeMockUtils;
+import org.ovirt.engine.core.common.businessentities.GraphicsInfo;
+import org.ovirt.engine.core.common.businessentities.GraphicsType;
 import org.ovirt.engine.core.common.businessentities.OriginType;
 import org.ovirt.engine.core.common.businessentities.UsbPolicy;
 import org.ovirt.engine.core.common.businessentities.VDSGroup;
@@ -59,7 +61,7 @@
         VmDynamic dynamic = new VmDynamic();
         dynamic.setStatus(VMStatus.Up);
         dynamic.setBootSequence(to.getDefaultBootSequence());
-        dynamic.setDisplayType(to.getDefaultDisplayType());
+        dynamic.getGraphicsInfos().put(GraphicsType.SPICE, new GraphicsInfo());
         org.ovirt.engine.core.common.businessentities.VM ret =
                 new org.ovirt.engine.core.common.businessentities.VM(to,
                         dynamic,
@@ -96,6 +98,7 @@
         for (GuestNicConfiguration guestNic : 
from.getInitialization().getNicConfigurations().getNicConfigurations()) {
             
guestNic.setBootProtocol(MappingTestHelper.shuffle(BootProtocol.class).value());
         }
+        from.getDisplay().setType("spice");
         from.getSerialNumber().setPolicy(SerialNumberPolicy.CUSTOM.value());
         from.getDisplay().setFileTransferEnabled(true);
         from.getDisplay().setCopyPasteEnabled(true);
@@ -229,13 +232,17 @@
         org.ovirt.engine.core.common.businessentities.VM entity =
                 new org.ovirt.engine.core.common.businessentities.VM();
         entity.setStatus(VMStatus.Up);
-        entity.setDisplay(5900);
-        entity.setDisplaySecurePort(9999);
+        entity.getGraphicsInfos().put(GraphicsType.SPICE, new GraphicsInfo());
+        entity.getGraphicsInfos().get(GraphicsType.SPICE)
+                .setPort(5900)
+                .setTlsPort(9999);
         VM model = VmMapper.map(entity, (VM) null);
         assertTrue(model.getDisplay().getPort() == 5900);
         assertTrue(model.getDisplay().getSecurePort() == 9999);
-        entity.setDisplay(-1);
-        entity.setDisplaySecurePort(-1);
+        entity.getGraphicsInfos().put(GraphicsType.SPICE, new GraphicsInfo());
+        entity.getGraphicsInfos().get(GraphicsType.SPICE)
+                .setPort(null)
+                .setTlsPort(null);
         model = VmMapper.map(entity, (VM) null);
         assertNull(model.getDisplay().getPort());
         assertNull(model.getDisplay().getSecurePort());


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ibed6bbbce8a36dff82a0903c3478cfb656589fb4
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Frank Kobzik <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to