Gilad Chaplik has uploaded a new change for review.

Change subject: restapi: add cpu profile support
......................................................................

restapi: add cpu profile support

href="/ovirt-engine/api/cpuprofiles"; "add"; method: POST; request type: 
CpuProfile; response type: CpuProfile
href="/ovirt-engine/api/cpuprofiles"; "get"; method: GET; response type: 
CpuProfiles
href="/ovirt-engine/api/cpuprofiles/{cpuprofile:id}"; "delete"; method: DELETE
href="/ovirt-engine/api/cpuprofiles/{cpuprofile:id}"; "get"; method: GET; 
response type: CpuProfile
href="/ovirt-engine/api/cpuprofiles/{cpuprofile:id}"; "update"; method: PUT; 
request type: CpuProfile; response type: CpuProfile
href="/ovirt-engine/api/cpuprofiles/{cpuprofile:id}/permissions"; "add"; 
method: POST; request type: Permission; response type: Permission
href="/ovirt-engine/api/cpuprofiles/{cpuprofile:id}/permissions"; "get"; 
method: GET; response type: Permissions
href="/ovirt-engine/api/cpuprofiles/{cpuprofile:id}/permissions/{permission:id}";
 "delete"; method: DELETE
href="/ovirt-engine/api/cpuprofiles/{cpuprofile:id}/permissions/{permission:id}";
 "get"; method: GET; response type: Permission
href="/ovirt-engine/api/clusters/{cluster:id}/cpuprofiles"; "add"; method: 
POST; request type: CpuProfile; response type: CpuProfile
href="/ovirt-engine/api/clusters/{cluster:id}/cpuprofiles"; "get"; method: GET; 
response type: CpuProfiles
href="/ovirt-engine/api/clusters/{cluster:id}/cpuprofiles/{cpuprofile:id}"; 
"delete"; method: DELETE
href="/ovirt-engine/api/clusters/{cluster:id}/cpuprofiles/{cpuprofile:id}"; 
"get"; method: GET; response type: CpuProfile

Change-Id: I65976b00665a7f6d87b3fa6f62e54c753c51238c
Signed-off-by: Gilad Chaplik <gchap...@redhat.com>
---
A 
backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/AssignedCpuProfileResource.java
A 
backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/AssignedCpuProfilesResource.java
M 
backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/ClusterResource.java
A 
backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/CpuProfileResource.java
A 
backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/CpuProfilesResource.java
M 
backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/utils/ApiRootLinksCreator.java
M 
backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/utils/LinkHelper.java
M 
backend/manager/modules/restapi/interface/definition/src/main/resources/api.xsd
M 
backend/manager/modules/restapi/interface/definition/src/main/resources/rsdl_metadata.yaml
M 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/BackendApplication.java
A 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/AbstractBackendCpuProfileResource.java
A 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/AbstractBackendCpuProfilesResource.java
A 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendAssignedCpuProfileResource.java
A 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendAssignedCpuProfilesResource.java
M 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendClusterResource.java
M 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendClustersResource.java
A 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendCpuProfileResource.java
A 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendCpuProfilesResource.java
M 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/utils/FeaturesHelper.java
A 
backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/AbstractBackendCpuProfilesResourceTest.java
M 
backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendApiResourceTest.java
A 
backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendAssignedCpuProfileResourceTest.java
A 
backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendAssignedCpuProfilesResourceTest.java
A 
backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendCpuProfileResourceTest.java
A 
backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendCpuProfilesResourceTest.java
A 
backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/CpuProfileMapper.java
A 
backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/CpuProfileMapperTest.java
27 files changed, 1,326 insertions(+), 1 deletion(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/30/31730/1

diff --git 
a/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/AssignedCpuProfileResource.java
 
b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/AssignedCpuProfileResource.java
new file mode 100644
index 0000000..ab45eb2
--- /dev/null
+++ 
b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/AssignedCpuProfileResource.java
@@ -0,0 +1,13 @@
+package org.ovirt.engine.api.resource;
+
+import javax.ws.rs.GET;
+import javax.ws.rs.Produces;
+
+import org.ovirt.engine.api.model.CpuProfile;
+
+@Produces({ ApiMediaType.APPLICATION_XML, ApiMediaType.APPLICATION_JSON, 
ApiMediaType.APPLICATION_X_YAML })
+public interface AssignedCpuProfileResource {
+
+    @GET
+    public CpuProfile get();
+}
diff --git 
a/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/AssignedCpuProfilesResource.java
 
b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/AssignedCpuProfilesResource.java
new file mode 100644
index 0000000..4d9be6a
--- /dev/null
+++ 
b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/AssignedCpuProfilesResource.java
@@ -0,0 +1,31 @@
+package org.ovirt.engine.api.resource;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.Response;
+
+import org.ovirt.engine.api.model.CpuProfile;
+import org.ovirt.engine.api.model.CpuProfiles;
+
+@Produces({ ApiMediaType.APPLICATION_XML, ApiMediaType.APPLICATION_JSON, 
ApiMediaType.APPLICATION_X_YAML })
+public interface AssignedCpuProfilesResource {
+
+    @GET
+    public CpuProfiles list();
+
+    @POST
+    @Consumes({ ApiMediaType.APPLICATION_XML, ApiMediaType.APPLICATION_JSON, 
ApiMediaType.APPLICATION_X_YAML })
+    public Response add(CpuProfile cpuProfile);
+
+    @DELETE
+    @Path("{id}")
+    public Response remove(@PathParam("id") String id);
+
+    @Path("{id}")
+    public AssignedCpuProfileResource 
getAssignedCpuProfileSubResource(@PathParam("id") String id);
+}
diff --git 
a/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/ClusterResource.java
 
b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/ClusterResource.java
index 72cbdbc..831d865 100644
--- 
a/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/ClusterResource.java
+++ 
b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/ClusterResource.java
@@ -40,4 +40,7 @@
 
     @Path("affinitygroups")
     public AffinityGroupsResource getAffinityGroupsResource();
+
+    @Path("cpuprofiles")
+    public AssignedCpuProfilesResource getCpuProfilesResource();
 }
diff --git 
a/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/CpuProfileResource.java
 
b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/CpuProfileResource.java
new file mode 100644
index 0000000..dc06e65
--- /dev/null
+++ 
b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/CpuProfileResource.java
@@ -0,0 +1,13 @@
+package org.ovirt.engine.api.resource;
+
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+
+import org.ovirt.engine.api.model.CpuProfile;
+
+@Produces({ ApiMediaType.APPLICATION_XML, ApiMediaType.APPLICATION_JSON, 
ApiMediaType.APPLICATION_X_YAML })
+public interface CpuProfileResource extends UpdatableResource<CpuProfile> {
+
+    @Path("permissions")
+    public AssignedPermissionsResource getPermissionsResource();
+}
diff --git 
a/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/CpuProfilesResource.java
 
b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/CpuProfilesResource.java
new file mode 100644
index 0000000..c231750
--- /dev/null
+++ 
b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/CpuProfilesResource.java
@@ -0,0 +1,32 @@
+package org.ovirt.engine.api.resource;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.Response;
+
+import org.ovirt.engine.api.model.CpuProfile;
+import org.ovirt.engine.api.model.CpuProfiles;
+
+@Path("/cpuprofiles")
+@Produces({ ApiMediaType.APPLICATION_XML, ApiMediaType.APPLICATION_JSON, 
ApiMediaType.APPLICATION_X_YAML })
+public interface CpuProfilesResource {
+
+    @GET
+    public CpuProfiles list();
+
+    @POST
+    @Consumes({ ApiMediaType.APPLICATION_XML, ApiMediaType.APPLICATION_JSON, 
ApiMediaType.APPLICATION_X_YAML })
+    public Response add(CpuProfile cpuProfile);
+
+    @DELETE
+    @Path("{id}")
+    public Response remove(@PathParam("id") String id);
+
+    @Path("{id}")
+    public CpuProfileResource getCpuProfileSubResource(@PathParam("id") String 
id);
+}
diff --git 
a/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/utils/ApiRootLinksCreator.java
 
b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/utils/ApiRootLinksCreator.java
index 02bf6fa..0f4fb66 100644
--- 
a/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/utils/ApiRootLinksCreator.java
+++ 
b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/utils/ApiRootLinksCreator.java
@@ -53,6 +53,7 @@
         links.add(createLink("storageconnections", baseUri));
         links.add(createLink("vnicprofiles", baseUri));
         links.add(createLink("diskprofiles", baseUri));
+        links.add(createLink("cpuprofiles", baseUri));
         links.add(createLink("schedulingpolicyunits", baseUri));
         links.add(createLink("schedulingpolicies", baseUri));
         links.add(createLink("permissions", baseUri));
diff --git 
a/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/utils/LinkHelper.java
 
b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/utils/LinkHelper.java
index 6fb9d5e..9b257f1 100644
--- 
a/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/utils/LinkHelper.java
+++ 
b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/utils/LinkHelper.java
@@ -37,6 +37,7 @@
 import org.ovirt.engine.api.model.Bookmark;
 import org.ovirt.engine.api.model.CdRom;
 import org.ovirt.engine.api.model.Cluster;
+import org.ovirt.engine.api.model.CpuProfile;
 import org.ovirt.engine.api.model.DataCenter;
 import org.ovirt.engine.api.model.DetailedLink;
 import org.ovirt.engine.api.model.Disk;
@@ -115,6 +116,8 @@
 import org.ovirt.engine.api.resource.DataCentersResource;
 import org.ovirt.engine.api.resource.DeviceResource;
 import org.ovirt.engine.api.resource.DevicesResource;
+import org.ovirt.engine.api.resource.CpuProfileResource;
+import org.ovirt.engine.api.resource.CpuProfilesResource;
 import org.ovirt.engine.api.resource.DiskProfileResource;
 import org.ovirt.engine.api.resource.DiskProfilesResource;
 import org.ovirt.engine.api.resource.DiskResource;
@@ -467,6 +470,9 @@
         map = new ParentToCollectionMap(DiskProfileResource.class, 
DiskProfilesResource.class);
         TYPES.put(DiskProfile.class, map);
 
+        map = new ParentToCollectionMap(CpuProfileResource.class, 
CpuProfilesResource.class);
+        TYPES.put(CpuProfile.class, map);
+
     }
 
     /**
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 b156c3a..afb6391 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
@@ -4780,4 +4780,35 @@
       </xs:extension>
     </xs:complexContent>
   </xs:complexType>
+
+  <!-- Cpu Profiles -->
+  <xs:element name="cpu_profile" type="CpuProfile"/>
+
+  <xs:element name="cpu_profiles" type="CpuProfiles" />
+
+  <xs:complexType name="CpuProfile">
+    <xs:complexContent>
+      <xs:extension base="BaseResource">
+        <xs:sequence>
+          <xs:element ref="qos" minOccurs="1" maxOccurs="1"/>
+          <xs:element ref="cluster" minOccurs="1" maxOccurs="1"/>
+        </xs:sequence>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+
+  <xs:complexType name="CpuProfiles">
+    <xs:complexContent>
+      <xs:extension base="BaseResources">
+        <xs:sequence>
+          <xs:annotation>
+            <xs:appinfo>
+                <jaxb:property name="CpuProfiles"/>
+            </xs:appinfo>
+          </xs:annotation>
+          <xs:element ref="cpu_profile" minOccurs="0" maxOccurs="unbounded"/>
+        </xs:sequence>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
 </xs:schema>
diff --git 
a/backend/manager/modules/restapi/interface/definition/src/main/resources/rsdl_metadata.yaml
 
b/backend/manager/modules/restapi/interface/definition/src/main/resources/rsdl_metadata.yaml
index 202d431..9a81fee 100644
--- 
a/backend/manager/modules/restapi/interface/definition/src/main/resources/rsdl_metadata.yaml
+++ 
b/backend/manager/modules/restapi/interface/definition/src/main/resources/rsdl_metadata.yaml
@@ -5810,3 +5810,146 @@
       Content-Type: {value: application/xml|json, required: true}
       Expect: {value: 201-created, required: false}
       Correlation-Id: {value: 'any string', required: false}
+- name: /cpuprofiles|rel=get
+  description: get the list of all cpu profiles in the system
+  request:
+    body:
+      parameterType: null
+      signatures: []
+    urlparams:
+      max: {context: matrix, type: 'xs:int', value: 'max results', required: 
false}
+    headers: {}
+- name: /cpuprofiles/{cpuprofile:id}|rel=get
+  description: get the details of the specified cpu profile in the system
+  request:
+    body:
+      parameterType: null
+      signatures: []
+    urlparams: {}
+    headers: {}
+- name: /cpuprofiles/{cpuprofile:id}|rel=delete
+  description: delete the specified cpu profile in the system
+  request:
+    body:
+      parameterType: null
+      signatures: []
+    urlparams:
+      async: {context: matrix, type: 'xs:boolean', value: true|false, 
required: false}
+    headers:
+      Correlation-Id: {value: 'any string', required: false}
+- name: /cpuprofiles/{cpuprofile:id}|rel=update
+  description: update the specified cpu profile in the system
+  request:
+    body:
+      parameterType: CpuProfile
+      signatures:
+      - mandatoryArguments: {}
+        optionalArguments: {cpuprofile.name: 'xs:string',
+                           cpuprofile.description: 'xs:string',
+                           cpuprofile.qos.id: 'xs:string'}
+        description: update the specified cpu profile in the system
+    urlparams: {}
+    headers:
+      Content-Type: {value: application/xml|json, required: true}
+      Correlation-Id: {value: 'any string', required: false}
+- name: /cpuprofiles|rel=add
+  description: add a new cpu profile to the system
+  request:
+    body:
+      parameterType: CpuProfile
+      signatures:
+      - mandatoryArguments: {cpuprofile.cluster.id: 'xs:string', 
cpuprofile.name: 'xs:string'}
+        optionalArguments: {cpuprofile.description: 'xs:string',
+                           cpuprofile.qos.id: 'xs:string'}
+        description: add a new cpu profile to the system
+    urlparams: {}
+    headers:
+      Content-Type: {value: application/xml|json, required: true}
+      Expect: {value: 201-created, required: false}
+      Correlation-Id: {value: 'any string', required: false}
+- name: /cpuprofiles/{cpuprofile:id}/permissions|rel=get
+  description: get the list of all permissions on the cpu profile in the system
+  request:
+    body:
+      parameterType: null
+      signatures: []
+    urlparams:
+      max: {context: matrix, type: 'xs:int', value: 'max results', required: 
false}
+    headers: {}
+- name: /cpuprofiles/{cpuprofile:id}/permissions/{permission:id}|rel=get
+  description: get details of the specified permission on the cpu profile in 
the system
+  request:
+    body:
+      parameterType: null
+      signatures: []
+    urlparams: {}
+    headers: {}
+- name: /cpuprofiles/{cpuprofile:id}/permissions/{permission:id}|rel=delete
+  description: delete the specified permission for the cpu profile
+  request:
+    body:
+      parameterType: null
+      signatures: []
+    urlparams:
+      async: {context: matrix, type: 'xs:boolean', value: true|false, 
required: false}
+    headers:
+      Correlation-Id: {value: 'any string', required: false}
+- name: /cpuprofiles/{cpuprofile:id}/permissions|rel=add
+  description: add a new permission on the cpu profile in the system
+  request:
+    body:
+      parameterType: Permission
+      signatures:
+      - mandatoryArguments: {permission.user.id: 'xs:string', 
permission.role.id: 'xs:string'}
+        optionalArguments: {}
+        description: add a new user level permission on the cpu profile in the 
system
+      - mandatoryArguments: {permission.group.id: 'xs:string', 
permission.role.id: 'xs:string'}
+        optionalArguments: {}
+        description: add a new group level permission on the cpu profile in 
the system
+    urlparams: {}
+    headers:
+      Content-Type: {value: application/xml|json, required: true}
+      Expect: {value: 201-created, required: false}
+      Correlation-Id: {value: 'any string', required: false}
+- name: /clusters/{cluster:id}/cpuprofiles|rel=get
+  description: get the list of all cpu profiles for the cluster
+  request:
+    body:
+      parameterType: null
+      signatures: []
+    urlparams:
+      max: {context: matrix, type: 'xs:int', value: 'max results', required: 
false}
+    headers: {}
+- name: /clusters/{cluster:id}/cpuprofiles/{cpuprofile:id}|rel=get
+  description: get the details of the specified cpu profile for the cluster
+  request:
+    body:
+      parameterType: null
+      signatures: []
+    urlparams: {}
+    headers: {}
+- name: /clusters/{cluster:id}/cpuprofiles/{cpuprofile:id}|rel=delete
+  description: delete the specified cpu profile for the cluster
+  request:
+    body:
+      parameterType: null
+      signatures: []
+    urlparams:
+      async: {context: matrix, type: 'xs:boolean', value: true|false, 
required: false}
+    headers:
+      Correlation-Id: {value: 'any string', required: false}
+- name: /clusters/{cluster:id}/cpuprofiles|rel=add
+  description: add a new cpu profile for the cluster
+  request:
+    body:
+      parameterType: CpuProfile
+      signatures:
+      - mandatoryArguments: {cpuprofile.name: 'xs:string'}
+        optionalArguments: {cpuprofile.description: 'xs:string',
+                           cpuprofile.qos.id: 'xs:string'}
+        description: add a new cpu profile for the cluster
+    urlparams: {}
+    headers:
+      Content-Type: {value: application/xml|json, required: true}
+      Expect: {value: 201-created, required: false}
+      Correlation-Id: {value: 'any string', required: false}
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/BackendApplication.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/BackendApplication.java
index 8ecc1c7..e6ed1b4 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/BackendApplication.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/BackendApplication.java
@@ -33,6 +33,7 @@
 import org.ovirt.engine.api.restapi.resource.BackendCapabilitiesResource;
 import org.ovirt.engine.api.restapi.resource.BackendClustersResource;
 import org.ovirt.engine.api.restapi.resource.BackendDataCentersResource;
+import org.ovirt.engine.api.restapi.resource.BackendCpuProfilesResource;
 import org.ovirt.engine.api.restapi.resource.BackendDiskProfilesResource;
 import org.ovirt.engine.api.restapi.resource.BackendDisksResource;
 import org.ovirt.engine.api.restapi.resource.BackendEventsResource;
@@ -144,6 +145,7 @@
         addResource(new BackendSchedulingPolicyUnitsResource());
         addResource(new BackendSystemPermissionsResource());
         addResource(new BackendDiskProfilesResource());
+        addResource(new BackendCpuProfilesResource());
         addResource(VmHelper.getInstance());
 
         final SessionProcessor processor = new SessionProcessor();
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/AbstractBackendCpuProfileResource.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/AbstractBackendCpuProfileResource.java
new file mode 100644
index 0000000..2edc66b
--- /dev/null
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/AbstractBackendCpuProfileResource.java
@@ -0,0 +1,25 @@
+package org.ovirt.engine.api.restapi.resource;
+
+import org.ovirt.engine.api.model.CpuProfile;
+import org.ovirt.engine.core.common.queries.IdQueryParameters;
+import org.ovirt.engine.core.common.queries.VdcQueryType;
+
+public abstract class AbstractBackendCpuProfileResource
+        extends AbstractBackendSubResource<CpuProfile, 
org.ovirt.engine.core.common.businessentities.profiles.CpuProfile> {
+
+    protected AbstractBackendCpuProfileResource(String id, String... 
subCollections) {
+        super(id, CpuProfile.class,
+                
org.ovirt.engine.core.common.businessentities.profiles.CpuProfile.class,
+                subCollections);
+    }
+
+    protected CpuProfile get() {
+        return performGet(VdcQueryType.GetCpuProfileById, new 
IdQueryParameters(guid));
+    }
+
+    @Override
+    protected CpuProfile doPopulate(CpuProfile model,
+            org.ovirt.engine.core.common.businessentities.profiles.CpuProfile 
entity) {
+        return model;
+    }
+}
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/AbstractBackendCpuProfilesResource.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/AbstractBackendCpuProfilesResource.java
new file mode 100644
index 0000000..f661846
--- /dev/null
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/AbstractBackendCpuProfilesResource.java
@@ -0,0 +1,72 @@
+package org.ovirt.engine.api.restapi.resource;
+
+import java.util.List;
+
+import javax.ws.rs.core.Response;
+
+import org.ovirt.engine.api.model.CpuProfile;
+import org.ovirt.engine.api.model.CpuProfiles;
+import org.ovirt.engine.core.common.action.CpuProfileParameters;
+import org.ovirt.engine.core.common.action.VdcActionType;
+import org.ovirt.engine.core.common.queries.IdQueryParameters;
+import org.ovirt.engine.core.common.queries.VdcQueryType;
+import org.ovirt.engine.core.compat.Guid;
+
+public abstract class AbstractBackendCpuProfilesResource
+        extends AbstractBackendCollectionResource<CpuProfile, 
org.ovirt.engine.core.common.businessentities.profiles.CpuProfile> {
+
+    public AbstractBackendCpuProfilesResource(String... subCollections) {
+        super(CpuProfile.class,
+                
org.ovirt.engine.core.common.businessentities.profiles.CpuProfile.class,
+                subCollections);
+    }
+
+    protected CpuProfiles 
mapCollection(List<org.ovirt.engine.core.common.businessentities.profiles.CpuProfile>
 entities) {
+        CpuProfiles collection = new CpuProfiles();
+        for (org.ovirt.engine.core.common.businessentities.profiles.CpuProfile 
entity : entities) {
+            collection.getCpuProfiles().add(addLinks(populate(map(entity), 
entity)));
+        }
+
+        return collection;
+    }
+
+    protected Response add(CpuProfile cpuProfile) {
+        validateParameters(cpuProfile);
+        CpuProfileParameters parameters =
+                new CpuProfileParameters();
+        org.ovirt.engine.core.common.businessentities.profiles.CpuProfile map 
= map(cpuProfile);
+        parameters.setProfile(map);
+        return performCreate(VdcActionType.AddCpuProfile,
+                parameters,
+                new QueryIdResolver<Guid>(VdcQueryType.GetCpuProfileById, 
IdQueryParameters.class));
+    }
+
+    protected abstract void validateParameters(CpuProfile cpuProfile);
+
+    @Override
+    protected Response performRemove(String id) {
+        org.ovirt.engine.core.common.businessentities.profiles.CpuProfile 
cpuProfile = getCpuProfile(id);
+        return performAction(VdcActionType.RemoveCpuProfile,
+                new CpuProfileParameters(cpuProfile,
+                        cpuProfile.getId()));
+    }
+
+    protected 
org.ovirt.engine.core.common.businessentities.profiles.CpuProfile 
getCpuProfile(String id) {
+        return 
getEntity(org.ovirt.engine.core.common.businessentities.profiles.CpuProfile.class,
+                VdcQueryType.GetCpuProfileById,
+                new IdQueryParameters(asGuidOr404(id)),
+                "CpuProfiles");
+    }
+
+    @Override
+    protected CpuProfile doPopulate(CpuProfile model,
+            org.ovirt.engine.core.common.businessentities.profiles.CpuProfile 
entity) {
+        return model;
+    }
+
+    protected abstract 
List<org.ovirt.engine.core.common.businessentities.profiles.CpuProfile> 
getCpuProfilesCollection();
+
+    protected CpuProfiles performList() {
+        return mapCollection(getCpuProfilesCollection());
+    }
+}
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendAssignedCpuProfileResource.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendAssignedCpuProfileResource.java
new file mode 100644
index 0000000..7fc712d
--- /dev/null
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendAssignedCpuProfileResource.java
@@ -0,0 +1,34 @@
+package org.ovirt.engine.api.restapi.resource;
+
+import org.ovirt.engine.api.model.CpuProfile;
+import org.ovirt.engine.api.resource.AssignedCpuProfileResource;
+
+public class BackendAssignedCpuProfileResource extends 
AbstractBackendCpuProfileResource implements AssignedCpuProfileResource {
+
+    private final BackendAssignedCpuProfilesResource parent;
+
+    public BackendAssignedCpuProfileResource(String id, 
BackendAssignedCpuProfilesResource parent) {
+        super(id);
+        this.parent = parent;
+    }
+
+    public BackendAssignedCpuProfilesResource getParent() {
+        return parent;
+    }
+
+    @Override
+    public CpuProfile get() {
+        return addLinks(super.get());
+    }
+
+    @Override
+    protected CpuProfile addParents(CpuProfile cpuProfile) {
+        return parent.addParents(cpuProfile);
+    }
+
+    @Override
+    protected CpuProfile doPopulate(CpuProfile model,
+            org.ovirt.engine.core.common.businessentities.profiles.CpuProfile 
entity) {
+        return model;
+    }
+}
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendAssignedCpuProfilesResource.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendAssignedCpuProfilesResource.java
new file mode 100644
index 0000000..83b0aa5
--- /dev/null
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendAssignedCpuProfilesResource.java
@@ -0,0 +1,62 @@
+package org.ovirt.engine.api.restapi.resource;
+
+import java.util.List;
+
+import javax.ws.rs.PathParam;
+import javax.ws.rs.core.Response;
+
+import org.ovirt.engine.api.model.Cluster;
+import org.ovirt.engine.api.model.CpuProfile;
+import org.ovirt.engine.api.model.CpuProfiles;
+import org.ovirt.engine.api.resource.AssignedCpuProfileResource;
+import org.ovirt.engine.api.resource.AssignedCpuProfilesResource;
+import org.ovirt.engine.core.common.queries.IdQueryParameters;
+import org.ovirt.engine.core.common.queries.VdcQueryType;
+
+public class BackendAssignedCpuProfilesResource extends 
AbstractBackendCpuProfilesResource implements AssignedCpuProfilesResource {
+
+    private final String clusterId;
+
+    public BackendAssignedCpuProfilesResource(String clusterId) {
+        this.clusterId = clusterId;
+    }
+
+    @Override
+    public CpuProfiles list() {
+        return performList();
+    }
+
+    @Override
+    public Response add(CpuProfile cpuProfile) {
+        if (!cpuProfile.isSetCluster() || !cpuProfile.getCluster().isSetId()) {
+            cpuProfile.setCluster(new Cluster());
+            cpuProfile.getCluster().setId(clusterId);
+        }
+
+        return super.add(cpuProfile);
+    }
+
+    @Override
+    protected void validateParameters(CpuProfile cpuProfile) {
+        validateParameters(cpuProfile, "name");
+    }
+
+    @SingleEntityResource
+    @Override
+    public AssignedCpuProfileResource 
getAssignedCpuProfileSubResource(@PathParam("id") String id) {
+        return inject(new BackendAssignedCpuProfileResource(id, this));
+    }
+
+    @Override
+    public CpuProfile addParents(CpuProfile cpuProfile) {
+        cpuProfile.setCluster(new Cluster());
+        cpuProfile.getCluster().setId(clusterId);
+        return cpuProfile;
+    }
+
+    @Override
+    protected 
List<org.ovirt.engine.core.common.businessentities.profiles.CpuProfile> 
getCpuProfilesCollection() {
+        return getBackendCollection(VdcQueryType.GetCpuProfilesByClusterId,
+                new IdQueryParameters(asGuidOr404(clusterId)));
+    }
+}
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendClusterResource.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendClusterResource.java
index 21d1122..4ad4677 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendClusterResource.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendClusterResource.java
@@ -5,6 +5,7 @@
 
 import org.ovirt.engine.api.model.Cluster;
 import org.ovirt.engine.api.resource.AffinityGroupsResource;
+import org.ovirt.engine.api.resource.AssignedCpuProfilesResource;
 import org.ovirt.engine.api.resource.AssignedNetworksResource;
 import org.ovirt.engine.api.resource.AssignedPermissionsResource;
 import org.ovirt.engine.api.resource.ClusterResource;
@@ -84,4 +85,8 @@
         return inject(new BackendAffinityGroupsResource(id));
     }
 
+    @Override
+    public AssignedCpuProfilesResource getCpuProfilesResource() {
+        return inject(new BackendAssignedCpuProfilesResource(id));
+    }
 }
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendClustersResource.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendClustersResource.java
index ef43ac7..3e5950c 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendClustersResource.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendClustersResource.java
@@ -26,7 +26,7 @@
         implements ClustersResource {
 
     static final String[] SUB_COLLECTIONS = { "networks", "permissions", 
"glustervolumes", "glusterhooks",
-            "affinitygroups" };
+            "affinitygroups", "cpuprofiles" };
     static final String[] VIRT_ONLY_MODE_COLLECTIONS_TO_HIDE = 
{"glustervolumes", "glusterhooks" };
     public BackendClustersResource() {
         super(Cluster.class, VDSGroup.class, SUB_COLLECTIONS);
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendCpuProfileResource.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendCpuProfileResource.java
new file mode 100644
index 0000000..30d68b3
--- /dev/null
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendCpuProfileResource.java
@@ -0,0 +1,52 @@
+package org.ovirt.engine.api.restapi.resource;
+
+import org.ovirt.engine.api.model.CpuProfile;
+import org.ovirt.engine.api.resource.AssignedPermissionsResource;
+import org.ovirt.engine.api.resource.CpuProfileResource;
+import org.ovirt.engine.core.common.VdcObjectType;
+import org.ovirt.engine.core.common.action.CpuProfileParameters;
+import org.ovirt.engine.core.common.action.VdcActionParametersBase;
+import org.ovirt.engine.core.common.action.VdcActionType;
+import org.ovirt.engine.core.common.queries.GetPermissionsForObjectParameters;
+import org.ovirt.engine.core.common.queries.IdQueryParameters;
+import org.ovirt.engine.core.common.queries.VdcQueryType;
+import org.ovirt.engine.core.compat.Guid;
+
+public class BackendCpuProfileResource extends 
AbstractBackendCpuProfileResource implements CpuProfileResource {
+
+    protected BackendCpuProfileResource(String id) {
+        super(id, BackendCpuProfilesResource.SUB_COLLECTIONS);
+    }
+
+    @Override
+    public CpuProfile get() {
+        return super.get();
+    }
+
+    @Override
+    public CpuProfile update(CpuProfile resource) {
+        return performUpdate(resource,
+                new QueryIdResolver<Guid>(VdcQueryType.GetCpuProfileById, 
IdQueryParameters.class),
+                VdcActionType.UpdateCpuProfile,
+                new UpdateParametersProvider());
+    }
+
+    @Override
+    public AssignedPermissionsResource getPermissionsResource() {
+        return inject(new BackendAssignedPermissionsResource(guid,
+                VdcQueryType.GetPermissionsForObject,
+                new GetPermissionsForObjectParameters(guid),
+                CpuProfile.class,
+                VdcObjectType.CpuProfile));
+    }
+
+    protected class UpdateParametersProvider
+            implements ParametersProvider<CpuProfile, 
org.ovirt.engine.core.common.businessentities.profiles.CpuProfile> {
+        @Override
+        public VdcActionParametersBase getParameters(CpuProfile incoming,
+                
org.ovirt.engine.core.common.businessentities.profiles.CpuProfile entity) {
+            org.ovirt.engine.core.common.businessentities.profiles.CpuProfile 
map = map(incoming, entity);
+            return new CpuProfileParameters(map, map.getId());
+        }
+    }
+}
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendCpuProfilesResource.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendCpuProfilesResource.java
new file mode 100644
index 0000000..67509f8
--- /dev/null
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendCpuProfilesResource.java
@@ -0,0 +1,57 @@
+package org.ovirt.engine.api.restapi.resource;
+
+import java.util.List;
+
+import javax.ws.rs.PathParam;
+import javax.ws.rs.core.Response;
+
+import org.ovirt.engine.api.model.CpuProfile;
+import org.ovirt.engine.api.model.CpuProfiles;
+import org.ovirt.engine.api.resource.CpuProfileResource;
+import org.ovirt.engine.api.resource.CpuProfilesResource;
+import org.ovirt.engine.core.common.businessentities.VDSGroup;
+import org.ovirt.engine.core.common.queries.IdQueryParameters;
+import org.ovirt.engine.core.common.queries.VdcQueryParametersBase;
+import org.ovirt.engine.core.common.queries.VdcQueryType;
+
+public class BackendCpuProfilesResource extends 
AbstractBackendCpuProfilesResource implements CpuProfilesResource {
+
+    static final String[] SUB_COLLECTIONS = { "permissions" };
+
+    public BackendCpuProfilesResource() {
+        super(SUB_COLLECTIONS);
+    }
+
+    @Override
+    public CpuProfiles list() {
+        return performList();
+    }
+
+    @Override
+    protected 
List<org.ovirt.engine.core.common.businessentities.profiles.CpuProfile> 
getCpuProfilesCollection() {
+        return getBackendCollection(VdcQueryType.GetAllCpuProfiles, new 
VdcQueryParametersBase());
+    }
+
+    @Override
+    public Response add(CpuProfile cpuProfile) {
+        return super.add(cpuProfile);
+    }
+
+    @Override
+    protected void validateParameters(CpuProfile cpuProfile) {
+        validateParameters(cpuProfile, "name", "cluster.id");
+        String clusterId = cpuProfile.getCluster().getId();
+        // verify the cluster.id is well provided
+        getEntity(VDSGroup.class,
+                VdcQueryType.GetVdsGroupById,
+                new IdQueryParameters(asGuid(clusterId)),
+                "cluster: id="
+                        + clusterId);
+    }
+
+    @SingleEntityResource
+    @Override
+    public CpuProfileResource getCpuProfileSubResource(@PathParam("id") String 
id) {
+        return inject(new BackendCpuProfileResource(id));
+    }
+}
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/utils/FeaturesHelper.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/utils/FeaturesHelper.java
index 46fc8b5..14a9085 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/utils/FeaturesHelper.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/utils/FeaturesHelper.java
@@ -89,10 +89,18 @@
             addNumaNodesFeature(features);
             addMacPoolsFeature(features);
             addDiskProfilesFeature(features);
+            addCpuProfilesFeature(features);
         }
         return features;
     }
 
+    private void addCpuProfilesFeature(Features features) {
+        Feature feature = new Feature();
+        feature.setName("Cpu Profiles");
+        feature.setDescription("Configuring Cpu's profile, for Cluster and 
QoS");
+        features.getFeature().add(feature);
+    }
+
     private void addDiskProfilesFeature(Features features) {
         Feature feature = new Feature();
         feature.setName("Disk Profiles");
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/AbstractBackendCpuProfilesResourceTest.java
 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/AbstractBackendCpuProfilesResourceTest.java
new file mode 100644
index 0000000..54157a0
--- /dev/null
+++ 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/AbstractBackendCpuProfilesResourceTest.java
@@ -0,0 +1,330 @@
+package org.ovirt.engine.api.restapi.resource;
+
+import static org.easymock.EasyMock.anyObject;
+import static org.easymock.EasyMock.eq;
+import static org.easymock.EasyMock.expect;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.ws.rs.WebApplicationException;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.UriInfo;
+
+import org.junit.Ignore;
+import org.junit.Test;
+import org.ovirt.engine.api.model.Fault;
+import org.ovirt.engine.api.model.CpuProfile;
+import org.ovirt.engine.api.model.Cluster;
+import org.ovirt.engine.core.common.action.VdcActionType;
+import org.ovirt.engine.core.common.action.CpuProfileParameters;
+import org.ovirt.engine.core.common.queries.IdQueryParameters;
+import org.ovirt.engine.core.common.queries.VdcQueryParametersBase;
+import org.ovirt.engine.core.common.queries.VdcQueryReturnValue;
+import org.ovirt.engine.core.common.queries.VdcQueryType;
+import org.ovirt.engine.core.compat.Guid;
+
+public abstract class AbstractBackendCpuProfilesResourceTest<C extends 
AbstractBackendCpuProfilesResource>
+        extends AbstractBackendCollectionResourceTest<CpuProfile, 
org.ovirt.engine.core.common.businessentities.profiles.CpuProfile, C> {
+
+    protected static final Guid CLUSTER_ID = GUIDS[1];
+    private final VdcQueryType listQueryType;
+    private final Class<? extends VdcQueryParametersBase> listQueryParamsClass;
+
+    public AbstractBackendCpuProfilesResourceTest(C collection,
+            VdcQueryType listQueryType,
+            Class<? extends VdcQueryParametersBase> queryParamsClass) {
+        super(collection, null, "");
+        this.listQueryType = listQueryType;
+        this.listQueryParamsClass = queryParamsClass;
+    }
+
+    @Test
+    public void testRemoveNotFound() throws Exception {
+        setUpEntityQueryExpectations(1, 0, true);
+        control.replay();
+        try {
+            collection.remove(GUIDS[0].toString());
+            fail("expected WebApplicationException");
+        } catch (WebApplicationException wae) {
+            verifyNotFoundException(wae);
+        }
+    }
+
+    @Test
+    public void testRemove() throws Exception {
+        setUpEntityQueryExpectations(2, 0, false);
+        setUriInfo(setUpActionExpectations(VdcActionType.RemoveCpuProfile,
+                CpuProfileParameters.class,
+                new String[] {},
+                new Object[] {},
+                true,
+                true));
+        verifyRemove(collection.remove(GUIDS[0].toString()));
+    }
+
+    @Test
+    public void testRemoveNonExistant() throws Exception {
+        setUpEntityQueryExpectations(VdcQueryType.GetCpuProfileById,
+                IdQueryParameters.class,
+                new String[] { "Id" },
+                new Object[] { NON_EXISTANT_GUID },
+                null);
+        control.replay();
+        try {
+            collection.remove(NON_EXISTANT_GUID.toString());
+            fail("expected WebApplicationException");
+        } catch (WebApplicationException wae) {
+            assertNotNull(wae.getResponse());
+            assertEquals(404, wae.getResponse().getStatus());
+        }
+    }
+
+    @Test
+    public void testRemoveCantDo() throws Exception {
+        doTestBadRemove(false, true, CANT_DO);
+    }
+
+    @Test
+    public void testRemoveFailed() throws Exception {
+        doTestBadRemove(true, false, FAILURE);
+    }
+
+    protected void doTestBadRemove(boolean canDo, boolean success, String 
detail) throws Exception {
+        setUpEntityQueryExpectations(2, 0, false);
+
+        setUriInfo(setUpActionExpectations(VdcActionType.RemoveCpuProfile,
+                CpuProfileParameters.class,
+                new String[] {},
+                new Object[] {},
+                canDo,
+                success));
+        try {
+            collection.remove(GUIDS[0].toString());
+            fail("expected WebApplicationException");
+        } catch (WebApplicationException wae) {
+            verifyFault(wae, detail);
+        }
+    }
+
+    @Test
+    public void testAddCpuProfile() throws Exception {
+        setUriInfo(setUpBasicUriExpectations());
+        setUpClusterQueryExpectations();
+        setUpCreationExpectations(VdcActionType.AddCpuProfile,
+                CpuProfileParameters.class,
+                new String[] {},
+                new Object[] {},
+                true,
+                true,
+                GUIDS[0],
+                VdcQueryType.GetCpuProfileById,
+                IdQueryParameters.class,
+                new String[] { "Id" },
+                new Object[] { Guid.Empty },
+                getEntity(0));
+        CpuProfile model = getModel(0);
+        model.setCluster(new Cluster());
+        model.getCluster().setId(CLUSTER_ID.toString());
+
+        Response response = collection.add(model);
+        assertEquals(201, response.getStatus());
+        assertTrue(response.getEntity() instanceof CpuProfile);
+        verifyModel((CpuProfile) response.getEntity(), 0);
+    }
+
+    @Test
+    public void testAddCpuProfileCantDo() throws Exception {
+        setUpClusterQueryExpectations();
+        doTestBadAddCpuProfile(false, true, CANT_DO);
+    }
+
+    @Test
+    public void testAddCpuProfileFailure() throws Exception {
+        setUpClusterQueryExpectations();
+        doTestBadAddCpuProfile(true, false, FAILURE);
+    }
+
+    private void doTestBadAddCpuProfile(boolean canDo, boolean success, String 
detail) throws Exception {
+        setUriInfo(setUpActionExpectations(VdcActionType.AddCpuProfile,
+                CpuProfileParameters.class,
+                new String[] {},
+                new Object[] {},
+                canDo,
+                success));
+        CpuProfile model = getModel(0);
+        model.setCluster(new Cluster());
+        model.getCluster().setId(CLUSTER_ID.toString());
+
+        try {
+            collection.add(model);
+            fail("expected WebApplicationException");
+        } catch (WebApplicationException wae) {
+            verifyFault(wae, detail);
+        }
+    }
+
+    @Test
+    public void testAddIncompleteParameters() throws Exception {
+        CpuProfile model = createIncompleteCpuProfile();
+        setUriInfo(setUpBasicUriExpectations());
+        control.replay();
+        try {
+            collection.add(model);
+            fail("expected WebApplicationException on incomplete parameters");
+        } catch (WebApplicationException wae) {
+            verifyIncompleteException(wae, "CpuProfile", "validateParameters", 
getIncompleteFields());
+        }
+    }
+
+    protected String[] getIncompleteFields() {
+        return new String[] { "name" };
+    }
+
+    protected CpuProfile createIncompleteCpuProfile() {
+        return new CpuProfile();
+    }
+
+    @Test
+    @Ignore
+    @Override
+    public void testQuery() throws Exception {
+    }
+
+    @Override
+    @Test
+    public void testList() throws Exception {
+        UriInfo uriInfo = setUpUriExpectations(null);
+        setUpCpuProfilesQueryExpectations(null);
+        control.replay();
+        collection.setUriInfo(uriInfo);
+        verifyCollection(getCollection());
+    }
+
+    @Override
+    @Test
+    public void testListFailure() throws Exception {
+        setUpCpuProfilesQueryExpectations(FAILURE);
+        UriInfo uriInfo = setUpUriExpectations(null);
+        collection.setUriInfo(uriInfo);
+        control.replay();
+
+        try {
+            getCollection();
+            fail("expected WebApplicationException");
+        } catch (WebApplicationException wae) {
+            assertTrue(wae.getResponse().getEntity() instanceof Fault);
+            assertEquals(mockl10n(FAILURE), ((Fault) 
wae.getResponse().getEntity()).getDetail());
+        }
+    }
+
+    @Override
+    @Test
+    public void testListCrash() throws Exception {
+        Throwable t = new RuntimeException(FAILURE);
+        setUpCpuProfilesQueryExpectations(t);
+
+        UriInfo uriInfo = setUpUriExpectations(null);
+        collection.setUriInfo(uriInfo);
+
+        control.replay();
+
+        try {
+            getCollection();
+            fail("expected WebApplicationException");
+        } catch (WebApplicationException wae) {
+            verifyFault(wae, BACKEND_FAILED_SERVER_LOCALE, t);
+        }
+    }
+
+    @Override
+    @Test
+    public void testListCrashClientLocale() throws Exception {
+        UriInfo uriInfo = setUpUriExpectations(null);
+        locales.add(CLIENT_LOCALE);
+
+        Throwable t = new RuntimeException(FAILURE);
+        setUpCpuProfilesQueryExpectations(t);
+        collection.setUriInfo(uriInfo);
+
+        control.replay();
+        try {
+            getCollection();
+            fail("expected WebApplicationException");
+        } catch (WebApplicationException wae) {
+            verifyFault(wae, BACKEND_FAILED_CLIENT_LOCALE, t);
+        } finally {
+            locales.clear();
+        }
+    }
+
+    private void setUpCpuProfilesQueryExpectations(Object failure) {
+        VdcQueryReturnValue queryResult = 
control.createMock(VdcQueryReturnValue.class);
+        expect(queryResult.getSucceeded()).andReturn(failure == 
null).anyTimes();
+        
List<org.ovirt.engine.core.common.businessentities.profiles.CpuProfile> 
entities = new ArrayList<>();
+
+        if (failure == null) {
+            for (int i = 0; i < NAMES.length; i++) {
+                entities.add(getEntity(i));
+            }
+            
expect(queryResult.getReturnValue()).andReturn(entities).anyTimes();
+        } else {
+            if (failure instanceof String) {
+                expect(queryResult.getExceptionString()).andReturn((String) 
failure).anyTimes();
+                setUpL10nExpectations((String) failure);
+            } else if (failure instanceof Exception) {
+                expect(backend.runQuery(eq(listQueryType),
+                        anyObject(listQueryParamsClass))).andThrow((Exception) 
failure).anyTimes();
+                return;
+            }
+        }
+        expect(backend.runQuery(eq(listQueryType), 
anyObject(listQueryParamsClass))).andReturn(
+                queryResult);
+    }
+
+    protected void setUpEntityQueryExpectations(int times, int index, boolean 
notFound) throws Exception {
+        while (times-- > 0) {
+            setUpEntityQueryExpectations(VdcQueryType.GetCpuProfileById,
+                    IdQueryParameters.class,
+                    new String[] { "Id" },
+                    new Object[] { GUIDS[index] },
+                    notFound ? null : getEntity(index));
+        }
+    }
+
+    static CpuProfile getModel(int index) {
+        CpuProfile model = new CpuProfile();
+        model.setId(GUIDS[index].toString());
+        model.setName(NAMES[index]);
+        model.setDescription(DESCRIPTIONS[index]);
+        return model;
+    }
+
+    protected 
List<org.ovirt.engine.core.common.businessentities.profiles.CpuProfile> 
getEntityList() {
+        
List<org.ovirt.engine.core.common.businessentities.profiles.CpuProfile> 
entities =
+                new 
ArrayList<org.ovirt.engine.core.common.businessentities.profiles.CpuProfile>();
+        for (int i = 0; i < NAMES.length; i++) {
+            entities.add(getEntity(i));
+        }
+
+        return entities;
+    }
+
+    @Override
+    protected 
org.ovirt.engine.core.common.businessentities.profiles.CpuProfile getEntity(int 
index) {
+        return 
setUpEntityExpectations(control.createMock(org.ovirt.engine.core.common.businessentities.profiles.CpuProfile.class),
+                index);
+    }
+
+    protected void setUpClusterQueryExpectations() {
+    }
+
+    static org.ovirt.engine.core.common.businessentities.profiles.CpuProfile 
setUpEntityExpectations(org.ovirt.engine.core.common.businessentities.profiles.CpuProfile
 entity,
+            int index) {
+        expect(entity.getId()).andReturn(GUIDS[index]).anyTimes();
+        expect(entity.getName()).andReturn(NAMES[index]).anyTimes();
+        
expect(entity.getDescription()).andReturn(DESCRIPTIONS[index]).anyTimes();
+        expect(entity.getClusterId()).andReturn(GUIDS[index]).anyTimes();
+        return entity;
+    }
+}
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendApiResourceTest.java
 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendApiResourceTest.java
index 5956119..9868ddb 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendApiResourceTest.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendApiResourceTest.java
@@ -122,6 +122,7 @@
         "storageconnections",
         "vnicprofiles",
         "diskprofiles",
+        "cpuprofiles",
         "schedulingpolicyunits",
         "schedulingpolicies",
         "permissions",
@@ -183,6 +184,7 @@
         BASE_PATH + "/storageconnections",
         BASE_PATH + "/vnicprofiles",
         BASE_PATH + "/diskprofiles",
+        BASE_PATH + "/cpuprofiles",
         BASE_PATH + "/schedulingpolicyunits",
         BASE_PATH + "/schedulingpolicies",
         BASE_PATH + "/permissions",
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendAssignedCpuProfileResourceTest.java
 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendAssignedCpuProfileResourceTest.java
new file mode 100644
index 0000000..a2ec2c4
--- /dev/null
+++ 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendAssignedCpuProfileResourceTest.java
@@ -0,0 +1,99 @@
+package org.ovirt.engine.api.restapi.resource;
+
+import static org.easymock.EasyMock.expect;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.ws.rs.WebApplicationException;
+
+import org.junit.Test;
+import org.ovirt.engine.api.model.CpuProfile;
+import org.ovirt.engine.core.common.queries.IdQueryParameters;
+import org.ovirt.engine.core.common.queries.VdcQueryType;
+
+public class BackendAssignedCpuProfileResourceTest
+        extends AbstractBackendSubResourceTest<CpuProfile, 
org.ovirt.engine.core.common.businessentities.profiles.CpuProfile, 
BackendAssignedCpuProfileResource> {
+
+    public BackendAssignedCpuProfileResourceTest() {
+        super(new BackendAssignedCpuProfileResource(GUIDS[0].toString(),
+                new BackendAssignedCpuProfilesResource(GUIDS[0].toString())));
+    }
+
+    @Test
+    public void testBadGuid() throws Exception {
+        control.replay();
+        try {
+            new BackendCpuProfileResource("foo");
+            fail("expected WebApplicationException");
+        } catch (WebApplicationException wae) {
+            verifyNotFoundException(wae);
+        }
+    }
+
+    @Test
+    public void testGetNotFound() throws Exception {
+        setUriInfo(setUpBasicUriExpectations());
+        setUpEntityQueryExpectations(1, 0, true);
+        control.replay();
+        try {
+            resource.get();
+            fail("expected WebApplicationException");
+        } catch (WebApplicationException wae) {
+            verifyNotFoundException(wae);
+        }
+    }
+
+    @Test
+    public void testGet() throws Exception {
+        setUriInfo(setUpBasicUriExpectations());
+        setUpEntityQueryExpectations(1, 0, false);
+        control.replay();
+
+        verifyModel(resource.get(), 0);
+    }
+
+    protected void setUpEntityQueryExpectations(int times, int index, boolean 
notFound) throws Exception {
+        while (times-- > 0) {
+            setUpEntityQueryExpectations(VdcQueryType.GetCpuProfileById,
+                    IdQueryParameters.class,
+                    new String[] { "Id" },
+                    new Object[] { GUIDS[index] },
+                    notFound ? null : getEntity(index));
+        }
+    }
+
+    static CpuProfile getModel(int index) {
+        CpuProfile model = new CpuProfile();
+        model.setId(GUIDS[index].toString());
+        model.setName(NAMES[index]);
+        model.setDescription(DESCRIPTIONS[index]);
+        return model;
+    }
+
+    @Override
+    protected 
org.ovirt.engine.core.common.businessentities.profiles.CpuProfile getEntity(int 
index) {
+        return 
setUpEntityExpectations(control.createMock(org.ovirt.engine.core.common.businessentities.profiles.CpuProfile.class),
+                index);
+    }
+
+    protected 
List<org.ovirt.engine.core.common.businessentities.profiles.CpuProfile> 
getEntityList() {
+        
List<org.ovirt.engine.core.common.businessentities.profiles.CpuProfile> 
entities =
+                new 
ArrayList<org.ovirt.engine.core.common.businessentities.profiles.CpuProfile>();
+        for (int i = 0; i < NAMES.length; i++) {
+            entities.add(getEntity(i));
+        }
+
+        return entities;
+    }
+
+    static org.ovirt.engine.core.common.businessentities.profiles.CpuProfile 
setUpEntityExpectations(org.ovirt.engine.core.common.businessentities.profiles.CpuProfile
 entity,
+            int index) {
+        expect(entity.getId()).andReturn(GUIDS[index]).anyTimes();
+        expect(entity.getName()).andReturn(NAMES[index]).anyTimes();
+        
expect(entity.getDescription()).andReturn(DESCRIPTIONS[index]).anyTimes();
+        expect(entity.getClusterId()).andReturn(GUIDS[index]).anyTimes();
+        expect(entity.getQosId()).andReturn(GUIDS[index]).anyTimes();
+        return entity;
+    }
+}
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendAssignedCpuProfilesResourceTest.java
 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendAssignedCpuProfilesResourceTest.java
new file mode 100644
index 0000000..33acde2
--- /dev/null
+++ 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendAssignedCpuProfilesResourceTest.java
@@ -0,0 +1,21 @@
+package org.ovirt.engine.api.restapi.resource;
+
+import java.util.List;
+
+import org.ovirt.engine.api.model.CpuProfile;
+import org.ovirt.engine.core.common.queries.IdQueryParameters;
+import org.ovirt.engine.core.common.queries.VdcQueryType;
+
+public class BackendAssignedCpuProfilesResourceTest extends 
AbstractBackendCpuProfilesResourceTest<BackendAssignedCpuProfilesResource> {
+
+    public BackendAssignedCpuProfilesResourceTest() {
+        super(new BackendAssignedCpuProfilesResource(CLUSTER_ID.toString()),
+                VdcQueryType.GetCpuProfilesByClusterId,
+                IdQueryParameters.class);
+    }
+
+    @Override
+    protected List<CpuProfile> getCollection() {
+        return collection.list().getCpuProfiles();
+    }
+}
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendCpuProfileResourceTest.java
 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendCpuProfileResourceTest.java
new file mode 100644
index 0000000..24e372b
--- /dev/null
+++ 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendCpuProfileResourceTest.java
@@ -0,0 +1,159 @@
+package org.ovirt.engine.api.restapi.resource;
+
+import static org.easymock.EasyMock.expect;
+
+import javax.ws.rs.WebApplicationException;
+
+import org.junit.Test;
+import org.ovirt.engine.api.model.CpuProfile;
+import org.ovirt.engine.core.common.action.VdcActionType;
+import org.ovirt.engine.core.common.action.CpuProfileParameters;
+import org.ovirt.engine.core.common.queries.IdQueryParameters;
+import org.ovirt.engine.core.common.queries.VdcQueryType;
+
+public class BackendCpuProfileResourceTest
+        extends AbstractBackendSubResourceTest<CpuProfile, 
org.ovirt.engine.core.common.businessentities.profiles.CpuProfile, 
BackendCpuProfileResource> {
+
+    public BackendCpuProfileResourceTest() {
+        super(new BackendCpuProfileResource(GUIDS[0].toString()));
+    }
+
+    @Test
+    public void testBadGuid() throws Exception {
+        control.replay();
+        try {
+            new BackendCpuProfileResource("foo");
+            fail("expected WebApplicationException");
+        } catch (WebApplicationException wae) {
+            verifyNotFoundException(wae);
+        }
+    }
+
+    @Test
+    public void testGetNotFound() throws Exception {
+        setUriInfo(setUpBasicUriExpectations());
+        setUpEntityQueryExpectations(1, 0, true);
+        control.replay();
+        try {
+            resource.get();
+            fail("expected WebApplicationException");
+        } catch (WebApplicationException wae) {
+            verifyNotFoundException(wae);
+        }
+    }
+
+    @Test
+    public void testGet() throws Exception {
+        setUriInfo(setUpBasicUriExpectations());
+        setUpEntityQueryExpectations(1, 0, false);
+        control.replay();
+
+        verifyModel(resource.get(), 0);
+    }
+
+    @Test
+    public void testUpdateNotFound() throws Exception {
+        setUriInfo(setUpBasicUriExpectations());
+        setUpEntityQueryExpectations(1, 0, true);
+
+        control.replay();
+        try {
+            resource.update(getModel(0));
+            fail("expected WebApplicationException");
+        } catch (WebApplicationException wae) {
+            verifyNotFoundException(wae);
+        }
+    }
+
+    @Test
+    public void testUpdate() throws Exception {
+        setUpEntityQueryExpectations(2, 0, false);
+
+        setUriInfo(setUpActionExpectations(VdcActionType.UpdateCpuProfile,
+                CpuProfileParameters.class,
+                new String[] {},
+                new Object[] {},
+                true,
+                true));
+
+        verifyModel(resource.update(getModel(0)), 0);
+    }
+
+    @Test
+    public void testUpdateCantDo() throws Exception {
+        doTestBadUpdate(false, true, CANT_DO);
+    }
+
+    @Test
+    public void testUpdateFailed() throws Exception {
+        doTestBadUpdate(true, false, FAILURE);
+    }
+
+    private void doTestBadUpdate(boolean canDo, boolean success, String 
detail) throws Exception {
+        setUpEntityQueryExpectations(1, 0, false);
+
+        setUriInfo(setUpActionExpectations(VdcActionType.UpdateCpuProfile,
+                CpuProfileParameters.class,
+                new String[] {},
+                new Object[] {},
+                canDo,
+                success));
+
+        try {
+            resource.update(getModel(0));
+            fail("expected WebApplicationException");
+        } catch (WebApplicationException wae) {
+            verifyFault(wae, detail);
+        }
+    }
+
+    @Test
+    public void testConflictedUpdate() throws Exception {
+        setUriInfo(setUpBasicUriExpectations());
+        setUpEntityQueryExpectations(1, 0, false);
+        control.replay();
+
+        CpuProfile model = getModel(1);
+        model.setId(GUIDS[1].toString());
+        try {
+            resource.update(model);
+            fail("expected WebApplicationException");
+        } catch (WebApplicationException wae) {
+            verifyImmutabilityConstraint(wae);
+        }
+    }
+
+    protected void setUpEntityQueryExpectations(int times, int index, boolean 
notFound) throws Exception {
+        while (times-- > 0) {
+            setUpEntityQueryExpectations(VdcQueryType.GetCpuProfileById,
+                    IdQueryParameters.class,
+                    new String[] { "Id" },
+                    new Object[] { GUIDS[index] },
+                    notFound ? null : getEntity(index));
+        }
+    }
+
+    static CpuProfile getModel(int index) {
+        CpuProfile model = new CpuProfile();
+        model.setId(GUIDS[index].toString());
+        model.setName(NAMES[index]);
+        model.setDescription(DESCRIPTIONS[index]);
+        return model;
+    }
+
+    @Override
+    protected 
org.ovirt.engine.core.common.businessentities.profiles.CpuProfile getEntity(int 
index) {
+        return 
setUpEntityExpectations(control.createMock(org.ovirt.engine.core.common.businessentities.profiles.CpuProfile.class),
+                index);
+    }
+
+    static org.ovirt.engine.core.common.businessentities.profiles.CpuProfile 
setUpEntityExpectations(org.ovirt.engine.core.common.businessentities.profiles.CpuProfile
 entity,
+            int index) {
+        expect(entity.getId()).andReturn(GUIDS[index]).anyTimes();
+        expect(entity.getName()).andReturn(NAMES[index]).anyTimes();
+        
expect(entity.getDescription()).andReturn(DESCRIPTIONS[index]).anyTimes();
+        expect(entity.getClusterId()).andReturn(GUIDS[index]).anyTimes();
+        expect(entity.getQosId()).andReturn(GUIDS[index]).anyTimes();
+        return entity;
+    }
+}
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendCpuProfilesResourceTest.java
 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendCpuProfilesResourceTest.java
new file mode 100644
index 0000000..d301ff5
--- /dev/null
+++ 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendCpuProfilesResourceTest.java
@@ -0,0 +1,42 @@
+package org.ovirt.engine.api.restapi.resource;
+
+import java.util.List;
+
+import org.ovirt.engine.api.model.CpuProfile;
+import org.ovirt.engine.core.common.businessentities.VDSGroup;
+import org.ovirt.engine.core.common.queries.IdQueryParameters;
+import org.ovirt.engine.core.common.queries.VdcQueryParametersBase;
+import org.ovirt.engine.core.common.queries.VdcQueryType;
+
+public class BackendCpuProfilesResourceTest extends 
AbstractBackendCpuProfilesResourceTest<BackendCpuProfilesResource> {
+
+    public BackendCpuProfilesResourceTest() {
+        super(new BackendCpuProfilesResource(), 
VdcQueryType.GetAllCpuProfiles, VdcQueryParametersBase.class);
+    }
+
+    @Override
+    protected String[] getIncompleteFields() {
+        return new String[] { "cluster.id" };
+    }
+
+    @Override
+    protected CpuProfile createIncompleteCpuProfile() {
+        CpuProfile cpuProfile = super.createIncompleteCpuProfile();
+        cpuProfile.setName(NAMES[0]);
+        return cpuProfile;
+    }
+
+    @Override
+    protected List<CpuProfile> getCollection() {
+        return collection.list().getCpuProfiles();
+    }
+
+    @Override
+    protected void setUpClusterQueryExpectations() {
+        setUpEntityQueryExpectations(VdcQueryType.GetVdsGroupById,
+                IdQueryParameters.class,
+                new String[] { "Id" },
+                new Object[] { CLUSTER_ID },
+                new VDSGroup());
+    }
+}
diff --git 
a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/CpuProfileMapper.java
 
b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/CpuProfileMapper.java
new file mode 100644
index 0000000..ee7e626
--- /dev/null
+++ 
b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/CpuProfileMapper.java
@@ -0,0 +1,56 @@
+package org.ovirt.engine.api.restapi.types;
+
+import org.ovirt.engine.api.model.CpuProfile;
+import org.ovirt.engine.api.model.QoS;
+import org.ovirt.engine.api.model.Cluster;
+import org.ovirt.engine.api.restapi.utils.GuidUtils;
+
+public class CpuProfileMapper {
+    @Mapping(from = CpuProfile.class, to = 
org.ovirt.engine.core.common.businessentities.profiles.CpuProfile.class)
+    public static 
org.ovirt.engine.core.common.businessentities.profiles.CpuProfile 
map(CpuProfile model,
+            org.ovirt.engine.core.common.businessentities.profiles.CpuProfile 
template) {
+        org.ovirt.engine.core.common.businessentities.profiles.CpuProfile 
entity =
+                template != null ? template : new 
org.ovirt.engine.core.common.businessentities.profiles.CpuProfile();
+        if (model.isSetId()) {
+            entity.setId(GuidUtils.asGuid(model.getId()));
+        }
+        if (model.isSetName()) {
+            entity.setName(model.getName());
+        }
+        if (model.isSetDescription()) {
+            entity.setDescription(model.getDescription());
+        }
+        if (model.isSetCluster() && model.getCluster().isSetId()) {
+            entity.setClusterId(GuidUtils.asGuid(model.getCluster().getId()));
+        }
+        if (model.isSetQos() && model.getQos().isSetId()) {
+            entity.setQosId(GuidUtils.asGuid(model.getQos().getId()));
+        }
+        return entity;
+    }
+
+    @Mapping(from = 
org.ovirt.engine.core.common.businessentities.profiles.CpuProfile.class, to = 
CpuProfile.class)
+    public static CpuProfile 
map(org.ovirt.engine.core.common.businessentities.profiles.CpuProfile entity,
+            CpuProfile template) {
+        CpuProfile model = template != null ? template : new CpuProfile();
+        if (entity.getId() != null) {
+            model.setId(entity.getId().toString());
+        }
+        if (entity.getName() != null) {
+            model.setName(entity.getName());
+        }
+        if (entity.getDescription() != null) {
+            model.setDescription(entity.getDescription());
+        }
+        if (entity.getClusterId() != null) {
+            model.setCluster(new Cluster());
+            model.getCluster().setId(entity.getClusterId().toString());
+        }
+        if (entity.getQosId() != null) {
+            model.setQos(new QoS());
+            model.getQos().setId(entity.getQosId().toString());
+        }
+
+        return model;
+    }
+}
diff --git 
a/backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/CpuProfileMapperTest.java
 
b/backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/CpuProfileMapperTest.java
new file mode 100644
index 0000000..c1c33a1
--- /dev/null
+++ 
b/backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/CpuProfileMapperTest.java
@@ -0,0 +1,26 @@
+package org.ovirt.engine.api.restapi.types;
+
+import org.ovirt.engine.api.model.CpuProfile;
+
+public class CpuProfileMapperTest extends 
AbstractInvertibleMappingTest<CpuProfile,
+        org.ovirt.engine.core.common.businessentities.profiles.CpuProfile,
+        org.ovirt.engine.core.common.businessentities.profiles.CpuProfile> {
+
+    public CpuProfileMapperTest() {
+        super(CpuProfile.class,
+                
org.ovirt.engine.core.common.businessentities.profiles.CpuProfile.class,
+                
org.ovirt.engine.core.common.businessentities.profiles.CpuProfile.class);
+    }
+
+    @Override
+    protected void verify(CpuProfile model, CpuProfile transform) {
+        assertNotNull(transform);
+        assertEquals(model.getName(), transform.getName());
+        assertEquals(model.getId(), transform.getId());
+        assertEquals(model.getDescription(), transform.getDescription());
+        assertNotNull(transform.getCluster());
+        assertEquals(model.getCluster().getId(), 
transform.getCluster().getId());
+        assertNotNull(transform.getQos());
+        assertEquals(model.getQos().getId(), transform.getQos().getId());
+    }
+}


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

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

Reply via email to