Martin Betak has uploaded a new change for review.

Change subject: frontend: Add infrastructure for Console Foreign Menu
......................................................................

frontend: Add infrastructure for Console Foreign Menu

Added necessary hooks to implement outputting the [ovirt] section
into VV file. Please note this just related to frontend infrastructure
and contains no API commitments (does not alter VV file output in any way).

Moved the RestApiSessionManager to gwt-common project so it would be
accessible from both webadmin and userportal.

Due to the fact that uicommon does not see the generated gwt-p events
and handlers we need to attach the listener for RestApiSessionAcquiredEvent
in UiCommonDefaultTypeResolver. To prevent excessive number of event
listeners attached we cache the created SpiceNativeImpl and
VncNativeImpl.

Change-Id: I0e0cc2a2fd462bd8dc9085b300ec12fe46ff4518
Bug-Url: https://bugzilla.redhat.com/show_bug.cgi?id=975730
Signed-off-by: Martin Betak <[email protected]>
---
A 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetEngineCertificateQuery.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java
M 
frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/server/gwt/GwtDynamicHostPageServlet.java
M 
frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/server/gwt/WebAdminHostPageServlet.java
M 
frontend/webadmin/modules/frontend/src/test/java/org/ovirt/engine/ui/frontend/server/gwt/AbstractGwtDynamicHostPageServletTest.java
M 
frontend/webadmin/modules/frontend/src/test/java/org/ovirt/engine/ui/frontend/server/gwt/WebAdminHostPageServletTest.java
M frontend/webadmin/modules/gwt-common/exclude-filters.xml
M 
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/gin/BaseSystemModule.java
M 
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/gin/BaseUiCommonModule.java
R 
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/restapi/EngineSessionTimeoutData.java
R 
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/restapi/RestApiSessionAcquired.java
R 
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/restapi/RestApiSessionManager.java
M 
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/system/BaseApplicationInit.java
A 
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/AbstractConsole.java
M 
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/AbstractRdp.java
M 
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/AbstractSpice.java
M 
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/AbstractVnc.java
M 
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/NoVncImpl.java
M 
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/RdpNativeImpl.java
M 
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/RdpPluginImpl.java
M 
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/SpiceHtml5Impl.java
M 
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/SpiceNativeImpl.java
M 
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/SpicePluginImpl.java
M 
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/UiCommonDefaultTypeResolver.java
M 
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/VncNativeImpl.java
A 
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/model/AbstractConsoleWithForeignMenu.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/ConsoleModel.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/ISpiceNative.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/IVncNative.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/SpiceConsoleModel.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VncConsoleModel.java
A 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/restapi/HasForeignMenuData.java
M 
frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/system/ApplicationInit.java
M frontend/webadmin/modules/webadmin/exclude-filters.xml
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/PluginModule.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/plugin/PluginEventHandler.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/system/ApplicationInit.java
37 files changed, 395 insertions(+), 197 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/86/38986/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetEngineCertificateQuery.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetEngineCertificateQuery.java
new file mode 100644
index 0000000..7adddae
--- /dev/null
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetEngineCertificateQuery.java
@@ -0,0 +1,23 @@
+package org.ovirt.engine.core.bll;
+
+import org.ovirt.engine.core.common.queries.VdcQueryParametersBase;
+import org.ovirt.engine.core.utils.PKIResources;
+
+public class GetEngineCertificateQuery<P extends VdcQueryParametersBase> 
extends QueriesCommandBase<P> {
+    public GetEngineCertificateQuery(P parameters) {
+        super(parameters);
+    }
+
+    @Override
+    protected void executeQueryCommand() {
+        try {
+            getQueryReturnValue().setSucceeded(false);
+            getQueryReturnValue().setReturnValue(
+                
PKIResources.Resource.EngineCertificate.toString(PKIResources.Format.X509_PEM)
+            );
+            getQueryReturnValue().setSucceeded(true);
+        } catch (Exception e) {
+            getQueryReturnValue().setExceptionString(e.getMessage());
+        }
+    }
+}
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java
index 2495a80..090959b 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java
@@ -130,6 +130,7 @@
 
     // Certificate
     GetCACertificate(VdcQueryAuthType.User),
+    GetEngineCertificate(VdcQueryAuthType.User),
     SignString(VdcQueryAuthType.User),
 
     // VM Template based entities queries
diff --git 
a/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/server/gwt/GwtDynamicHostPageServlet.java
 
b/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/server/gwt/GwtDynamicHostPageServlet.java
index 805714a..93af555 100644
--- 
a/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/server/gwt/GwtDynamicHostPageServlet.java
+++ 
b/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/server/gwt/GwtDynamicHostPageServlet.java
@@ -23,8 +23,11 @@
 import org.ovirt.engine.core.branding.BrandingFilter;
 import org.ovirt.engine.core.branding.BrandingManager;
 import org.ovirt.engine.core.common.businessentities.aaa.DbUser;
+import org.ovirt.engine.core.common.config.ConfigCommon;
 import org.ovirt.engine.core.common.constants.SessionConstants;
 import org.ovirt.engine.core.common.interfaces.BackendLocal;
+import org.ovirt.engine.core.common.queries.ConfigurationValues;
+import org.ovirt.engine.core.common.queries.GetConfigurationValueParameters;
 import org.ovirt.engine.core.common.queries.VdcQueryParametersBase;
 import org.ovirt.engine.core.common.queries.VdcQueryReturnValue;
 import org.ovirt.engine.core.common.queries.VdcQueryType;
@@ -82,6 +85,8 @@
     private static final String HOST_JSP = "/GwtHostPage.jsp"; //$NON-NLS-1$
     private static final String UTF_CONTENT_TYPE = "text/html; charset=UTF-8"; 
//$NON-NLS-1$
 
+    protected static final String ATTR_ENGINE_SESSION_TIMEOUT = 
"engineSessionTimeout"; //$NON-NLS-1$
+
     private BackendLocal backend;
 
     private ObjectMapper mapper;
@@ -129,6 +134,10 @@
                 request.setAttribute(MD5Attributes.ATTR_SSO_TOKEN.getKey(), 
getValueObject(ssoToken));
             }
         }
+
+        // Set attribute for engineSessionTimeout object
+        Integer engineSessionTimeout = 
getEngineSessionTimeout(getEngineSessionId(request));
+        request.setAttribute(ATTR_ENGINE_SESSION_TIMEOUT, 
getEngineSessionTimeoutObject(engineSessionTimeout));
 
         try {
             // Calculate MD5 for use with If-None-Match request header
@@ -292,6 +301,10 @@
                         toString().getBytes(StandardCharsets.UTF_8));
             }
         }
+
+        // Update based on engineSessionTimeout object
+        
digest.update(request.getAttribute(ATTR_ENGINE_SESSION_TIMEOUT).toString().getBytes(StandardCharsets.UTF_8));
 //$NON-NLS-1$
+
         return digest;
     }
 
@@ -299,4 +312,16 @@
         return MessageDigest.getInstance("MD5"); //$NON-NLS-1$
     }
 
+    private Integer getEngineSessionTimeout(String sessionId) {
+        return (Integer) runPublicQuery(VdcQueryType.GetConfigurationValue,
+                new 
GetConfigurationValueParameters(ConfigurationValues.UserSessionTimeOutInterval,
+                        ConfigCommon.defaultConfigurationVersion), sessionId);
+    }
+
+    protected ObjectNode getEngineSessionTimeoutObject(Integer 
engineSessionTimeout) {
+        ObjectNode obj = createObjectNode();
+        obj.put("value", String.valueOf(engineSessionTimeout)); //$NON-NLS-1$
+        return obj;
+    }
+
 }
diff --git 
a/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/server/gwt/WebAdminHostPageServlet.java
 
b/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/server/gwt/WebAdminHostPageServlet.java
index 64d1834..bcfa4ad 100644
--- 
a/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/server/gwt/WebAdminHostPageServlet.java
+++ 
b/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/server/gwt/WebAdminHostPageServlet.java
@@ -35,7 +35,7 @@
 
     protected static final String ATTR_APPLICATION_MODE = "applicationMode"; 
//$NON-NLS-1$
     protected static final String ATTR_PLUGIN_DEFS = "pluginDefinitions"; 
//$NON-NLS-1$
-    protected static final String ATTR_ENGINE_SESSION_TIMEOUT = 
"engineSessionTimeout"; //$NON-NLS-1$
+
     protected static final String ATTR_ENGINE_REPORTS_DASHBOARD_URL = 
"ENGINE_REPORTS_DASHBOARD_URL"; //$NON-NLS-1$
     protected static final String ATTR_ENGINE_REPORTS_RIGHTCLICK_URL = 
"ENGINE_REPORTS_RIGHTCLICK_URL"; //$NON-NLS-1$
     protected static final String ATTR_ENGINE_REPORTS_BASE_URL = 
"ENGINE_REPORTS_BASE_URL"; //$NON-NLS-1$
@@ -82,10 +82,6 @@
         List<PluginData> pluginData = getPluginData();
         request.setAttribute(ATTR_PLUGIN_DEFS, 
getPluginDefinitionsArray(pluginData));
 
-        // Set attribute for engineSessionTimeout object
-        Integer engineSessionTimeout = 
getEngineSessionTimeout(getEngineSessionId(request));
-        request.setAttribute(ATTR_ENGINE_SESSION_TIMEOUT, 
getEngineSessionTimeoutObject(engineSessionTimeout));
-
         // Set attribute for engineReportsUrl object
         request.setAttribute(ATTR_ENGINE_REPORTS_BASE_URL,
                 
getReportInit(reportRedirectUrl.substring(reportBaseUrl.length()),
@@ -117,9 +113,6 @@
 
         // Update based on pluginDefinitions array
         
digest.update(request.getAttribute(ATTR_PLUGIN_DEFS).toString().getBytes(StandardCharsets.UTF_8));
-
-        // Update based on engineSessionTimeout object
-        
digest.update(request.getAttribute(ATTR_ENGINE_SESSION_TIMEOUT).toString().getBytes(StandardCharsets.UTF_8));
 
         // Update based on report URL parameters.
         
digest.update(request.getAttribute(ATTR_ENGINE_REPORTS_BASE_URL).toString().getBytes());
@@ -156,18 +149,6 @@
             arr.add(dataObj);
         }
         return arr;
-    }
-
-    protected Integer getEngineSessionTimeout(String sessionId) {
-        return (Integer) runPublicQuery(VdcQueryType.GetConfigurationValue,
-                new 
GetConfigurationValueParameters(ConfigurationValues.UserSessionTimeOutInterval,
-                        ConfigCommon.defaultConfigurationVersion), sessionId);
-    }
-
-    protected ObjectNode getEngineSessionTimeoutObject(Integer 
engineSessionTimeout) {
-        ObjectNode obj = createObjectNode();
-        obj.put("value", String.valueOf(engineSessionTimeout)); //$NON-NLS-1$
-        return obj;
     }
 
 }
diff --git 
a/frontend/webadmin/modules/frontend/src/test/java/org/ovirt/engine/ui/frontend/server/gwt/AbstractGwtDynamicHostPageServletTest.java
 
b/frontend/webadmin/modules/frontend/src/test/java/org/ovirt/engine/ui/frontend/server/gwt/AbstractGwtDynamicHostPageServletTest.java
index a9ddff4..0e68d49 100644
--- 
a/frontend/webadmin/modules/frontend/src/test/java/org/ovirt/engine/ui/frontend/server/gwt/AbstractGwtDynamicHostPageServletTest.java
+++ 
b/frontend/webadmin/modules/frontend/src/test/java/org/ovirt/engine/ui/frontend/server/gwt/AbstractGwtDynamicHostPageServletTest.java
@@ -82,6 +82,9 @@
     @Mock
     private ObjectNode mockUserInfoObject;
 
+    @Mock
+    protected ObjectNode mockEngineSessionTimeoutObject;
+
     @Captor
     protected ArgumentCaptor<byte[]> byteArrayCaptor;
 
@@ -92,6 +95,7 @@
         when(mockRequest.getAttribute(GwtDynamicHostPageServlet.
                 MD5Attributes.ATTR_SELECTOR_SCRIPT.getKey())).
                 thenReturn(SELECTOR_SCRIPT);
+        
when(mockRequest.getAttribute(GwtDynamicHostPageServlet.ATTR_ENGINE_SESSION_TIMEOUT)).thenReturn(mockEngineSessionTimeoutObject);
         when(mockRequest.getSession()).thenReturn(mockSession);
         
when(mockRequest.getSession().getServletContext()).thenReturn(mockServletContext);
         when(mockSession.getId()).thenReturn("sessionId"); //$NON-NLS-1$
diff --git 
a/frontend/webadmin/modules/frontend/src/test/java/org/ovirt/engine/ui/frontend/server/gwt/WebAdminHostPageServletTest.java
 
b/frontend/webadmin/modules/frontend/src/test/java/org/ovirt/engine/ui/frontend/server/gwt/WebAdminHostPageServletTest.java
index ae1b42a..e510406 100644
--- 
a/frontend/webadmin/modules/frontend/src/test/java/org/ovirt/engine/ui/frontend/server/gwt/WebAdminHostPageServletTest.java
+++ 
b/frontend/webadmin/modules/frontend/src/test/java/org/ovirt/engine/ui/frontend/server/gwt/WebAdminHostPageServletTest.java
@@ -53,9 +53,6 @@
     // Cannot use @Mock since ArrayNode is final
     private ArrayNode mockPluginDefinitionsArray;
 
-    @Mock
-    private ObjectNode mockEngineSessionTimeoutObject;
-
     @Before
     public void setUpMockRequest() {
         ObjectMapper mapper = new ObjectMapper();
@@ -66,7 +63,6 @@
         
when(mockApplicationModeObject.toString()).thenReturn(APPLICATION_MODE);
         
when(mockRequest.getAttribute(WebAdminHostPageServlet.ATTR_APPLICATION_MODE)).thenReturn(mockApplicationModeObject);
         
when(mockRequest.getAttribute(WebAdminHostPageServlet.ATTR_PLUGIN_DEFS)).thenReturn(mockPluginDefinitionsArray);
-        
when(mockRequest.getAttribute(WebAdminHostPageServlet.ATTR_ENGINE_SESSION_TIMEOUT)).thenReturn(mockEngineSessionTimeoutObject);
         
when(mockRequest.getAttribute(WebAdminHostPageServlet.ATTR_ENGINE_REPORTS_BASE_URL)).thenReturn("");
     }
 
@@ -111,10 +107,11 @@
         UnsupportedEncodingException {
         MessageDigest result = testServlet.getMd5Digest(mockRequest);
         assertEquals(result, mockDigest);
-        verify(mockDigest, atLeast(3)).update(byteArrayCaptor.capture());
+        verify(mockDigest, atLeast(4)).update(byteArrayCaptor.capture());
         assertArrayEquals(SELECTOR_SCRIPT.getBytes(StandardCharsets.UTF_8), 
byteArrayCaptor.getAllValues().get(0));
-        assertArrayEquals(APPLICATION_MODE.getBytes(StandardCharsets.UTF_8), 
byteArrayCaptor.getAllValues().get(1));
-        
assertArrayEquals(mockPluginDefinitionsArray.toString().getBytes(StandardCharsets.UTF_8),
 byteArrayCaptor.getAllValues().get(2));
+        
assertArrayEquals(mockEngineSessionTimeoutObject.toString().getBytes(StandardCharsets.UTF_8),
 byteArrayCaptor.getAllValues().get(1));
+        assertArrayEquals(APPLICATION_MODE.getBytes(StandardCharsets.UTF_8), 
byteArrayCaptor.getAllValues().get(2));
+        
assertArrayEquals(mockPluginDefinitionsArray.toString().getBytes(StandardCharsets.UTF_8),
 byteArrayCaptor.getAllValues().get(3));
     }
 
     @Test
diff --git a/frontend/webadmin/modules/gwt-common/exclude-filters.xml 
b/frontend/webadmin/modules/gwt-common/exclude-filters.xml
index 122feee..818824b 100644
--- a/frontend/webadmin/modules/gwt-common/exclude-filters.xml
+++ b/frontend/webadmin/modules/gwt-common/exclude-filters.xml
@@ -123,6 +123,18 @@
      </Match>
 
      <!--
+      findbugs complain of unused field in class.
+      This is a GWT class and use to generate code
+
+      findbugs reason:
+      UuF: Unused field (UUF_UNUSED_FIELD)
+     -->
+     <Match>
+       <Class name="org.ovirt.engine.ui.common.restapi.RestApiSessionAcquired" 
/>
+       <Bug code="UuF"/>
+     </Match>
+
+     <!--
         findbugs complains that we don't use pathEditor in AbstractStorageView
         We do use that code in inherited classes such as GlusterStorageView
 
diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/gin/BaseSystemModule.java
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/gin/BaseSystemModule.java
index 699db46..5d9518a 100644
--- 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/gin/BaseSystemModule.java
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/gin/BaseSystemModule.java
@@ -7,6 +7,7 @@
 import org.ovirt.engine.ui.common.CommonApplicationTemplates;
 import org.ovirt.engine.ui.common.auth.CurrentUser;
 import org.ovirt.engine.ui.common.auth.LoggedInGatekeeper;
+import org.ovirt.engine.ui.common.restapi.RestApiSessionManager;
 import org.ovirt.engine.ui.common.system.ApplicationFocusManager;
 import org.ovirt.engine.ui.common.system.AsyncCallFailureHandler;
 import org.ovirt.engine.ui.common.system.ClientStorage;
@@ -84,6 +85,7 @@
         bind(VdcOperationManager.class).in(Singleton.class);
         bind(OperationProcessor.class).in(Singleton.class);
         
bind(CommunicationProvider.class).to(GWTRPCCommunicationProvider.class).in(Singleton.class);
+        bind(RestApiSessionManager.class).in(Singleton.class);
     }
 
     protected void bindResourceConfiguration(
diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/gin/BaseUiCommonModule.java
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/gin/BaseUiCommonModule.java
index 7686800..6d02725 100644
--- 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/gin/BaseUiCommonModule.java
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/gin/BaseUiCommonModule.java
@@ -3,13 +3,27 @@
 import org.ovirt.engine.ui.common.uicommon.FrontendEventsHandlerImpl;
 import org.ovirt.engine.ui.common.uicommon.FrontendFailureEventListener;
 import org.ovirt.engine.ui.common.uicommon.LoggerImpl;
+import org.ovirt.engine.ui.common.uicommon.NoVncImpl;
+import org.ovirt.engine.ui.common.uicommon.RdpNativeImpl;
+import org.ovirt.engine.ui.common.uicommon.RdpPluginImpl;
+import org.ovirt.engine.ui.common.uicommon.SpiceHtml5Impl;
+import org.ovirt.engine.ui.common.uicommon.SpiceNativeImpl;
+import org.ovirt.engine.ui.common.uicommon.SpicePluginImpl;
 import org.ovirt.engine.ui.common.uicommon.UiCommonDefaultTypeResolver;
+import org.ovirt.engine.ui.common.uicommon.VncNativeImpl;
 import org.ovirt.engine.ui.uicommonweb.Configurator;
 import org.ovirt.engine.ui.uicommonweb.ILogger;
 import org.ovirt.engine.ui.uicommonweb.ITypeResolver;
 
 import com.google.gwt.inject.client.AbstractGinModule;
 import com.google.inject.Singleton;
+import org.ovirt.engine.ui.uicommonweb.models.vms.INoVnc;
+import org.ovirt.engine.ui.uicommonweb.models.vms.IRdpNative;
+import org.ovirt.engine.ui.uicommonweb.models.vms.IRdpPlugin;
+import org.ovirt.engine.ui.uicommonweb.models.vms.ISpiceHtml5;
+import org.ovirt.engine.ui.uicommonweb.models.vms.ISpiceNative;
+import org.ovirt.engine.ui.uicommonweb.models.vms.ISpicePlugin;
+import org.ovirt.engine.ui.uicommonweb.models.vms.IVncNative;
 
 /**
  * GIN module containing common UiCommon integration bindings.
@@ -17,14 +31,27 @@
 public abstract class BaseUiCommonModule extends AbstractGinModule {
 
     protected void bindCommonIntegration() {
-        
bind(ITypeResolver.class).to(UiCommonDefaultTypeResolver.class).in(Singleton.class);
+        
bind(ITypeResolver.class).to(UiCommonDefaultTypeResolver.class).asEagerSingleton();
         bind(FrontendEventsHandlerImpl.class).in(Singleton.class);
         bind(FrontendFailureEventListener.class).in(Singleton.class);
         bind(ILogger.class).to(LoggerImpl.class).in(Singleton.class);
+
+        bindConsoles();
     }
 
     protected void bindConfiguratorIntegration(Class<? extends Configurator> 
configurator) {
         bind(Configurator.class).to(configurator).in(Singleton.class);
     }
 
+    private void bindConsoles() {
+        bind(INoVnc.class).to(NoVncImpl.class);
+        bind(IVncNative.class).to(VncNativeImpl.class);
+
+        bind(ISpiceHtml5.class).to(SpiceHtml5Impl.class);
+        bind(ISpiceNative.class).to(SpiceNativeImpl.class);
+        bind(ISpicePlugin.class).to(SpicePluginImpl.class);
+
+        bind(IRdpNative.class).to(RdpNativeImpl.class);
+        bind(IRdpPlugin.class).to(RdpPluginImpl.class);
+    }
 }
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/plugin/restapi/EngineSessionTimeoutData.java
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/restapi/EngineSessionTimeoutData.java
similarity index 89%
rename from 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/plugin/restapi/EngineSessionTimeoutData.java
rename to 
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/restapi/EngineSessionTimeoutData.java
index 92a3f35..4ab00e0 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/plugin/restapi/EngineSessionTimeoutData.java
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/restapi/EngineSessionTimeoutData.java
@@ -1,4 +1,4 @@
-package org.ovirt.engine.ui.webadmin.plugin.restapi;
+package org.ovirt.engine.ui.common.restapi;
 
 import com.google.gwt.core.client.JavaScriptObject;
 
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/plugin/restapi/RestApiSessionAcquired.java
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/restapi/RestApiSessionAcquired.java
similarity index 80%
rename from 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/plugin/restapi/RestApiSessionAcquired.java
rename to 
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/restapi/RestApiSessionAcquired.java
index 24cc929..6d254c8 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/plugin/restapi/RestApiSessionAcquired.java
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/restapi/RestApiSessionAcquired.java
@@ -1,4 +1,4 @@
-package org.ovirt.engine.ui.webadmin.plugin.restapi;
+package org.ovirt.engine.ui.common.restapi;
 
 import com.gwtplatform.dispatch.annotation.GenEvent;
 
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/plugin/restapi/RestApiSessionManager.java
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/restapi/RestApiSessionManager.java
similarity index 99%
rename from 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/plugin/restapi/RestApiSessionManager.java
rename to 
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/restapi/RestApiSessionManager.java
index 5a5dc83..b04295c 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/plugin/restapi/RestApiSessionManager.java
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/restapi/RestApiSessionManager.java
@@ -1,4 +1,4 @@
-package org.ovirt.engine.ui.webadmin.plugin.restapi;
+package org.ovirt.engine.ui.common.restapi;
 
 import java.util.logging.Level;
 import java.util.logging.Logger;
diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/system/BaseApplicationInit.java
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/system/BaseApplicationInit.java
index cd0eb36..a213a16 100644
--- 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/system/BaseApplicationInit.java
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/system/BaseApplicationInit.java
@@ -1,14 +1,20 @@
 package org.ovirt.engine.ui.common.system;
 
 import org.ovirt.engine.core.common.businessentities.aaa.DbUser;
+import org.ovirt.engine.core.common.queries.VdcQueryParametersBase;
+import org.ovirt.engine.core.common.queries.VdcQueryReturnValue;
+import org.ovirt.engine.core.common.queries.VdcQueryType;
 import org.ovirt.engine.ui.common.auth.AutoLoginData;
 import org.ovirt.engine.ui.common.auth.CurrentUser;
 import org.ovirt.engine.ui.common.auth.CurrentUser.LogoutHandler;
 import org.ovirt.engine.ui.common.auth.SSOTokenData;
+import org.ovirt.engine.ui.common.restapi.EngineSessionTimeoutData;
+import org.ovirt.engine.ui.common.restapi.RestApiSessionManager;
 import org.ovirt.engine.ui.common.uicommon.FrontendEventsHandlerImpl;
 import org.ovirt.engine.ui.common.uicommon.FrontendFailureEventListener;
 import org.ovirt.engine.ui.frontend.AsyncQuery;
 import org.ovirt.engine.ui.frontend.Frontend;
+import org.ovirt.engine.ui.frontend.FrontendLoginHandler;
 import org.ovirt.engine.ui.frontend.INewAsyncCallback;
 import org.ovirt.engine.ui.frontend.communication.SSOTokenChangeEvent;
 import org.ovirt.engine.ui.uicommonweb.ITypeResolver;
@@ -35,6 +41,7 @@
  */
 public abstract class BaseApplicationInit<T extends LoginModel> implements 
Bootstrapper, LogoutHandler {
 
+    private final RestApiSessionManager restApiSessionManager;
     private final ITypeResolver typeResolver;
     private final FrontendEventsHandlerImpl frontendEventsHandler;
     protected final FrontendFailureEventListener frontendFailureEventListener;
@@ -57,7 +64,8 @@
             Provider<T> loginModelProvider,
             LockInteractionManager lockInteractionManager,
             Frontend frontend, CurrentUserRole currentUserRole,
-            Provider<CommonModel> commonModelProvider) {
+            Provider<CommonModel> commonModelProvider,
+            RestApiSessionManager restApiSessionManager) {
         this.commonModelProvider = commonModelProvider;
         this.typeResolver = typeResolver;
         this.frontendEventsHandler = frontendEventsHandler;
@@ -68,6 +76,7 @@
         this.lockInteractionManager = lockInteractionManager;
         this.frontend = frontend;
         this.currentUserRole = currentUserRole;
+        this.restApiSessionManager = restApiSessionManager;
     }
 
     @Override
@@ -84,6 +93,12 @@
         AutoLoginData autoLoginData = AutoLoginData.instance();
         if (autoLoginData != null) {
             handleAutoLogin(autoLoginData);
+        }
+
+        // Check for Engine user session timeout configuration
+        EngineSessionTimeoutData engineSessionTimeoutData = 
EngineSessionTimeoutData.instance();
+        if (engineSessionTimeoutData != null) {
+            
restApiSessionManager.setSessionTimeout(engineSessionTimeoutData.getValue());
         }
     }
 
@@ -175,6 +190,33 @@
         });
 
         frontend.setFilterQueries(filterFrontendQueries());
+
+        // Configure REST API integration for availability of engine session id
+        frontend.setLoginHandler(new FrontendLoginHandler() {
+            @Override
+            public void onLoginSuccess() {
+                Scheduler.get().scheduleDeferred(new ScheduledCommand() {
+                    @Override
+                    public void execute() {
+                        frontend.runQuery(VdcQueryType.GetEngineSessionIdToken,
+                                new VdcQueryParametersBase(),
+                                new AsyncQuery(new INewAsyncCallback() {
+                                    @Override
+                                    public void onSuccess(Object model, Object 
returnValue) {
+                                        String engineAuthToken = 
((VdcQueryReturnValue) returnValue).getReturnValue();
+                                        
restApiSessionManager.acquireSession(engineAuthToken);
+                                    }
+                                })
+                        );
+                    }
+                });
+            }
+
+            @Override
+            public void onLogout() {
+                restApiSessionManager.releaseSession();
+            }
+        });
     }
 
     /**
@@ -204,6 +246,14 @@
         SSOTokenChangeEvent.fire(eventBus, SSOTokenData.instance().getToken());
         // Indicate that the user should be logged in automatically
         user.setAutoLogin(true);
+
+        Scheduler.get().scheduleDeferred(new ScheduledCommand() {
+            @Override
+            public void execute() {
+                // Assume the REST API session has been acquired and is still 
active
+                restApiSessionManager.reuseSession();
+            }
+        });
     }
 
 }
diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/AbstractConsole.java
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/AbstractConsole.java
new file mode 100644
index 0000000..655e527
--- /dev/null
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/AbstractConsole.java
@@ -0,0 +1,9 @@
+package org.ovirt.engine.ui.common.uicommon;
+
+import com.google.inject.Inject;
+import org.ovirt.engine.ui.uicommonweb.ConsoleUtils;
+
+public class AbstractConsole {
+    @Inject
+    protected ConsoleUtils consoleUtils;
+}
diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/AbstractRdp.java
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/AbstractRdp.java
index 200e468..2dea503 100644
--- 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/AbstractRdp.java
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/AbstractRdp.java
@@ -3,7 +3,7 @@
 import org.ovirt.engine.ui.frontend.Frontend;
 
 
-public class AbstractRdp {
+public class AbstractRdp extends AbstractConsole {
     private String address;
     private String guestID;
 
diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/AbstractSpice.java
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/AbstractSpice.java
index a7f77c0..631e5fb 100644
--- 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/AbstractSpice.java
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/AbstractSpice.java
@@ -6,15 +6,14 @@
 
 import org.ovirt.engine.core.compat.StringHelper;
 import org.ovirt.engine.core.compat.Version;
-import org.ovirt.engine.ui.uicommonweb.ConsoleUtils;
-import org.ovirt.engine.ui.uicommonweb.TypeResolver;
+import 
org.ovirt.engine.ui.common.uicommon.model.AbstractConsoleWithForeignMenu;
 import org.ovirt.engine.ui.uicommonweb.models.vms.SpiceConsoleModel;
 import org.ovirt.engine.ui.uicommonweb.models.vms.WANDisableEffects;
 import org.ovirt.engine.ui.uicommonweb.models.vms.WanColorDepth;
 import org.ovirt.engine.ui.uicompat.Event;
 import org.ovirt.engine.ui.uicompat.EventArgs;
 
-public abstract class AbstractSpice {
+public abstract class AbstractSpice extends AbstractConsoleWithForeignMenu {
 
     protected Event<EventArgs> disconnectedEvent = new Event<EventArgs>(
             SpiceConsoleModel.spiceDisconnectedEventDefinition);
@@ -43,7 +42,6 @@
     protected String sslChanels;
     protected String cipherSuite;
     protected String hostSubject;
-    protected String trustStore;
     protected String title;
     protected String toggleFullscreenHotKey;
     protected String releaseCursorHotKey;
@@ -69,8 +67,6 @@
 
     // even the spice proxy is globally configured, user can choose to disable 
it for specific VM
     private boolean spiceProxyEnabled;
-
-    private final ConsoleUtils consoleUtils = (ConsoleUtils) 
TypeResolver.getInstance().resolve(ConsoleUtils.class);
 
     public AbstractSpice() {
         setWANDisableEffects(new ArrayList<WANDisableEffects>());
@@ -274,14 +270,6 @@
 
     public void setHostSubject(String hostSubject) {
         this.hostSubject = hostSubject;
-    }
-
-    public String getTrustStore() {
-        return trustStore;
-    }
-
-    public void setTrustStore(String trustStore) {
-        this.trustStore = trustStore;
     }
 
     public String getTitle() {
diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/AbstractVnc.java
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/AbstractVnc.java
index 9fbb42b..97e786ee 100644
--- 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/AbstractVnc.java
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/AbstractVnc.java
@@ -1,9 +1,8 @@
 package org.ovirt.engine.ui.common.uicommon;
 
-import org.ovirt.engine.ui.uicommonweb.ConsoleUtils;
-import org.ovirt.engine.ui.uicommonweb.TypeResolver;
+import 
org.ovirt.engine.ui.common.uicommon.model.AbstractConsoleWithForeignMenu;
 
-public class AbstractVnc {
+public abstract class AbstractVnc extends AbstractConsoleWithForeignMenu {
 
     private String vncHost;
     private String vncPort;
@@ -11,7 +10,6 @@
     private String title;
     private boolean remapCtrlAltDelete;
 
-    private final ConsoleUtils consoleUtils = (ConsoleUtils) 
TypeResolver.getInstance().resolve(ConsoleUtils.class);
     private int ticketValiditySeconds;
     private String toggleFullscreenHotKey;
     private String releaseCursorHotKey;
diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/NoVncImpl.java
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/NoVncImpl.java
index 617f978..8beff30 100644
--- 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/NoVncImpl.java
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/NoVncImpl.java
@@ -9,17 +9,18 @@
 
     private static final String CLIENT_PAGE = 
BaseContextPathData.getInstance().getRelativePath()
             + "services/novnc-main.html"; //$NON-NLS-1$
-    private final WebsocketProxyConfig config;
-
-    public NoVncImpl() {
-        this.config = new WebsocketProxyConfig(
-                (String) 
AsyncDataProvider.getInstance().getConfigValuePreConverted(ConfigurationValues.WebSocketProxy),
 getVncHost());
-    }
+    private WebsocketProxyConfig config;
 
     @Override
     public void invokeClient() {
-        WebClientConsoleInvoker invoker = new 
WebClientConsoleInvoker(CLIENT_PAGE, config, getVncHost(), getVncPort(), 
getTicket(), false);
+        WebClientConsoleInvoker invoker = new 
WebClientConsoleInvoker(CLIENT_PAGE, getConfig(), getVncHost(), getVncPort(), 
getTicket(), false);
         invoker.invokeClient();
     }
 
+    protected WebsocketProxyConfig getConfig() {
+        if (config != null) {
+            config = new WebsocketProxyConfig((String) 
AsyncDataProvider.getInstance().getConfigValuePreConverted(ConfigurationValues.WebSocketProxy),
 getVncHost());
+        }
+        return config;
+    }
 }
diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/RdpNativeImpl.java
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/RdpNativeImpl.java
index b85db86..064f158 100644
--- 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/RdpNativeImpl.java
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/RdpNativeImpl.java
@@ -1,14 +1,14 @@
 package org.ovirt.engine.ui.common.uicommon;
 
 import org.ovirt.engine.ui.uicommonweb.models.vms.ConsoleModel;
-import org.ovirt.engine.ui.uicommonweb.models.vms.IRdp;
+import org.ovirt.engine.ui.uicommonweb.models.vms.IRdpNative;
 
 /**
  * Class for generating an RDP descriptor and invoking native RDP client.
  * This method of console invocation doesn't support automatic login.
  *
  */
-public class RdpNativeImpl extends AbstractRdp implements IRdp {
+public class RdpNativeImpl extends AbstractRdp implements IRdpNative {
 
     private static final String BASE_CONFIG_FILE =
         "session bpp:i:32\n" + //$NON-NLS-1$
diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/RdpPluginImpl.java
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/RdpPluginImpl.java
index 418cd86..511cb9b 100644
--- 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/RdpPluginImpl.java
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/RdpPluginImpl.java
@@ -2,8 +2,6 @@
 
 import java.util.logging.Logger;
 
-import org.ovirt.engine.ui.uicommonweb.ConsoleUtils;
-import org.ovirt.engine.ui.uicommonweb.TypeResolver;
 import org.ovirt.engine.ui.uicommonweb.models.ConsoleProtocol;
 import org.ovirt.engine.ui.uicommonweb.models.vms.ErrorCodeEventArgs;
 import org.ovirt.engine.ui.uicommonweb.models.vms.IRdpPlugin;
@@ -23,13 +21,6 @@
     private static EventDefinition RdpDisconnectedEventDefinition = new 
EventDefinition("RdpDisconnected", RdpConsoleModel.class); //$NON-NLS-1$
     private final Event<ErrorCodeEventArgs> disconnectedEvent = new 
Event<ErrorCodeEventArgs>(RdpDisconnectedEventDefinition);
     private RdpConsoleModel parentModel;
-
-    private final ConsoleUtils consoleUtils;
-
-    public RdpPluginImpl() {
-        super();
-        this.consoleUtils = (ConsoleUtils) 
TypeResolver.getInstance().resolve(ConsoleUtils.class);
-    }
 
     @Override
     public void connect() {
diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/SpiceHtml5Impl.java
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/SpiceHtml5Impl.java
index 1243151..18d52f0 100644
--- 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/SpiceHtml5Impl.java
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/SpiceHtml5Impl.java
@@ -9,20 +9,19 @@
 
     private static final String CLIENT_PAGE = 
BaseContextPathData.getInstance().getRelativePath()
             + "services/spicehtml5-main.html"; //$NON-NLS-1$
-    private final WebsocketProxyConfig config;
-
-    public SpiceHtml5Impl() {
-        super();
-
-        this.config = new WebsocketProxyConfig(
-                (String) 
AsyncDataProvider.getInstance().getConfigValuePreConverted(ConfigurationValues.WebSocketProxy),
 getHost());
-    }
+    private WebsocketProxyConfig config;
 
     @Override
     public void connect() {
         boolean sslTarget = securePort == -1 ? false : true;
-        WebClientConsoleInvoker invoker = new 
WebClientConsoleInvoker(CLIENT_PAGE, config, getHost(), 
String.valueOf(sslTarget ? securePort : port), getPassword(), sslTarget);
+        WebClientConsoleInvoker invoker = new 
WebClientConsoleInvoker(CLIENT_PAGE, getConfig(), getHost(), 
String.valueOf(sslTarget ? securePort : port), getPassword(), sslTarget);
         invoker.invokeClient();
     }
 
+    protected WebsocketProxyConfig getConfig() {
+        if (config == null) {
+            config = new WebsocketProxyConfig((String) 
AsyncDataProvider.getInstance().getConfigValuePreConverted(ConfigurationValues.WebSocketProxy),
 getHost());
+        }
+        return config;
+    }
 }
diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/SpiceNativeImpl.java
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/SpiceNativeImpl.java
index 8d72378..3b16935 100644
--- 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/SpiceNativeImpl.java
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/SpiceNativeImpl.java
@@ -81,6 +81,8 @@
             
configBuilder.append("\nsecure-channels=").append(formatSecureChannels(getSslChanels()));
 //$NON-NLS-1$
         }
 
+        writeOVirtSection(configBuilder);
+
         ConsoleModel.makeConsoleConfigRequest("console.vv", 
"application/x-virt-viewer; charset=UTF-8", configBuilder.toString()); 
//$NON-NLS-1$ $NON-NLS-2$
     }
 
@@ -92,5 +94,4 @@
                 ? "" //$NON-NLS-1$
                 : sslChanels.replace(',', ';');
     }
-
 }
diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/SpicePluginImpl.java
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/SpicePluginImpl.java
index 5894b11..0865886 100644
--- 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/SpicePluginImpl.java
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/SpicePluginImpl.java
@@ -4,16 +4,16 @@
 import java.util.List;
 import java.util.logging.Logger;
 
+import com.google.inject.Inject;
 import org.ovirt.engine.core.compat.StringHelper;
 import org.ovirt.engine.ui.uicommonweb.Configurator;
-import org.ovirt.engine.ui.uicommonweb.ConsoleUtils;
-import org.ovirt.engine.ui.uicommonweb.TypeResolver;
 import org.ovirt.engine.ui.uicommonweb.models.vms.ISpicePlugin;
 
 public class SpicePluginImpl extends AbstractSpice implements ISpicePlugin {
     private static final Logger logger = 
Logger.getLogger(SpicePluginImpl.class.getName());
-    private final Configurator configurator = (Configurator) 
TypeResolver.getInstance().resolve(Configurator.class);
-    private final ConsoleUtils cu = (ConsoleUtils) 
TypeResolver.getInstance().resolve(ConsoleUtils.class);
+
+    @Inject
+    private Configurator configurator;
 
     @Override
     public void connect() {
@@ -21,7 +21,7 @@
 
         if (configurator.isClientLinuxFirefox()) {
             connectNativelyViaXPI();
-        } else if (configurator.isClientWindowsExplorer() || cu.isIE11()) {
+        } else if (configurator.isClientWindowsExplorer() || 
consoleUtils.isIE11()) {
             connectNativelyViaActiveX();
         }
     }
@@ -221,7 +221,7 @@
     public boolean detectBrowserPlugin() {
         if (configurator.isClientLinuxFirefox()) {
             return detectXpiPlugin();
-        } else if (configurator.isClientWindowsExplorer() || cu.isIE11()) {
+        } else if (configurator.isClientWindowsExplorer() || 
consoleUtils.isIE11()) {
             return detectActiveXPlugin();
         }
 
diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/UiCommonDefaultTypeResolver.java
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/UiCommonDefaultTypeResolver.java
index 312ba10..80fd6bd 100644
--- 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/UiCommonDefaultTypeResolver.java
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/UiCommonDefaultTypeResolver.java
@@ -1,6 +1,9 @@
 package org.ovirt.engine.ui.common.uicommon;
 
+import com.google.gwt.event.shared.EventBus;
 import com.google.inject.Inject;
+import com.google.inject.Provider;
+import org.ovirt.engine.ui.common.restapi.RestApiSessionAcquiredEvent;
 import org.ovirt.engine.ui.uicommonweb.Configurator;
 import org.ovirt.engine.ui.uicommonweb.ConsoleOptionsFrontendPersister;
 import org.ovirt.engine.ui.uicommonweb.ConsoleUtils;
@@ -16,8 +19,9 @@
 import org.ovirt.engine.ui.uicommonweb.models.vms.ISpiceNative;
 import org.ovirt.engine.ui.uicommonweb.models.vms.ISpicePlugin;
 import org.ovirt.engine.ui.uicommonweb.models.vms.IVncNative;
+import org.ovirt.engine.ui.uicommonweb.restapi.HasForeignMenuData;
 
-public class UiCommonDefaultTypeResolver implements ITypeResolver {
+public class UiCommonDefaultTypeResolver implements ITypeResolver, 
RestApiSessionAcquiredEvent.RestApiSessionAcquiredHandler {
 
     private final Configurator configurator;
     private final ILogger logger;
@@ -25,19 +29,50 @@
     private final ConsoleOptionsFrontendPersister 
consoleOptionsFrontendPersister;
     private final ConsoleUtils consoleUtils;
     private final ErrorPopupManager errorPopupManager;
-    private CurrentUserRole currentUserRole;
+    private final CurrentUserRole currentUserRole;
+
+    // we inject providers for the console impls since they
+    // contain state unique for each connect operation and thus
+    // new instance is required each time
+    private final Provider<ISpicePlugin> spicePluginProvider;
+    private final Provider<ISpiceNative> spiceNativeProvider;
+    private final Provider<ISpiceHtml5> spiceHtml5Provider;
+    private final Provider<IRdpPlugin> rdpPluginProvider;
+    private final Provider<IRdpNative> rdpNativeProvider;
+    private final Provider<IVncNative> vncNativeProvider;
+    private final Provider<INoVnc> noVncProvider;
+
+    private String sessionId;
 
     @Inject
     public UiCommonDefaultTypeResolver(Configurator configurator, ILogger 
logger,
             ConsoleUtils consoleUtils,  ErrorPopupManager errorPopupManager,
             ConsoleOptionsFrontendPersister consoleOptionsFrontendPersister,
-            CurrentUserRole currentUserRole) {
+            CurrentUserRole currentUserRole,
+            EventBus eventBus,
+            Provider<ISpicePlugin> spicePluginProvider,
+            Provider<ISpiceNative> spiceNativeProvider,
+            Provider<ISpiceHtml5> spiceHtml5Provider,
+            Provider<IRdpPlugin> rdpPluginProvider,
+            Provider<IRdpNative> rdpNativeProvider,
+            Provider<IVncNative> vncNativeProvider,
+            Provider<INoVnc> noVncProvider) {
         this.configurator = configurator;
         this.logger = logger;
         this.consoleOptionsFrontendPersister = consoleOptionsFrontendPersister;
         this.consoleUtils = consoleUtils;
         this.errorPopupManager = errorPopupManager;
         this.currentUserRole = currentUserRole;
+
+        this.spicePluginProvider = spicePluginProvider;
+        this.spiceNativeProvider = spiceNativeProvider;
+        this.spiceHtml5Provider = spiceHtml5Provider;
+        this.rdpPluginProvider = rdpPluginProvider;
+        this.rdpNativeProvider = rdpNativeProvider;
+        this.vncNativeProvider = vncNativeProvider;
+        this.noVncProvider = noVncProvider;
+
+        eventBus.addHandler(RestApiSessionAcquiredEvent.getType(), this);
     }
 
     @SuppressWarnings("rawtypes")
@@ -50,19 +85,19 @@
         } else if (type == ITimer.class) {
             return new TimerImpl();
         } else if (type == ISpicePlugin.class) {
-            return new SpicePluginImpl();
+            return spicePluginProvider.get();
         } else if (type == ISpiceNative.class) {
-            return new SpiceNativeImpl();
+            return withSessionId(spiceNativeProvider.get());
         } else if (type == ISpiceHtml5.class) {
-            return new SpiceHtml5Impl();
+            return spiceHtml5Provider.get();
         } else if (type == IRdpPlugin.class) {
-            return new RdpPluginImpl();
+            return rdpPluginProvider.get();
         } else if (type == IRdpNative.class) {
-            return new RdpNativeImpl();
+            return rdpNativeProvider.get();
         } else if (type == INoVnc.class) {
-            return new NoVncImpl();
+            return noVncProvider.get();
         } else if (type == IVncNative.class) {
-            return new VncNativeImpl();
+            return withSessionId(vncNativeProvider.get());
         } else if (type == ConsoleOptionsFrontendPersister.class) {
             return consoleOptionsFrontendPersister;
         } else if (type == ConsoleUtils.class) {
@@ -76,4 +111,13 @@
         throw new RuntimeException("UiCommon Resolver cannot resolve type: " + 
type); //$NON-NLS-1$
     }
 
+    public <T extends HasForeignMenuData> T withSessionId(T consoleImpl) {
+        consoleImpl.setSessionId(sessionId);
+        return consoleImpl;
+    }
+
+    @Override
+    public void onRestApiSessionAcquired(RestApiSessionAcquiredEvent event) {
+        this.sessionId = event.getSessionId();
+    }
 }
diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/VncNativeImpl.java
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/VncNativeImpl.java
index 9d57e6e..573a7ad 100644
--- 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/VncNativeImpl.java
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/VncNativeImpl.java
@@ -2,9 +2,9 @@
 
 import org.ovirt.engine.core.compat.StringHelper;
 import org.ovirt.engine.ui.uicommonweb.models.vms.ConsoleModel;
-import org.ovirt.engine.ui.uicommonweb.models.vms.IVnc;
+import org.ovirt.engine.ui.uicommonweb.models.vms.IVncNative;
 
-public class VncNativeImpl extends AbstractVnc implements IVnc {
+public class VncNativeImpl extends AbstractVnc implements IVncNative {
 
     @Override
     public void invokeClient() {
@@ -29,7 +29,8 @@
             
configBuilder.append("\nsecure-attention=").append(getSecureAttentionMapping());
 //$NON-NLS-1$
         }
 
+        writeOVirtSection(configBuilder);
+
         ConsoleModel.makeConsoleConfigRequest("console.vv", 
"application/x-virt-viewer; charset=UTF-8", configBuilder.toString()); 
//$NON-NLS-1$ $NON-NLS-2$
     }
-
 }
diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/model/AbstractConsoleWithForeignMenu.java
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/model/AbstractConsoleWithForeignMenu.java
new file mode 100644
index 0000000..1332b98
--- /dev/null
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/model/AbstractConsoleWithForeignMenu.java
@@ -0,0 +1,65 @@
+package org.ovirt.engine.ui.common.uicommon.model;
+
+import org.ovirt.engine.core.compat.Guid;
+import org.ovirt.engine.ui.common.uicommon.AbstractConsole;
+import org.ovirt.engine.ui.uicommonweb.restapi.HasForeignMenuData;
+
+public class AbstractConsoleWithForeignMenu extends AbstractConsole implements 
HasForeignMenuData {
+    private String sessionId;
+    private Guid vmId;
+    private String engineHost;
+    private String trustStore;
+    private boolean admin;
+
+    @Override
+    public String getSessionId() {
+        return sessionId;
+    }
+
+    @Override
+    public void setSessionId(String sessionId) {
+        this.sessionId = sessionId;
+    }
+
+    @Override
+    public Guid getVmId() {
+        return vmId;
+    }
+
+    @Override
+    public void setVmId(Guid vmId) {
+        this.vmId = vmId;
+    }
+
+    @Override
+    public String getEngineHost() {
+        return engineHost;
+    }
+
+    @Override
+    public void setEngineHost(String host) {
+        this.engineHost = host;
+    }
+
+    @Override
+    public String getTrustStore() {
+        return trustStore;
+    }
+
+    @Override
+    public void setTrustStore(String trustStore) {
+        this.trustStore = trustStore;
+    }
+
+    public boolean isAdmin() {
+        return admin;
+    }
+
+    public void setAdmin(boolean admin) {
+        this.admin = admin;
+    }
+
+    protected void writeOVirtSection(StringBuilder configBuilder) {
+        // TODO: implement when [ovirt] section API is defined
+    }
+}
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/ConsoleModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/ConsoleModel.java
index 156e8d3..e5f306e7 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/ConsoleModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/ConsoleModel.java
@@ -1,6 +1,7 @@
 package org.ovirt.engine.ui.uicommonweb.models.vms;
 
 import com.google.gwt.dom.client.FormElement;
+import com.google.gwt.user.client.Window;
 import com.google.gwt.user.client.ui.FlowPanel;
 import com.google.gwt.user.client.ui.FormPanel;
 import com.google.gwt.user.client.ui.FormPanel.SubmitCompleteEvent;
@@ -27,6 +28,7 @@
 import org.ovirt.engine.ui.uicommonweb.models.ConfirmationModel;
 import org.ovirt.engine.ui.uicommonweb.models.EntityModel;
 import org.ovirt.engine.ui.uicommonweb.models.Model;
+import org.ovirt.engine.ui.uicommonweb.restapi.HasForeignMenuData;
 import org.ovirt.engine.ui.uicompat.ConstantsManager;
 import org.ovirt.engine.ui.uicompat.Event;
 import org.ovirt.engine.ui.uicompat.EventDefinition;
@@ -102,12 +104,6 @@
             forceVmStatusUp = value;
             onPropertyChanged(new 
PropertyChangedEventArgs("ForceVmStatusUp")); //$NON-NLS-1$
         }
-    }
-
-    @Override
-    public VM getEntity()
-    {
-        return (VM) super.getEntity();
     }
 
     /**
@@ -326,4 +322,11 @@
         }
         return 0;
     }
+
+    protected void setForeignMenuData(HasForeignMenuData nativeImpl, String 
engineCertificate) {
+        nativeImpl.setEngineHost(Window.Location.getHost());
+        nativeImpl.setVmId(getEntity().getId());
+        nativeImpl.setTrustStore(engineCertificate);
+        
nativeImpl.setAdmin(Frontend.getInstance().getLoggedInUser().isAdmin());
+    }
 }
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/ISpiceNative.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/ISpiceNative.java
index 36ad136..f30fc5d 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/ISpiceNative.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/ISpiceNative.java
@@ -1,9 +1,11 @@
 package org.ovirt.engine.ui.uicommonweb.models.vms;
 
+import org.ovirt.engine.ui.uicommonweb.restapi.HasForeignMenuData;
+
 /**
- * Marking interface
+ * Marking interface for native SPICE implementations
  *
  */
-public interface ISpiceNative extends ISpice {
+public interface ISpiceNative extends ISpice, HasForeignMenuData {
 
 }
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/IVncNative.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/IVncNative.java
index efe20d5..2133e65 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/IVncNative.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/IVncNative.java
@@ -1,5 +1,11 @@
 package org.ovirt.engine.ui.uicommonweb.models.vms;
 
-public interface IVncNative extends IVnc {
+import org.ovirt.engine.ui.uicommonweb.restapi.HasForeignMenuData;
+
+/**
+ * Marking interface for native VNC implementations
+ *
+ */
+public interface IVncNative extends IVnc, HasForeignMenuData {
 
 }
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/SpiceConsoleModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/SpiceConsoleModel.java
index 3f4e10d..513bee9 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/SpiceConsoleModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/SpiceConsoleModel.java
@@ -44,6 +44,7 @@
 import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider;
 import org.ovirt.engine.ui.uicommonweb.help.HelpTag;
 import org.ovirt.engine.ui.uicommonweb.models.Model;
+import org.ovirt.engine.ui.uicommonweb.restapi.HasForeignMenuData;
 import org.ovirt.engine.ui.uicompat.ConstantsManager;
 import org.ovirt.engine.ui.uicompat.Event;
 import org.ovirt.engine.ui.uicompat.EventArgs;
@@ -65,6 +66,7 @@
     public static EventDefinition wanDisableEffectsChangeEventDefinition;
 
     private SpiceMenu menu;
+
     private ISpice privatespice;
     private ClientConsoleMode consoleMode;
 
@@ -341,7 +343,7 @@
         }
 
         if (!success) {
-            boolean enableSpiceRootCertificateValidation = (Boolean) 
result.getReturnValues().get(3).getReturnValue();
+            boolean enableSpiceRootCertificateValidation = 
result.getReturnValues().get(3).getReturnValue();
             VdcQueryReturnValue caCertificateReturnValue = 
result.getReturnValues().get(5);
 
             // If only the caCertificate query failed - ignore failure (goto 
onSuccess)
@@ -359,18 +361,18 @@
         String cipherSuite = null;
         String spiceSecureChannels = null;
 
-        boolean isSSLEnabled = (Boolean) returnValues.get(0).getReturnValue();
+        boolean isSSLEnabled = returnValues.get(0).getReturnValue();
         if (isSSLEnabled) {
-            cipherSuite = (String) returnValues.get(1).getReturnValue();
-            spiceSecureChannels = (String) 
returnValues.get(2).getReturnValue();
+            cipherSuite = returnValues.get(1).getReturnValue();
+            spiceSecureChannels = returnValues.get(2).getReturnValue();
         }
 
         String certificateSubject = ""; //$NON-NLS-1$
         String caCertificate = ""; //$NON-NLS-1$
 
-        if ((Boolean) returnValues.get(3).getReturnValue()) {
-            certificateSubject = (String) returnValues.get(4).getReturnValue();
-            caCertificate = (String) returnValues.get(5).getReturnValue();
+        if (returnValues.get(3).getReturnValue()) {
+            certificateSubject = returnValues.get(4).getReturnValue();
+            caCertificate = returnValues.get(5).getReturnValue();
         }
 
         GraphicsInfo spiceInfo = 
getEntity().getGraphicsInfos().get(GraphicsType.SPICE);
@@ -396,6 +398,10 @@
 
         getspice().setHostSubject(certificateSubject);
         getspice().setTrustStore(caCertificate);
+        if (getspice() instanceof HasForeignMenuData) {
+            HasForeignMenuData spiceNativeImpl = (HasForeignMenuData) 
getspice();
+            setForeignMenuData(spiceNativeImpl, getspice().getTrustStore());
+        }
 
         getspice().setTitle(getClientTitle());
 
@@ -429,8 +435,8 @@
 
         ArrayList<String> isos = new ArrayList<String>();
 
-        if (returnValues.size() > 6) {
-            ArrayList<RepoImage> repoList = 
returnValues.get(6).getReturnValue();
+        if (returnValues.size() > 7) {
+            ArrayList<RepoImage> repoList = 
returnValues.get(7).getReturnValue();
             for (RepoImage repoImage : repoList) {
                 isos.add(repoImage.getRepoImageId());
             }
@@ -518,7 +524,7 @@
             public void onSuccess(Object model, Object ReturnValue) {
                 SpiceConsoleModel spiceConsoleModel = (SpiceConsoleModel) 
model;
                 String address =
-                        (String) ((VdcQueryReturnValue) 
ReturnValue).getReturnValue();
+                        ((VdcQueryReturnValue) ReturnValue).getReturnValue();
                 spiceConsoleModel.getspice().setHost(address);
                 spiceConsoleModel.spiceConnect();
             }
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VncConsoleModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VncConsoleModel.java
index 0d3fc04..c68e83f 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VncConsoleModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VncConsoleModel.java
@@ -8,6 +8,7 @@
 import org.ovirt.engine.core.common.businessentities.VM;
 import org.ovirt.engine.core.common.queries.ConfigurationValues;
 import org.ovirt.engine.core.common.queries.IdQueryParameters;
+import org.ovirt.engine.core.common.queries.VdcQueryParametersBase;
 import org.ovirt.engine.core.common.queries.VdcQueryReturnValue;
 import org.ovirt.engine.core.common.queries.VdcQueryType;
 import org.ovirt.engine.core.compat.StringHelper;
@@ -20,6 +21,7 @@
 import org.ovirt.engine.ui.uicommonweb.UICommand;
 import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider;
 import org.ovirt.engine.ui.uicommonweb.models.Model;
+import org.ovirt.engine.ui.uicommonweb.restapi.HasForeignMenuData;
 import org.ovirt.engine.ui.uicompat.ConstantsManager;
 import org.ovirt.engine.ui.uicompat.FrontendActionAsyncResult;
 import org.ovirt.engine.ui.uicompat.IFrontendActionAsyncCallback;
@@ -162,7 +164,18 @@
         vncImpl.setReleaseCursorHotKey(getReleaseCursorKeys());
         vncImpl.setTicketValiditySeconds(TICKET_VALIDITY_SECONDS);
 
-        vncImpl.invokeClient();
+        if (vncImpl instanceof HasForeignMenuData) {
+            final HasForeignMenuData vncNativeImpl = (HasForeignMenuData) 
vncImpl;
+            Frontend.getInstance().runQuery(VdcQueryType.GetCACertificate, new 
VdcQueryParametersBase(), new AsyncQuery(new INewAsyncCallback() {
+                @Override
+                public void onSuccess(Object model, Object returnValue) {
+                    setForeignMenuData(vncNativeImpl, returnValue.toString());
+                    vncImpl.invokeClient();
+                }
+            }));
+        } else {
+            vncImpl.invokeClient();
+        }
     }
 
 }
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/restapi/HasForeignMenuData.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/restapi/HasForeignMenuData.java
new file mode 100644
index 0000000..81fe940
--- /dev/null
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/restapi/HasForeignMenuData.java
@@ -0,0 +1,20 @@
+package org.ovirt.engine.ui.uicommonweb.restapi;
+
+import org.ovirt.engine.core.compat.Guid;
+
+public interface HasForeignMenuData {
+    String getSessionId();
+    void setSessionId(String sessionId);
+
+    Guid getVmId();
+    void setVmId(Guid vmId);
+
+    String getEngineHost();
+    void setEngineHost(String host);
+
+    String getTrustStore();
+    void setTrustStore(String trustStore);
+
+    boolean isAdmin();
+    void setAdmin(boolean admin);
+}
diff --git 
a/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/system/ApplicationInit.java
 
b/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/system/ApplicationInit.java
index a57fdd2..eba4251 100644
--- 
a/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/system/ApplicationInit.java
+++ 
b/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/system/ApplicationInit.java
@@ -1,6 +1,7 @@
 package org.ovirt.engine.ui.userportal.system;
 
 import org.ovirt.engine.ui.common.auth.CurrentUser;
+import org.ovirt.engine.ui.common.restapi.RestApiSessionManager;
 import org.ovirt.engine.ui.common.system.BaseApplicationInit;
 import org.ovirt.engine.ui.common.system.LockInteractionManager;
 import org.ovirt.engine.ui.common.uicommon.ClientAgentType;
@@ -44,9 +45,10 @@
             UserPortalCurrentUserRole userRole,
             ConnectAutomaticallyManager connectAutomaticallyManager,
             ClientAgentType clientAgentType,
-            ApplicationDynamicMessages dynamicMessages) {
+            ApplicationDynamicMessages dynamicMessages,
+            RestApiSessionManager restApiSessionManager) {
         super(typeResolver, frontendEventsHandler, 
frontendFailureEventListener,
-                user, eventBus, loginModelProvider, lockInteractionManager, 
frontend, userRole, null);
+                user, eventBus, loginModelProvider, lockInteractionManager, 
frontend, userRole, null, restApiSessionManager);
         this.placeManager = placeManager;
         this.userRole = userRole;
         this.connectAutomaticallyManager = connectAutomaticallyManager;
diff --git a/frontend/webadmin/modules/webadmin/exclude-filters.xml 
b/frontend/webadmin/modules/webadmin/exclude-filters.xml
index f27334f..35442b3 100644
--- a/frontend/webadmin/modules/webadmin/exclude-filters.xml
+++ b/frontend/webadmin/modules/webadmin/exclude-filters.xml
@@ -18,18 +18,6 @@
         UuF: Unused field (UUF_UNUSED_FIELD)
        -->
      <Match>
-       <Class 
name="org.ovirt.engine.ui.webadmin.plugin.restapi.RestApiSessionAcquired" />
-       <Bug code="UuF"/>
-     </Match>
-
-       <!--
-        findbugs complain of unused field in class.
-        This is a GWT class and use to generate code
-
-        findbugs reason:
-        UuF: Unused field (UUF_UNUSED_FIELD)
-       -->
-     <Match>
        <Class 
name="org.ovirt.engine.ui.webadmin.section.main.presenter.UpdateMainContentLayout"
 />
        <Bug code="UuF"/>
      </Match>
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/PluginModule.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/PluginModule.java
index 3c8edc2..0c623dc 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/PluginModule.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/PluginModule.java
@@ -3,7 +3,6 @@
 import org.ovirt.engine.ui.webadmin.plugin.PluginEventHandler;
 import org.ovirt.engine.ui.webadmin.plugin.PluginManager;
 import org.ovirt.engine.ui.webadmin.plugin.api.PluginUiFunctions;
-import org.ovirt.engine.ui.webadmin.plugin.restapi.RestApiSessionManager;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.DynamicUrlContentTabPresenter;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.DynamicUrlContentTabProxyFactory;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.DynamicUrlContentPopupPresenterWidget;
@@ -23,7 +22,6 @@
         bind(PluginManager.class).asEagerSingleton();
         bind(PluginEventHandler.class).asEagerSingleton();
         bind(PluginUiFunctions.class).in(Singleton.class);
-        bind(RestApiSessionManager.class).in(Singleton.class);
 
         // Dynamic tab component
         
bind(DynamicUrlContentTabPresenter.ViewDef.class).to(DynamicUrlContentTabView.class);
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/plugin/PluginEventHandler.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/plugin/PluginEventHandler.java
index c46e924..2aa5dd1 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/plugin/PluginEventHandler.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/plugin/PluginEventHandler.java
@@ -5,12 +5,12 @@
 import org.ovirt.engine.ui.common.auth.CurrentUser;
 import org.ovirt.engine.ui.common.auth.UserLoginChangeEvent;
 import 
org.ovirt.engine.ui.common.auth.UserLoginChangeEvent.UserLoginChangeHandler;
+import org.ovirt.engine.ui.common.restapi.RestApiSessionAcquiredEvent;
 import 
org.ovirt.engine.ui.webadmin.plugin.PluginManager.PluginInvocationCondition;
 import org.ovirt.engine.ui.webadmin.plugin.entity.EntityObject;
 import org.ovirt.engine.ui.webadmin.plugin.entity.SystemTreeItemObject;
 import org.ovirt.engine.ui.webadmin.plugin.jsni.JsArrayHelper;
-import org.ovirt.engine.ui.webadmin.plugin.restapi.RestApiSessionAcquiredEvent;
-import 
org.ovirt.engine.ui.webadmin.plugin.restapi.RestApiSessionAcquiredEvent.RestApiSessionAcquiredHandler;
+import 
org.ovirt.engine.ui.common.restapi.RestApiSessionAcquiredEvent.RestApiSessionAcquiredHandler;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.tab.ClusterSelectionChangeEvent;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.tab.ClusterSelectionChangeEvent.ClusterSelectionChangeHandler;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.tab.DataCenterSelectionChangeEvent;
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/system/ApplicationInit.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/system/ApplicationInit.java
index 0a94fdc..ab588f8 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/system/ApplicationInit.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/system/ApplicationInit.java
@@ -1,19 +1,12 @@
 package org.ovirt.engine.ui.webadmin.system;
 
 import org.ovirt.engine.core.common.mode.ApplicationMode;
-import org.ovirt.engine.core.common.queries.VdcQueryParametersBase;
-import org.ovirt.engine.core.common.queries.VdcQueryReturnValue;
-import org.ovirt.engine.core.common.queries.VdcQueryType;
-import org.ovirt.engine.ui.common.auth.AutoLoginData;
 import org.ovirt.engine.ui.common.auth.CurrentUser;
 import org.ovirt.engine.ui.common.system.BaseApplicationInit;
 import org.ovirt.engine.ui.common.system.LockInteractionManager;
 import org.ovirt.engine.ui.common.uicommon.FrontendEventsHandlerImpl;
 import org.ovirt.engine.ui.common.uicommon.FrontendFailureEventListener;
-import org.ovirt.engine.ui.frontend.AsyncQuery;
 import org.ovirt.engine.ui.frontend.Frontend;
-import org.ovirt.engine.ui.frontend.FrontendLoginHandler;
-import org.ovirt.engine.ui.frontend.INewAsyncCallback;
 import org.ovirt.engine.ui.uicommonweb.ITypeResolver;
 import org.ovirt.engine.ui.uicommonweb.ReportInit;
 import org.ovirt.engine.ui.uicommonweb.auth.CurrentUserRole;
@@ -24,12 +17,9 @@
 import org.ovirt.engine.ui.uicompat.EventArgs;
 import org.ovirt.engine.ui.uicompat.IEventListener;
 import org.ovirt.engine.ui.webadmin.ApplicationDynamicMessages;
-import org.ovirt.engine.ui.webadmin.plugin.restapi.EngineSessionTimeoutData;
-import org.ovirt.engine.ui.webadmin.plugin.restapi.RestApiSessionManager;
+import org.ovirt.engine.ui.common.restapi.RestApiSessionManager;
 import org.ovirt.engine.ui.webadmin.uimode.UiModeData;
 
-import com.google.gwt.core.client.Scheduler;
-import com.google.gwt.core.client.Scheduler.ScheduledCommand;
 import com.google.gwt.event.shared.EventBus;
 import com.google.gwt.user.client.Window;
 import com.google.inject.Inject;
@@ -39,7 +29,6 @@
 public class ApplicationInit extends BaseApplicationInit<LoginModel> {
 
     private final PlaceManager placeManager;
-    private final RestApiSessionManager restApiSessionManager;
     private final ApplicationDynamicMessages dynamicMessages;
 
     @Inject
@@ -57,11 +46,9 @@
             CurrentUserRole currentUserRole, Provider<CommonModel> 
commonModelProvider) {
         super(typeResolver, frontendEventsHandler, 
frontendFailureEventListener,
                 user, eventBus, loginModelProvider, lockInteractionManager, 
frontend, currentUserRole,
-                commonModelProvider);
+                commonModelProvider, restApiSessionManager);
         this.placeManager = placeManager;
-        this.restApiSessionManager = restApiSessionManager;
         this.dynamicMessages = dynamicMessages;
-
     }
 
     @Override
@@ -73,12 +60,6 @@
         UiModeData uiModeData = UiModeData.instance();
         if (uiModeData != null) {
             handleUiMode(uiModeData);
-        }
-
-        // Check for Engine user session timeout configuration
-        EngineSessionTimeoutData engineSessionTimeoutData = 
EngineSessionTimeoutData.instance();
-        if (engineSessionTimeoutData != null) {
-            
restApiSessionManager.setSessionTimeout(engineSessionTimeoutData.getValue());
         }
 
         // Initiate transition to requested application place
@@ -115,46 +96,6 @@
         super.initFrontend();
 
         ReportInit.getInstance().initHandlers(eventBus);
-
-        // Configure REST API integration for UI plugin infrastructure
-        frontend.setLoginHandler(new FrontendLoginHandler() {
-            @Override
-            public void onLoginSuccess() {
-                Scheduler.get().scheduleDeferred(new ScheduledCommand() {
-                    @Override
-                    public void execute() {
-                        frontend.runQuery(VdcQueryType.GetEngineSessionIdToken,
-                                new VdcQueryParametersBase(),
-                                new AsyncQuery(new INewAsyncCallback() {
-                                    @Override
-                                    public void onSuccess(Object model, Object 
returnValue) {
-                                        String engineAuthToken = (String) 
((VdcQueryReturnValue) returnValue).getReturnValue();
-                                        
restApiSessionManager.acquireSession(engineAuthToken);
-                                    }
-                                })
-                        );
-                    }
-                });
-            }
-
-            @Override
-            public void onLogout() {
-                restApiSessionManager.releaseSession();
-            }
-        });
-    }
-
-    @Override
-    protected void handleAutoLogin(AutoLoginData autoLoginData) {
-        super.handleAutoLogin(autoLoginData);
-
-        Scheduler.get().scheduleDeferred(new ScheduledCommand() {
-            @Override
-            public void execute() {
-                // Assume the REST API session has been acquired and is still 
active
-                restApiSessionManager.reuseSession();
-            }
-        });
     }
 
     void handleUiMode(UiModeData uiModeData) {


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

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

Reply via email to