Kobi Ianko has uploaded a new change for review.

Change subject: engine: Enable runOnce to choose a vnc keymap.
......................................................................

engine: Enable runOnce to choose a vnc keymap.

Enable the selection of a specified vnc keymap when using runOnce popup window 
to run a vm.
added a new combobox to the runOnce popup.
tested the webAdmin and user portal web apps.

Change-Id: Id908cbaca9f1b20b4b9868a87a8b21f318a493e6
Bug-Url: https://bugzilla.redhat.com/1031040
Signed-off-by: Kobi Ianko <k...@redhat.com>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommand.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/RunVmParams.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VM.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmDynamic.java
M 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDAODbFacadeImpl.java
M 
backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/VmMapper.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmInfoBuilderBase.java
M 
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmRunOncePopupWidget.java
M 
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmRunOncePopupWidget.ui.xml
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/Cloner.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/pools/PoolListModel.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/userportal/UserPortalListModel.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/ExistingVmModelBehavior.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewTemplateVmModelBehavior.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/RunOnceModel.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmListModel.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmSnapshotListModel.java
M 
frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/section/main/view/popup/vm/VmRunOncePopupView.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/vm/VmRunOncePopupView.java
19 files changed, 164 insertions(+), 22 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/20/22620/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommand.java
index 89d8330..8f51dbf 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommand.java
@@ -594,6 +594,14 @@
                     // the VM can run with display type which is different 
from its default display type
                     (getParameters().getUseVnc() ? DisplayType.vnc : 
DisplayType.qxl));
 
+        if (getParameters().getVncKeyboardLayout() == null) {
+            
getVm().setVncKeyboardLayout(getVm().getDefaultVncKeyboardLayout());
+        } else {
+            // if is not null it means runVM was launch from the run once 
command, thus
+            // the VM can run with keyboard layout type which is different 
from its default display type
+            
getVm().setVncKeyboardLayout(getParameters().getVncKeyboardLayout());
+        }
+
         if (getParameters().getInitializationType() == null) {
             // if vm not initialized, use sysprep/cloud-init
             if (!getVm().isInitialized()) {
@@ -727,6 +735,7 @@
 
     @Override
     protected boolean canDoAction() {
+
         VM vm = getVm();
 
         if (vm == null) {
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/RunVmParams.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/RunVmParams.java
index 047b6b6..0ca1626 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/RunVmParams.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/RunVmParams.java
@@ -4,6 +4,9 @@
 import org.ovirt.engine.core.common.businessentities.DbUser;
 import org.ovirt.engine.core.common.businessentities.InitializationType;
 import org.ovirt.engine.core.common.businessentities.VmPayload;
+import org.ovirt.engine.core.common.config.ConfigValues;
+import 
org.ovirt.engine.core.common.validation.annotation.NullOrStringContainedInConfigValueList;
+import org.ovirt.engine.core.common.validation.group.StartEntity;
 import org.ovirt.engine.core.compat.Guid;
 
 public class RunVmParams extends VmOperationParameterBase {
@@ -14,6 +17,10 @@
     private boolean _kvmEnable;
     private Boolean _runAndPause;
     private Boolean _useVnc;
+
+    @NullOrStringContainedInConfigValueList(configValue = 
ConfigValues.VncKeyboardLayoutValidValues,
+            groups = { StartEntity.class }, message = 
"VALIDATION.VM.INVALID_KEYBOARD_LAYOUT")
+    private String vncKeyboardLayout;
     private boolean _acpiEnable;
     private Boolean _win2kHackEnable;
     private String customProperties;
@@ -222,4 +229,13 @@
     public void setCpuShares(int cpuShares) {
         this.cpuShares = cpuShares;
     }
+
+    public String getVncKeyboardLayout() {
+        return vncKeyboardLayout;
+    }
+
+    public void setVncKeyboardLayout(String vncKeyboardLayout) {
+        this.vncKeyboardLayout = vncKeyboardLayout;
+    }
+
 }
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VM.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VM.java
index a11e6e4..6765d04 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VM.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VM.java
@@ -357,11 +357,11 @@
         return vmStatic.getSsoMethod();
     }
 
-    public String getVncKeyboardLayout() {
+    public String getDefaultVncKeyboardLayout() {
         return vmStatic.getVncKeyboardLayout();
     }
 
-    public void setVncKeyboardLayout(String vncKeyboardLayout) {
+    public void setDefaultVncKeyboardLayout(String vncKeyboardLayout) {
         vmStatic.setVncKeyboardLayout(vncKeyboardLayout);
     }
 
@@ -593,6 +593,14 @@
 
     public void setDisplayType(DisplayType value) {
         this.vmDynamic.setDisplayType(value);
+    }
+
+    public String getVncKeyboardLayout() {
+        return vmDynamic.getVncKeyboardLayout();
+    }
+
+    public void setVncKeyboardLayout(String vncKeyboardLayout) {
+        vmDynamic.setVncKeyboardLayout(vncKeyboardLayout);
     }
 
     public Boolean getKvmEnable() {
@@ -1232,6 +1240,7 @@
         // }
         setGuestOs(vm.getGuestOs());
         setDisplayType(vm.getDisplayType());
+        setVncKeyboardLayout(vm.getVncKeyboardLayout());
         setDisplayIp(vm.getDisplayIp());
         setKvmEnable(vm.getKvmEnable());
         setAcpiEnable(vm.getAcpiEnable());
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmDynamic.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmDynamic.java
index 3bcd19a..85e4e44 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmDynamic.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmDynamic.java
@@ -31,6 +31,7 @@
     private SessionState session;
     private String displayIp;
     private DisplayType displayType;
+    private String vncKeyboardLayout;
     private Boolean kvmEnable;
     private Integer displaySecurePort;
     private Integer utcDiff;
@@ -64,6 +65,7 @@
         result = prime * result + ((displayIp == null) ? 0 : 
displayIp.hashCode());
         result = prime * result + ((displaySecurePort == null) ? 0 : 
displaySecurePort.hashCode());
         result = prime * result + displayType.hashCode();
+        result = prime * result + ((vncKeyboardLayout == null) ? 0 : 
vncKeyboardLayout.hashCode());
         result = prime * result + ((consoleCurUserName == null) ? 0 : 
consoleCurUserName.hashCode());
         result = prime * result + ((guestCurUserName == null) ? 0 : 
guestCurUserName.hashCode());
         result = prime * result + ((consoleUserId == null) ? 0 : 
consoleUserId.hashCode());
@@ -117,6 +119,7 @@
                 && ObjectUtils.objectsEqual(displayIp, other.displayIp)
                 && ObjectUtils.objectsEqual(displaySecurePort, 
other.displaySecurePort)
                 && displayType == other.displayType
+                && ObjectUtils.objectsEqual(vncKeyboardLayout, 
other.vncKeyboardLayout)
                 && ObjectUtils.objectsEqual(consoleCurUserName, 
other.consoleCurUserName)
                 && ObjectUtils.objectsEqual(guestCurUserName, 
other.guestCurUserName)
                 && ObjectUtils.objectsEqual(consoleUserId, other.consoleUserId)
@@ -373,6 +376,14 @@
         this.displayType = value;
     }
 
+    public String getVncKeyboardLayout() {
+        return vncKeyboardLayout;
+    }
+
+    public void setVncKeyboardLayout(String vncKeyboardLayout) {
+        this.vncKeyboardLayout = vncKeyboardLayout;
+    }
+
     public Boolean getKvmEnable() {
         return this.kvmEnable;
     }
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDAODbFacadeImpl.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDAODbFacadeImpl.java
index e0d1d9a..0480e45 100644
--- 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDAODbFacadeImpl.java
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDAODbFacadeImpl.java
@@ -378,7 +378,7 @@
             entity.setUseHostCpuFlags(rs.getBoolean("host_cpu_flags"));
             entity.setGuestAgentNicsHash(rs.getInt("guest_agent_nics_hash"));
             entity.setTunnelMigration((Boolean) 
rs.getObject("tunnel_migration"));
-            entity.setVncKeyboardLayout(rs.getString("vnc_keyboard_layout"));
+            
entity.setDefaultVncKeyboardLayout(rs.getString("vnc_keyboard_layout"));
             entity.setRunAndPause(rs.getBoolean("is_run_and_pause"));
             entity.setLastWatchdogEvent(getLong(rs, "last_watchdog_event"));
             entity.setTrustedService(rs.getBoolean("trusted_service"));
diff --git 
a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/VmMapper.java
 
b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/VmMapper.java
index ccd5f5b..541552b 100644
--- 
a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/VmMapper.java
+++ 
b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/VmMapper.java
@@ -427,7 +427,7 @@
             model.getDisplay().setSingleQxlPci(entity.getSingleQxlPci());
             
model.getDisplay().setAllowOverride(entity.getAllowConsoleReconnect());
             
model.getDisplay().setSmartcardEnabled(entity.isSmartcardEnabled());
-            
model.getDisplay().setKeyboardLayout(entity.getVncKeyboardLayout());
+            
model.getDisplay().setKeyboardLayout(entity.getDefaultVncKeyboardLayout());
         }
         model.setType(map(entity.getVmType(), null));
         model.setStateless(entity.isStateless());
@@ -494,6 +494,12 @@
                 params.setUseVnc(displayType == DisplayType.VNC);
             }
         }
+        if (vm.isSetDisplay() && vm.getDisplay().isSetKeyboardLayout()) {
+            String vncKeyboardLayout = vm.getDisplay().getKeyboardLayout();
+            if (vncKeyboardLayout != null) {
+                params.setVncKeyboardLayout(vncKeyboardLayout);
+            }
+        }
         if (vm.isSetOs() && vm.getOs().getBoot().size() > 0) {
             params.setBootSequence(map(vm.getOs().getBoot(), null));
         }
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmInfoBuilderBase.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmInfoBuilderBase.java
index 70dec10..21722bc 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmInfoBuilderBase.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmInfoBuilderBase.java
@@ -114,10 +114,15 @@
             createInfo.put(VdsProperties.hiberVolHandle,
                     vm.getHibernationVolHandle());
         }
-        String keyboardLayout = vm.getVncKeyboardLayout(); // if set per VM 
use that value
-        if (keyboardLayout == null) { // otherwise fall back to global setting
-            keyboardLayout = Config.<String> 
getValue(ConfigValues.VncKeyboardLayout);
+
+        String keyboardLayout = vm.getVncKeyboardLayout();
+        if (keyboardLayout == null) {
+            keyboardLayout = vm.getDefaultVncKeyboardLayout();
+            if (keyboardLayout == null) {
+                keyboardLayout = Config.<String> 
getValue(ConfigValues.VncKeyboardLayout);
+            }
         }
+
         createInfo.put(VdsProperties.KeyboardLayout, keyboardLayout);
         if (osRepository.isLinux(vm.getVmOsId())) {
             createInfo.put(VdsProperties.PitReinjection, "false");
diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmRunOncePopupWidget.java
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmRunOncePopupWidget.java
index 4f42c18..49e1b6a 100644
--- 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmRunOncePopupWidget.java
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmRunOncePopupWidget.java
@@ -1,9 +1,9 @@
 package org.ovirt.engine.ui.common.widget.uicommon.popup.vm;
 
-import com.google.gwt.event.dom.client.FocusEvent;
-import com.google.gwt.event.dom.client.FocusHandler;
 import org.ovirt.engine.core.common.businessentities.VDS;
+import org.ovirt.engine.core.common.queries.ConfigurationValues;
 import org.ovirt.engine.ui.common.CommonApplicationConstants;
+import org.ovirt.engine.ui.common.CommonApplicationMessages;
 import org.ovirt.engine.ui.common.CommonApplicationResources;
 import org.ovirt.engine.ui.common.idhandler.ElementIdHandler;
 import org.ovirt.engine.ui.common.idhandler.WithElementId;
@@ -16,6 +16,7 @@
 import org.ovirt.engine.ui.common.widget.form.key_value.KeyValueWidget;
 import org.ovirt.engine.ui.common.widget.renderer.NullSafeRenderer;
 import 
org.ovirt.engine.ui.common.widget.uicommon.popup.AbstractModelBoundPopupWidget;
+import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider;
 import org.ovirt.engine.ui.uicommonweb.models.EntityModel;
 import org.ovirt.engine.ui.uicommonweb.models.vms.BootSequenceModel;
 import org.ovirt.engine.ui.uicommonweb.models.vms.RunOnceModel;
@@ -32,9 +33,12 @@
 import com.google.gwt.event.dom.client.ChangeHandler;
 import com.google.gwt.event.dom.client.ClickEvent;
 import com.google.gwt.event.dom.client.ClickHandler;
+import com.google.gwt.event.dom.client.FocusEvent;
+import com.google.gwt.event.dom.client.FocusHandler;
 import com.google.gwt.event.logical.shared.ValueChangeEvent;
 import com.google.gwt.event.logical.shared.ValueChangeHandler;
 import com.google.gwt.resources.client.CssResource;
+import com.google.gwt.text.shared.AbstractRenderer;
 import com.google.gwt.uibinder.client.UiBinder;
 import com.google.gwt.uibinder.client.UiFactory;
 import com.google.gwt.uibinder.client.UiField;
@@ -206,6 +210,11 @@
     EntityModelRadioButtonEditor displayConsoleVncEditor;
 
     @UiField(provided = true)
+    @Path(value = "vncKeyboardLayout.selectedItem")
+    @WithElementId("vncKeyboardLayout")
+    public ListModelListBoxEditor<String> vncKeyboardLayoutEditor;
+
+    @UiField(provided = true)
     @Path(value = "displayConsole_Spice_IsSelected.entity")
     @WithElementId("displayConsoleSpice")
     EntityModelRadioButtonEditor displayConsoleSpiceEditor;
@@ -255,6 +264,7 @@
 
     private final CommonApplicationResources resources;
     private final CommonApplicationConstants constants;
+    private final CommonApplicationMessages messages;
 
     @UiFactory
     protected DisclosurePanel createPanel(String label)
@@ -262,11 +272,13 @@
         return new DisclosurePanel(resources.decreaseIcon(), 
resources.increaseIcon(), label);
     }
 
-    public VmRunOncePopupWidget(CommonApplicationConstants constants, 
CommonApplicationResources resources) {
+    public VmRunOncePopupWidget(CommonApplicationConstants constants, 
CommonApplicationResources resources, CommonApplicationMessages messages) {
         this.constants = constants;
         this.resources = resources;
+        this.messages = messages;
         initCheckBoxEditors();
         initRadioButtonEditors();
+        initListBoxEditors();
         initComboBox();
         initWidget(ViewUiBinder.uiBinder.createAndBindUi(this));
         initBootSequenceBox();
@@ -302,6 +314,8 @@
 
         // Display Protocol
         
displayConsoleVncEditor.setLabel(constants.runOncePopupDisplayConsoleVncLabel());
+        vncKeyboardLayoutEditor.setLabel(constants.vncKeyboardLayoutVmPopup());
+
         
displayConsoleSpiceEditor.setLabel(constants.runOncePopupDisplayConsoleSpiceLabel());
 
         // Host Tab
@@ -317,6 +331,25 @@
         cloudInitEnabledEditor = new EntityModelCheckBoxEditor(Align.RIGHT);
     }
 
+    void initListBoxEditors() {
+
+        vncKeyboardLayoutEditor = new ListModelListBoxEditor<String>(new 
AbstractRenderer<String>() {
+
+            final String globalLayout =
+                    (String) 
AsyncDataProvider.getConfigValuePreConverted(ConfigurationValues.VncKeyboardLayout);
+
+            @Override
+            public String render(String object) {
+                if (object == null) {
+                    return 
messages.globalVncKeyboardLayoutCaption(globalLayout);
+                } else {
+                    return object;
+                }
+            };
+        });
+
+    }
+
     void initRadioButtonEditors() {
         displayConsoleVncEditor = new EntityModelRadioButtonEditor("1"); 
//$NON-NLS-1$
         displayConsoleSpiceEditor = new EntityModelRadioButtonEditor("1"); 
//$NON-NLS-1$
diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmRunOncePopupWidget.ui.xml
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmRunOncePopupWidget.ui.xml
index 9578df4..f2ced6e 100644
--- 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmRunOncePopupWidget.ui.xml
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmRunOncePopupWidget.ui.xml
@@ -229,6 +229,7 @@
                <g:DisclosurePanel ui:field="displayProtocolPanel" 
label="{constants.runOncePopupDisplayProtocolLabel}" 
addStyleNames="{style.panelStyle}">
                        <g:VerticalPanel>
                                <e:EntityModelRadioButtonEditor 
ui:field="displayConsoleVncEditor" />
+                               <e:ListModelListBoxEditor 
ui:field="vncKeyboardLayoutEditor" />
                                <e:EntityModelRadioButtonEditor 
ui:field="displayConsoleSpiceEditor" />
                        </g:VerticalPanel>
                </g:DisclosurePanel>
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/Cloner.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/Cloner.java
index 0ca9e64..54131c9 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/Cloner.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/Cloner.java
@@ -131,6 +131,7 @@
         vm.setDisplayIp(instance.getDisplayIp());
         vm.setDisplaySecurePort(instance.getDisplaySecurePort());
         vm.setDisplayType(instance.getDisplayType());
+        vm.setVncKeyboardLayout(instance.getVncKeyboardLayout());
         vm.setElapsedTime(instance.getElapsedTime());
         vm.setRoundedElapsedTime(instance.getRoundedElapsedTime());
         vm.setExitMessage(instance.getExitMessage());
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/pools/PoolListModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/pools/PoolListModel.java
index 5b98c45..c91c92a 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/pools/PoolListModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/pools/PoolListModel.java
@@ -497,7 +497,7 @@
                         
vm.setKernelParams(model.getKernel_parameters().getEntity());
                         vm.setInitrdUrl(model.getInitrd_path().getEntity());
                         
vm.setMigrationSupport(model.getMigrationMode().getSelectedItem());
-                        
vm.setVncKeyboardLayout(model.getVncKeyboardLayout().getSelectedItem());
+                        
vm.setDefaultVncKeyboardLayout(model.getVncKeyboardLayout().getSelectedItem());
 
                         EntityModel<DisplayType> displayProtocolSelectedItem = 
model.getDisplayProtocol().getSelectedItem();
                         
vm.setDefaultDisplayType(displayProtocolSelectedItem.getEntity());
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/userportal/UserPortalListModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/userportal/UserPortalListModel.java
index 929cc0d..32dfd53 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/userportal/UserPortalListModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/userportal/UserPortalListModel.java
@@ -619,7 +619,7 @@
         tempVar.setInitrdUrl(vm.getInitrdUrl());
         tempVar.setKernelUrl(vm.getKernelUrl());
         tempVar.setKernelParams(vm.getKernelParams());
-        tempVar.setVncKeyboardLayout(vm.getVncKeyboardLayout());
+        tempVar.setDefaultVncKeyboardLayout(vm.getDefaultVncKeyboardLayout());
         VM newvm = tempVar;
 
         EntityModel<DisplayType> displayProtocolSelectedItem = 
model.getDisplayProtocol().getSelectedItem();
@@ -1046,7 +1046,7 @@
         gettempVm().setIsoPath(model.getCdImage().getIsChangable() ? 
model.getCdImage()
                 .getSelectedItem() : ""); //$NON-NLS-1$
         gettempVm().setAutoStartup(model.getIsHighlyAvailable().getEntity());
-        
gettempVm().setVncKeyboardLayout(model.getVncKeyboardLayout().getSelectedItem());
+        
gettempVm().setDefaultVncKeyboardLayout(model.getVncKeyboardLayout().getSelectedItem());
 
         gettempVm().setInitrdUrl(model.getInitrd_path().getEntity());
         gettempVm().setKernelUrl(model.getKernel_path().getEntity());
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/ExistingVmModelBehavior.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/ExistingVmModelBehavior.java
index 2643e1a..0e7773e 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/ExistingVmModelBehavior.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/ExistingVmModelBehavior.java
@@ -210,7 +210,7 @@
 
         updateVirtioScsiEnabled(getVm().getId());
 
-        
getModel().getVncKeyboardLayout().setSelectedItem(vm.getVncKeyboardLayout());
+        
getModel().getVncKeyboardLayout().setSelectedItem(vm.getDefaultVncKeyboardLayout());
 
         Frontend.getInstance().runQuery(VdcQueryType.IsBalloonEnabled, new 
IdQueryParameters(getVm().getId()), new AsyncQuery(this,
                 new INewAsyncCallback() {
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewTemplateVmModelBehavior.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewTemplateVmModelBehavior.java
index b7d4e4d..eb66d3c 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewTemplateVmModelBehavior.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewTemplateVmModelBehavior.java
@@ -234,7 +234,7 @@
 
         getModel().getUsbPolicy().setSelectedItem(this.vm.getUsbPolicy());
         
getModel().getIsSmartcardEnabled().setEntity(this.vm.isSmartcardEnabled());
-        
getModel().getVncKeyboardLayout().setSelectedItem(this.vm.getVncKeyboardLayout());
+        
getModel().getVncKeyboardLayout().setSelectedItem(this.vm.getDefaultVncKeyboardLayout());
 
         initPriority(this.vm.getPriority());
     }
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/RunOnceModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/RunOnceModel.java
index 36f2ad8..850bca0 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/RunOnceModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/RunOnceModel.java
@@ -3,12 +3,14 @@
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
+
 import org.ovirt.engine.core.common.action.RunVmOnceParams;
 import org.ovirt.engine.core.common.businessentities.Disk;
 import org.ovirt.engine.core.common.businessentities.DisplayType;
 import org.ovirt.engine.core.common.businessentities.InitializationType;
 import org.ovirt.engine.core.common.businessentities.VM;
 import 
org.ovirt.engine.core.common.businessentities.network.VmNetworkInterface;
+import org.ovirt.engine.core.common.queries.ConfigurationValues;
 import org.ovirt.engine.core.common.queries.IdQueryParameters;
 import org.ovirt.engine.core.common.queries.VdcQueryReturnValue;
 import org.ovirt.engine.core.common.queries.VdcQueryType;
@@ -357,6 +359,16 @@
         privateDisplayConsole_Vnc_IsSelected = value;
     }
 
+    private ListModel<String> vncKeyboardLayout;
+
+    public ListModel<String> getVncKeyboardLayout() {
+        return vncKeyboardLayout;
+    }
+
+    public void setVncKeyboardLayout(ListModel<String> vncKeyboardLayout) {
+        this.vncKeyboardLayout = vncKeyboardLayout;
+    }
+
     // Display Protocol tab
 
     private EntityModel privateDisplayConsole_Spice_IsSelected;
@@ -582,6 +594,11 @@
         setDisplayConsole_Vnc_IsSelected(new EntityModel());
         
getDisplayConsole_Vnc_IsSelected().getEntityChangedEvent().addListener(this);
 
+        setVncKeyboardLayout(new ListModel<String>());
+        getVncKeyboardLayout().getSelectedItemChangedEvent().addListener(this);
+        initVncKeyboardLayout();
+        
getVncKeyboardLayout().setSelectedItem(vm.getDefaultVncKeyboardLayout());
+
         // Host tab
         setDefaultHost(new ListModel());
         getDefaultHost().getSelectedItemChangedEvent().addListener(this);
@@ -703,6 +720,8 @@
         {
             params.setUseVnc((Boolean) 
getDisplayConsole_Vnc_IsSelected().getEntity());
         }
+
+        params.setVncKeyboardLayout(getVncKeyboardLayout().getSelectedItem());
 
         String selectedDomain = (String) 
getSysPrepSelectedDomainName().getEntity();
         if (!StringHelper.isNullOrEmpty(selectedDomain)) {
@@ -898,10 +917,12 @@
             else if (sender == getDisplayConsole_Vnc_IsSelected() && (Boolean) 
((EntityModel) sender).getEntity())
             {
                 getDisplayConsole_Spice_IsSelected().setEntity(false);
+                getVncKeyboardLayout().setIsChangable(true);
             }
             else if (sender == getDisplayConsole_Spice_IsSelected() && 
(Boolean) ((EntityModel) sender).getEntity())
             {
                 getDisplayConsole_Vnc_IsSelected().setEntity(false);
+                getVncKeyboardLayout().setIsChangable(false);
             }
             else if (sender == getIsAutoAssign())
             {
@@ -1039,4 +1060,29 @@
     }
 
     protected abstract void onRunOnce();
+
+    private void initVncKeyboardLayout() {
+
+        final List<String> layouts =
+                (List<String>) 
AsyncDataProvider.getConfigValuePreConverted(ConfigurationValues.VncKeyboardLayoutValidValues);
+        final ArrayList<String> vncKeyboardLayoutItems = new 
ArrayList<String>();
+        vncKeyboardLayoutItems.add(null);
+        vncKeyboardLayoutItems.addAll(layouts);
+        getVncKeyboardLayout().setItems(vncKeyboardLayoutItems);
+
+        getVncKeyboardLayout().setIsChangable(false);
+    }
+
+    private boolean isVncSelected() {
+        boolean isVnc = false;
+
+        if (getDisplayProtocol().getSelectedItem() != null)
+        {
+            DisplayType displayType = ((EntityModel<DisplayType>) 
getDisplayProtocol().getSelectedItem()).getEntity();
+            isVnc = displayType == DisplayType.vnc;
+        }
+
+        return isVnc;
+    }
+
 }
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmListModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmListModel.java
index 446beeb..aad526c 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmListModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmListModel.java
@@ -1329,7 +1329,7 @@
         tempVar.setKernelParams(vm.getKernelParams());
         tempVar.setDedicatedVmForVds(vm.getDedicatedVmForVds());
         tempVar.setMigrationSupport(vm.getMigrationSupport());
-        tempVar.setVncKeyboardLayout(vm.getVncKeyboardLayout());
+        tempVar.setDefaultVncKeyboardLayout(vm.getDefaultVncKeyboardLayout());
 
         VM newvm = tempVar;
 
@@ -1927,7 +1927,7 @@
         getcurrentVm().setPriority(prioritySelectedItem.getEntity());
 
         getcurrentVm().setCpuPinning(model.getCpuPinning().getEntity());
-        
getcurrentVm().setVncKeyboardLayout(model.getVncKeyboardLayout().getSelectedItem());
+        
getcurrentVm().setDefaultVncKeyboardLayout(model.getVncKeyboardLayout().getSelectedItem());
 
         if (model.getCpuSharesAmount().getIsAvailable() && 
model.getCpuSharesAmount().getEntity() != null) {  // $NON-NLS-1$
             
getcurrentVm().setCpuShares(model.getCpuSharesAmount().getEntity());
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmSnapshotListModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmSnapshotListModel.java
index 15b2754..dac42a2 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmSnapshotListModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmSnapshotListModel.java
@@ -604,7 +604,7 @@
             
getcurrentVm().setQuotaId(model.getQuota().getSelectedItem().getId());
         }
 
-        
getcurrentVm().setVncKeyboardLayout(model.getVncKeyboardLayout().getSelectedItem());
+        
getcurrentVm().setDefaultVncKeyboardLayout(model.getVncKeyboardLayout().getSelectedItem());
 
         EntityModel<DisplayType> displayProtocolSelectedItem = 
model.getDisplayProtocol().getSelectedItem();
         
getcurrentVm().setDefaultDisplayType(displayProtocolSelectedItem.getEntity());
diff --git 
a/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/section/main/view/popup/vm/VmRunOncePopupView.java
 
b/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/section/main/view/popup/vm/VmRunOncePopupView.java
index 66bdca1..4507176 100644
--- 
a/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/section/main/view/popup/vm/VmRunOncePopupView.java
+++ 
b/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/section/main/view/popup/vm/VmRunOncePopupView.java
@@ -5,6 +5,7 @@
 import 
org.ovirt.engine.ui.common.widget.uicommon.popup.vm.VmRunOncePopupWidget;
 import org.ovirt.engine.ui.uicommonweb.models.vms.RunOnceModel;
 import org.ovirt.engine.ui.userportal.ApplicationConstants;
+import org.ovirt.engine.ui.userportal.ApplicationMessages;
 import org.ovirt.engine.ui.userportal.ApplicationResources;
 import 
org.ovirt.engine.ui.userportal.section.main.presenter.popup.vm.VmRunOncePopupPresenterWidget;
 
@@ -19,8 +20,11 @@
     }
 
     @Inject
-    public VmRunOncePopupView(EventBus eventBus, ApplicationResources 
resources, ApplicationConstants constants) {
-        super(eventBus, resources, new VmRunOncePopupWidget(constants, 
resources), "490px", "540px"); //$NON-NLS-1$ //$NON-NLS-2$
+    public VmRunOncePopupView(EventBus eventBus,
+            ApplicationResources resources,
+            ApplicationConstants constants,
+            ApplicationMessages messages) {
+        super(eventBus, resources, new VmRunOncePopupWidget(constants, 
resources, messages), "490px", "540px"); //$NON-NLS-1$ //$NON-NLS-2$
         ViewIdHandler.idHandler.generateAndSetIds(this);
     }
 
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/vm/VmRunOncePopupView.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/vm/VmRunOncePopupView.java
index 31b8e26..8904abc 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/vm/VmRunOncePopupView.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/vm/VmRunOncePopupView.java
@@ -5,6 +5,7 @@
 import 
org.ovirt.engine.ui.common.widget.uicommon.popup.vm.VmRunOncePopupWidget;
 import org.ovirt.engine.ui.uicommonweb.models.vms.RunOnceModel;
 import org.ovirt.engine.ui.webadmin.ApplicationConstants;
+import org.ovirt.engine.ui.webadmin.ApplicationMessages;
 import org.ovirt.engine.ui.webadmin.ApplicationResources;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.vm.VmRunOncePopupPresenterWidget;
 
@@ -19,8 +20,8 @@
     }
 
     @Inject
-    public VmRunOncePopupView(EventBus eventBus, ApplicationResources 
resources, ApplicationConstants constants) {
-        super(eventBus, resources, new VmRunOncePopupWidget(constants, 
resources), "490px", "540px"); //$NON-NLS-1$ //$NON-NLS-2$
+    public VmRunOncePopupView(EventBus eventBus, ApplicationResources 
resources, ApplicationConstants constants, ApplicationMessages messages) {
+        super(eventBus, resources, new VmRunOncePopupWidget(constants, 
resources, messages), "490px", "540px"); //$NON-NLS-1$ //$NON-NLS-2$
         ViewIdHandler.idHandler.generateAndSetIds(this);
     }
 


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

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

Reply via email to