Ravi Nori has uploaded a new change for review.

Change subject: restapi : vm/template Import candidates should have /disks 
(#829672)
......................................................................

restapi : vm/template Import candidates should have /disks (#829672)

When importing vm/template via api only import candidate metadata is
visible (disks are not).

This patch exposes the disks subcollection of vm/template in
the export domain.

Change-Id: I83fd4b046f72f73bb516615137522ac40028a7f0
Bug-Url: https://bugzilla.redhat.com/show_bug.cgi?id=829672
Signed-off-by: Ravi Nori <rn...@redhat.com>
---
M 
backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/StorageDomainContentResource.java
M 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/AbstractBackendStorageDomainContentResource.java
A 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendExportDomainTemplateDiskResource.java
A 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendExportDomainTemplateDisksResource.java
A 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendExportDomainVmDiskResource.java
A 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendExportDomainVmDisksResource.java
M 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainTemplateResource.java
M 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainVmResource.java
8 files changed, 211 insertions(+), 2 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/26/11126/1

diff --git 
a/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/StorageDomainContentResource.java
 
b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/StorageDomainContentResource.java
index 8a5408b..898dd81 100644
--- 
a/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/StorageDomainContentResource.java
+++ 
b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/StorageDomainContentResource.java
@@ -45,4 +45,7 @@
     @Actionable
     @Path("import")
     public Response doImport(Action action);
+
+    @Path("disks")
+    public ReadOnlyDevicesResource getDisksResource();
 }
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/AbstractBackendStorageDomainContentResource.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/AbstractBackendStorageDomainContentResource.java
index 37ca75d..6169d28 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/AbstractBackendStorageDomainContentResource.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/AbstractBackendStorageDomainContentResource.java
@@ -29,6 +29,15 @@
         this.parent = parent;
     }
 
+    public AbstractBackendStorageDomainContentResource(String id,
+                                                       
AbstractBackendStorageDomainContentsResource<C, R, Q>  parent,
+                                                       Class<R> modelType,
+                                                       Class<Q> entityType,
+                                                       String... 
subCollection) {
+        super(id, modelType, entityType, subCollection);
+        this.parent = parent;
+    }
+
     public AbstractBackendStorageDomainContentsResource<C, R, Q> getParent() {
         return parent;
     }
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendExportDomainTemplateDiskResource.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendExportDomainTemplateDiskResource.java
new file mode 100644
index 0000000..632d1f7
--- /dev/null
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendExportDomainTemplateDiskResource.java
@@ -0,0 +1,43 @@
+package org.ovirt.engine.api.restapi.resource;
+
+import org.ovirt.engine.api.model.Disk;
+import org.ovirt.engine.api.model.Disks;
+import org.ovirt.engine.api.resource.CreationResource;
+import org.ovirt.engine.api.resource.ReadOnlyDeviceResource;
+
+public class BackendExportDomainTemplateDiskResource
+        extends AbstractBackendResource<Disk, 
org.ovirt.engine.core.common.businessentities.Disk>
+        implements ReadOnlyDeviceResource<Disk> {
+
+    private final BackendExportDomainTemplateDisksResource parent;
+    private final String diskId;
+
+    public BackendExportDomainTemplateDiskResource(
+            BackendExportDomainTemplateDisksResource parent,
+            String diskId) {
+        super(Disk.class, 
org.ovirt.engine.core.common.businessentities.Disk.class);
+        this.parent = parent;
+        this.diskId = diskId;
+    }
+
+    @Override
+    protected Disk doPopulate(Disk model, 
org.ovirt.engine.core.common.businessentities.Disk entity) {
+        return model;
+    }
+
+    @Override
+    public Disk get() {
+        Disks disks = parent.list();
+        for (Disk disk : disks.getDisks()) {
+            if (disk.getId().equals(diskId)) {
+                return disk;
+            }
+        }
+        return notFound();
+    }
+
+    @Override
+    public CreationResource getCreationSubresource(String ids) {
+        return inject(new BackendCreationResource(ids));
+    }
+}
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendExportDomainTemplateDisksResource.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendExportDomainTemplateDisksResource.java
new file mode 100644
index 0000000..114d647
--- /dev/null
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendExportDomainTemplateDisksResource.java
@@ -0,0 +1,44 @@
+package org.ovirt.engine.api.restapi.resource;
+
+import java.util.Map.Entry;
+import org.ovirt.engine.api.model.Disk;
+import org.ovirt.engine.api.model.Disks;
+import org.ovirt.engine.api.resource.ReadOnlyDeviceResource;
+import org.ovirt.engine.api.resource.ReadOnlyDevicesResource;
+import org.ovirt.engine.core.common.businessentities.VmTemplate;
+import org.ovirt.engine.core.compat.Guid;
+
+public class BackendExportDomainTemplateDisksResource
+        extends AbstractBackendResource<Disk, 
org.ovirt.engine.core.common.businessentities.Disk>
+        implements ReadOnlyDevicesResource<Disk, 
org.ovirt.engine.api.model.Disks> {
+
+    private final BackendStorageDomainTemplateResource parent;
+
+    public BackendExportDomainTemplateDisksResource(
+            BackendStorageDomainTemplateResource parent,
+            Guid vmId) {
+        super(Disk.class, 
org.ovirt.engine.core.common.businessentities.Disk.class);
+        this.parent = parent;
+    }
+
+    @Override
+    public Disks list() {
+        VmTemplate template = parent.getEntity();
+        Disks disks = new Disks();
+        for (Entry<Guid, 
org.ovirt.engine.core.common.businessentities.DiskImage> diskImage : 
template.getDiskImageMap().entrySet()) {
+            
disks.getDisks().add(addLinks(map((org.ovirt.engine.core.common.businessentities.Disk)
 diskImage.getValue())));
+        }
+        return disks;
+    }
+
+    @Override
+    public ReadOnlyDeviceResource<Disk> getDeviceSubResource(String id) {
+        return inject(new BackendExportDomainTemplateDiskResource(this, id));
+    }
+
+    @Override
+    protected Disk doPopulate(Disk model, 
org.ovirt.engine.core.common.businessentities.Disk entity) {
+        return model;
+    }
+
+}
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendExportDomainVmDiskResource.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendExportDomainVmDiskResource.java
new file mode 100644
index 0000000..8879a8c
--- /dev/null
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendExportDomainVmDiskResource.java
@@ -0,0 +1,43 @@
+package org.ovirt.engine.api.restapi.resource;
+
+import org.ovirt.engine.api.model.Disk;
+import org.ovirt.engine.api.model.Disks;
+import org.ovirt.engine.api.resource.CreationResource;
+import org.ovirt.engine.api.resource.ReadOnlyDeviceResource;
+
+public class BackendExportDomainVmDiskResource
+        extends AbstractBackendResource<Disk, 
org.ovirt.engine.core.common.businessentities.Disk>
+        implements ReadOnlyDeviceResource<Disk> {
+
+    private final BackendExportDomainVmDisksResource parent;
+    private final String diskId;
+
+    public BackendExportDomainVmDiskResource(
+            BackendExportDomainVmDisksResource parent,
+            String diskId) {
+        super(Disk.class, 
org.ovirt.engine.core.common.businessentities.Disk.class);
+        this.parent = parent;
+        this.diskId = diskId;
+    }
+
+    @Override
+    protected Disk doPopulate(Disk model, 
org.ovirt.engine.core.common.businessentities.Disk entity) {
+        return model;
+    }
+
+    @Override
+    public Disk get() {
+        Disks disks = parent.list();
+        for (Disk disk : disks.getDisks()) {
+            if (disk.getId().equals(diskId)) {
+                return disk;
+            }
+        }
+        return notFound();
+    }
+
+    @Override
+    public CreationResource getCreationSubresource(String ids) {
+        return inject(new BackendCreationResource(ids));
+    }
+}
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendExportDomainVmDisksResource.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendExportDomainVmDisksResource.java
new file mode 100644
index 0000000..8a28e2f
--- /dev/null
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendExportDomainVmDisksResource.java
@@ -0,0 +1,44 @@
+package org.ovirt.engine.api.restapi.resource;
+
+import java.util.Map.Entry;
+import org.ovirt.engine.api.model.Disk;
+import org.ovirt.engine.api.model.Disks;
+import org.ovirt.engine.api.resource.ReadOnlyDeviceResource;
+import org.ovirt.engine.api.resource.ReadOnlyDevicesResource;
+import org.ovirt.engine.core.common.businessentities.VM;
+import org.ovirt.engine.core.compat.Guid;
+
+public class BackendExportDomainVmDisksResource
+        extends AbstractBackendResource<Disk, 
org.ovirt.engine.core.common.businessentities.Disk>
+        implements ReadOnlyDevicesResource<Disk, 
org.ovirt.engine.api.model.Disks> {
+
+    private final BackendStorageDomainVmResource parent;
+
+    public BackendExportDomainVmDisksResource(
+            BackendStorageDomainVmResource parent,
+            Guid vmId) {
+        super(Disk.class, 
org.ovirt.engine.core.common.businessentities.Disk.class);
+        this.parent = parent;
+    }
+
+    @Override
+    public Disks list() {
+        VM vm = parent.getEntity();
+        Disks disks = new Disks();
+        for (Entry<Guid, org.ovirt.engine.core.common.businessentities.Disk> 
diskImage : vm.getDiskMap().entrySet()) {
+            
disks.getDisks().add(map((org.ovirt.engine.core.common.businessentities.Disk) 
diskImage.getValue()));
+        }
+        return disks;
+    }
+
+    @Override
+    public ReadOnlyDeviceResource<Disk> getDeviceSubResource(String id) {
+        return inject(new BackendExportDomainVmDiskResource(this, id));
+    }
+
+    @Override
+    protected Disk doPopulate(Disk model, 
org.ovirt.engine.core.common.businessentities.Disk entity) {
+        return model;
+    }
+
+}
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainTemplateResource.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainTemplateResource.java
index 8018087..aa6db2a 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainTemplateResource.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainTemplateResource.java
@@ -5,6 +5,7 @@
 import org.ovirt.engine.api.model.Template;
 import org.ovirt.engine.api.model.Templates;
 import org.ovirt.engine.api.resource.ActionResource;
+import org.ovirt.engine.api.resource.ReadOnlyDevicesResource;
 import org.ovirt.engine.api.resource.StorageDomainContentResource;
 import org.ovirt.engine.core.common.action.ImportVmTemplateParameters;
 import org.ovirt.engine.core.common.action.VdcActionType;
@@ -18,12 +19,18 @@
     implements StorageDomainContentResource<Template> {
 
     public 
BackendStorageDomainTemplateResource(BackendStorageDomainTemplatesResource 
parent, String templateId) {
-        super(templateId, parent, Template.class, VmTemplate.class);
+        super(templateId, parent, Template.class, VmTemplate.class, "disks");
     }
 
     @Override
     protected Template getFromDataDomain() {
         return performGet(VdcQueryType.GetVmTemplate, new 
GetVmTemplateParameters(guid));
+    }
+
+    @Override
+    protected Template getFromExportDomain() {
+        org.ovirt.engine.core.common.businessentities.VmTemplate entity = 
getEntity();
+        return addLinks(populate(map(entity, null), entity), null, new 
String[0]);
     }
 
     @Override
@@ -74,4 +81,9 @@
     protected Template doPopulate(Template model, VmTemplate entity) {
         return model;
     }
+
+    @Override
+    public ReadOnlyDevicesResource getDisksResource() {
+        return inject(new BackendExportDomainTemplateDisksResource(this,guid));
+    }
 }
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainVmResource.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainVmResource.java
index a957d4d..ec575de 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainVmResource.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainVmResource.java
@@ -18,12 +18,18 @@
     implements StorageDomainContentResource<VM> {
 
     public BackendStorageDomainVmResource(BackendStorageDomainVmsResource 
parent, String vmId) {
-        super(vmId, parent, VM.class, 
org.ovirt.engine.core.common.businessentities.VM.class);
+        super(vmId, parent, VM.class, 
org.ovirt.engine.core.common.businessentities.VM.class, "disks");
     }
 
     @Override
     protected VM getFromDataDomain() {
         return performGet(VdcQueryType.GetVmByVmId, new 
GetVmByVmIdParameters(guid));
+    }
+
+    @Override
+    protected VM getFromExportDomain() {
+        org.ovirt.engine.core.common.businessentities.VM entity = getEntity();
+        return addLinks(populate(map(entity, null), entity), null, new 
String[0]);
     }
 
     @Override
@@ -61,6 +67,11 @@
     }
 
     @Override
+    public BackendExportDomainVmDisksResource getDisksResource() {
+        return inject(new BackendExportDomainVmDisksResource(this,guid));
+    }
+
+    @Override
     protected VM addParents(VM vm) {
         vm.setStorageDomain(parent.getStorageDomainModel());
         return vm;


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I83fd4b046f72f73bb516615137522ac40028a7f0
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Ravi Nori <rn...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to