Eli Mesika has uploaded a new change for review.

Change subject: [WIP] API: Adding BackendJobResource...
......................................................................

[WIP] API: Adding BackendJobResource...

API: Adding BackendJobResource and BackendJobsResource

Change-Id: I7474b82ecea8bd4ac34ea24fdfd1b159ef8c881f
Signed-off-by: Eli Mesika <[email protected]>
Bug-Url: https://bugzilla.redhat.com/show_bug.cgi?id=872719
---
A 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendJobResource.java
A 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendJobsResource.java
A 
backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/AbstractBackendJobResourceTest.java
A 
backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendJobResourceTest.java
A 
backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendJobsResourceTest.java
5 files changed, 342 insertions(+), 0 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/66/16166/1

diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendJobResource.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendJobResource.java
new file mode 100644
index 0000000..79f8b2b
--- /dev/null
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendJobResource.java
@@ -0,0 +1,74 @@
+package org.ovirt.engine.api.restapi.resource;
+
+import javax.ws.rs.PathParam;
+import javax.ws.rs.core.Response;
+
+import org.ovirt.engine.api.model.Action;
+import org.ovirt.engine.api.model.Job;
+import org.ovirt.engine.api.resource.ActionResource;
+import org.ovirt.engine.api.resource.JobResource;
+import org.ovirt.engine.api.resource.StepsResource;
+import org.ovirt.engine.api.restapi.types.JobMapper;
+import org.ovirt.engine.core.common.action.EndExternalJobParameters;
+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;
+
+public class BackendJobResource extends 
AbstractBackendActionableResource<org.ovirt.engine.api.model.Job, 
org.ovirt.engine.core.common.job.Job> implements JobResource{
+
+    private BackendJobsResource parent;
+    protected BackendJobResource(String id,
+            Class<Job> modelType,
+            Class<org.ovirt.engine.core.common.job.Job> entityType) {
+        super(id, modelType, entityType);
+    }
+
+    public BackendJobResource(String id, BackendJobsResource parent) {
+        super(id, org.ovirt.engine.api.model.Job.class, 
org.ovirt.engine.core.common.job.Job.class);
+        this.setParent(parent);
+    }
+
+    @Override
+    public ActionResource getActionSubresource(@PathParam("action") String 
action, @PathParam("oid") String oid) {
+        return inject(new BackendActionResource(action, oid));
+    }
+
+    @Override
+    public Response end(Action action) {
+        return doAction(VdcActionType.EndExternalJob,
+                new EndExternalJobParameters(guid, 
JobMapper.map(action.getStatus()), action.isForce()), action);
+    }
+
+    @Override
+    public Response clear(Action action) {
+        VdcActionParametersBase params = new VdcActionParametersBase();
+        params.setJobId(guid);
+        return doAction(VdcActionType.ClearExternalJob,params, action);
+    }
+
+    @Override
+    public Job get() {
+        IdQueryParameters params =  new IdQueryParameters(guid);
+        return performGet(VdcQueryType.GetJobByJobId, params);
+     }
+
+    @Override
+    public StepsResource getStepsResource() {
+       return inject(new BackendStepsResource(guid));
+    }
+
+    @Override
+    protected Job doPopulate(Job model, org.ovirt.engine.core.common.job.Job 
entity) {
+        return model;
+    }
+
+    public BackendJobsResource getParent() {
+        return parent;
+    }
+
+    public void setParent(BackendJobsResource parent) {
+        this.parent = parent;
+    }
+
+}
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendJobsResource.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendJobsResource.java
new file mode 100644
index 0000000..a2642c7
--- /dev/null
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendJobsResource.java
@@ -0,0 +1,65 @@
+package org.ovirt.engine.api.restapi.resource;
+
+import java.util.List;
+
+import javax.ws.rs.PathParam;
+import javax.ws.rs.core.Response;
+
+import org.apache.commons.lang.NotImplementedException;
+import org.ovirt.engine.api.model.Job;
+import org.ovirt.engine.api.model.Jobs;
+import org.ovirt.engine.api.resource.JobResource;
+import org.ovirt.engine.api.resource.JobsResource;
+import org.ovirt.engine.core.common.action.AddExternalJobParameters;
+import org.ovirt.engine.core.common.action.VdcActionType;
+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 org.ovirt.engine.core.compat.Guid;
+
+
+public class BackendJobsResource extends 
AbstractBackendCollectionResource<org.ovirt.engine.api.model.Job, 
org.ovirt.engine.core.common.job.Job> implements JobsResource {
+
+    static final String[] SUB_COLLECTIONS = { "steps" };
+
+    public BackendJobsResource() {
+        super(org.ovirt.engine.api.model.Job.class, 
org.ovirt.engine.core.common.job.Job.class, SUB_COLLECTIONS);
+    }
+
+    @Override
+    public Jobs list() {
+        List<org.ovirt.engine.core.common.job.Job> jobs = 
getBackendCollection(VdcQueryType.GetAllJobs,new VdcQueryParametersBase());
+        return mapCollection(jobs);
+    }
+
+    @Override
+    public Response add(Job job) {
+        validateParameters(job, "description");
+        return performCreate(VdcActionType.AddExternalJob,
+                new AddExternalJobParameters(job.getDescription(), 
job.isAutoCleared()),
+                new QueryIdResolver<Guid>(VdcQueryType.GetJobByJobId, 
IdQueryParameters.class));
+    }
+
+    @Override
+    public JobResource getJobSubResource(@PathParam("id") String id) {
+        return inject(new BackendJobResource(id, this));
+    }
+
+    @Override
+    protected Response performRemove(String id) {
+        throw new NotImplementedException();
+    }
+
+    @Override
+    protected Job doPopulate(Job model, org.ovirt.engine.core.common.job.Job 
entity) {
+        return model;
+    }
+
+    protected Jobs mapCollection(List<org.ovirt.engine.core.common.job.Job> 
entities) {
+        Jobs collection = new Jobs();
+        for (org.ovirt.engine.core.common.job.Job entity : entities) {
+            collection.getJobs().add(addLinks(map(entity)));
+        }
+        return collection;
+    }
+}
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/AbstractBackendJobResourceTest.java
 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/AbstractBackendJobResourceTest.java
new file mode 100644
index 0000000..e0ef89d
--- /dev/null
+++ 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/AbstractBackendJobResourceTest.java
@@ -0,0 +1,79 @@
+package org.ovirt.engine.api.restapi.resource;
+
+import javax.ws.rs.WebApplicationException;
+
+import org.junit.Test;
+import org.ovirt.engine.api.model.Job;
+import org.ovirt.engine.core.common.queries.IdQueryParameters;
+import org.ovirt.engine.core.common.queries.VdcQueryType;
+
+public abstract class AbstractBackendJobResourceTest
+        extends AbstractBackendSubResourceTest<Job, 
org.ovirt.engine.core.common.job.Job, BackendJobResource> {
+
+    public AbstractBackendJobResourceTest(BackendJobResource jobResource) {
+        super(jobResource);
+    }
+
+    @Test
+    public void testBadGuid() throws Exception {
+        control.replay();
+        try {
+            new BackendJobResource(null, null);
+            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();
+        control.replay();
+
+        verifyModel(resource.get(), 0);
+    }
+
+    protected void setUpGetEntityExpectations() throws Exception {
+        setUpGetEntityExpectations(false);
+    }
+
+    protected void setUpGetEntityExpectations(boolean notFound) throws 
Exception {
+        setUpGetEntityExpectations(VdcQueryType.GetJobByJobId,
+                IdQueryParameters.class,
+                new String[] { "Id" },
+                new Object[] { GUIDS[0] },
+                notFound ? null : getEntity(0));
+    }
+
+    @Override
+    protected org.ovirt.engine.core.common.job.Job getEntity(int index) {
+        org.ovirt.engine.core.common.job.Job job = new 
org.ovirt.engine.core.common.job.Job();
+        job.setId(GUIDS[index]);
+        job.setDescription(DESCRIPTIONS[index]);
+        job.setExternal(true);
+        job.setAutoCleared(true);
+        return job;
+    }
+
+    @Override
+    protected void verifyModel(Job model, int index) {
+        super.verifyModel(model, index);
+        assertTrue(model.isExternal());
+        assertTrue(model.isAutoCleared());
+    }
+
+}
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendJobResourceTest.java
 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendJobResourceTest.java
new file mode 100644
index 0000000..08ecf20
--- /dev/null
+++ 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendJobResourceTest.java
@@ -0,0 +1,10 @@
+package org.ovirt.engine.api.restapi.resource;
+
+
+public class BackendJobResourceTest extends AbstractBackendJobResourceTest {
+
+    public BackendJobResourceTest() {
+        super(new BackendJobResource(GUIDS[0].toString(), new 
BackendJobsResource()));
+    }
+}
+
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendJobsResourceTest.java
 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendJobsResourceTest.java
new file mode 100644
index 0000000..a62e89b
--- /dev/null
+++ 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendJobsResourceTest.java
@@ -0,0 +1,114 @@
+package org.ovirt.engine.api.restapi.resource;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.ws.rs.WebApplicationException;
+import javax.ws.rs.core.Response;
+
+import org.junit.Ignore;
+import org.junit.Test;
+import org.ovirt.engine.api.model.Job;
+import org.ovirt.engine.core.common.action.AddExternalJobParameters;
+import org.ovirt.engine.core.common.action.VdcActionType;
+import org.ovirt.engine.core.common.queries.IdQueryParameters;
+import org.ovirt.engine.core.common.queries.VdcQueryParametersBase;
+import org.ovirt.engine.core.common.queries.VdcQueryType;
+
+public class BackendJobsResourceTest extends 
AbstractBackendCollectionResourceTest<Job, 
org.ovirt.engine.core.common.job.Job, BackendJobsResource> {
+
+    public BackendJobsResourceTest() {
+        super(new BackendJobsResource(), null, "");
+    }
+    @Override
+    protected List<Job> getCollection() {
+        return collection.list().getJobs();
+    }
+    @Override
+    protected org.ovirt.engine.core.common.job.Job getEntity(int index) {
+        org.ovirt.engine.core.common.job.Job job = new 
org.ovirt.engine.core.common.job.Job();
+        job.setId(GUIDS[index]);
+        job.setDescription(DESCRIPTIONS[index]);
+        job.setExternal(true);
+        job.setAutoCleared(true);
+        return job;
+    }
+
+    @Override
+    protected void setUpQueryExpectations(String query, Object failure) throws 
Exception {
+        assert(query.equals(""));
+
+        setUpEntityQueryExpectations(VdcQueryType.GetAllJobs,
+                                    VdcQueryParametersBase.class,
+                                     new String[] { },
+                                     new Object[] { },
+                                     setUpJobs(),
+                                     failure);
+
+        control.replay();
+    }
+
+    @Override
+    protected void verifyModel(Job model, int index) {
+        super.verifyModel(model, index);
+        assertTrue(model.isExternal());
+    }
+
+    protected List<org.ovirt.engine.core.common.job.Job> setUpJobs() {
+        List<org.ovirt.engine.core.common.job.Job> jobs = new 
ArrayList<org.ovirt.engine.core.common.job.Job>();
+        for (int i = 0; i < NAMES.length; i++) {
+            jobs.add(getEntity(i));
+        }
+        return jobs;
+    }
+
+    private void setUpGetEntityExpectations() throws Exception {
+        setUpGetEntityExpectations(VdcQueryType.GetJobByJobId,
+                IdQueryParameters.class,
+                new String[] { "Id" },
+                new Object[] { GUIDS[0] },
+                getEntity(0));
+    }
+
+    @Test
+    @Ignore
+    @Override
+    public void testQuery() throws Exception {
+    }
+
+    @Test
+    public void testAddJob() throws Exception {
+        setUriInfo(setUpBasicUriExpectations());
+        setUpCreationExpectations(VdcActionType.AddExternalJob,
+                                  AddExternalJobParameters.class,
+                                  new String[] { "Job.Description"},
+                                  new Object[] { DESCRIPTIONS[0] },
+                                  true,
+                                  true,
+                                  GUIDS[0],
+                                  VdcQueryType.GetJobByJobId,
+                                  IdQueryParameters.class,
+                                  new String[] { "Id" },
+                                  new Object[] { GUIDS[0] },
+                                  getEntity(0));
+        Job model = new Job();
+        model.setDescription(DESCRIPTIONS[0].toString());
+        Response response = collection.add(model);
+        assertEquals(201, response.getStatus());
+        assertTrue(response.getEntity() instanceof Job);
+        verifyModel((Job) response.getEntity(), 0);
+    }
+
+    @Test
+    public void testAddIncompleteParametersNoDescription() throws Exception {
+        Job model = new Job();
+        setUriInfo(setUpBasicUriExpectations());
+        control.replay();
+        try {
+            collection.add(model);
+            fail("expected WebApplicationException on incomplete parameters");
+        } catch (WebApplicationException wae) {
+             verifyIncompleteException(wae, "Job", "add", "description");
+        }
+    }
+}


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

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

Reply via email to