Frank Kobzik has uploaded a new change for review.

Change subject: restapi: Phase 5: Retrieve console descriptor file
......................................................................

restapi: Phase 5: Retrieve console descriptor file

via request on /vms/{vmid}/display/graphics_consoles/{consoleId}
with header containing "Accept: application/x-virt-viewer"
where consoleId is "5350494345" for SPICE and "564e43" for VNC
console (hexa encoded SPICE/VNC strings).

Change-Id: Ie14b3ce0623a082397cc48fa45687a276052e01b
Signed-off-by: Frantisek Kobzik <fkob...@redhat.com>
Bug-Url: https://bugzilla.redhat.com/1128763
---
M 
backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/ApiMediaType.java
M 
backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/VmResource.java
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/BackendVmResource.java
A 
backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/GraphicsTypeHelper.java
5 files changed, 92 insertions(+), 0 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/58/39058/1

diff --git 
a/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/ApiMediaType.java
 
b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/ApiMediaType.java
index 6e524f7..d77206c 100644
--- 
a/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/ApiMediaType.java
+++ 
b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/ApiMediaType.java
@@ -22,4 +22,5 @@
     public final static javax.ws.rs.core.MediaType APPLICATION_X_YAML_TYPE =
         new javax.ws.rs.core.MediaType("application", "x-yaml");
     public final static String APPLICATION_PDF = "application/pdf";
+    public final static String APPLICATION_X_VIRT_VIEWER = 
"application/x-virt-viewer";
 }
diff --git 
a/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/VmResource.java
 
b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/VmResource.java
index 32787b5..61d84f0 100644
--- 
a/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/VmResource.java
+++ 
b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/VmResource.java
@@ -17,6 +17,7 @@
 package org.ovirt.engine.api.resource;
 
 import javax.ws.rs.Consumes;
+import javax.ws.rs.GET;
 import javax.ws.rs.POST;
 import javax.ws.rs.Path;
 import javax.ws.rs.PathParam;
@@ -171,4 +172,9 @@
     @Path("sessions")
     public VmSessionsResource getVmSessionsResource();
 
+    @GET
+    @Produces({ApiMediaType.APPLICATION_X_VIRT_VIEWER})
+    @Path("display/graphics_consoles/{id}")
+    public Response getConsoleDescriptor(@PathParam("id") String consoleId);
+
 }
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 52e90a9..0996719 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
@@ -535,6 +535,17 @@
     urlparams: {}
     headers:
       Correlation-Id: {value: 'any string', required: false}
+- name: /vms/{vm:id}/display/graphics_consoles/{graphics_console:id}|rel=get
+  description: Generates text filled filled with console data. This file can 
be used to initiate console session using remote-viewer application.
+  request:
+    body:
+      parameterType: null
+      signatures: []
+    urlparams:
+      str: {context: matrix, type: 'xs:string', value: 'todo', required: true}
+    headers:
+      Content-Type: {value: application/x-virt-viewer, required: true}
+      Filter: {value: true|false, required: false}
 - name: /vms/{vm:id}/logon|rel=logon
   description: Perform automatic logon on the VM using the guest agent.
   request:
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmResource.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmResource.java
index 0f53f82..dbbbb8c 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmResource.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmResource.java
@@ -24,6 +24,7 @@
 import org.ovirt.engine.api.model.Ticket;
 import org.ovirt.engine.api.model.VM;
 import org.ovirt.engine.api.resource.ActionResource;
+import org.ovirt.engine.api.resource.ApiMediaType;
 import org.ovirt.engine.api.resource.AssignedPermissionsResource;
 import org.ovirt.engine.api.resource.AssignedTagsResource;
 import org.ovirt.engine.api.resource.CreationResource;
@@ -39,6 +40,7 @@
 import org.ovirt.engine.api.resource.VmSessionsResource;
 import org.ovirt.engine.api.resource.WatchdogsResource;
 import org.ovirt.engine.api.restapi.logging.Messages;
+import org.ovirt.engine.api.restapi.types.GraphicsTypeHelper;
 import org.ovirt.engine.api.restapi.types.RngDeviceMapper;
 import org.ovirt.engine.api.restapi.types.VmMapper;
 import org.ovirt.engine.api.restapi.util.DisplayHelper;
@@ -72,6 +74,9 @@
 import org.ovirt.engine.core.common.businessentities.VmInit;
 import org.ovirt.engine.core.common.businessentities.VmStatic;
 import org.ovirt.engine.core.common.businessentities.VmTemplate;
+import org.ovirt.engine.core.common.console.ConsoleOptions;
+import org.ovirt.engine.core.common.queries.ConfigureConsoleOptionsParams;
+import org.ovirt.engine.core.common.queries.ConsoleOptionsParams;
 import org.ovirt.engine.core.common.queries.GetPermissionsForObjectParameters;
 import org.ovirt.engine.core.common.queries.GetVmTemplateParameters;
 import org.ovirt.engine.core.common.queries.IdQueryParameters;
@@ -647,4 +652,26 @@
     public VmNumaNodesResource getVirtualNumaNodesResource() {
         return inject(new BackendVmNumaNodesResource(guid));
     }
+
+    @Override
+    public Response getConsoleDescriptor(String consoleId) {
+        GraphicsType graphicsType = 
GraphicsTypeHelper.fromGraphicsTypeHexa(consoleId);
+
+        if (graphicsType == null) {
+            throw new NullPointerException("something is wrong");
+        }
+
+        ConsoleOptions consoleOptions = new ConsoleOptions(graphicsType);
+        consoleOptions.setVmId(guid);
+        ConsoleOptions configuredOptions = 
runQuery(VdcQueryType.ConfigureConsoleOptions,
+                new ConfigureConsoleOptionsParams(consoleOptions, 
true)).getReturnValue(); // fill required data from BE
+        // todo adjust console opts based on query/matrix/whatever params
+
+        String descriptor = runQuery(VdcQueryType.GetConsoleDescriptorFile, 
new ConsoleOptionsParams(configuredOptions))
+                .getReturnValue();
+
+        Response.ResponseBuilder builder = Response.ok(descriptor, 
ApiMediaType.APPLICATION_X_VIRT_VIEWER);
+        return builder.build();
+    }
+
 }
diff --git 
a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/GraphicsTypeHelper.java
 
b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/GraphicsTypeHelper.java
new file mode 100644
index 0000000..3c2790f
--- /dev/null
+++ 
b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/GraphicsTypeHelper.java
@@ -0,0 +1,47 @@
+package org.ovirt.engine.api.restapi.types;
+
+import org.ovirt.engine.api.restapi.utils.HexUtils;
+import org.ovirt.engine.core.common.businessentities.GraphicsType;
+
+public class GraphicsTypeHelper {
+
+    private static final String SPICE_STRING = "SPICE";
+    private static final String VNC_STRING = "VNC";
+
+
+    public static String graphicsTypeToString(GraphicsType graphicsType) {
+        if (graphicsType != null) {
+            switch (graphicsType) {
+                case SPICE:
+                    return SPICE_STRING;
+                case VNC:
+                    return VNC_STRING;
+            }
+        }
+
+        return null;
+    }
+
+    public static GraphicsType fromGraphicsTypeHexa(String graphicsTypeHexa) {
+        if (graphicsTypeHexa != null) {
+            String graphicsTypeString = HexUtils.hex2string(graphicsTypeHexa);
+            return fromGraphicsTypeString(graphicsTypeString);
+        }
+
+        return null;
+    }
+
+    private static GraphicsType fromGraphicsTypeString(String 
graphicsTypeString) {
+        if (graphicsTypeString != null) {
+            switch (graphicsTypeString) {
+                case SPICE_STRING:
+                    return GraphicsType.SPICE;
+                case VNC_STRING:
+                    return GraphicsType.VNC;
+            }
+        }
+
+        return null;
+    }
+
+}


-- 
To view, visit https://gerrit.ovirt.org/39058
To unsubscribe, visit https://gerrit.ovirt.org/settings

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

Reply via email to