Martin Mucha has uploaded a new change for review.

Change subject: restapi: rest support for MacPool
......................................................................

restapi: rest support for MacPool

Change-Id: Id343433198dadd209933b69012303c51acb4c1e1
Bug-Url: https://bugzilla.redhat.com/1078844
Signed-off-by: Martin Mucha <[email protected]>
---
A 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetMacPoolByIdQuery.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/SearchQuery.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/MacPool.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/interfaces/SearchType.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java
M 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/MacPoolDAO.java
M 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/MacPoolDAODbFacadeImpl.java
M 
backend/manager/modules/restapi/interface/common/jaxrs/src/main/java/org/ovirt/engine/api/common/util/QueryHelper.java
A 
backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/restapi/resource/MacPoolResource.java
A 
backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/restapi/resource/MacPoolsResource.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/jyaml.yml
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/BackendMacPoolResource.java
A 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendMacPoolsResource.java
A 
backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/MacPoolMapper.java
A 
backend/manager/modules/searchbackend/src/main/java/org/ovirt/engine/core/searchbackend/MacPoolConditionFieldAutoCompleter.java
M 
backend/manager/modules/searchbackend/src/main/java/org/ovirt/engine/core/searchbackend/SearchObjectAutoCompleter.java
M 
backend/manager/modules/searchbackend/src/main/java/org/ovirt/engine/core/searchbackend/SearchObjects.java
M 
frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/core/SearchBackend.gwt.xml
23 files changed, 467 insertions(+), 3 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/06/28706/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetMacPoolByIdQuery.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetMacPoolByIdQuery.java
new file mode 100644
index 0000000..f52bac8
--- /dev/null
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetMacPoolByIdQuery.java
@@ -0,0 +1,22 @@
+package org.ovirt.engine.core.bll;
+
+import org.ovirt.engine.core.common.businessentities.MacPool;
+import org.ovirt.engine.core.common.queries.IdQueryParameters;
+import org.ovirt.engine.core.compat.Guid;
+import org.ovirt.engine.core.dao.MacPoolDAO;
+
+public class GetMacPoolByIdQuery extends QueriesCommandBase<IdQueryParameters> 
{
+
+    public GetMacPoolByIdQuery(IdQueryParameters parameters) {
+        super(parameters);
+    }
+
+    @Override
+    protected void executeQueryCommand() {
+        final MacPoolDAO macPoolDao = getDbFacade().getMacPoolDao();
+        final Guid id = getParameters().getId();
+        final MacPool macPool = macPoolDao.get(id);
+
+        getQueryReturnValue().setReturnValue(macPool);
+    }
+}
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/SearchQuery.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/SearchQuery.java
index da09f8b..b2afd25 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/SearchQuery.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/SearchQuery.java
@@ -17,6 +17,7 @@
 import org.ovirt.engine.core.common.businessentities.DbUser;
 import org.ovirt.engine.core.common.businessentities.Disk;
 import org.ovirt.engine.core.common.businessentities.IVdcQueryable;
+import org.ovirt.engine.core.common.businessentities.MacPool;
 import org.ovirt.engine.core.common.businessentities.Provider;
 import org.ovirt.engine.core.common.businessentities.Quota;
 import org.ovirt.engine.core.common.businessentities.StorageDomain;
@@ -133,6 +134,10 @@
             returnValue = searchVMTemplates();
             break;
         }
+        case MacPool: {
+            returnValue = searchMacPools();
+            break;
+        }
         default: {
             log.errorFormat("Search object type not handled: {0}", 
getParameters().getSearchTypeValue());
             break;
@@ -141,6 +146,10 @@
         getQueryReturnValue().setReturnValue(returnValue);
     }
 
+    private List<MacPool> searchMacPools() {
+        return genericSearch(getDbFacade().getMacPoolDao(), true);
+    }
+
     private List<VM> searchVmsFromDb() {
         List<VM> returnValue = null;
 
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/MacPool.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/MacPool.java
index fee1b17..ddf9456 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/MacPool.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/MacPool.java
@@ -7,7 +7,7 @@
 import org.hibernate.validator.constraints.NotEmpty;
 import org.ovirt.engine.core.compat.Guid;
 
-public class MacPool implements BusinessEntity<Guid>, Commented, Serializable{
+public class MacPool extends IVdcQueryable implements BusinessEntity<Guid>, 
Commented, Serializable{
     private Guid id;
 
     private String name;
@@ -24,6 +24,11 @@
     private boolean defaultPool;
 
     @Override
+    public Object getQueryableId() {
+        return getId();
+    }
+
+    @Override
     public Guid getId() {
         return id;
     }
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/interfaces/SearchType.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/interfaces/SearchType.java
index 1caed3f..9ff872a 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/interfaces/SearchType.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/interfaces/SearchType.java
@@ -14,6 +14,7 @@
     VmPools,
     Cluster,
     StoragePool,
+    MacPool,
     StorageDomain,
     Quota,
     Disk,
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java
index 1bd530a..e2e9be9 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java
@@ -243,6 +243,8 @@
     GetAllStorageServerConnections,
     GetStorageServerConnectionsForDomain,
     GetStoragePoolById(VdcQueryAuthType.User),
+    GetMacPoolById(VdcQueryAuthType.User),
+    GetMacPoolsByDataCenterId(VdcQueryAuthType.User),
     GetStoragePoolByDatacenterName(VdcQueryAuthType.User),
     GetStorageDomainsByConnection,
     GetConnectionsByDataCenterAndStorageType,
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/MacPoolDAO.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/MacPoolDAO.java
index 8700fa8..b1c74b5 100644
--- 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/MacPoolDAO.java
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/MacPoolDAO.java
@@ -5,7 +5,7 @@
 import org.ovirt.engine.core.common.businessentities.MacPool;
 import org.ovirt.engine.core.compat.Guid;
 
-public interface MacPoolDAO extends GenericDao<MacPool, Guid> {
+public interface MacPoolDAO extends GenericDao<MacPool, Guid>, SearchDAO{
 
     MacPool getDefaultPool();
 
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/MacPoolDAODbFacadeImpl.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/MacPoolDAODbFacadeImpl.java
index 71d739a..9f9664b 100644
--- 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/MacPoolDAODbFacadeImpl.java
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/MacPoolDAODbFacadeImpl.java
@@ -64,6 +64,11 @@
     }
 
     @Override
+    public List getAllWithQuery(String query) {
+        return jdbcTemplate.query(query, new MacPoolRawMapper());
+    }
+
+    @Override
     public void save(MacPool entity) {
         if (entity.getRanges() == null || entity.getRanges().isEmpty()) {
             throw new RuntimeException("MacPool should contain at least one 
mac range");
diff --git 
a/backend/manager/modules/restapi/interface/common/jaxrs/src/main/java/org/ovirt/engine/api/common/util/QueryHelper.java
 
b/backend/manager/modules/restapi/interface/common/jaxrs/src/main/java/org/ovirt/engine/api/common/util/QueryHelper.java
index c6a4f11..b73ff73 100644
--- 
a/backend/manager/modules/restapi/interface/common/jaxrs/src/main/java/org/ovirt/engine/api/common/util/QueryHelper.java
+++ 
b/backend/manager/modules/restapi/interface/common/jaxrs/src/main/java/org/ovirt/engine/api/common/util/QueryHelper.java
@@ -32,6 +32,7 @@
 import org.ovirt.engine.api.model.Group;
 import org.ovirt.engine.api.model.Host;
 import org.ovirt.engine.api.model.InstanceType;
+import org.ovirt.engine.api.model.MacPool;
 import org.ovirt.engine.api.model.Network;
 import org.ovirt.engine.api.model.StorageDomain;
 import org.ovirt.engine.api.model.Template;
@@ -68,6 +69,7 @@
         RETURN_TYPES.put(Host.class, "Hosts" + RETURN_TYPE_SEPARTOR);
         RETURN_TYPES.put(Cluster.class, "Clusters" + RETURN_TYPE_SEPARTOR);
         RETURN_TYPES.put(DataCenter.class, "Datacenter" + 
RETURN_TYPE_SEPARTOR);
+        RETURN_TYPES.put(MacPool.class, "MacPool" + RETURN_TYPE_SEPARTOR);
         RETURN_TYPES.put(StorageDomain.class, "Storage" + 
RETURN_TYPE_SEPARTOR);
         RETURN_TYPES.put(Template.class, "Template" + RETURN_TYPE_SEPARTOR);
         RETURN_TYPES.put(InstanceType.class, "Instancetypes" + 
RETURN_TYPE_SEPARTOR);
diff --git 
a/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/restapi/resource/MacPoolResource.java
 
b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/restapi/resource/MacPoolResource.java
new file mode 100644
index 0000000..7788418
--- /dev/null
+++ 
b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/restapi/resource/MacPoolResource.java
@@ -0,0 +1,17 @@
+package org.ovirt.engine.api.restapi.resource;
+
+import javax.ws.rs.Produces;
+
+import org.ovirt.engine.api.model.MacPool;
+import org.ovirt.engine.api.resource.ApiMediaType;
+import org.ovirt.engine.api.resource.UpdatableResource;
+
+@Produces({ ApiMediaType.APPLICATION_XML, ApiMediaType.APPLICATION_JSON, 
ApiMediaType.APPLICATION_X_YAML })
+public interface MacPoolResource extends UpdatableResource<MacPool> {
+    @Override
+    MacPool get();
+
+    @Override
+    MacPool update(MacPool resource);
+
+}
diff --git 
a/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/restapi/resource/MacPoolsResource.java
 
b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/restapi/resource/MacPoolsResource.java
new file mode 100644
index 0000000..1551c2f
--- /dev/null
+++ 
b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/restapi/resource/MacPoolsResource.java
@@ -0,0 +1,34 @@
+package org.ovirt.engine.api.restapi.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.core.Response;
+
+import org.jboss.resteasy.annotations.providers.jaxb.Formatted;
+import org.ovirt.engine.api.model.MacPool;
+import org.ovirt.engine.api.model.MacPools;
+import org.ovirt.engine.api.resource.ApiMediaType;
+
+@Path("/macpools")
+public interface MacPoolsResource {
+
+    @GET
+    @Formatted
+    public MacPools list();
+
+    @POST
+    @Formatted
+    @Consumes({ ApiMediaType.APPLICATION_XML, ApiMediaType.APPLICATION_JSON, 
ApiMediaType.APPLICATION_X_YAML })
+    public Response add(MacPool macPool);
+
+    @DELETE
+    @Path("{id}")
+    public Response remove(@PathParam("id") String id);
+
+    @Path("{id}")
+    public MacPoolResource getMacPoolSubResource(@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 45f9c17b..e2c4414 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
@@ -34,6 +34,7 @@
         links.add(createLink("capabilities", baseUri));
         links.add(createLink("clusters", LinkFlags.SEARCHABLE, baseUri));
         links.add(createLink("datacenters", LinkFlags.SEARCHABLE, baseUri));
+        links.add(createLink("macpools", LinkFlags.SEARCHABLE, baseUri));
         links.add(createLink("events", LinkFlags.SEARCHABLE, getEventParams(), 
baseUri));
         links.add(createLink("hosts", LinkFlags.SEARCHABLE, baseUri));
         links.add(createLink("networks", LinkFlags.SEARCHABLE, 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 25ed205..c7b89cb 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
@@ -59,6 +59,7 @@
 import org.ovirt.engine.api.model.Label;
 import org.ovirt.engine.api.model.Link;
 import org.ovirt.engine.api.model.LinkCapabilities;
+import org.ovirt.engine.api.model.MacPool;
 import org.ovirt.engine.api.model.NIC;
 import org.ovirt.engine.api.model.Network;
 import org.ovirt.engine.api.model.NumaNode;
@@ -211,6 +212,8 @@
 import org.ovirt.engine.api.resource.gluster.GlusterHooksResource;
 import org.ovirt.engine.api.resource.gluster.GlusterVolumeResource;
 import org.ovirt.engine.api.resource.gluster.GlusterVolumesResource;
+import org.ovirt.engine.api.restapi.resource.MacPoolResource;
+import org.ovirt.engine.api.restapi.resource.MacPoolsResource;
 
 /**
  * Contains a static addLinks() method which constructs any href attributes
@@ -271,6 +274,9 @@
         map = new ParentToCollectionMap(DataCenterResource.class, 
DataCentersResource.class);
         TYPES.put(DataCenter.class, map);
 
+        map = new ParentToCollectionMap(MacPoolResource.class, 
MacPoolsResource.class);
+        TYPES.put(MacPool.class, map);
+
         map = new ParentToCollectionMap(MovableCopyableDiskResource.class, 
DisksResource.class);
         map.add(VmDiskResource.class, VmDisksResource.class, VM.class);
         map.add(TemplateDiskResource.class, TemplateDisksResource.class, 
Template.class);
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 609e9cd..334d7e3 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
@@ -1225,6 +1225,59 @@
     </xs:sequence>
   </xs:complexType>
 
+  <!-- Mac Pools-->
+  <xs:element name="mac_pool" type="MacPool"/>
+  <xs:element name="mac_pools" type="MacPools"/>
+
+  <xs:complexType name="MacPool">
+        <xs:complexContent>
+            <xs:extension base="BaseResource">
+                <xs:sequence>
+                    <xs:element name="shared" type="xs:boolean"/>
+                    <xs:element name="allow_duplicates" type="xs:boolean" 
minOccurs="1"/>
+                    <xs:element name="default_pool" type="xs:boolean" 
minOccurs="0"/>
+                    <xs:element name="ranges">
+                        <xs:complexType>
+                            <xs:sequence>
+                                <xs:element name="range" maxOccurs="unbounded">
+                                    <xs:complexType>
+                                        <xs:sequence>
+                                            <xs:element name="from" 
type="MacAddress"/>
+                                            <xs:element name="to" 
type="MacAddress"/>
+                                            <xs:element name="comment" 
type="xs:string"/>
+                                        </xs:sequence>
+                                    </xs:complexType>
+                                </xs:element>
+                            </xs:sequence>
+                        </xs:complexType>
+                    </xs:element>
+                </xs:sequence>
+            </xs:extension>
+        </xs:complexContent>
+  </xs:complexType>
+
+    <xs:complexType name="MacPools">
+        <xs:complexContent>
+            <xs:extension base="BaseResources">
+                <xs:sequence>
+                    <xs:annotation>
+                        <xs:appinfo>
+                            <jaxb:property name="MacPools"/>
+                        </xs:appinfo>
+                    </xs:annotation>
+                    <xs:element ref="mac_pool" minOccurs="0" 
maxOccurs="unbounded"/>
+                </xs:sequence>
+            </xs:extension>
+        </xs:complexContent>
+    </xs:complexType>
+
+    <xs:simpleType name="MacAddress">
+        <xs:restriction base="xs:string">
+            <xs:pattern 
value="[0-9a-fA-F]{2}:[0-9a-fA-F]{2}:[0-9a-fA-F]{2}:[0-9a-fA-F]{2}:[0-9a-fA-F]{2}:[0-9a-fA-F]{2}"/>
+        </xs:restriction>
+    </xs:simpleType>
+
+
   <!-- Data Centers -->
 
   <xs:element name="data_center" type="DataCenter"/>
@@ -1242,6 +1295,7 @@
             <xs:element name="version" type="Version" minOccurs="0" />
             <xs:element name="supported_versions" type="SupportedVersions" 
minOccurs="0" />
             <xs:element ref="status" minOccurs="0" maxOccurs="1" />
+            <xs:element name="mac_pool_id" type="xs:string" minOccurs="0"/>
             <!-- also rel="files" and rel="storagedomains" links -->
         </xs:sequence>
       </xs:extension>
diff --git 
a/backend/manager/modules/restapi/interface/definition/src/main/resources/jyaml.yml
 
b/backend/manager/modules/restapi/interface/definition/src/main/resources/jyaml.yml
index 7c94eb5..a44e0da 100644
--- 
a/backend/manager/modules/restapi/interface/definition/src/main/resources/jyaml.yml
+++ 
b/backend/manager/modules/restapi/interface/definition/src/main/resources/jyaml.yml
@@ -42,6 +42,7 @@
   link: org.ovirt.engine.api.model.Link
   logical_unit: org.ovirt.engine.api.model.LogicalUnit
   mac: org.ovirt.engine.api.model.MAC
+  mac_pool: org.ovirt.engine.api.model.MacPool
   memory_statistics: org.ovirt.engine.api.model.MemoryStatistics
   network: org.ovirt.engine.api.model.Network
   networks: org.ovirt.engine.api.model.Networks
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 ecf10ba..2906c4b 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
@@ -1891,6 +1891,74 @@
       Content-Type: {value: application/xml|json, required: true}
       Expect: {value: 201-created, required: false}
       Correlation-Id: {value: 'any string', required: false}
+- name: /macpools|rel=get
+  description: get a list of mac pools in the system
+  request:
+    body:
+      parameterType: null
+      signatures: []
+    urlparams: {}
+    headers:
+      Content-Type: {value: application/xml|json, required: true}
+- name: /macpools/{datacenter:id}|rel=delete
+  description: delete the specified mac pool from the system
+  request:
+    body:
+      required: false
+      parameterType: Action
+      signatures:
+      - mandatoryArguments: {}
+        optionalArguments: {}
+        description: delete the specified data center from the system
+    urlparams: {}
+    headers:
+      Content-Type: {value: application/xml|json, required: true}
+- name: /macpools/{datacenter:id}|rel=update
+  description: update the specified mac pool in the system
+  request:
+    body:
+      parameterType: MacPool
+      signatures:
+      - mandatoryArguments:
+        optionalArguments:
+          macpool.name: xs:string
+          macpool.description: xs:string
+          macpool.comment: xs:string
+          macpool.shared: xs:boolean
+          macpool.allow_duplicates: xs:boolean
+          macpool.default_pool: xs:boolean
+          macpool.ranges:
+            - range:
+                from: xs:string
+                to: xs:string
+                comment: xs:string
+        description: update the specified mac pool in the system
+    urlparams: {}
+    headers:
+      Content-Type: {value: application/xml|json, required: true}
+- name: /macpools/{datacenter:id}|rel=add
+  description: add the specified mac pool into the system
+  request:
+    body:
+      parameterType: MacPool
+      signatures:
+      - mandatoryArguments:
+          macpool.name: xs:string
+          macpool.ranges:
+            - range:
+                from: xs:string
+                to: xs:string
+                comment: xs:string
+        optionalArguments:
+          macpool.description: xs:string
+          macpool.comment: xs:string
+          macpool.shared: xs:boolean
+          macpool.allow_duplicates: xs:boolean
+          macpool.default_pool: xs:boolean
+        description: add the specified mac pool into the system
+    urlparams: {}
+    headers:
+      Content-Type: {value: application/xml|json, required: true}
 - name: /datacenters/{datacenter:id}|rel=update
   description: update the specified data center in the system
   request:
@@ -1955,7 +2023,11 @@
     body:
       parameterType: DataCenter
       signatures:
-      - mandatoryArguments: {datacenter.name: 'xs:string', 
datacenter.version.major: 'xs:int', datacenter.version.minor: 'xs:int'}
+      - mandatoryArguments:
+          datacenter.name: 'xs:string'
+          datacenter.version.major: 'xs:int'
+          datacenter.version.minor: 'xs:int'
+          datacenter.mac_pool_id: xs:string
         optionalArguments:
           datacenter.storage_type--DEPRECATED: xs:string
           datacenter.local: xs:boolean
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 40105e1..0d4e2d7 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
@@ -44,6 +44,7 @@
 import org.ovirt.engine.api.restapi.resource.BackendHostsResource;
 import org.ovirt.engine.api.restapi.resource.BackendInstanceTypesResource;
 import org.ovirt.engine.api.restapi.resource.BackendJobsResource;
+import org.ovirt.engine.api.restapi.resource.BackendMacPoolsResource;
 import org.ovirt.engine.api.restapi.resource.BackendNetworksResource;
 import org.ovirt.engine.api.restapi.resource.BackendResource;
 import org.ovirt.engine.api.restapi.resource.BackendRolesResource;
@@ -129,6 +130,7 @@
         addResource(new BackendHostsResource());
         addResource(new BackendClustersResource());
         addResource(new BackendDataCentersResource());
+        addResource(new BackendMacPoolsResource());
         addResource(new BackendStorageDomainsResource());
         addResource(new BackendTemplatesResource());
         addResource(new BackendInstanceTypesResource());
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendMacPoolResource.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendMacPoolResource.java
new file mode 100644
index 0000000..587cdeb
--- /dev/null
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendMacPoolResource.java
@@ -0,0 +1,44 @@
+package org.ovirt.engine.api.restapi.resource;
+
+import org.ovirt.engine.api.model.MacPool;
+import org.ovirt.engine.core.common.action.MacPoolParameter;
+import org.ovirt.engine.core.common.action.VdcActionParametersBase;
+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 class BackendMacPoolResource extends AbstractBackendSubResource<MacPool,
+        org.ovirt.engine.core.common.businessentities.MacPool> implements 
MacPoolResource {
+
+    public BackendMacPoolResource(String id) {
+        super(id, MacPool.class, 
org.ovirt.engine.core.common.businessentities.MacPool.class);
+    }
+
+    @Override
+    protected MacPool doPopulate(MacPool model, 
org.ovirt.engine.core.common.businessentities.MacPool entity) {
+        return model;
+    }
+
+    @Override
+    public MacPool get() {
+        return performGet(VdcQueryType.GetMacPoolById, new 
IdQueryParameters(guid));
+    }
+
+    @Override
+    public MacPool update(MacPool macPool) {
+        return performUpdate(macPool,
+                new QueryIdResolver<Guid>(VdcQueryType.GetMacPoolById, 
IdQueryParameters.class),
+                VdcActionType.UpdateMacPool,
+                new UpdateParametersProvider());
+    }
+
+    private class UpdateParametersProvider implements 
ParametersProvider<MacPool, 
org.ovirt.engine.core.common.businessentities.MacPool> {
+        @Override
+        public VdcActionParametersBase getParameters(MacPool model, 
org.ovirt.engine.core.common.businessentities.MacPool entity) {
+            final org.ovirt.engine.core.common.businessentities.MacPool 
macPool = map(model, entity);
+            macPool.setId(guid);
+            return new MacPoolParameter(macPool);
+        }
+    }
+}
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendMacPoolsResource.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendMacPoolsResource.java
new file mode 100644
index 0000000..da14813
--- /dev/null
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendMacPoolsResource.java
@@ -0,0 +1,60 @@
+package org.ovirt.engine.api.restapi.resource;
+
+import java.util.List;
+
+import javax.ws.rs.core.Response;
+
+import org.ovirt.engine.api.model.MacPool;
+import org.ovirt.engine.api.model.MacPools;
+import org.ovirt.engine.core.common.action.IdParameters;
+import org.ovirt.engine.core.common.action.MacPoolParameter;
+import org.ovirt.engine.core.common.action.VdcActionType;
+import org.ovirt.engine.core.common.interfaces.SearchType;
+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 BackendMacPoolsResource
+        extends AbstractBackendCollectionResource<MacPool, 
org.ovirt.engine.core.common.businessentities.MacPool>
+        implements MacPoolsResource{
+
+    public BackendMacPoolsResource() {
+        super(MacPool.class, 
org.ovirt.engine.core.common.businessentities.MacPool.class);
+    }
+
+    @Override
+    protected Response performRemove(String id) {
+        return performAction(VdcActionType.RemoveMacPool, new 
IdParameters(asGuid(id)));
+    }
+
+    @Override
+    protected MacPool doPopulate(MacPool model, 
org.ovirt.engine.core.common.businessentities.MacPool entity) {
+        return model;
+    }
+
+    @Override
+    public MacPools list() {
+        return mapCollection(getBackendCollection(SearchType.MacPool));
+    }
+
+    private MacPools 
mapCollection(List<org.ovirt.engine.core.common.businessentities.MacPool> 
entities) {
+        MacPools collection = new MacPools();
+        for (org.ovirt.engine.core.common.businessentities.MacPool entity : 
entities) {
+            collection.getMacPools().add(addLinks(populate(map(entity), 
entity)));
+        }
+        return collection;
+    }
+
+    @Override
+    public Response add(MacPool macPool) {
+        final org.ovirt.engine.core.common.businessentities.MacPool entity = 
map(macPool);
+        return performCreate(VdcActionType.AddMacPool,
+                new MacPoolParameter(entity),
+                new QueryIdResolver<Guid>(VdcQueryType.GetMacPoolById, 
IdQueryParameters.class));
+    }
+
+    @Override
+    public MacPoolResource getMacPoolSubResource(String id) {
+        return inject(new BackendMacPoolResource(id));
+    }
+}
diff --git 
a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/MacPoolMapper.java
 
b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/MacPoolMapper.java
new file mode 100644
index 0000000..3aa0092
--- /dev/null
+++ 
b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/MacPoolMapper.java
@@ -0,0 +1,90 @@
+package org.ovirt.engine.api.restapi.types;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.ovirt.engine.api.restapi.utils.GuidUtils;
+import org.ovirt.engine.core.common.businessentities.MacPool;
+import org.ovirt.engine.core.common.businessentities.MacRange;
+
+public class MacPoolMapper {
+    @Mapping(from= org.ovirt.engine.api.model.MacPool.class, to=MacPool.class)
+    public static MacPool map(org.ovirt.engine.api.model.MacPool model, 
MacPool template) {
+        if (model == null) {
+            return template;
+        }
+
+        MacPool entity = template == null ? new MacPool() : template;
+
+        entity.setId(GuidUtils.asGuidNullable(model.getId()));
+        entity.setName(model.getName());
+        entity.setShared(model.isShared());
+        entity.setAllowDuplicateMacAddresses(model.isAllowDuplicates());
+        entity.setComment(model.getComment());
+        entity.setDefaultPool(model.isSetDefaultPool() && 
model.isDefaultPool());
+        entity.setShared(model.isSetShared()?model.isShared() : false);
+
+        mapRanges(model, entity);
+
+        return entity;
+    }
+
+    private static void mapRanges(org.ovirt.engine.api.model.MacPool model, 
MacPool entity) {
+        final List<MacRange> rangesList = new ArrayList<MacRange>();
+        for (org.ovirt.engine.api.model.MacPool.Ranges.Range range : 
model.getRanges().getRange()) {
+            rangesList.add(mapRange(range));
+        }
+        entity.setRanges(rangesList);
+    }
+
+    private static MacRange 
mapRange(org.ovirt.engine.api.model.MacPool.Ranges.Range range) {
+        final MacRange result = new MacRange();
+
+        result.setMacFrom(range.getFrom());
+        result.setMacTo(range.getTo());
+        result.setComment(range.getComment());
+
+        return result;
+    }
+
+    @Mapping(from = MacPool.class, to = 
org.ovirt.engine.api.model.MacPool.class)
+    public static org.ovirt.engine.api.model.MacPool map(MacPool entity, 
org.ovirt.engine.api.model.MacPool template) {
+        if (entity == null) {
+            return template;
+        }
+
+        org.ovirt.engine.api.model.MacPool model = template == null ?
+                new org.ovirt.engine.api.model.MacPool() :
+                template;
+
+        model.setId(entity.getId().toString());
+        model.setName(entity.getName());
+        model.setShared(entity.isShared());
+        model.setAllowDuplicates(entity.isAllowDuplicateMacAddresses());
+        model.setComment(entity.getComment());
+        model.setDefaultPool(entity.isDefaultPool());
+
+        mapRanges(entity, model);
+
+        return model;
+    }
+
+    protected static void mapRanges(MacPool entity, 
org.ovirt.engine.api.model.MacPool result) {
+        final org.ovirt.engine.api.model.MacPool.Ranges ranges = new 
org.ovirt.engine.api.model.MacPool.Ranges();
+        for (MacRange macRange : entity.getRanges()) {
+            ranges.getRange().add(mapRange(macRange));
+        }
+        result.setRanges(ranges);
+    }
+
+    private static org.ovirt.engine.api.model.MacPool.Ranges.Range 
mapRange(MacRange range) {
+        final org.ovirt.engine.api.model.MacPool.Ranges.Range model =
+                new org.ovirt.engine.api.model.MacPool.Ranges.Range();
+
+        model.setFrom(range.getMacFrom());
+        model.setTo(range.getMacTo());
+        model.setComment(range.getComment());
+
+        return model;
+    }
+}
diff --git 
a/backend/manager/modules/searchbackend/src/main/java/org/ovirt/engine/core/searchbackend/MacPoolConditionFieldAutoCompleter.java
 
b/backend/manager/modules/searchbackend/src/main/java/org/ovirt/engine/core/searchbackend/MacPoolConditionFieldAutoCompleter.java
new file mode 100644
index 0000000..fa14c00
--- /dev/null
+++ 
b/backend/manager/modules/searchbackend/src/main/java/org/ovirt/engine/core/searchbackend/MacPoolConditionFieldAutoCompleter.java
@@ -0,0 +1,22 @@
+package org.ovirt.engine.core.searchbackend;
+
+import org.ovirt.engine.core.common.businessentities.ProviderType;
+
+public class MacPoolConditionFieldAutoCompleter extends 
BaseConditionFieldAutoCompleter {
+    public MacPoolConditionFieldAutoCompleter() {
+        buildBasicValidationTable();
+    }
+
+    @Override
+    public IAutoCompleter getFieldRelationshipAutoCompleter(final String 
fieldName) {
+        return StringConditionRelationAutoCompleter.INSTANCE;
+    }
+
+    @Override
+    public IConditionValueAutoCompleter getFieldValueAutoCompleter(String 
fieldName) {
+        if (ProviderConditionFieldAutoCompleter.TYPE.equals(fieldName)) {
+            return new EnumValueAutoCompleter(ProviderType.class);
+        }
+        return null;
+    }
+}
diff --git 
a/backend/manager/modules/searchbackend/src/main/java/org/ovirt/engine/core/searchbackend/SearchObjectAutoCompleter.java
 
b/backend/manager/modules/searchbackend/src/main/java/org/ovirt/engine/core/searchbackend/SearchObjectAutoCompleter.java
index 4ac5e05..6fe791d 100644
--- 
a/backend/manager/modules/searchbackend/src/main/java/org/ovirt/engine/core/searchbackend/SearchObjectAutoCompleter.java
+++ 
b/backend/manager/modules/searchbackend/src/main/java/org/ovirt/engine/core/searchbackend/SearchObjectAutoCompleter.java
@@ -30,6 +30,7 @@
         mVerbs.add(SearchObjects.PROVIDER_PLU_OBJ_NAME);
         mVerbs.add(SearchObjects.INSTANCE_TYPE_PLU_OBJ_NAME);
         mVerbs.add(SearchObjects.IMAGE_TYPE_PLU_OBJ_NAME);
+        mVerbs.add(SearchObjects.MAC_POOL_PLU_OBJ_NAME);
 
         buildCompletions();
         mVerbs.add(SearchObjects.VM_OBJ_NAME);
@@ -46,6 +47,7 @@
         mVerbs.add(SearchObjects.PROVIDER_OBJ_NAME);
         mVerbs.add(SearchObjects.INSTANCE_TYPE_OBJ_NAME);
         mVerbs.add(SearchObjects.IMAGE_TYPE_OBJ_NAME);
+        mVerbs.add(SearchObjects.MAC_POOL_OBJ_NAME);
 
         // vms - vds
         addJoin(SearchObjects.VM_OBJ_NAME, "run_on_vds", 
SearchObjects.VDS_OBJ_NAME, "vds_id");
@@ -329,6 +331,13 @@
                             "providers",
                             "id",
                             "name ASC"));
+
+                    put(SearchObjects.MAC_POOL_OBJ_NAME, new 
EntitySearchInfo(null,
+                            new MacPoolConditionFieldAutoCompleter(),
+                            "mac_pool_view",
+                            "mac_pool_view",
+                            "mp_id",
+                            "mp_name ASC"));
                 }
             });
 
@@ -355,6 +364,7 @@
             put(SearchObjects.VDC_STORAGE_DOMAIN_PLU_OBJ_NAME, 
SearchObjects.VDC_STORAGE_DOMAIN_OBJ_NAME);
             put(SearchObjects.NETWORK_PLU_OBJ_NAME, 
SearchObjects.NETWORK_OBJ_NAME);
             put(SearchObjects.PROVIDER_PLU_OBJ_NAME, 
SearchObjects.PROVIDER_OBJ_NAME);
+            put(SearchObjects.MAC_POOL_PLU_OBJ_NAME, 
SearchObjects.MAC_POOL_OBJ_NAME);
         }
     });
 
diff --git 
a/backend/manager/modules/searchbackend/src/main/java/org/ovirt/engine/core/searchbackend/SearchObjects.java
 
b/backend/manager/modules/searchbackend/src/main/java/org/ovirt/engine/core/searchbackend/SearchObjects.java
index c6f50bb..44fc821 100644
--- 
a/backend/manager/modules/searchbackend/src/main/java/org/ovirt/engine/core/searchbackend/SearchObjects.java
+++ 
b/backend/manager/modules/searchbackend/src/main/java/org/ovirt/engine/core/searchbackend/SearchObjects.java
@@ -27,6 +27,8 @@
     public static final String VDC_CLUSTER_OBJ_NAME = "CLUSTER";
     public static final String VDC_CLUSTER_PLU_OBJ_NAME = "CLUSTERS";
     public static final String VDC_STORAGE_POOL_OBJ_NAME = "DATACENTER";
+    public static final String MAC_POOL_OBJ_NAME = "MACPOOL";
+    public static final String MAC_POOL_PLU_OBJ_NAME = "MACPOOLS";
     public static final String VDC_STORAGE_DOMAIN_OBJ_NAME = "STORAGE";
     public static final String VDC_STORAGE_DOMAIN_PLU_OBJ_NAME = "STORAGES";
     public static final String VDC_STORAGE_DOMAIN_IMAGE_OBJ_NAME = "VMIMAGE";
@@ -77,6 +79,8 @@
             add(VDC_CLUSTER_OBJ_NAME.toLowerCase() + SEPARATOR);
             add(VDC_CLUSTER_PLU_OBJ_NAME.toLowerCase() + SEPARATOR);
             add(VDC_STORAGE_POOL_OBJ_NAME.toLowerCase() + SEPARATOR);
+            add(MAC_POOL_OBJ_NAME.toLowerCase() + SEPARATOR);
+            add(MAC_POOL_PLU_OBJ_NAME.toLowerCase() + SEPARATOR);
             add(VDC_STORAGE_DOMAIN_OBJ_NAME.toLowerCase() + SEPARATOR);
             add(VDC_STORAGE_DOMAIN_PLU_OBJ_NAME.toLowerCase() + SEPARATOR);
             add(VDC_STORAGE_DOMAIN_IMAGE_OBJ_NAME.toLowerCase() + SEPARATOR);
diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/core/SearchBackend.gwt.xml
 
b/frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/core/SearchBackend.gwt.xml
index aece4be..2b2ec5a 100644
--- 
a/frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/core/SearchBackend.gwt.xml
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/core/SearchBackend.gwt.xml
@@ -71,6 +71,7 @@
                <include 
name="searchbackend/NetworkInterfaceConditionFieldAutoCompleter.java" />
                <include 
name="searchbackend/NetworkClusterConditionFieldAutoCompleter.java" />
                <include 
name="searchbackend/ProviderConditionFieldAutoCompleter.java" />
+               <include 
name="searchbackend/MacPoolConditionFieldAutoCompleter.java" />
                
<!--======================SEARCHBACKEND/GLUSTER====================== -->
                <include 
name="searchbackend/gluster/GlusterVolumeConditionFieldAutoCompleter.java" />
                <include 
name="searchbackend/gluster/GlusterVolumeCrossRefAutoCompleter.java" />


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

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

Reply via email to