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
