Daniel Erez has uploaded a new change for review.
Change subject: restapi: add OpenStackVolumeTypes sub-collection
......................................................................
restapi: add OpenStackVolumeTypes sub-collection
Adding OpenStackVolumeTypes sub-collection to OpenStackVolumeProviders
root-collection:
* Added OpenStackVolumeType/OpenStackVolumeTypes elements.
* Support GET /api/openstackvolumeproviders/{provider_id}/volumetypes.
* Added relevant tests.
* Updated rsdl_metadata.yaml accordingly.
Feature Page: http://www.ovirt.org/Features/Cinder_Integration
Change-Id: I08157edb4f4808880848bc9f7d07c29500d1197d
Bug-Url: https://bugzilla.redhat.com/1185826
Signed-off-by: Daniel Erez <[email protected]>
---
M
backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/openstack/OpenStackVolumeProviderResource.java
A
backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/openstack/OpenStackVolumeTypeResource.java
A
backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/openstack/OpenStackVolumeTypesResource.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/resource/openstack/BackendOpenStackImageResource.java
M
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/openstack/BackendOpenStackImagesResource.java
R
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/openstack/BackendOpenStackStorageProviderHelper.java
M
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/openstack/BackendOpenStackVolumeProviderResource.java
A
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/openstack/BackendOpenStackVolumeTypeResource.java
A
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/openstack/BackendOpenStackVolumeTypesResource.java
A
backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/openstack/BackendOpenStackVolumeTypeResourceTest.java
A
backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/openstack/BackendOpenStackVolumeTypesResourceTest.java
A
backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/openstack/OpenStackVolumeTypeMapper.java
15 files changed, 559 insertions(+), 4 deletions(-)
git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/71/39371/1
diff --git
a/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/openstack/OpenStackVolumeProviderResource.java
b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/openstack/OpenStackVolumeProviderResource.java
index d709f86..4fb3b2f 100644
---
a/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/openstack/OpenStackVolumeProviderResource.java
+++
b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/openstack/OpenStackVolumeProviderResource.java
@@ -20,8 +20,11 @@
import org.ovirt.engine.api.resource.ApiMediaType;
import org.ovirt.engine.api.resource.ExternalProviderResource;
+import javax.ws.rs.Path;
import javax.ws.rs.Produces;
@Produces({ApiMediaType.APPLICATION_XML, ApiMediaType.APPLICATION_JSON,
ApiMediaType.APPLICATION_X_YAML})
public interface OpenStackVolumeProviderResource extends
ExternalProviderResource<OpenStackVolumeProvider> {
+ @Path("volumetypes")
+ public OpenStackVolumeTypesResource getOpenStackVolumeTypes();
}
diff --git
a/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/openstack/OpenStackVolumeTypeResource.java
b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/openstack/OpenStackVolumeTypeResource.java
new file mode 100644
index 0000000..a8f5443
--- /dev/null
+++
b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/openstack/OpenStackVolumeTypeResource.java
@@ -0,0 +1,29 @@
+/*
+* Copyright (c) 2014 Red Hat, Inc.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package org.ovirt.engine.api.resource.openstack;
+
+import org.ovirt.engine.api.model.OpenStackVolumeType;
+import org.ovirt.engine.api.resource.ApiMediaType;
+
+import javax.ws.rs.GET;
+import javax.ws.rs.Produces;
+
+@Produces({ApiMediaType.APPLICATION_XML, ApiMediaType.APPLICATION_JSON,
ApiMediaType.APPLICATION_X_YAML})
+public interface OpenStackVolumeTypeResource {
+ @GET
+ public OpenStackVolumeType get();
+}
diff --git
a/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/openstack/OpenStackVolumeTypesResource.java
b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/openstack/OpenStackVolumeTypesResource.java
new file mode 100644
index 0000000..4d4c2c8
--- /dev/null
+++
b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/openstack/OpenStackVolumeTypesResource.java
@@ -0,0 +1,35 @@
+/*
+* Copyright (c) 2014 Red Hat, Inc.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package org.ovirt.engine.api.resource.openstack;
+
+import org.ovirt.engine.api.model.OpenStackVolumeTypes;
+import org.ovirt.engine.api.resource.ApiMediaType;
+
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+
+@Path("volumes")
+@Produces({ApiMediaType.APPLICATION_XML, ApiMediaType.APPLICATION_JSON,
ApiMediaType.APPLICATION_X_YAML})
+public interface OpenStackVolumeTypesResource {
+ @GET
+ public OpenStackVolumeTypes list();
+
+ @Path("{id}")
+ OpenStackVolumeTypeResource getOpenStackVolumeType(@PathParam("id") String
id);
+}
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 8ebf97c..0cb7f33 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
@@ -79,6 +79,7 @@
import org.ovirt.engine.api.model.OpenStackNetworkProvider;
import org.ovirt.engine.api.model.OpenStackSubnet;
import org.ovirt.engine.api.model.OpenStackVolumeProvider;
+import org.ovirt.engine.api.model.OpenStackVolumeType;
import org.ovirt.engine.api.model.OperatingSystemInfo;
import org.ovirt.engine.api.model.Parameter;
import org.ovirt.engine.api.model.ParametersSet;
@@ -267,6 +268,8 @@
import org.ovirt.engine.api.resource.openstack.OpenStackSubnetsResource;
import org.ovirt.engine.api.resource.openstack.OpenStackVolumeProviderResource;
import
org.ovirt.engine.api.resource.openstack.OpenStackVolumeProvidersResource;
+import org.ovirt.engine.api.resource.openstack.OpenStackVolumeTypeResource;
+import org.ovirt.engine.api.resource.openstack.OpenStackVolumeTypesResource;
/**
* Contains a static addLinks() method which constructs any href attributes
@@ -556,6 +559,10 @@
map = new ParentToCollectionMap(OpenStackVolumeProviderResource.class,
OpenStackVolumeProvidersResource.class);
TYPES.put(OpenStackVolumeProvider.class, map);
+ map = new ParentToCollectionMap(OpenStackVolumeTypeResource.class,
OpenStackVolumeTypesResource.class);
+ map.add(OpenStackVolumeTypeResource.class,
OpenStackVolumeTypesResource.class, OpenStackVolumeProvider.class);
+ TYPES.put(OpenStackVolumeType.class, map);
+
// OpenStack network providers:
map = new
ParentToCollectionMap(OpenStackNetworkProviderResource.class,
OpenStackNetworkProvidersResource.class);
TYPES.put(OpenStackNetworkProvider.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 07cfecf..34ccfb7 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
@@ -5373,6 +5373,37 @@
</xs:extension>
</xs:complexContent>
</xs:complexType>
+
+ <xs:element name="openstack_volume_type" type="OpenStackVolumeType"/>
+
+ <xs:element name="openstack_volume_types" type="OpenStackVolumeTypes"/>
+
+ <xs:complexType name="OpenStackVolumeType">
+ <xs:complexContent>
+ <xs:extension base="BaseResource">
+ <xs:sequence>
+ <xs:element ref="properties" minOccurs="0" maxOccurs="1"/>
+ <xs:element ref="openstack_volume_provider" minOccurs="0"
maxOccurs="1"/>
+ </xs:sequence>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+
+ <xs:complexType name="OpenStackVolumeTypes">
+ <xs:complexContent>
+ <xs:extension base="BaseResources">
+ <xs:sequence>
+ <xs:element ref="openstack_volume_type" minOccurs="0"
maxOccurs="unbounded">
+ <xs:annotation>
+ <xs:appinfo>
+ <jaxb:property name="OpenStackVolumeTypes"/>
+ </xs:appinfo>
+ </xs:annotation>
+ </xs:element>
+ </xs:sequence>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
<!-- OpenStack network providers: -->
<xs:element name="openstack_network_provider"
type="OpenStackNetworkProvider"/>
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 87ce521..8fe08ca 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
@@ -6168,6 +6168,23 @@
headers:
Content-Type: {value: application/xml|json, required: true}
Expect: {value: 201-created, required: false}
+- name:
/openstackvolumeproviders/{openstackvolumeprovider:id}/volumetypes|rel=get
+ description: get the list of volume types of the OpenStack volume provider
+ request:
+ body:
+ parameterType: null
+ signatures: []
+ urlparams:
+ max: {context: matrix, type: 'xs:int', value: 'max results', required:
false}
+ headers: {}
+- name:
/openstackvolumeproviders/{openstackvolumeprovider:id}/volumetypes/{volumetype:id}|rel=get
+ description: get the details of the specified volume type of the OpenStack
volume provider
+ request:
+ body:
+ parameterType: null
+ signatures: []
+ urlparams: {}
+ headers: {}
- name: /openstacknetworkproviders|rel=get
description: get the list of all OpenStack network providers in the system
diff --git
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/openstack/BackendOpenStackImageResource.java
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/openstack/BackendOpenStackImageResource.java
index c26940d..75bb14d 100644
---
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/openstack/BackendOpenStackImageResource.java
+++
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/openstack/BackendOpenStackImageResource.java
@@ -44,7 +44,7 @@
@Override
public OpenStackImage get() {
- Guid storageDomainId =
BackendOpenStackImageProviderHelper.getStorageDomainId(this, providerId);
+ Guid storageDomainId =
BackendOpenStackStorageProviderHelper.getStorageDomainId(this, providerId);
return performGet(VdcQueryType.GetImageById, new
GetImageByIdParameters(storageDomainId, id));
}
@@ -64,7 +64,7 @@
@Override
public Response doImport(Action action) {
validateParameters(action, "storageDomain.id|name");
- Guid storageDomainId =
BackendOpenStackImageProviderHelper.getStorageDomainId(this, providerId);
+ Guid storageDomainId =
BackendOpenStackStorageProviderHelper.getStorageDomainId(this, providerId);
ImportRepoImageParameters parameters = new ImportRepoImageParameters();
parameters.setSourceRepoImageId(id);
parameters.setSourceStorageDomainId(storageDomainId);
diff --git
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/openstack/BackendOpenStackImagesResource.java
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/openstack/BackendOpenStackImagesResource.java
index b738a05..858e4c3 100644
---
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/openstack/BackendOpenStackImagesResource.java
+++
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/openstack/BackendOpenStackImagesResource.java
@@ -44,7 +44,7 @@
@Override
public OpenStackImages list() {
- Guid storageDomainId =
BackendOpenStackImageProviderHelper.getStorageDomainId(this, providerId);
+ Guid storageDomainId =
BackendOpenStackStorageProviderHelper.getStorageDomainId(this, providerId);
GetImagesListParameters parameters = new
GetImagesListParameters(storageDomainId, ImageFileType.All);
return mapCollection(getBackendCollection(VdcQueryType.GetImagesList,
parameters));
}
diff --git
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/openstack/BackendOpenStackImageProviderHelper.java
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/openstack/BackendOpenStackStorageProviderHelper.java
similarity index 97%
rename from
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/openstack/BackendOpenStackImageProviderHelper.java
rename to
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/openstack/BackendOpenStackStorageProviderHelper.java
index ee7c5a1..7e7a9d4 100644
---
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/openstack/BackendOpenStackImageProviderHelper.java
+++
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/openstack/BackendOpenStackStorageProviderHelper.java
@@ -27,7 +27,7 @@
/**
* A set of utility functions for dealing with OpenStack image providers.
*/
-public class BackendOpenStackImageProviderHelper {
+public class BackendOpenStackStorageProviderHelper {
/**
* Finds the identifier of the storage domain corresponding to the given
provider.
*
diff --git
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/openstack/BackendOpenStackVolumeProviderResource.java
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/openstack/BackendOpenStackVolumeProviderResource.java
index 54309a9..0900b04 100644
---
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/openstack/BackendOpenStackVolumeProviderResource.java
+++
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/openstack/BackendOpenStackVolumeProviderResource.java
@@ -18,6 +18,7 @@
import org.ovirt.engine.api.model.OpenStackVolumeProvider;
import org.ovirt.engine.api.resource.openstack.OpenStackVolumeProviderResource;
+import org.ovirt.engine.api.resource.openstack.OpenStackVolumeTypesResource;
import
org.ovirt.engine.api.restapi.resource.AbstractBackendExternalProviderResource;
import org.ovirt.engine.core.common.businessentities.Provider;
@@ -35,6 +36,11 @@
}
@Override
+ public OpenStackVolumeTypesResource getOpenStackVolumeTypes() {
+ return inject(new BackendOpenStackVolumeTypesResource(id));
+ }
+
+ @Override
protected OpenStackVolumeProvider doPopulate(OpenStackVolumeProvider
model, Provider entity) {
return parent.doPopulate(model, entity);
}
diff --git
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/openstack/BackendOpenStackVolumeTypeResource.java
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/openstack/BackendOpenStackVolumeTypeResource.java
new file mode 100644
index 0000000..b29af5e
--- /dev/null
+++
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/openstack/BackendOpenStackVolumeTypeResource.java
@@ -0,0 +1,74 @@
+/*
+* Copyright (c) 2014 Red Hat, Inc.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package org.ovirt.engine.api.restapi.resource.openstack;
+
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.collections.Predicate;
+import org.ovirt.engine.api.model.OpenStackVolumeProvider;
+import org.ovirt.engine.api.model.OpenStackVolumeType;
+import org.ovirt.engine.api.resource.openstack.OpenStackVolumeTypeResource;
+import org.ovirt.engine.api.restapi.resource.AbstractBackendActionableResource;
+import org.ovirt.engine.core.common.businessentities.storage.CinderVolumeType;
+import org.ovirt.engine.core.common.queries.IdQueryParameters;
+import org.ovirt.engine.core.common.queries.VdcQueryType;
+import org.ovirt.engine.core.compat.Guid;
+
+import java.util.List;
+
+public class BackendOpenStackVolumeTypeResource
+ extends AbstractBackendActionableResource<OpenStackVolumeType,
CinderVolumeType>
+ implements OpenStackVolumeTypeResource {
+ private String providerId;
+
+ protected BackendOpenStackVolumeTypeResource(String providerId, String id)
{
+ super(id, OpenStackVolumeType.class, CinderVolumeType.class);
+ this.providerId = providerId;
+ }
+
+ @Override
+ public OpenStackVolumeType get() {
+ Guid storageDomainId =
BackendOpenStackStorageProviderHelper.getStorageDomainId(this, providerId);
+ IdQueryParameters parameters = new IdQueryParameters(storageDomainId);
+ List<CinderVolumeType> volumeTypes = getBackendCollection(
+ CinderVolumeType.class,
VdcQueryType.GetCinderVolumeTypesByStorageDomainId, parameters);
+ CollectionUtils.filter(volumeTypes, new Predicate() {
+ @Override
+ public boolean evaluate(Object o) {
+ return ((CinderVolumeType) o).getId().equals(id);
+ }
+ });
+
+ if (volumeTypes.isEmpty()) {
+ return notFound();
+ }
+
+ return addLinks(populate(map(volumeTypes.get(0)), volumeTypes.get(0)));
+ }
+
+ @Override
+ protected OpenStackVolumeType doPopulate(OpenStackVolumeType model,
CinderVolumeType entity) {
+ return model;
+ }
+
+ @Override
+ protected OpenStackVolumeType addParents(OpenStackVolumeType volumeType) {
+ OpenStackVolumeProvider provider = new OpenStackVolumeProvider();
+ provider.setId(providerId);
+ volumeType.setOpenstackVolumeProvider(provider);
+ return super.addParents(volumeType);
+ }
+}
diff --git
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/openstack/BackendOpenStackVolumeTypesResource.java
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/openstack/BackendOpenStackVolumeTypesResource.java
new file mode 100644
index 0000000..5fc0860
--- /dev/null
+++
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/openstack/BackendOpenStackVolumeTypesResource.java
@@ -0,0 +1,83 @@
+/*
+* Copyright (c) 2014 Red Hat, Inc.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package org.ovirt.engine.api.restapi.resource.openstack;
+
+import org.ovirt.engine.api.model.OpenStackVolumeProvider;
+import org.ovirt.engine.api.model.OpenStackVolumeType;
+import org.ovirt.engine.api.model.OpenStackVolumeTypes;
+import org.ovirt.engine.api.resource.openstack.OpenStackVolumeTypeResource;
+import org.ovirt.engine.api.resource.openstack.OpenStackVolumeTypesResource;
+import org.ovirt.engine.api.restapi.resource.AbstractBackendCollectionResource;
+import org.ovirt.engine.api.restapi.resource.SingleEntityResource;
+import org.ovirt.engine.core.common.businessentities.storage.CinderVolumeType;
+import org.ovirt.engine.core.common.queries.IdQueryParameters;
+import org.ovirt.engine.core.common.queries.VdcQueryType;
+import org.ovirt.engine.core.compat.Guid;
+
+import javax.ws.rs.core.Response;
+import java.util.List;
+
+public class BackendOpenStackVolumeTypesResource
+ extends AbstractBackendCollectionResource<OpenStackVolumeType,
CinderVolumeType>
+ implements OpenStackVolumeTypesResource {
+ private String providerId;
+
+ public BackendOpenStackVolumeTypesResource(String providerId) {
+ super(OpenStackVolumeType.class, CinderVolumeType.class);
+ this.providerId = providerId;
+ }
+
+ @Override
+ public OpenStackVolumeTypes list() {
+ Guid storageDomainId =
BackendOpenStackStorageProviderHelper.getStorageDomainId(this, providerId);
+ IdQueryParameters parameters = new IdQueryParameters(storageDomainId);
+ return
mapCollection(getBackendCollection(VdcQueryType.GetCinderVolumeTypesByStorageDomainId,
parameters));
+
+ }
+
+ @Override
+ protected OpenStackVolumeType doPopulate(OpenStackVolumeType model,
CinderVolumeType entity) {
+ return model;
+ }
+
+ protected OpenStackVolumeTypes mapCollection(List<CinderVolumeType>
entities) {
+ OpenStackVolumeTypes collection = new OpenStackVolumeTypes();
+ for (CinderVolumeType volumeType : entities) {
+
collection.getOpenStackVolumeTypes().add(addLinks(populate(map(volumeType),
volumeType)));
+ }
+ return collection;
+ }
+
+ @Override
+ protected OpenStackVolumeType addParents(OpenStackVolumeType volumeType) {
+ OpenStackVolumeProvider provider = new OpenStackVolumeProvider();
+ provider.setId(providerId);
+ volumeType.setOpenstackVolumeProvider(provider);
+ return super.addParents(volumeType);
+ }
+
+ @Override
+ protected Response performRemove(String id) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ @SingleEntityResource
+ public OpenStackVolumeTypeResource getOpenStackVolumeType(String id) {
+ return inject(new BackendOpenStackVolumeTypeResource(providerId, id));
+ }
+}
diff --git
a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/openstack/BackendOpenStackVolumeTypeResourceTest.java
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/openstack/BackendOpenStackVolumeTypeResourceTest.java
new file mode 100644
index 0000000..9bebf7c
--- /dev/null
+++
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/openstack/BackendOpenStackVolumeTypeResourceTest.java
@@ -0,0 +1,120 @@
+/*
+* Copyright (c) 2014 Red Hat, Inc.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package org.ovirt.engine.api.restapi.resource.openstack;
+
+import org.junit.Test;
+import org.ovirt.engine.api.model.OpenStackVolumeType;
+import org.ovirt.engine.api.restapi.resource.AbstractBackendSubResourceTest;
+import org.ovirt.engine.core.common.businessentities.storage.CinderVolumeType;
+import org.ovirt.engine.core.common.businessentities.StorageDomain;
+import org.ovirt.engine.core.common.queries.IdQueryParameters;
+import org.ovirt.engine.core.common.queries.VdcQueryParametersBase;
+import org.ovirt.engine.core.common.queries.VdcQueryType;
+
+import javax.ws.rs.WebApplicationException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import static org.easymock.EasyMock.expect;
+
+public class BackendOpenStackVolumeTypeResourceTest
+ extends AbstractBackendSubResourceTest<OpenStackVolumeType,
CinderVolumeType, BackendOpenStackVolumeTypeResource> {
+ public BackendOpenStackVolumeTypeResourceTest() {
+ super(new BackendOpenStackVolumeTypeResource(GUIDS[0].toString(),
GUIDS[1].toString()));
+ }
+
+ @Test
+ public void testBadId() throws Exception {
+ control.replay();
+ try {
+ new BackendOpenStackImageProviderResource("foo");
+ fail("expected WebApplicationException");
+ }
+ catch (WebApplicationException wae) {
+ verifyNotFoundException(wae);
+ }
+ }
+
+ @Test
+ public void testGetNotFound() throws Exception {
+ setUriInfo(setUpBasicUriExpectations());
+ setUpGetEntityExpectations(true);
+ control.replay();
+ try {
+ resource.get();
+ fail("expected WebApplicationException");
+ }
+ catch (WebApplicationException wae) {
+ verifyNotFoundException(wae);
+ }
+ }
+
+ @Test
+ public void testGet() throws Exception {
+ setUriInfo(setUpBasicUriExpectations());
+ setUpGetEntityExpectations(false);
+ control.replay();
+ verifyModel(resource.get(), 1);
+ }
+
+ private List<StorageDomain> getStorageDomains() {
+ StorageDomain storageDomain = control.createMock(StorageDomain.class);
+ expect(storageDomain.getId()).andReturn(GUIDS[0]).anyTimes();
+
expect(storageDomain.getStorage()).andReturn(GUIDS[0].toString()).anyTimes();
+ return Collections.singletonList(storageDomain);
+ }
+
+ @Override
+ protected CinderVolumeType getEntity(int index) {
+ CinderVolumeType cinderVolumeType =
control.createMock(CinderVolumeType.class);
+
expect(cinderVolumeType.getId()).andReturn(GUIDS[index].toString()).anyTimes();
+ expect(cinderVolumeType.getName()).andReturn(NAMES[index]).anyTimes();
+ return cinderVolumeType;
+ }
+
+ private void setUpGetEntityExpectations(boolean notFound) throws Exception
{
+ setUpEntityQueryExpectations(
+ VdcQueryType.GetAllStorageDomains,
+ VdcQueryParametersBase.class,
+ new String[] {},
+ new Object[] {},
+ getStorageDomains()
+ );
+ setUpEntityQueryExpectations(
+ VdcQueryType.GetCinderVolumeTypesByStorageDomainId,
+ IdQueryParameters.class,
+ new String[]{"Id"},
+ new Object[]{GUIDS[0]},
+ notFound ? Collections.emptyList() : getCinderVolumeTypes()
+ );
+ }
+
+ @Override
+ protected void verifyModel(OpenStackVolumeType model, int index) {
+ assertEquals(NAMES[index], model.getName());
+ verifyLinks(model);
+ }
+
+ private List<CinderVolumeType> getCinderVolumeTypes() {
+ List<CinderVolumeType> cinderVolumeTypes = new ArrayList<>();
+ for (int i = 0; i < NAMES.length; i++) {
+ cinderVolumeTypes.add(getEntity(i));
+ }
+ return cinderVolumeTypes;
+ }
+}
diff --git
a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/openstack/BackendOpenStackVolumeTypesResourceTest.java
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/openstack/BackendOpenStackVolumeTypesResourceTest.java
new file mode 100644
index 0000000..f7bb244
--- /dev/null
+++
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/openstack/BackendOpenStackVolumeTypesResourceTest.java
@@ -0,0 +1,96 @@
+/*
+* Copyright (c) 2014 Red Hat, Inc.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package org.ovirt.engine.api.restapi.resource.openstack;
+
+import org.ovirt.engine.api.model.OpenStackVolumeType;
+import
org.ovirt.engine.api.restapi.resource.AbstractBackendCollectionResourceTest;
+import org.ovirt.engine.core.common.businessentities.storage.CinderVolumeType;
+import org.ovirt.engine.core.common.businessentities.StorageDomain;
+import org.ovirt.engine.core.common.queries.IdQueryParameters;
+import org.ovirt.engine.core.common.queries.VdcQueryParametersBase;
+import org.ovirt.engine.core.common.queries.VdcQueryType;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import static org.easymock.EasyMock.expect;
+
+public class BackendOpenStackVolumeTypesResourceTest extends
+ AbstractBackendCollectionResourceTest<OpenStackVolumeType,
CinderVolumeType, BackendOpenStackVolumeTypesResource> {
+ public BackendOpenStackVolumeTypesResourceTest() {
+ super(
+ new BackendOpenStackVolumeTypesResource(GUIDS[0].toString()),
+ null,
+ ""
+ );
+ }
+
+ @Override
+ protected List<OpenStackVolumeType> getCollection() {
+ return collection.list().getOpenStackVolumeTypes();
+ }
+
+ @Override
+ protected void setUpQueryExpectations(String query, Object failure) throws
Exception {
+ setUpEntityQueryExpectations(
+ VdcQueryType.GetAllStorageDomains,
+ VdcQueryParametersBase.class,
+ new String[] {},
+ new Object[] {},
+ getStorageDomains()
+ );
+ setUpEntityQueryExpectations(
+ VdcQueryType.GetCinderVolumeTypesByStorageDomainId,
+ IdQueryParameters.class,
+ new String[] { "Id" },
+ new Object[] { GUIDS[0] },
+ getCinderVolumeTypes(),
+ failure
+ );
+ control.replay();
+ }
+
+ private List<StorageDomain> getStorageDomains() {
+ StorageDomain storageDomain = control.createMock(StorageDomain.class);
+ expect(storageDomain.getId()).andReturn(GUIDS[0]).anyTimes();
+
expect(storageDomain.getStorage()).andReturn(GUIDS[0].toString()).anyTimes();
+ return Collections.singletonList(storageDomain);
+ }
+
+ private List<CinderVolumeType> getCinderVolumeTypes() {
+ List<CinderVolumeType> cinderVolumeTypes = new ArrayList<>();
+ for (int i = 0; i < NAMES.length; i++) {
+ cinderVolumeTypes.add(getEntity(i));
+ }
+ return cinderVolumeTypes;
+ }
+
+ @Override
+ protected CinderVolumeType getEntity(int index) {
+ CinderVolumeType cinderVolumeType =
control.createMock(CinderVolumeType.class);
+
expect(cinderVolumeType.getId()).andReturn(GUIDS[index].toString()).anyTimes();
+ expect(cinderVolumeType.getName()).andReturn(NAMES[index]).anyTimes();
+ return cinderVolumeType;
+ }
+
+ @Override
+ protected void verifyModel(OpenStackVolumeType model, int index) {
+ assertEquals(NAMES[index], model.getName());
+ verifyLinks(model);
+ }
+}
diff --git
a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/openstack/OpenStackVolumeTypeMapper.java
b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/openstack/OpenStackVolumeTypeMapper.java
new file mode 100644
index 0000000..1c0237e
--- /dev/null
+++
b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/openstack/OpenStackVolumeTypeMapper.java
@@ -0,0 +1,54 @@
+/*
+* Copyright (c) 2014 Red Hat, Inc.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package org.ovirt.engine.api.restapi.types.openstack;
+
+import org.ovirt.engine.api.model.OpenStackVolumeType;
+import org.ovirt.engine.api.restapi.types.Mapping;
+import org.ovirt.engine.api.restapi.utils.CustomPropertiesParser;
+import org.ovirt.engine.core.common.businessentities.storage.CinderVolumeType;
+
+public class OpenStackVolumeTypeMapper {
+ @Mapping(from = CinderVolumeType.class, to = OpenStackVolumeType.class)
+ public static OpenStackVolumeType map(CinderVolumeType entity,
OpenStackVolumeType template) {
+ OpenStackVolumeType model = template != null ? template: new
OpenStackVolumeType();
+ if (entity.getId() != null) {
+ model.setId(entity.getId());
+ }
+ if (entity.getName() != null) {
+ model.setName(entity.getName());
+ }
+ if (entity.getExtraSpecs() != null) {
+
model.setProperties(CustomPropertiesParser.fromMap(entity.getExtraSpecs()));
+ }
+ return model;
+ }
+
+ @Mapping(from = OpenStackVolumeType.class, to = CinderVolumeType.class)
+ public static CinderVolumeType map(OpenStackVolumeType model,
CinderVolumeType template) {
+ CinderVolumeType entity = template != null ? template: new
CinderVolumeType();
+ if (model.isSetId()) {
+ entity.setId(model.getId());
+ }
+ if (model.isSetName()) {
+ entity.setName(model.getName());
+ }
+ if (model.isSetProperties()) {
+
entity.setExtraSpecs(CustomPropertiesParser.toMap(model.getProperties()));
+ }
+ return entity;
+ }
+}
--
To view, visit https://gerrit.ovirt.org/39371
To unsubscribe, visit https://gerrit.ovirt.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I08157edb4f4808880848bc9f7d07c29500d1197d
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Daniel Erez <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches