Frank Kobzik has uploaded a new change for review.

Change subject: frontend: [WIP] Split timezone for sysprep
......................................................................

frontend: [WIP] Split timezone for sysprep

This patch clarifies the semantics of timezone (for
vms/templates/pools). Until now, the timezone was used for both sysprep
and for initial hw clock shift when starting VMs. This patch introduces
a new field sysprep_time_zone, that is only used for sysprep. The "old"
time_zone field is used for setting shift of hw clock when starting a
VM. The updates of clock shift from vdsm are still saved to utc_diff
field, however, they are ignored on VM start (due to incorrect values
reported by QEMU).

Frontend:
 - vm/template/pool crud dialog:
    -  new "Time Zone" listbox to general subtab
    -  "Time Zone" listbox from "initial run" moved to windows specific
       section and renamed to "Time Zone for Sysprep"

TODO:
 - resolve two todos in ExistingVmModelBehavior and VmModelBehaviorBase.

Change-Id: Id5da2b3ef9359cdbb096181513b661fab2eb07c0
Signed-off-by: Frantisek Kobzik <[email protected]>
Bug-Url: https://bugzilla.redhat.com/978942
---
M 
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationConstants.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/AbstractVmPopupWidget.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/PoolGeneralModel.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/templates/TemplateGeneralModel.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/templates/TemplateListModel.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/NewVmModelBehavior.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/PoolModelBehaviorBase.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/TemplateVmModelBehavior.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/VmGeneralModel.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/VmModelBehaviorBase.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmSnapshotListModel.java
M 
frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java
20 files changed, 177 insertions(+), 40 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/91/17191/1

diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationConstants.java
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationConstants.java
index d399c9a..a2ee7f9 100644
--- 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationConstants.java
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationConstants.java
@@ -407,6 +407,9 @@
     @DefaultStringValue("Time Zone")
     String tzVmPopup();
 
+    @DefaultStringValue("Time Zone for Sysprep")
+    String sysprepTzVmPopup();
+
     @DefaultStringValue("Console")
     String consoleVmPopup();
 
@@ -1111,9 +1114,6 @@
 
     @DefaultStringValue("Advanced Parameters")
     String advancedParameters();
-
-    @DefaultStringValue("General")
-    String initialRunGeneral();
 
     @DefaultStringValue("Windows")
     String initialRunWindows();
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 dbcfc18..399349f 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
@@ -223,6 +223,11 @@
     @WithElementId("copyTemplatePermissions")
     public EntityModelCheckBoxEditor copyTemplatePermissionsEditor;
 
+    @UiField(provided = true)
+    @Path(value = "timeZone.selectedItem")
+    @WithElementId("timeZone")
+    public ListModelListBoxEditor<Object> timeZoneEditor;
+
     // == Pools ==
     @UiField
     protected DialogTab poolTab;
@@ -325,9 +330,9 @@
     public ListModelListBoxEditor<Object> domainEditor;
 
     @UiField(provided = true)
-    @Path(value = "timeZone.selectedItem")
-    @WithElementId("timeZone")
-    public ListModelListBoxEditor<Object> timeZoneEditor;
+    @Path(value = "sysprepTimeZone.selectedItem")
+    @WithElementId("sysprepTimeZone")
+    public ListModelListBoxEditor<Object> sysprepTimeZoneEditor;
 
     // ==Console Tab==
     @UiField
@@ -784,6 +789,18 @@
             }
         }, new ModeSwitchingVisibilityRenderer());
 
+        sysprepTimeZoneEditor = new ListModelListBoxEditor<Object>(new 
NullSafeRenderer<Object>() {
+            @Override
+            public String renderNullSafe(Object object) {
+                TimeZoneModel timeZone = (TimeZoneModel) object;
+                if (timeZone.isDefault()) {
+                    return 
messages.defaultTimeZoneCaption(timeZone.getDisplayValue());//$NON-NLS-1$
+                } else {
+                    return timeZone.getDisplayValue();
+                }
+            }
+        }, new ModeSwitchingVisibilityRenderer());
+
         // Console tab
         displayProtocolEditor = new ListModelListBoxEditor<Object>(new 
NullSafeRenderer<Object>() {
             @Override
@@ -891,6 +908,7 @@
         
isConsoleDeviceEnabledEditor.setLabel(constants.consoleDeviceEnabled());
         
copyTemplatePermissionsEditor.setLabel(constants.copyTemplatePermissions());
         isSmartcardEnabledEditor.setLabel(constants.smartcardVmPopup());
+        timeZoneEditor.setLabel(constants.tzVmPopup());
 
         // Pools Tab
         poolTab.setLabel(constants.poolVmPopup());
@@ -905,7 +923,7 @@
         // initial run Tab
         initialRunTab.setLabel(constants.initialRunVmPopup());
         domainEditor.setLabel(constants.domainVmPopup());
-        timeZoneEditor.setLabel(constants.tzVmPopup());
+        sysprepTimeZoneEditor.setLabel(constants.sysprepTzVmPopup());
 
         // Console Tab
         consoleTab.setLabel(constants.consoleVmPopup());
@@ -1265,6 +1283,7 @@
         isRunAndPauseEditor.setTabIndex(nextTabIndex++);
         isDeleteProtectedEditor.setTabIndex(nextTabIndex++);
         copyTemplatePermissionsEditor.setTabIndex(nextTabIndex++);
+        timeZoneEditor.setTabIndex(nextTabIndex++);
 
         numOfVmsEditor.setTabIndex(nextTabIndex++);
         prestartedVmsEditor.setTabIndex(nextTabIndex++);
@@ -1288,7 +1307,7 @@
 
         // ==Initial run Tab==
         nextTabIndex = initialRunTab.setTabIndexes(nextTabIndex);
-        timeZoneEditor.setTabIndex(nextTabIndex++);
+        sysprepTimeZoneEditor.setTabIndex(nextTabIndex++);
         domainEditor.setTabIndex(nextTabIndex++);
 
         // ==Console Tab==
diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractVmPopupWidget.ui.xml
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractVmPopupWidget.ui.xml
index 7ac2323..54ed702 100644
--- 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractVmPopupWidget.ui.xml
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractVmPopupWidget.ui.xml
@@ -257,6 +257,7 @@
                                                        </g:FlowPanel>
                                                        
<e:EntityModelTextBoxEditor ui:field="descriptionEditor" />
                                                        
<e:EntityModelTextBoxEditor ui:field="commentEditor" />
+                            <e:ListModelListBoxEditor 
ui:field="timeZoneEditor" />
 
 <!--                                           New VM Pool                     
                                 -->
                                                        
<e:EntityModelTextBoxEditor ui:field="numOfVmsEditor" />
@@ -351,9 +352,8 @@
                       <t:DialogTab ui:field="initialRunTab">
                                <t:content>
                                        <g:FlowPanel>
-                                               <g:Label 
addStyleNames="{style.sectionLabel}" text="{constants.initialRunGeneral}" />
-                                               <e:ListModelListBoxEditor 
ui:field="timeZoneEditor" />
                                                <g:Label 
addStyleNames="{style.sectionLabel}" text="{constants.initialRunWindows}" />
+                        <e:ListModelListBoxEditor 
ui:field="sysprepTimeZoneEditor" />
                                                <e:ListModelListBoxEditor 
ui:field="domainEditor" />
                                        </g:FlowPanel>
                                </t:content>
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 f053b6c..2bb1f39 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
@@ -181,6 +181,7 @@
         vm.setStoragePoolId(instance.getStoragePoolId());
         vm.setStoragePoolName(instance.getStoragePoolName());
         vm.setTimeZone(instance.getTimeZone());
+        vm.setSysprepTimeZone(instance.getSysprepTimeZone());
         vm.setTransparentHugePages(instance.isTransparentHugePages());
         vm.setUsageCpuPercent(instance.getUsageCpuPercent());
         vm.setUsageMemPercent(instance.getUsageMemPercent());
@@ -407,6 +408,7 @@
         obj.setNumOfSockets(instance.getNumOfSockets());
         obj.setStatus(instance.getStatus());
         obj.setTimeZone(instance.getTimeZone());
+        obj.setSysPrepTimeZone(instance.getSysPrepTimeZone());
         obj.setUsbPolicy(instance.getUsbPolicy());
         obj.setVdsGroupId(instance.getVdsGroupId());
         obj.setVdsGroupName(instance.getVdsGroupName());
@@ -446,6 +448,7 @@
         obj.setAllowConsoleReconnect(instance.isAllowConsoleReconnect());
         obj.setNumOfSockets(instance.getNumOfSockets());
         obj.setTimeZone(instance.getTimeZone());
+        obj.setSysPrepTimeZone(instance.getSysPrepTimeZone());
         obj.setUsbPolicy(instance.getUsbPolicy());
         obj.setVdsGroupId(instance.getVdsGroupId());
         obj.setId(instance.getId());
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/pools/PoolGeneralModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/pools/PoolGeneralModel.java
index 05a58a3..6e8ce8b 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/pools/PoolGeneralModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/pools/PoolGeneralModel.java
@@ -317,18 +317,26 @@
 
     private String timeZone;
 
-    public String getTimeZone()
-    {
+    public String getTimeZone() {
         return timeZone;
     }
 
-    public void setTimeZone(String value)
-    {
+    public void setTimeZone(String value) {
         if (!StringHelper.stringsEqual(timeZone, value))
         {
             timeZone = value;
             onPropertyChanged(new PropertyChangedEventArgs("TimeZone")); 
//$NON-NLS-1$
         }
+    }
+
+    private String sysprepTimeZone;
+
+    public String getSysprepTimeZone() {
+        return sysprepTimeZone;
+    }
+
+    public void setSysprepTimeZone(String sysprepTimeZone) {
+        this.sysprepTimeZone = sysprepTimeZone;
     }
 
     private String cpuInfo;
@@ -487,6 +495,7 @@
 
                     
setHasTimeZone(AsyncDataProvider.isWindowsOsType(getvm().getVmOsId()));
                     poolGeneralModel.setTimeZone(getvm().getTimeZone());
+                    
poolGeneralModel.setSysprepTimeZone(getvm().getSysprepTimeZone());
 
                     poolGeneralModel.setIsStateless(getvm().isStateless());
 
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 4f124da..36ad3a0 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
@@ -486,6 +486,10 @@
                                 .getSelectedItem() != null) ? ((TimeZoneModel) 
model.getTimeZone()
                                 .getSelectedItem()).getTimeZoneKey()
                                 : ""); //$NON-NLS-1$
+                        
vm.setSysprepTimeZone((model.getSysprepTimeZone().getIsAvailable() && 
model.getSysprepTimeZone()
+                                .getSelectedItem() != null) ? ((TimeZoneModel) 
model.getSysprepTimeZone()
+                                .getSelectedItem()).getTimeZoneKey()
+                                : ""); //$NON-NLS-1$
                         vm.setNumOfSockets((Integer) 
model.getNumOfSockets().getSelectedItem());
                         
vm.setCpuPerSocket(Integer.parseInt(model.getTotalCPUCores().getEntity().toString())
                                 / (Integer) 
model.getNumOfSockets().getSelectedItem());
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/templates/TemplateGeneralModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/templates/TemplateGeneralModel.java
index 577327a..6a4c793 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/templates/TemplateGeneralModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/templates/TemplateGeneralModel.java
@@ -332,6 +332,20 @@
         }
     }
 
+    private String sysprepTimeZone;
+
+    public void setSysprepTimeZone(String sysprepTimeZone) {
+        if (!StringHelper.stringsEqual(sysprepTimeZone, sysprepTimeZone))
+        {
+            this.sysprepTimeZone = sysprepTimeZone;
+            onPropertyChanged(new 
PropertyChangedEventArgs("SysprepTimeZone")); //$NON-NLS-1$
+        }
+    }
+
+    public String getSysprepTimeZone() {
+        return sysprepTimeZone;
+    }
+
     private boolean hasUsbPolicy;
 
     public boolean getHasUsbPolicy()
@@ -405,8 +419,7 @@
         updateProperties();
     }
 
-    private void updateProperties()
-    {
+    private void updateProperties() {
         VmTemplate template = getEntity();
 
         setName(template.getName());
@@ -438,6 +451,7 @@
 
         setHasTimeZone(AsyncDataProvider.isWindowsOsType(template.getOsId()));
         setTimeZone(template.getTimeZone());
+        setSysprepTimeZone(template.getSysPrepTimeZone());
 
         setHasUsbPolicy(true);
         translator = EnumTranslator.Create(UsbPolicy.class);
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/templates/TemplateListModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/templates/TemplateListModel.java
index b31d0ab..e961cbd 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/templates/TemplateListModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/templates/TemplateListModel.java
@@ -450,6 +450,9 @@
         template.setTimeZone((model.getTimeZone().getIsAvailable() && 
model.getTimeZone().getSelectedItem() != null) ? ((TimeZoneModel) 
model.getTimeZone()
                 .getSelectedItem()).getTimeZoneKey()
                 : ""); //$NON-NLS-1$
+        
template.setSysPrepTimeZone((model.getSysprepTimeZone().getIsAvailable() && 
model.getSysprepTimeZone().getSelectedItem() != null) ? ((TimeZoneModel) 
model.getSysprepTimeZone()
+                .getSelectedItem()).getTimeZoneKey()
+                : ""); //$NON-NLS-1$
         template.setNumOfSockets((Integer) 
model.getNumOfSockets().getSelectedItem());
         
template.setCpuPerSocket(Integer.parseInt(model.getTotalCPUCores().getEntity().toString())
                 / (Integer) model.getNumOfSockets().getSelectedItem());
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 a21db77..95557bd 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
@@ -607,6 +607,9 @@
         tempVar.setTimeZone(model.getTimeZone().getIsAvailable() && 
model.getTimeZone().getSelectedItem() != null ? ((TimeZoneModel) 
model.getTimeZone()
                 .getSelectedItem()).getTimeZoneKey()
                 : ""); //$NON-NLS-1$
+        tempVar.setSysprepTimeZone(model.getSysprepTimeZone().getIsAvailable() 
&& model.getSysprepTimeZone().getSelectedItem() != null ? ((TimeZoneModel) 
model.getSysprepTimeZone()
+                .getSelectedItem()).getTimeZoneKey()
+                : ""); //$NON-NLS-1$
         tempVar.setNumOfSockets((Integer) 
model.getNumOfSockets().getSelectedItem());
         
tempVar.setCpuPerSocket(Integer.parseInt(model.getTotalCPUCores().getEntity().toString())
                 / (Integer) model.getNumOfSockets().getSelectedItem());
@@ -1035,6 +1038,9 @@
         gettempVm().setTimeZone((model.getTimeZone().getIsAvailable() && 
model.getTimeZone()
                 .getSelectedItem() != null) ? ((TimeZoneModel) 
model.getTimeZone()
                 .getSelectedItem()).getTimeZoneKey() : ""); //$NON-NLS-1$
+        
gettempVm().setSysprepTimeZone((model.getSysprepTimeZone().getIsAvailable() && 
model.getSysprepTimeZone()
+                .getSelectedItem() != null) ? ((TimeZoneModel) 
model.getSysprepTimeZone()
+                .getSelectedItem()).getTimeZoneKey() : ""); //$NON-NLS-1$
         gettempVm().setNumOfSockets((Integer) 
model.getNumOfSockets().getSelectedItem());
         
gettempVm().setCpuPerSocket(Integer.parseInt(model.getTotalCPUCores().getEntity().toString())
                 / (Integer) model.getNumOfSockets().getSelectedItem());
@@ -1324,6 +1330,21 @@
         }
     }
 
+    private void vmModelSysprepTimeZoneItemsChanged() {
+        UnitVmModel model = (UnitVmModel) getWindow();
+        if (!model.getIsNew())
+        {
+            UserPortalItemModel selectedItem = (UserPortalItemModel) 
getSelectedItem();
+            VM vm = (VM) selectedItem.getEntity();
+
+            if (!StringHelper.isNullOrEmpty(vm.getTimeZone()))
+            {
+                
model.getSysprepTimeZone().setSelectedItem(Linq.firstOrDefault(model.getSysprepTimeZone().getItems(),
+                        new Linq.TimeZonePredicate(vm.getSysprepTimeZone())));
+            }
+        }
+    }
+
     @Override
     public void eventRaised(Event ev, Object sender, EventArgs args)
     {
@@ -1350,6 +1371,10 @@
         {
             vmModel_TimeZone_ItemsChanged();
         }
+        else if (ev.matchesDefinition(ItemsChangedEventDefinition) && sender 
== model.getSysprepTimeZone())
+        {
+            vmModelSysprepTimeZoneItemsChanged();
+        }
     }
 
     @Override
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 9b88129..dad605b 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
@@ -22,6 +22,7 @@
 import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider;
 import org.ovirt.engine.ui.uicommonweb.models.EntityModel;
 import org.ovirt.engine.ui.uicommonweb.models.SystemTreeItemModel;
+import org.ovirt.engine.ui.uicompat.ConstantsManager;
 
 @SuppressWarnings("unused")
 public class ExistingVmModelBehavior extends VmModelBehaviorBase
@@ -195,14 +196,14 @@
 
         
getModel().getVncKeyboardLayout().setSelectedItem(vm.getVncKeyboardLayout());
 
-        if (vm.isInitialized())
-        {
-            getModel().getTimeZone()
-                    .setChangeProhibitionReason("Time Zone cannot be change 
since the Virtual Machine was booted at the first time."); //$NON-NLS-1$
-            getModel().getTimeZone().setIsChangable(false);
+        if (vm.isInitialized()) { //TODO check if this is called for editvm at 
all! (i don't think so)
+            getModel().getSysprepTimeZone()
+                    
.setChangeProhibitionReason(ConstantsManager.getInstance().getConstants().timeZoneNotEditableAlreadyRun());
 //$NON-NLS-1$
+            getModel().getSysprepTimeZone().setIsChangable(false);
         }
 
         updateTimeZone(vm.getTimeZone());
+        updateSysprepTimeZone(vm.getSysprepTimeZone());
 
         // Update domain list
         updateDomain();
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 6860aa2..5dc517b 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
@@ -206,6 +206,7 @@
 
         updateSelectedCdImage(this.vm.getStaticData());
         updateTimeZone(this.vm.getTimeZone());
+        updateSysprepTimeZone(this.vm.getSysprepTimeZone());
         updateConsoleDevice(this.vm.getId());
 
         // Update domain list
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewVmModelBehavior.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewVmModelBehavior.java
index c7ccbf6..6713610 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewVmModelBehavior.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewVmModelBehavior.java
@@ -102,6 +102,7 @@
 
             updateConsoleDevice(template.getId());
             updateTimeZone(template.getTimeZone());
+            updateSysprepTimeZone(template.getSysPrepTimeZone());
 
             // Update domain list
             updateDomain();
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/PoolModelBehaviorBase.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/PoolModelBehaviorBase.java
index bba2966..dc6bd51 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/PoolModelBehaviorBase.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/PoolModelBehaviorBase.java
@@ -104,6 +104,7 @@
             }
 
             updateTimeZone(vmBase.getTimeZone());
+            updateSysprepTimeZone(vmBase.getSysPrepTimeZone());
             updateConsoleDevice(vmBase.getId());
 
             // Update domain list
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/TemplateVmModelBehavior.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/TemplateVmModelBehavior.java
index 3fbe8c4..b00ef6d 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/TemplateVmModelBehavior.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/TemplateVmModelBehavior.java
@@ -164,6 +164,7 @@
         getModel().getInitrd_path().setEntity(this.template.getInitrdUrl());
 
         updateTimeZone(template.getTimeZone());
+        updateSysprepTimeZone(template.getSysPrepTimeZone());
 
         // Update domain list
         updateDomain();
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 686a463..7973ba4 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
@@ -140,9 +140,10 @@
             getIsStateless().setIsChangable(false);
             getIsRunAndPause().setIsChangable(false);
             getIsDeleteProtected().setIsChangable(false);
+            getTimeZone().setIsChangable(false);
 
             // ==Initial run Tab==
-            getTimeZone().setIsChangable(false);
+            getSysprepTimeZone().setIsChangable(false);
             getDomain().setIsChangable(false);
 
             // ==Console Tab==
@@ -563,6 +564,16 @@
     private void setTimeZone(NotChangableForVmInPoolListModel value)
     {
         privateTimeZone = value;
+    }
+
+    private NotChangableForVmInPoolListModel privateSysprepTimeZone;
+
+    public ListModel getSysprepTimeZone() {
+        return privateSysprepTimeZone;
+    }
+
+    public void setSysprepTimeZone(NotChangableForVmInPoolListModel val) {
+        this.privateSysprepTimeZone = val;
     }
 
     private NotChangableForVmInPoolListModel privateNumOfSockets;
@@ -1147,6 +1158,9 @@
 
         setTimeZone(new NotChangableForVmInPoolListModel());
         getTimeZone().getSelectedItemChangedEvent().addListener(this);
+
+        setSysprepTimeZone(new NotChangableForVmInPoolListModel());
+        getSysprepTimeZone().getSelectedItemChangedEvent().addListener(this);
 
         setDefaultHost(new NotChangableForVmInPoolListModel());
         getDefaultHost().getSelectedItemChangedEvent().addListener(this);
@@ -2078,7 +2092,7 @@
                 && getTemplate().getIsValid() && getMemSize().getIsValid()
                 && getMinAllocatedMemory().getIsValid());
 
-        setIsFirstRunTabValid(getDomain().getIsValid() && 
getTimeZone().getIsValid());
+        setIsFirstRunTabValid(getDomain().getIsValid() && 
getSysprepTimeZone().getIsValid());
         setIsDisplayTabValid(getUsbPolicy().getIsValid() && 
getNumOfMonitors().getIsValid());
         setIsHostTabValid(getDefaultHost().getIsValid());
         setIsAllocationTabValid(getDisksAllocationModel().getIsValid() && 
getMinAllocatedMemory().getIsValid());
@@ -2089,7 +2103,7 @@
                 && getDisksAllocationModel().getIsValid() && 
getTemplate().getIsValid() && getComment().getIsValid()
                 && getDefaultHost().getIsValid() && getMemSize().getIsValid() 
&& getMinAllocatedMemory().getIsValid()
                 && getNumOfMonitors().getIsValid() && getDomain().getIsValid() 
&& getUsbPolicy().getIsValid()
-                && getTimeZone().getIsValid() && getOSType().getIsValid() && 
getCdImage().getIsValid()
+                && getTimeZone().getIsValid() && 
getSysprepTimeZone().getIsValid() && getOSType().getIsValid() && 
getCdImage().getIsValid()
                 && getKernel_path().getIsValid()
                 && getInitrd_path().getIsValid()
                 && getKernel_parameters().getIsValid()
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmGeneralModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmGeneralModel.java
index 0a69841..5783df5 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmGeneralModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmGeneralModel.java
@@ -404,6 +404,19 @@
         }
     }
 
+    private String sysprepTimeZone;
+
+    public String getSysprepTimeZone() {
+        return sysprepTimeZone;
+    }
+
+    public void setSysprepTimeZone(String value) {
+        if (!StringHelper.stringsEqual(timeZone, value)) {
+            sysprepTimeZone= value;
+            onPropertyChanged(new 
PropertyChangedEventArgs("SysprepTimeZone")); //$NON-NLS-1$
+        }
+    }
+
     private boolean hasDefaultHost;
 
     public boolean getHasDefaultHost()
@@ -556,6 +569,7 @@
 
         setHasTimeZone(AsyncDataProvider.isWindowsOsType(vm.getVmOsId()));
         setTimeZone(vm.getTimeZone());
+        setSysprepTimeZone(vm.getSysprepTimeZone());
 
         
setHasCustomProperties(!StringHelper.stringsEqual(vm.getCustomProperties(), 
"")); //$NON-NLS-1$
         setCustomProperties(getHasCustomProperties() ? "Configured" : 
"Not-Configured"); //$NON-NLS-1$ //$NON-NLS-2$
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 ef8038c..8532bcf 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
@@ -1360,6 +1360,9 @@
         tempVar.setTimeZone(model.getTimeZone().getIsAvailable() && 
model.getTimeZone().getSelectedItem() != null ? ((TimeZoneModel) 
model.getTimeZone()
                 .getSelectedItem()).getTimeZoneKey()
                 : ""); //$NON-NLS-1$
+        tempVar.setSysprepTimeZone(model.getSysprepTimeZone().getIsAvailable() 
&& model.getSysprepTimeZone().getSelectedItem() != null ? ((TimeZoneModel) 
model.getSysprepTimeZone()
+                .getSelectedItem()).getTimeZoneKey()
+                : ""); //$NON-NLS-1$
         tempVar.setNumOfSockets((Integer) 
model.getNumOfSockets().getSelectedItem());
         
tempVar.setCpuPerSocket(Integer.parseInt(model.getTotalCPUCores().getEntity().toString())
                 / (Integer) model.getNumOfSockets().getSelectedItem());
@@ -1953,6 +1956,9 @@
         getcurrentVm().setTimeZone((model.getTimeZone().getIsAvailable() && 
model.getTimeZone().getSelectedItem() != null) ? ((TimeZoneModel) 
model.getTimeZone()
                 .getSelectedItem()).getTimeZoneKey()
                 : ""); //$NON-NLS-1$
+        
getcurrentVm().setSysprepTimeZone((model.getSysprepTimeZone().getIsAvailable() 
&& model.getSysprepTimeZone().getSelectedItem() != null) ? ((TimeZoneModel) 
model.getSysprepTimeZone()
+                .getSelectedItem()).getTimeZoneKey()
+                : ""); //$NON-NLS-1$
         getcurrentVm().setNumOfSockets((Integer) 
model.getNumOfSockets().getSelectedItem());
         
getcurrentVm().setCpuPerSocket(Integer.parseInt(model.getTotalCPUCores().getEntity().toString())
                 / (Integer) model.getNumOfSockets().getSelectedItem());
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmModelBehaviorBase.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmModelBehaviorBase.java
index dae4cf1..3209f29 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmModelBehaviorBase.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmModelBehaviorBase.java
@@ -179,37 +179,52 @@
 
     }
 
-    protected void updateTimeZone(final String selectedTimeZone)
-    {
+    // TODO refactor these methods
+    protected void updateTimeZone(final String selectedTimeZone) {
         if (StringHelper.isNullOrEmpty(selectedTimeZone)) {
             updateDefaultTimeZone();
         } else {
-            doUpdateTimeZone(selectedTimeZone);
+            doUpdateTimeZoneForField(selectedTimeZone, 
getModel().getTimeZone());
         }
     }
 
-    protected void updateDefaultTimeZone()
-    {
+    protected void updateDefaultTimeZone() {
         TimeZoneModel.withLoadedDefaultTimeZoneKey(getTimeZoneType(), new 
Runnable() {
-
             @Override
             public void run() {
-                doUpdateTimeZone(null);
+                doUpdateTimeZoneForField(null, getModel().getTimeZone());
             }
-
         });
     }
 
-    private void doUpdateTimeZone(final String selectedTimeZone) {
-        TimeZoneModel.withLoadedTimeZones(getTimeZoneType(), new Runnable() {
+    protected void updateSysprepTimeZone(final String timeZone) {
+        if (StringHelper.isNullOrEmpty(timeZone)) {
+            updateDefaultSysprepTimeZone();
+        } else {
+            doUpdateTimeZoneForField(timeZone, 
getModel().getSysprepTimeZone());
+        }
+    }
 
+    protected void updateDefaultSysprepTimeZone() {
+        TimeZoneModel.withLoadedDefaultTimeZoneKey(getTimeZoneType(), new 
Runnable() {
+            @Override
+            public void run() {
+                doUpdateTimeZoneForField(null, 
getModel().getSysprepTimeZone());
+            }
+        });
+    }
+
+    private void doUpdateTimeZoneForField(final String selectedTimeZone, final 
ListModel field) {
+        TimeZoneModel.withLoadedTimeZones(getTimeZoneType(), new Runnable() {
             @Override
             public void run() {
                 final Iterable<TimeZoneModel> timeZones = 
TimeZoneModel.getTimeZones(getTimeZoneType());
-                getModel().getTimeZone().setItems(timeZones);
-                
getModel().getTimeZone().setSelectedItem(Linq.firstOrDefault(timeZones, new 
Linq.TimeZonePredicate(selectedTimeZone)));
-                
getModel().getTimeZone().setChangeProhibitionReason(constants.timeZoneNotChangeableForLinuxVms());
-                
getModel().getTimeZone().setIsChangable(!getModel().getIsLinuxOS());
+                field.setItems(timeZones);
+                field.setSelectedItem(Linq.firstOrDefault(timeZones, new 
Linq.TimeZonePredicate(selectedTimeZone)));
+                if (field.equals(getModel().getSysprepTimeZone())) {
+                    
field.setChangeProhibitionReason(constants.sysprepTimeZoneNotChangeableForLinuxVms());
+                    field.setIsChangable(!getModel().getIsLinuxOS());
+                }
             }
         });
     }
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 1d99454..991e8e2 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
@@ -599,6 +599,9 @@
         getcurrentVm().setTimeZone(
                 (model.getTimeZone().getIsAvailable() && 
model.getTimeZone().getSelectedItem() != null) ?
                         ((TimeZoneModel) 
model.getTimeZone().getSelectedItem()).getTimeZoneKey() : ""); //$NON-NLS-1$
+        getcurrentVm().setSysprepTimeZone(
+                (model.getSysprepTimeZone().getIsAvailable() && 
model.getSysprepTimeZone().getSelectedItem() != null) ?
+                        ((TimeZoneModel) 
model.getSysprepTimeZone().getSelectedItem()).getTimeZoneKey() : ""); 
//$NON-NLS-1$
         getcurrentVm().setNumOfSockets((Integer) 
model.getNumOfSockets().getSelectedItem());
         
getcurrentVm().setCpuPerSocket(Integer.parseInt(model.getTotalCPUCores().getEntity().toString())
 /
                 (Integer) model.getNumOfSockets().getSelectedItem());
diff --git 
a/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java
 
b/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java
index 3d39686..55adc44 100644
--- 
a/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java
+++ 
b/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java
@@ -1973,8 +1973,11 @@
     @DefaultStringValue("Please select an action to continue")
     String noActionSelectedManageGlusterSwift();
 
-    @DefaultStringValue("Time Zone is not changeable for Linux VMs")
-    String timeZoneNotChangeableForLinuxVms();
+    @DefaultStringValue("Time Zone for Sysprep is not changeable for Linux 
VMs")
+    String sysprepTimeZoneNotChangeableForLinuxVms();
+
+    @DefaultStringValue("Time Zone cannot be change since the Virtual Machine 
has already been booted once.")
+    String timeZoneNotEditableAlreadyRun();
 
     @DefaultStringValue("Host cannot be set highly available when 'Do not 
allow migration' or 'Allow manual migration' is selected")
     String hostNonMigratable();


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

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

Reply via email to