Tomas Jelinek has uploaded a new change for review.

Change subject: userportal: WIP implement the createInstanceOnly role
......................................................................

userportal: WIP implement the createInstanceOnly role

WIP

Change-Id: Ib2462c227b302e665327226d8e670a7394888fa8
Signed-off-by: Tomas Jelinek <tjeli...@redhat.com>
---
A 
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/auth/CommonCurrentUserRole.java
M 
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/system/BaseApplicationInit.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/view/popup/AbstractVmPopupView.java
M 
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/popup/AbstractVmBasedPopupPresenterWidget.java
M 
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractModeSwitchingPopupWidget.java
M 
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractVmPopupWidget.java
M 
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/pool/PoolNewPopupWidget.java
M 
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/PopupWidgetConfig.java
M 
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmPopupWidget.java
A 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/auth/CurrentUserRole.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/LoginModel.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/userportal/UserPortalLoginModel.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/UnitVmModel.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/instancetypes/InstanceTypeManager.java
M 
frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/auth/LoggedInExtendedPlaceGatekeeper.java
R 
frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/auth/UserPortalCurrentUserRole.java
M 
frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/gin/SystemModule.java
M 
frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/place/UserPortalPlaceManager.java
M 
frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/section/main/presenter/HeaderPresenterWidget.java
M 
frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/section/main/presenter/popup/vm/VmClonePopupPresenterWidget.java
M 
frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/system/ApplicationInit.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/SystemModule.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/system/ApplicationInit.java
24 files changed, 256 insertions(+), 63 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/73/27073/1

diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/auth/CommonCurrentUserRole.java
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/auth/CommonCurrentUserRole.java
new file mode 100644
index 0000000..6db22c2
--- /dev/null
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/auth/CommonCurrentUserRole.java
@@ -0,0 +1,16 @@
+package org.ovirt.engine.ui.common.auth;
+
+import org.ovirt.engine.ui.uicommonweb.auth.CurrentUserRole;
+
+public class CommonCurrentUserRole implements CurrentUserRole {
+
+    private boolean createInstanceOnly = false;
+
+    public boolean isCreateInstanceOnly() {
+        return createInstanceOnly;
+    }
+
+    public void setCreateInstanceOnly(boolean createInstanceOnly) {
+        this.createInstanceOnly = createInstanceOnly;
+    }
+}
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 b37faaf..0b4df21 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,5 +1,9 @@
 package org.ovirt.engine.ui.common.system;
 
+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.inject.Provider;
 import org.ovirt.engine.core.common.businessentities.DbUser;
 import org.ovirt.engine.ui.common.auth.AutoLoginData;
 import org.ovirt.engine.ui.common.auth.CurrentUser;
@@ -11,16 +15,12 @@
 import org.ovirt.engine.ui.frontend.Frontend;
 import org.ovirt.engine.ui.uicommonweb.ITypeResolver;
 import org.ovirt.engine.ui.uicommonweb.TypeResolver;
+import org.ovirt.engine.ui.uicommonweb.auth.CurrentUserRole;
 import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider;
 import org.ovirt.engine.ui.uicommonweb.models.LoginModel;
 import org.ovirt.engine.ui.uicompat.Event;
 import org.ovirt.engine.ui.uicompat.EventArgs;
 import org.ovirt.engine.ui.uicompat.IEventListener;
-
-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.inject.Provider;
 
 /**
  * Contains initialization logic that gets executed at application startup.
@@ -37,6 +37,7 @@
     protected final CurrentUser user;
     protected final EventBus eventBus;
     protected final Frontend frontend;
+    private CurrentUserRole currentUserRole;
 
     // Using Provider because any UiCommon model will fail before TypeResolver 
is initialized
     private final Provider<T> loginModelProvider;
@@ -49,7 +50,7 @@
             CurrentUser user, EventBus eventBus,
             Provider<T> loginModelProvider,
             LockInteractionManager lockInteractionManager,
-            Frontend frontend) {
+            Frontend frontend, CurrentUserRole currentUserRole) {
         this.typeResolver = typeResolver;
         this.frontendEventsHandler = frontendEventsHandler;
         this.frontendFailureEventListener = frontendFailureEventListener;
@@ -58,6 +59,7 @@
         this.loginModelProvider = loginModelProvider;
         this.lockInteractionManager = lockInteractionManager;
         this.frontend = frontend;
+        this.currentUserRole = currentUserRole;
 
         // Handle UI logout requests
         user.setLogoutHandler(this);
@@ -88,6 +90,15 @@
                 onLogin(loginModel);
             }
         });
+
+        loginModel.getCreateInstanceOnly().getEntityChangedEvent().addListener(
+                new IEventListener() {
+                    @Override
+                    public void eventRaised(Event ev, Object sender, EventArgs 
args) {
+                        
currentUserRole.setCreateInstanceOnly(loginModel.getCreateInstanceOnly().getEntity()
 );
+                    }
+                }
+        );
     }
 
     /**
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 dcb18da..312ba10 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,5 +1,6 @@
 package org.ovirt.engine.ui.common.uicommon;
 
+import com.google.inject.Inject;
 import org.ovirt.engine.ui.uicommonweb.Configurator;
 import org.ovirt.engine.ui.uicommonweb.ConsoleOptionsFrontendPersister;
 import org.ovirt.engine.ui.uicommonweb.ConsoleUtils;
@@ -7,6 +8,7 @@
 import org.ovirt.engine.ui.uicommonweb.ILogger;
 import org.ovirt.engine.ui.uicommonweb.ITimer;
 import org.ovirt.engine.ui.uicommonweb.ITypeResolver;
+import org.ovirt.engine.ui.uicommonweb.auth.CurrentUserRole;
 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;
@@ -14,8 +16,6 @@
 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 com.google.inject.Inject;
 
 public class UiCommonDefaultTypeResolver implements ITypeResolver {
 
@@ -25,16 +25,19 @@
     private final ConsoleOptionsFrontendPersister 
consoleOptionsFrontendPersister;
     private final ConsoleUtils consoleUtils;
     private final ErrorPopupManager errorPopupManager;
+    private CurrentUserRole currentUserRole;
 
     @Inject
     public UiCommonDefaultTypeResolver(Configurator configurator, ILogger 
logger,
             ConsoleUtils consoleUtils,  ErrorPopupManager errorPopupManager,
-            ConsoleOptionsFrontendPersister consoleOptionsFrontendPersister) {
+            ConsoleOptionsFrontendPersister consoleOptionsFrontendPersister,
+            CurrentUserRole currentUserRole) {
         this.configurator = configurator;
         this.logger = logger;
         this.consoleOptionsFrontendPersister = consoleOptionsFrontendPersister;
         this.consoleUtils = consoleUtils;
         this.errorPopupManager = errorPopupManager;
+        this.currentUserRole = currentUserRole;
     }
 
     @SuppressWarnings("rawtypes")
@@ -66,6 +69,8 @@
             return consoleUtils;
         } else if (type == ErrorPopupManager.class) {
             return errorPopupManager;
+        } else if (type == CurrentUserRole.class) {
+            return currentUserRole;
         }
 
         throw new RuntimeException("UiCommon Resolver cannot resolve type: " + 
type); //$NON-NLS-1$
diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/view/popup/AbstractVmPopupView.java
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/view/popup/AbstractVmPopupView.java
index b54617a..144c77f 100644
--- 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/view/popup/AbstractVmPopupView.java
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/view/popup/AbstractVmPopupView.java
@@ -39,6 +39,13 @@
     }
 
     @Override
+    public void initToCreateInstanceMode() {
+        if (getContentWidget() instanceof AbstractVmPopupWidget) {
+            ((AbstractVmPopupWidget) 
getContentWidget()).initCreateInstanceMode();
+        }
+    }
+
+    @Override
     public void setSpiceProxyOverrideExplanation(String explanation) {
         if (getContentWidget() instanceof AbstractVmPopupWidget) {
             ((AbstractVmPopupWidget) 
getContentWidget()).setSpiceProxyOverrideExplanation(explanation);
diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/popup/AbstractVmBasedPopupPresenterWidget.java
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/popup/AbstractVmBasedPopupPresenterWidget.java
index c3353e1..5dd2b9e 100644
--- 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/popup/AbstractVmBasedPopupPresenterWidget.java
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/popup/AbstractVmBasedPopupPresenterWidget.java
@@ -1,5 +1,7 @@
 package org.ovirt.engine.ui.common.widget.popup;
 
+import com.google.gwt.event.shared.EventBus;
+import com.google.inject.Inject;
 import 
org.ovirt.engine.ui.common.presenter.AbstractModelBoundPopupPresenterWidget;
 import org.ovirt.engine.ui.common.system.ClientStorage;
 import org.ovirt.engine.ui.uicommonweb.models.vms.UnitVmModel;
@@ -7,13 +9,12 @@
 import org.ovirt.engine.ui.uicompat.EventArgs;
 import org.ovirt.engine.ui.uicompat.IEventListener;
 
-import com.google.gwt.event.shared.EventBus;
-import com.google.inject.Inject;
-
 public class AbstractVmBasedPopupPresenterWidget<V extends 
AbstractVmBasedPopupPresenterWidget.ViewDef> extends 
AbstractModelBoundPopupPresenterWidget<UnitVmModel, V>  {
 
     public interface ViewDef extends 
AbstractModelBoundPopupPresenterWidget.ViewDef<UnitVmModel> {
         void switchMode(boolean isAdvanced);
+
+        void initToCreateInstanceMode();
 
         void setSpiceProxyOverrideExplanation(String explanation);
 
@@ -37,9 +38,18 @@
 
         swithAccordingToMode(model);
 
+        initToCreateInstanceMode(model);
+
         initListeners(model);
     }
 
+    private void initToCreateInstanceMode(UnitVmModel model) {
+        if (model.isCreateInstanceOnly()) {
+            // hide the admin-only widgets only for non-admin users
+            getView().initToCreateInstanceMode();
+        }
+    }
+
     private void initListeners(final UnitVmModel model) {
         model.getAdvancedMode().getPropertyChangedEvent().addListener(new 
IEventListener() {
 
diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractModeSwitchingPopupWidget.java
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractModeSwitchingPopupWidget.java
index 0f3cc1c..a552b0d 100644
--- 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractModeSwitchingPopupWidget.java
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractModeSwitchingPopupWidget.java
@@ -14,6 +14,8 @@
 
     private PopupWidgetConfigMap widgetConfiguration;
 
+    private boolean createInstanceMode = false;
+
     private T model;
 
     // the tab which is always here
@@ -39,7 +41,7 @@
     public void switchMode(boolean advanced) {
         Set<Widget> allConfiguredWidgets = 
widgetConfiguration.getAll().keySet();
         for (Widget widget : allConfiguredWidgets) {
-            
widget.setVisible(widgetConfiguration.get(widget).isCurrentlyVisible(advanced));
+            
widget.setVisible(widgetConfiguration.get(widget).isCurrentlyVisible(advanced, 
createInstanceMode));
         }
 
         DialogTab activeTab = ((DialogTabPanel) getWidget()).getActiveTab();
@@ -67,9 +69,9 @@
         }
 
         vmPopupWidgetConfig.setApplicationLevelVisible(desiredVisibility);
-        boolean advancedMode = (Boolean) model.getAdvancedMode().getEntity();
+        boolean advancedMode = model.getAdvancedMode().getEntity();
 
-        return vmPopupWidgetConfig.isCurrentlyVisible(advancedMode);
+        return vmPopupWidgetConfig.isCurrentlyVisible(advancedMode, 
createInstanceMode);
     }
 
     @Override
@@ -89,4 +91,8 @@
     public PopupWidgetConfigMap getWidgetConfiguration() {
         return widgetConfiguration;
     }
+
+    public void setCreateInstanceMode(boolean createInstanceMode) {
+        this.createInstanceMode = createInstanceMode;
+    }
 }
diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractVmPopupWidget.java
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractVmPopupWidget.java
index b34e645..7d2df3f 100644
--- 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractVmPopupWidget.java
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractVmPopupWidget.java
@@ -65,6 +65,7 @@
 import org.ovirt.engine.ui.common.widget.renderer.MemorySizeRenderer;
 import org.ovirt.engine.ui.common.widget.renderer.NullSafeRenderer;
 import org.ovirt.engine.ui.common.widget.table.column.TextColumnWithTooltip;
+import org.ovirt.engine.ui.common.widget.uicommon.popup.vm.PopupWidgetConfig;
 import 
org.ovirt.engine.ui.common.widget.uicommon.popup.vm.PopupWidgetConfigMap;
 import 
org.ovirt.engine.ui.common.widget.uicommon.popup.vm.SerialNumberPolicyWidget;
 import org.ovirt.engine.ui.common.widget.uicommon.popup.vm.VmPopupVmInitWidget;
@@ -442,6 +443,10 @@
     @Path(value = "numOfMonitors.selectedItem")
     @WithElementId("numOfMonitors")
     public ListModelListBoxEditor<Integer> numOfMonitorsEditor;
+
+    @UiField
+    @Ignore
+    public Label numOfMonitorsLabel;
 
     @UiField(provided = true)
     @Path(value = "isSingleQxlEnabled.entity")
@@ -1818,6 +1823,42 @@
         );
     }
 
+    protected List<Widget> adminOnlyWidgets() {
+        return Arrays.<Widget> asList(
+                // general tab
+                oSTypeEditor,
+
+                // system tab
+                detachableMemSizeEditor,
+                totalvCPUsEditorWithInfoIcon,
+                vcpusAdvancedParameterExpander,
+                vcpusAdvancedParameterExpanderContent,
+                serialNumberPolicyEditor,
+
+                // console tab
+                usbSupportEditor,
+                numOfMonitorsLabel,
+                numOfMonitorsEditor,
+                isSingleQxlEnabledEditor,
+                isSmartcardEnabledEditorWithDetachable,
+                ssoMethodLabel,
+                ssoMethodNone,
+                ssoMethodGuestAgent,
+                expander,
+                isSoundcardEnabledEditorWithDetachable,
+                isConsoleDeviceEnabledEditorWithDetachable,
+                spiceProxyEnabledCheckboxWithInfoIcon,
+                spiceProxyEditor,
+
+                // rest of the tabs
+                initialRunTab,
+                hostTab,
+                highAvailabilityTab,
+                resourceAllocationTab,
+                customPropertiesTab
+        );
+    }
+
     protected void disableAllTabs() {
         generalTab.disableContent();
         poolTab.disableContent();
@@ -1838,6 +1879,39 @@
         instanceTypesEditor.setEnabled(false);
     }
 
+    protected void updateOrAddToWidgetConfiguration(PopupWidgetConfigMap 
configuration, List<Widget> widgets, WidgetConfigurationUpdater updater) {
+        for (Widget widget: widgets) {
+            if (configuration.containsKey(widget)) {
+                configuration.update(widget, 
updater.updateConfiguration(configuration.get(widget)));
+            } else {
+                configuration.putOne(widget, 
updater.updateConfiguration(simpleField()));
+            }
+        }
+    }
+
+    protected static interface WidgetConfigurationUpdater {
+        PopupWidgetConfig updateConfiguration(PopupWidgetConfig original);
+    }
+
+    protected static class UpdateToDetachable implements 
WidgetConfigurationUpdater {
+        public static UpdateToDetachable INSTANCE = new UpdateToDetachable();
+
+
+        @Override
+        public PopupWidgetConfig updateConfiguration(PopupWidgetConfig 
original) {
+            return original.detachable();
+        }
+    }
+
+    protected static class UpdateToAdminOnly implements 
WidgetConfigurationUpdater {
+        public static UpdateToAdminOnly INSTANCE = new UpdateToAdminOnly();
+
+
+        @Override
+        public PopupWidgetConfig updateConfiguration(PopupWidgetConfig 
original) {
+            return original.visibleForAdminOnly();
+        }
+    }
 
     protected void decorateDetachableFields() {
         for (Widget decoratedWidget : 
getWidgetConfiguration().getDetachables().keySet()) {
@@ -1854,4 +1928,11 @@
             }
         }
     }
+
+    public void initCreateInstanceMode() {
+        setCreateInstanceMode(true);
+        for (Widget adminOnlyField : 
getWidgetConfiguration().getVisibleForAdminOnly().keySet()) {
+            adminOnlyField.setVisible(false);
+        }
+    }
 }
diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/pool/PoolNewPopupWidget.java
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/pool/PoolNewPopupWidget.java
index 2accc8d..5c42755 100644
--- 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/pool/PoolNewPopupWidget.java
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/pool/PoolNewPopupWidget.java
@@ -82,7 +82,7 @@
 
     @Override
     protected PopupWidgetConfigMap createWidgetConfiguration() {
-        return super.createWidgetConfiguration().
+        PopupWidgetConfigMap widgetConfiguration = 
super.createWidgetConfiguration().
                 update(highAvailabilityTab, hiddenField()).
                 update(spiceProxyEditor, 
simpleField().visibleInAdvancedModeOnly()).
                 update(spiceProxyEnabledCheckboxWithInfoIcon, 
simpleField().visibleInAdvancedModeOnly()).
@@ -95,6 +95,10 @@
                 putOne(editPoolEditMaxAssignedVmsPerUserPanel, hiddenField()).
                 update(templateVersionNameEditor, hiddenField()).
                 putAll(detachableWidgets(), 
simpleField().detachable().visibleInAdvancedModeOnly());
+
+        updateOrAddToWidgetConfiguration(widgetConfiguration, 
detachableWidgets(), UpdateToDetachable.INSTANCE);
+
+        return widgetConfiguration;
     }
 
 }
diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/PopupWidgetConfig.java
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/PopupWidgetConfig.java
index 9776944..8d17430 100644
--- 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/PopupWidgetConfig.java
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/PopupWidgetConfig.java
@@ -76,7 +76,7 @@
         this.applicationLevelVisible = applicationLevelVisible;
     }
 
-    public boolean isCurrentlyVisible(boolean advancedMode) {
+    public boolean isCurrentlyVisible(boolean advancedMode, boolean 
createInstanceMode) {
         if (isAlwaysHidden()) {
             return false;
         }
@@ -89,7 +89,10 @@
             return false;
         }
 
-        // ignoring the adminOnly flag for now
+        if (createInstanceMode && isAdminOnly()) {
+            return false;
+        }
+
         return true;
     }
 
diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmPopupWidget.java
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmPopupWidget.java
index 6d76668..8bababa 100644
--- 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmPopupWidget.java
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmPopupWidget.java
@@ -1,8 +1,6 @@
 package org.ovirt.engine.ui.common.widget.uicommon.popup.vm;
 
-import static 
org.ovirt.engine.ui.common.widget.uicommon.popup.vm.PopupWidgetConfig.hiddenField;
-import static 
org.ovirt.engine.ui.common.widget.uicommon.popup.vm.PopupWidgetConfig.simpleField;
-
+import com.google.gwt.core.client.GWT;
 import com.google.gwt.event.shared.EventBus;
 import org.ovirt.engine.ui.common.CommonApplicationConstants;
 import org.ovirt.engine.ui.common.CommonApplicationMessages;
@@ -12,7 +10,7 @@
 import org.ovirt.engine.ui.common.widget.uicommon.popup.AbstractVmPopupWidget;
 import org.ovirt.engine.ui.uicommonweb.models.vms.UnitVmModel;
 
-import com.google.gwt.core.client.GWT;
+import static 
org.ovirt.engine.ui.common.widget.uicommon.popup.vm.PopupWidgetConfig.hiddenField;
 
 public class VmPopupWidget extends AbstractVmPopupWidget {
 
@@ -48,9 +46,13 @@
 
     @Override
     protected PopupWidgetConfigMap createWidgetConfiguration() {
-        return super.createWidgetConfiguration().
+        PopupWidgetConfigMap widgetConfiguration = 
super.createWidgetConfiguration().
                 putAll(poolSpecificFields(), hiddenField()).
-                update(templateVersionNameEditor, hiddenField()).
-                putAll(detachableWidgets(), 
simpleField().detachable().visibleInAdvancedModeOnly());
+                update(templateVersionNameEditor, hiddenField());
+
+        updateOrAddToWidgetConfiguration(widgetConfiguration, 
detachableWidgets(), UpdateToDetachable.INSTANCE);
+        updateOrAddToWidgetConfiguration(widgetConfiguration, 
adminOnlyWidgets(), UpdateToAdminOnly.INSTANCE);
+
+        return widgetConfiguration;
     }
 }
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/auth/CurrentUserRole.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/auth/CurrentUserRole.java
new file mode 100644
index 0000000..5c24fba
--- /dev/null
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/auth/CurrentUserRole.java
@@ -0,0 +1,8 @@
+package org.ovirt.engine.ui.uicommonweb.auth;
+
+public interface CurrentUserRole {
+
+    boolean isCreateInstanceOnly();
+
+    void setCreateInstanceOnly(boolean createInstanceOnly);
+}
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/LoginModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/LoginModel.java
index 7538292..52bf951 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/LoginModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/LoginModel.java
@@ -115,6 +115,16 @@
         }
     }
 
+    private EntityModel<Boolean> createInstanceOnly;
+
+    public EntityModel<Boolean> getCreateInstanceOnly() {
+        return createInstanceOnly;
+    }
+
+    public void setCreateInstanceOnly(EntityModel<Boolean> createInstanceOnly) 
{
+        this.createInstanceOnly = createInstanceOnly;
+    }
+
     private DbUser privateLoggedUser;
 
     // If true, indicates that the model is in the process of logging in 
automatically
@@ -154,6 +164,7 @@
         getUserName().getEntityChangedEvent().addListener(this);
         setPassword(new EntityModel<String>());
         getPassword().setIsChangable(false);
+        setCreateInstanceOnly(new EntityModel<Boolean>(false));
 
         setIsConnecting(true);
 
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/userportal/UserPortalLoginModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/userportal/UserPortalLoginModel.java
index 838cbce..4e1c33e 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/userportal/UserPortalLoginModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/userportal/UserPortalLoginModel.java
@@ -392,13 +392,19 @@
 
         for (ActionGroup actionGroup : 
loginModel.getLoggedUserActionGroupList())
         {
-            if 
(!loginModel.getENGINEUserActionGroupList().contains(actionGroup))
+            if 
(!loginModel.getENGINEUserActionGroupList().contains(actionGroup) &&
+                    actionGroup != ActionGroup.CREATE_INSTANCE)
             {
                 isENGINEUser = false;
                 break;
             }
         }
 
+        if (isENGINEUser && 
loginModel.getLoggedUserActionGroupList().contains(ActionGroup.CREATE_INSTANCE))
 {
+            isENGINEUser = false;
+            loginModel.getCreateInstanceOnly().setEntity(true);
+        }
+
         loginModel.getIsENGINEUser().setEntity(isENGINEUser);
     }
 
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/UnitVmModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/UnitVmModel.java
index c2385ec..4e6a205 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/UnitVmModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/UnitVmModel.java
@@ -1,14 +1,5 @@
 package org.ovirt.engine.ui.uicommonweb.models.vms;
 
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
 import org.ovirt.engine.core.common.businessentities.BootSequence;
 import org.ovirt.engine.core.common.businessentities.DisplayType;
 import org.ovirt.engine.core.common.businessentities.InstanceType;
@@ -38,6 +29,8 @@
 import org.ovirt.engine.ui.frontend.Frontend;
 import org.ovirt.engine.ui.frontend.INewAsyncCallback;
 import org.ovirt.engine.ui.uicommonweb.Linq;
+import org.ovirt.engine.ui.uicommonweb.TypeResolver;
+import org.ovirt.engine.ui.uicommonweb.auth.CurrentUserRole;
 import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider;
 import org.ovirt.engine.ui.uicommonweb.models.EntityModel;
 import org.ovirt.engine.ui.uicommonweb.models.ListModel;
@@ -65,6 +58,15 @@
 import org.ovirt.engine.ui.uicompat.IEventListener;
 import org.ovirt.engine.ui.uicompat.PropertyChangedEventArgs;
 import org.ovirt.engine.ui.uicompat.UIConstants;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
 
 public class UnitVmModel extends Model {
 
@@ -2372,6 +2374,8 @@
     public boolean validate() {
         boolean hwPartValid = validateHwPart();
 
+        getInstanceTypes().validateEntity(new IValidation[] { new 
NotEmptyValidation() });
+
         getDataCenterWithClustersList().validateSelectedItem(new IValidation[] 
{ new NotEmptyValidation() });
         setIsSystemTabValid(true);
 
@@ -2776,4 +2780,9 @@
         getOverrideMigrationDowntime().setEntity(value != null);
         getMigrationDowntime().setEntity(value);
     }
+
+    public boolean isCreateInstanceOnly() {
+        return ((CurrentUserRole) 
TypeResolver.getInstance().resolve(CurrentUserRole.class)).isCreateInstanceOnly();
+    }
+
 }
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/instancetypes/InstanceTypeManager.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/instancetypes/InstanceTypeManager.java
index 6c7bc4e..4b158b9 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/instancetypes/InstanceTypeManager.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/instancetypes/InstanceTypeManager.java
@@ -87,7 +87,11 @@
                 }
 
                 List<InstanceType> instanceTypes = new 
ArrayList<InstanceType>();
-                instanceTypes.add(CustomInstanceType.INSTANCE);
+
+                // add this only if the user is allowed to
+                if (!getModel().isCreateInstanceOnly()) {
+                    instanceTypes.add(CustomInstanceType.INSTANCE);
+                }
 
                 for (InstanceType instanceType : (Iterable<InstanceType>) 
res.getReturnValue()) {
                     instanceTypes.add(instanceType);
diff --git 
a/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/auth/LoggedInExtendedPlaceGatekeeper.java
 
b/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/auth/LoggedInExtendedPlaceGatekeeper.java
index 117ef9e..b749730 100644
--- 
a/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/auth/LoggedInExtendedPlaceGatekeeper.java
+++ 
b/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/auth/LoggedInExtendedPlaceGatekeeper.java
@@ -4,16 +4,17 @@
 
 import com.google.inject.Inject;
 import com.gwtplatform.mvp.client.proxy.Gatekeeper;
+import org.ovirt.engine.ui.uicommonweb.auth.CurrentUserRole;
 
 public class LoggedInExtendedPlaceGatekeeper implements Gatekeeper {
 
     private final CurrentUser user;
-    private final CurrentUserRole userRole;
+    private final UserPortalCurrentUserRole userRole;
 
     @Inject
     public LoggedInExtendedPlaceGatekeeper(CurrentUser user, CurrentUserRole 
userRole) {
         this.user = user;
-        this.userRole = userRole;
+        this.userRole = (UserPortalCurrentUserRole) userRole;
     }
 
     @Override
diff --git 
a/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/auth/CurrentUserRole.java
 
b/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/auth/UserPortalCurrentUserRole.java
similarity index 82%
rename from 
frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/auth/CurrentUserRole.java
rename to 
frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/auth/UserPortalCurrentUserRole.java
index 4eb75a9..256918f 100644
--- 
a/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/auth/CurrentUserRole.java
+++ 
b/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/auth/UserPortalCurrentUserRole.java
@@ -1,6 +1,8 @@
 package org.ovirt.engine.ui.userportal.auth;
 
-public class CurrentUserRole {
+import org.ovirt.engine.ui.common.auth.CommonCurrentUserRole;
+
+public class UserPortalCurrentUserRole extends CommonCurrentUserRole {
 
     private boolean engineUser = true;
 
diff --git 
a/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/gin/SystemModule.java
 
b/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/gin/SystemModule.java
index 97154a0..ec527ad 100644
--- 
a/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/gin/SystemModule.java
+++ 
b/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/gin/SystemModule.java
@@ -3,13 +3,14 @@
 import org.ovirt.engine.ui.common.gin.BaseSystemModule;
 import org.ovirt.engine.ui.common.section.DefaultLoginSectionPlace;
 import org.ovirt.engine.ui.common.section.DefaultMainSectionPlace;
+import org.ovirt.engine.ui.uicommonweb.auth.CurrentUserRole;
 import org.ovirt.engine.ui.userportal.ApplicationConstants;
 import org.ovirt.engine.ui.userportal.ApplicationDynamicMessages;
 import org.ovirt.engine.ui.userportal.ApplicationMessages;
 import org.ovirt.engine.ui.userportal.ApplicationResources;
 import org.ovirt.engine.ui.userportal.ApplicationResourcesWithLookup;
 import org.ovirt.engine.ui.userportal.ApplicationTemplates;
-import org.ovirt.engine.ui.userportal.auth.CurrentUserRole;
+import org.ovirt.engine.ui.userportal.auth.UserPortalCurrentUserRole;
 import org.ovirt.engine.ui.userportal.auth.LoggedInExtendedPlaceGatekeeper;
 import org.ovirt.engine.ui.userportal.place.ApplicationPlaces;
 import org.ovirt.engine.ui.userportal.place.UserPortalPlaceManager;
@@ -35,7 +36,7 @@
         bindCommonInfrastructure(UserPortalPlaceManager.class);
         bind(LoggedInExtendedPlaceGatekeeper.class).in(Singleton.class);
         bind(ApplicationInit.class).asEagerSingleton();
-        bind(CurrentUserRole.class).in(Singleton.class);
+        
bind(CurrentUserRole.class).to(UserPortalCurrentUserRole.class).in(Singleton.class);
     }
 
     void bindConfiguration() {
diff --git 
a/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/place/UserPortalPlaceManager.java
 
b/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/place/UserPortalPlaceManager.java
index 235491b..356518c 100644
--- 
a/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/place/UserPortalPlaceManager.java
+++ 
b/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/place/UserPortalPlaceManager.java
@@ -6,7 +6,8 @@
 import org.ovirt.engine.ui.common.section.DefaultLoginSectionPlace;
 import org.ovirt.engine.ui.common.section.DefaultMainSectionPlace;
 import org.ovirt.engine.ui.common.uicommon.ClientAgentType;
-import org.ovirt.engine.ui.userportal.auth.CurrentUserRole;
+import org.ovirt.engine.ui.uicommonweb.auth.CurrentUserRole;
+import org.ovirt.engine.ui.userportal.auth.UserPortalCurrentUserRole;
 import org.ovirt.engine.ui.userportal.section.DefaultMainSectionExtendedPlace;
 
 import com.google.gwt.event.shared.EventBus;
@@ -16,7 +17,7 @@
 
 public class UserPortalPlaceManager extends ApplicationPlaceManager {
 
-    private final CurrentUserRole userRole;
+    private final UserPortalCurrentUserRole userRole;
 
     private final PlaceRequest defaultMainSectionRequest;
     private final PlaceRequest defaultMainSectionExtendedRequest;
@@ -32,7 +33,7 @@
             @DefaultMainSectionExtendedPlace String 
defaultMainSectionExtendedPlace) {
         super(eventBus, tokenFormatter, user, clientAgentType,
                 PlaceRequestFactory.get(defaultLoginSectionPlace));
-        this.userRole = userRole;
+        this.userRole = (UserPortalCurrentUserRole) userRole;
         this.defaultMainSectionRequest = 
PlaceRequestFactory.get(defaultMainSectionPlace);
         this.defaultMainSectionExtendedRequest = 
PlaceRequestFactory.get(defaultMainSectionExtendedPlace);
     }
diff --git 
a/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/section/main/presenter/HeaderPresenterWidget.java
 
b/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/section/main/presenter/HeaderPresenterWidget.java
index e307008..997025d 100644
--- 
a/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/section/main/presenter/HeaderPresenterWidget.java
+++ 
b/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/section/main/presenter/HeaderPresenterWidget.java
@@ -3,8 +3,9 @@
 import org.ovirt.engine.ui.common.auth.CurrentUser;
 import org.ovirt.engine.ui.common.presenter.AbstractHeaderPresenterWidget;
 import org.ovirt.engine.ui.common.widget.tab.TabWidgetHandler;
+import org.ovirt.engine.ui.uicommonweb.auth.CurrentUserRole;
 import org.ovirt.engine.ui.userportal.ApplicationDynamicMessages;
-import org.ovirt.engine.ui.userportal.auth.CurrentUserRole;
+import org.ovirt.engine.ui.userportal.auth.UserPortalCurrentUserRole;
 
 import com.google.gwt.event.dom.client.ClickEvent;
 import com.google.gwt.event.dom.client.ClickHandler;
@@ -24,7 +25,7 @@
 
     }
 
-    private final CurrentUserRole userRole;
+    private final UserPortalCurrentUserRole userRole;
     private final AboutPopupPresenterWidget aboutPopup;
 
     @Inject
@@ -32,7 +33,7 @@
             CurrentUserRole userRole, AboutPopupPresenterWidget aboutPopup,
             ApplicationDynamicMessages dynamicMessages) {
         super(eventBus, view, user, dynamicMessages.applicationDocTitle(), 
dynamicMessages.guideUrl());
-        this.userRole = userRole;
+        this.userRole = (UserPortalCurrentUserRole) userRole;
         this.aboutPopup = aboutPopup;
     }
 
diff --git 
a/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/section/main/presenter/popup/vm/VmClonePopupPresenterWidget.java
 
b/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/section/main/presenter/popup/vm/VmClonePopupPresenterWidget.java
index 8e512ce..6a9a6df 100644
--- 
a/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/section/main/presenter/popup/vm/VmClonePopupPresenterWidget.java
+++ 
b/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/section/main/presenter/popup/vm/VmClonePopupPresenterWidget.java
@@ -1,10 +1,9 @@
 package org.ovirt.engine.ui.userportal.section.main.presenter.popup.vm;
 
-import org.ovirt.engine.ui.common.system.ClientStorage;
-import 
org.ovirt.engine.ui.common.widget.popup.AbstractVmBasedPopupPresenterWidget;
-
 import com.google.gwt.event.shared.EventBus;
 import com.google.inject.Inject;
+import org.ovirt.engine.ui.common.system.ClientStorage;
+import 
org.ovirt.engine.ui.common.widget.popup.AbstractVmBasedPopupPresenterWidget;
 
 public class VmClonePopupPresenterWidget extends 
AbstractVmBasedPopupPresenterWidget<VmClonePopupPresenterWidget.ViewDef> {
     public interface ViewDef extends 
AbstractVmBasedPopupPresenterWidget.ViewDef {
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 4d9896a..12e2cf9 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
@@ -10,12 +10,13 @@
 import org.ovirt.engine.ui.frontend.Frontend;
 import org.ovirt.engine.ui.frontend.INewAsyncCallback;
 import org.ovirt.engine.ui.uicommonweb.ITypeResolver;
+import org.ovirt.engine.ui.uicommonweb.auth.CurrentUserRole;
 import org.ovirt.engine.ui.uicommonweb.models.userportal.UserPortalLoginModel;
 import org.ovirt.engine.ui.uicompat.Event;
 import org.ovirt.engine.ui.uicompat.EventArgs;
 import org.ovirt.engine.ui.uicompat.IEventListener;
 import org.ovirt.engine.ui.userportal.ApplicationDynamicMessages;
-import org.ovirt.engine.ui.userportal.auth.CurrentUserRole;
+import org.ovirt.engine.ui.userportal.auth.UserPortalCurrentUserRole;
 import org.ovirt.engine.ui.userportal.uicommon.model.UserPortalModelInitEvent;
 import org.ovirt.engine.ui.userportal.utils.ConnectAutomaticallyManager;
 
@@ -26,7 +27,7 @@
 
 public class ApplicationInit extends BaseApplicationInit<UserPortalLoginModel> 
{
 
-    private final CurrentUserRole userRole;
+    private final UserPortalCurrentUserRole userRole;
     private final ConnectAutomaticallyManager connectAutomaticallyManager;
     private final ClientAgentType clientAgentType;
 
@@ -42,8 +43,8 @@
             ApplicationDynamicMessages dynamicMessages,
             ClientAgentType clientAgentType, Frontend frontend) {
         super(typeResolver, frontendEventsHandler, 
frontendFailureEventListener,
-                user, eventBus, loginModelProvider, lockInteractionManager, 
frontend);
-        this.userRole = userRole;
+                user, eventBus, loginModelProvider, lockInteractionManager, 
frontend, userRole);
+        this.userRole = (UserPortalCurrentUserRole) userRole;
         this.connectAutomaticallyManager = connectAutomaticallyManager;
         this.clientAgentType = clientAgentType;
         Window.setTitle(dynamicMessages.applicationTitle());
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/SystemModule.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/SystemModule.java
index c437b1b..5e07cbd 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/SystemModule.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/SystemModule.java
@@ -1,8 +1,10 @@
 package org.ovirt.engine.ui.webadmin.gin;
 
+import org.ovirt.engine.ui.common.auth.CommonCurrentUserRole;
 import org.ovirt.engine.ui.common.gin.BaseSystemModule;
 import org.ovirt.engine.ui.common.section.DefaultLoginSectionPlace;
 import org.ovirt.engine.ui.common.section.DefaultMainSectionPlace;
+import org.ovirt.engine.ui.uicommonweb.auth.CurrentUserRole;
 import org.ovirt.engine.ui.webadmin.ApplicationConstants;
 import org.ovirt.engine.ui.webadmin.ApplicationDynamicMessages;
 import org.ovirt.engine.ui.webadmin.ApplicationMessages;
@@ -13,6 +15,7 @@
 import org.ovirt.engine.ui.webadmin.system.ApplicationInit;
 import org.ovirt.engine.ui.webadmin.system.InternalConfiguration;
 import org.ovirt.engine.ui.webadmin.system.PostMessageDispatcher;
+import com.google.inject.Singleton;
 
 /**
  * GIN module containing WebAdmin infrastructure and configuration bindings.
@@ -32,6 +35,7 @@
         bind(ApplicationInit.class).asEagerSingleton();
         bind(InternalConfiguration.class).asEagerSingleton();
         bind(PostMessageDispatcher.class).asEagerSingleton();
+        
bind(CurrentUserRole.class).to(CommonCurrentUserRole.class).in(Singleton.class);
     }
 
     void bindConfiguration() {
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 6659101..6ac41c3 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,5 +1,11 @@
 package org.ovirt.engine.ui.webadmin.system;
 
+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;
+import com.google.inject.Provider;
 import org.ovirt.engine.core.common.mode.ApplicationMode;
 import org.ovirt.engine.ui.common.auth.AutoLoginData;
 import org.ovirt.engine.ui.common.auth.CurrentUser;
@@ -12,6 +18,7 @@
 import org.ovirt.engine.ui.frontend.FrontendLoginHandler;
 import org.ovirt.engine.ui.uicommonweb.ITypeResolver;
 import org.ovirt.engine.ui.uicommonweb.ReportInit;
+import org.ovirt.engine.ui.uicommonweb.auth.CurrentUserRole;
 import org.ovirt.engine.ui.uicommonweb.models.ApplicationModeHelper;
 import org.ovirt.engine.ui.uicommonweb.models.LoginModel;
 import org.ovirt.engine.ui.uicompat.Event;
@@ -21,13 +28,6 @@
 import org.ovirt.engine.ui.webadmin.plugin.restapi.EngineSessionTimeoutData;
 import org.ovirt.engine.ui.webadmin.plugin.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;
-import com.google.inject.Provider;
 
 public class ApplicationInit extends BaseApplicationInit<LoginModel> {
 
@@ -42,9 +42,9 @@
             LockInteractionManager lockInteractionManager,
             ApplicationDynamicMessages dynamicMessages,
             RestApiSessionManager restApiSessionManager,
-            Frontend frontend) {
+            Frontend frontend, CurrentUserRole currentUserRole) {
         super(typeResolver, frontendEventsHandler, 
frontendFailureEventListener,
-                user, eventBus, loginModelProvider, lockInteractionManager, 
frontend);
+                user, eventBus, loginModelProvider, lockInteractionManager, 
frontend, currentUserRole);
         this.restApiSessionManager = restApiSessionManager;
         Window.setTitle(dynamicMessages.applicationTitle());
 


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

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

Reply via email to