Juan Hernandez has uploaded a new change for review. Change subject: restapi: Move Affinity Group VM remove from collection to entity ......................................................................
restapi: Move Affinity Group VM remove from collection to entity This patch moves the method that implements the DELETE operation from the collection interface to the entity interface. This is needed to avoid issues with newer versions of Resteasy. Change-Id: Id474459945434e0b44ab17ab389e1c86ee731e9f Related: https://gerrit.ovirt.org/41783 Signed-off-by: Juan Hernandez <juan.hernan...@redhat.com> --- A backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/AffinityGroupVmResource.java M backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/AffinityGroupVmsResource.java A backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendAffinityGroupVmResource.java M backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendAffinityGroupVmsResource.java A backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendAffinityGroupVmResourceTest.java M backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendAffinityGroupVmsResourceTest.java 6 files changed, 140 insertions(+), 36 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/01/41801/1 diff --git a/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/AffinityGroupVmResource.java b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/AffinityGroupVmResource.java new file mode 100644 index 0000000..0a9c58c --- /dev/null +++ b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/AffinityGroupVmResource.java @@ -0,0 +1,11 @@ +package org.ovirt.engine.api.resource; + +import javax.ws.rs.DELETE; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Response; + +@Produces({ ApiMediaType.APPLICATION_XML, ApiMediaType.APPLICATION_JSON, ApiMediaType.APPLICATION_X_YAML }) +public interface AffinityGroupVmResource { + @DELETE + Response remove(); +} diff --git a/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/AffinityGroupVmsResource.java b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/AffinityGroupVmsResource.java index 78e5f16..7667981 100644 --- a/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/AffinityGroupVmsResource.java +++ b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/AffinityGroupVmsResource.java @@ -1,7 +1,6 @@ package org.ovirt.engine.api.resource; import javax.ws.rs.Consumes; -import javax.ws.rs.DELETE; import javax.ws.rs.GET; import javax.ws.rs.POST; import javax.ws.rs.Path; @@ -14,16 +13,13 @@ @Produces({ ApiMediaType.APPLICATION_XML, ApiMediaType.APPLICATION_JSON, ApiMediaType.APPLICATION_X_YAML }) public interface AffinityGroupVmsResource { - @GET - public VMs list(); + VMs list(); @POST @Consumes({ ApiMediaType.APPLICATION_XML, ApiMediaType.APPLICATION_JSON, ApiMediaType.APPLICATION_X_YAML }) - public Response add(VM vm); + Response add(VM vm); - @DELETE @Path("{id}") - public Response remove(@PathParam("id") String id); - + AffinityGroupVmResource getAffinityGroupVmSubResource(@PathParam("id") String id); } diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendAffinityGroupVmResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendAffinityGroupVmResource.java new file mode 100644 index 0000000..5b3593e --- /dev/null +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendAffinityGroupVmResource.java @@ -0,0 +1,51 @@ +package org.ovirt.engine.api.restapi.resource; + +import org.ovirt.engine.api.model.VM; +import org.ovirt.engine.api.resource.AffinityGroupVmResource; +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.common.scheduling.AffinityGroup; +import org.ovirt.engine.core.common.scheduling.parameters.AffinityGroupCRUDParameters; +import org.ovirt.engine.core.compat.Guid; + +import javax.ws.rs.WebApplicationException; +import javax.ws.rs.core.Response; + +public class BackendAffinityGroupVmResource + extends AbstractBackendActionableResource<VM, org.ovirt.engine.core.common.businessentities.VM> + implements AffinityGroupVmResource { + + private Guid groupId; + + public BackendAffinityGroupVmResource(Guid groupId, String vmId) { + super(vmId, VM.class, org.ovirt.engine.core.common.businessentities.VM.class); + this.groupId = groupId; + } + + @Override + public Response remove() { + AffinityGroup group = getGroup(); + if (group == null || !group.getEntityIds().remove(asGuid(id))) { + throw new WebApplicationException(Response.Status.NOT_FOUND); + } + return performAction( + VdcActionType.EditAffinityGroup, + new AffinityGroupCRUDParameters(groupId, group) + ); + } + + @Override + protected VM doPopulate(VM model, org.ovirt.engine.core.common.businessentities.VM entity) { + return model; + } + + private org.ovirt.engine.core.common.scheduling.AffinityGroup getGroup() { + return getEntity( + org.ovirt.engine.core.common.scheduling.AffinityGroup.class, + VdcQueryType.GetAffinityGroupById, + new IdQueryParameters(groupId), + groupId.toString() + ); + } +} diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendAffinityGroupVmsResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendAffinityGroupVmsResource.java index 56cc460..925548a 100644 --- a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendAffinityGroupVmsResource.java +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendAffinityGroupVmsResource.java @@ -1,10 +1,10 @@ package org.ovirt.engine.api.restapi.resource; -import javax.ws.rs.WebApplicationException; import javax.ws.rs.core.Response; import org.ovirt.engine.api.model.VM; import org.ovirt.engine.api.model.VMs; +import org.ovirt.engine.api.resource.AffinityGroupVmResource; import org.ovirt.engine.api.resource.AffinityGroupVmsResource; import org.ovirt.engine.core.common.action.VdcActionType; import org.ovirt.engine.core.common.queries.IdQueryParameters; @@ -58,17 +58,6 @@ } @Override - protected Response performRemove(String id) { - AffinityGroup affinityGroup = getEntity(); - - if (!affinityGroup.getEntityIds().remove(asGuid(id))) { - throw new WebApplicationException(Response.Status.NOT_FOUND); - } - return performAction(VdcActionType.EditAffinityGroup, new AffinityGroupCRUDParameters(affinityGroup.getId(), - affinityGroup)); - } - - @Override protected org.ovirt.engine.core.common.scheduling.AffinityGroup getEntity() { return getEntity(org.ovirt.engine.core.common.scheduling.AffinityGroup.class, VdcQueryType.GetAffinityGroupById, @@ -76,4 +65,9 @@ affinityGroupId.toString()); } + @Override + @SingleEntityResource + public AffinityGroupVmResource getAffinityGroupVmSubResource(String id) { + return inject(new BackendAffinityGroupVmResource(affinityGroupId, id)); + } } diff --git a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendAffinityGroupVmResourceTest.java b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendAffinityGroupVmResourceTest.java new file mode 100644 index 0000000..9f67fb3 --- /dev/null +++ b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendAffinityGroupVmResourceTest.java @@ -0,0 +1,69 @@ +package org.ovirt.engine.api.restapi.resource; + +import org.junit.Test; +import org.ovirt.engine.api.model.VM; +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.common.scheduling.parameters.AffinityGroupCRUDParameters; +import org.ovirt.engine.core.compat.Guid; + +import java.util.ArrayList; +import java.util.List; + +public class BackendAffinityGroupVmResourceTest + extends AbstractBackendSubResourceTest<VM, org.ovirt.engine.core.common.businessentities.VM, BackendAffinityGroupVmResource> { + + public BackendAffinityGroupVmResourceTest() { + super(new BackendAffinityGroupVmResource(GUIDS[0], GUIDS[1].toString())); + } + + @Test + public void testRemove() throws Exception { + setUriInfo(setUpBasicUriExpectations()); + setUpGetGroupExpectations(); + setUriInfo( + setUpActionExpectations( + VdcActionType.EditAffinityGroup, + AffinityGroupCRUDParameters.class, + new String[] {}, + new Object[] {}, + true, + true + ) + ); + verifyRemove(resource.remove()); + } + + private void setUpGetGroupExpectations() throws Exception { + setUpGetEntityExpectations( + VdcQueryType.GetAffinityGroupById, + IdQueryParameters.class, + new String[] { "Id" }, + new Object[] { GUIDS[0] }, + getGroup() + ); + } + + protected org.ovirt.engine.core.common.businessentities.VM getEntity(int index) { + org.ovirt.engine.core.common.businessentities.VM vm = new org.ovirt.engine.core.common.businessentities.VM(); + vm.setId(GUIDS[index]); + vm.setName(NAMES[index]); + return vm; + } + + private org.ovirt.engine.core.common.scheduling.AffinityGroup getGroup() { + org.ovirt.engine.core.common.scheduling.AffinityGroup group = + new org.ovirt.engine.core.common.scheduling.AffinityGroup(); + List<Guid> vmIds = new ArrayList<>(); + List<String> vmNames = new ArrayList<>(); + for (int i = 0; i < NAMES.length; i++) { + org.ovirt.engine.core.common.businessentities.VM vm = getEntity(i); + vmIds.add(vm.getId()); + vmNames.add(vm.getName()); + } + group.setEntityIds(vmIds); + group.setEntityNames(vmNames); + return group; + } +} diff --git a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendAffinityGroupVmsResourceTest.java b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendAffinityGroupVmsResourceTest.java index d3248db..56f027d 100644 --- a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendAffinityGroupVmsResourceTest.java +++ b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendAffinityGroupVmsResourceTest.java @@ -57,23 +57,6 @@ assertEquals(200, response.getStatus()); } - @Test - public void testRemoveVmFromAffinityGroup() throws Exception { - setUriInfo(setUpBasicUriExpectations()); - setUpGetEntityExpectations(true); - - setUriInfo(setUpActionExpectations(VdcActionType.EditAffinityGroup, - AffinityGroupCRUDParameters.class, - new String[] {}, - new Object[] {}, - true, - true)); - - VM vm = new VM(); - vm.setId(GUIDS[0].toString()); - Response response = collection.remove(GUIDS[0].toString()); - assertEquals(200, response.getStatus()); - } private void setUpGetEntityExpectations(boolean withVms) throws Exception { setUpGetEntityExpectations(VdcQueryType.GetAffinityGroupById, -- To view, visit https://gerrit.ovirt.org/41801 To unsubscribe, visit https://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Id474459945434e0b44ab17ab389e1c86ee731e9f Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Juan Hernandez <juan.hernan...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches