Frank Kobzik has uploaded a new change for review.

Change subject: restapi: [WIP!] Phase 5: REST part for console descriptor 
generator
......................................................................

restapi: [WIP!] Phase 5: REST part for console descriptor generator

Added
- virt viewer media type
- vv() resource (todo rename)
- helper for translating between options to backend entity (todo
  discuss)

Change-Id: I08814006b413a7f213561e1884166af4d0d6c8ae
Signed-off-by: Frantisek Kobzik <fkob...@redhat.com>
Bug-Url: https://bugzilla.redhat.com/1128763
---
A 
backend/manager/modules/restapi/interface/common/jaxrs/src/main/java/org/ovirt/engine/api/common/util/ConsoleOptionsHelper.java
A 
backend/manager/modules/restapi/interface/common/jaxrs/src/test/java/org/ovirt/engine/api/common/util/ConsoleOptionsHelperTest.java
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
6 files changed, 111 insertions(+), 2 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/76/37976/1

diff --git 
a/backend/manager/modules/restapi/interface/common/jaxrs/src/main/java/org/ovirt/engine/api/common/util/ConsoleOptionsHelper.java
 
b/backend/manager/modules/restapi/interface/common/jaxrs/src/main/java/org/ovirt/engine/api/common/util/ConsoleOptionsHelper.java
new file mode 100644
index 0000000..cc01d1b
--- /dev/null
+++ 
b/backend/manager/modules/restapi/interface/common/jaxrs/src/main/java/org/ovirt/engine/api/common/util/ConsoleOptionsHelper.java
@@ -0,0 +1,40 @@
+package org.ovirt.engine.api.common.util;
+
+import java.util.List;
+import java.util.Map;
+import javax.ws.rs.core.MultivaluedMap;
+import javax.ws.rs.core.PathSegment;
+import javax.ws.rs.core.UriInfo;
+import org.ovirt.engine.core.common.console.ConsoleOptions;
+import org.ovirt.engine.core.common.utils.Pair;
+
+public class ConsoleOptionsHelper {
+
+    public static ConsoleOptions getConsoleOptions(UriInfo uri) {
+        ConsoleOptions options = new ConsoleOptions();
+
+        try {
+            List<PathSegment> pathSegments = uri.getPathSegments();
+            PathSegment lastSegment = pathSegments.get(pathSegments.size() - 
1);
+            MultivaluedMap<String, String> consoleOptions = 
lastSegment.getMatrixParameters();
+            for (Map.Entry<String, List<String>> entry : 
consoleOptions.entrySet()) {
+                updateOptions(options, new Pair<>(entry.getKey(), 
entry.getValue().get(0)));
+            }
+        } catch (Exception e) { }
+
+        return options;
+    }
+
+    private static void updateOptions(ConsoleOptions options, Pair<String, 
String> keyVal) {
+        String val = keyVal.getSecond();
+        switch (keyVal.getFirst()) {
+            case "fullscreen":
+                options.setFullScreen("1".equals(val));
+                break;
+            case "release-cursor":
+                options.setReleaseCursorHotKey(val);
+                break;
+            // enough for the demo lol; todo switch (~16 cases) for filling 
actual console options
+        }
+    }
+}
diff --git 
a/backend/manager/modules/restapi/interface/common/jaxrs/src/test/java/org/ovirt/engine/api/common/util/ConsoleOptionsHelperTest.java
 
b/backend/manager/modules/restapi/interface/common/jaxrs/src/test/java/org/ovirt/engine/api/common/util/ConsoleOptionsHelperTest.java
new file mode 100644
index 0000000..fa66017
--- /dev/null
+++ 
b/backend/manager/modules/restapi/interface/common/jaxrs/src/test/java/org/ovirt/engine/api/common/util/ConsoleOptionsHelperTest.java
@@ -0,0 +1,30 @@
+package org.ovirt.engine.api.common.util;
+
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.ArrayList;
+import java.util.List;
+import javax.ws.rs.core.PathSegment;
+import javax.ws.rs.core.UriInfo;
+import org.jboss.resteasy.specimpl.PathSegmentImpl;
+import org.jboss.resteasy.specimpl.UriInfoImpl;
+import org.junit.Test;
+import org.ovirt.engine.core.common.console.ConsoleOptions;
+
+
+import static org.junit.Assert.assertEquals;
+
+public class ConsoleOptionsHelperTest {
+
+    @Test
+    public void getOptionsHappyTest() throws URISyntaxException {
+        List<PathSegment> pathSegments = new ArrayList<>();
+        pathSegments.add(new 
PathSegmentImpl(";fullscreen=1;release-cursor=shift+f20", true));
+        URI absolutePath = new URI("http://engine.test/lol";);
+        UriInfo uriInfo = new UriInfoImpl(absolutePath, null, 
absolutePath.toString(), null, pathSegments);
+        ConsoleOptions consoleOptions = 
ConsoleOptionsHelper.getConsoleOptions(uriInfo);
+
+        assertEquals(true, consoleOptions.isFullScreen());
+    }
+
+}
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..1bb2096 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
@@ -17,9 +17,17 @@
 package org.ovirt.engine.api.resource;
 
 
+import javax.ws.rs.core.MediaType;
+
 public class ApiMediaType extends javax.ws.rs.core.MediaType {
+    private final static String APPLICATION = "application"; // todo 
externalize all string or use old approach for VV
+    private final static String X_VIRT_VIEWER = "x-virt-viewer";
+
+    private final static String SLASH = "/";
+
     public final static String APPLICATION_X_YAML = "application/x-yaml";
-    public final static javax.ws.rs.core.MediaType APPLICATION_X_YAML_TYPE =
-        new javax.ws.rs.core.MediaType("application", "x-yaml");
+    public final static MediaType APPLICATION_X_YAML_TYPE = new 
MediaType("application", "x-yaml");
     public final static String APPLICATION_PDF = "application/pdf";
+    public final static String APPLICATION_X_VIRT_VIEWER = APPLICATION + SLASH 
+ X_VIRT_VIEWER;
+    public static final MediaType APPLICATION_X_VIRT_VIEWER_TYPE = new 
MediaType(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..9ae1a27 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;
@@ -96,6 +97,12 @@
     @Path("ticket")
     public Response ticket(Action action);
 
+    @GET
+    @Actionable
+    @Produces({ApiMediaType.APPLICATION_X_VIRT_VIEWER})
+    @Path("vv")
+    public Response vv();
+
     @POST
     @Consumes({ApiMediaType.APPLICATION_XML, ApiMediaType.APPLICATION_JSON, 
ApiMediaType.APPLICATION_X_YAML})
     @Actionable
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..80e2f19 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,16 @@
     urlparams: {}
     headers:
       Correlation-Id: {value: 'any string', required: false}
+- name: /vms/{vm:id}/vv|rel=get
+  description: get vv file with newly generated ticket
+  request:
+    body:
+      parameterType: null
+      signatures: []
+    urlparams: {}
+    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..db61fac 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
@@ -8,6 +8,7 @@
 import javax.ws.rs.WebApplicationException;
 import javax.ws.rs.core.Response;
 import javax.ws.rs.core.UriInfo;
+import org.ovirt.engine.api.common.util.ConsoleOptionsHelper;
 import org.ovirt.engine.api.common.util.DetailHelper;
 import org.ovirt.engine.api.common.util.QueryHelper;
 import org.ovirt.engine.api.model.Action;
@@ -24,6 +25,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;
@@ -72,6 +74,8 @@
 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.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;
@@ -449,6 +453,16 @@
         return response;
     }
 
+    @Override
+    public Response vv() {
+        ConsoleOptions consoleOptions = 
ConsoleOptionsHelper.getConsoleOptions(uriInfo);
+        ConsoleOptionsParams queryParams = new 
ConsoleOptionsParams(consoleOptions);
+        VdcQueryReturnValue result = 
runQuery(VdcQueryType.GetConsoleDescriptorFile, queryParams);
+        String descriptor = result.getReturnValue();
+        Response.ResponseBuilder builder = Response.ok(descriptor, 
ApiMediaType.APPLICATION_X_VIRT_VIEWER_TYPE);
+        return builder.build();
+    }
+
     private GraphicsType deriveGraphicsType() {
         org.ovirt.engine.core.common.businessentities.VM vm = 
getEntity(org.ovirt.engine.core.common.businessentities.VM.class,
                 VdcQueryType.GetVmByVmId, new IdQueryParameters(guid), 
"GetVmByVmId");


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I08814006b413a7f213561e1884166af4d0d6c8ae
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