Martin Beták has uploaded a new change for review.

Change subject: webadmin: Correct timezone default in New/Edit VM dialog
......................................................................

webadmin: Correct timezone default in New/Edit VM dialog

Correct setting of default timezone for windows type OSs with vdc_option
DefaultTimeZone.

Removed the empty line entry in the timezone listbox introduced in
da2e04242d5d7bae0e0905f20e64fe1bebfde219 as it used underneath the deprecated
TimeZoneInfo. Now the appropriate default is selected instead of the
confusing empty line.

Also added new vdc_option DefaultGeneralTimeZone for default value of timezone
for general OSs (non-windows) using standard java timezone format.

Change-Id: Iaccb31f5634c16583004a79b9b47b83ff994088a
Bug-Url: https://bugzilla.redhat.com/show_bug.cgi?id=873795
Signed-off-by: Martin Betak <mbe...@redhat.com>
---
M backend/manager/dbscripts/upgrade/pre_upgrade/0000_config.sql
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetDefualtTimeZoneQuery.java
M 
backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/GetDefualtTimeZoneQueryTest.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/config/ConfigValues.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/dataprovider/AsyncDataProvider.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/VmModelBehaviorBase.java
11 files changed, 69 insertions(+), 77 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/48/14248/1

diff --git a/backend/manager/dbscripts/upgrade/pre_upgrade/0000_config.sql 
b/backend/manager/dbscripts/upgrade/pre_upgrade/0000_config.sql
index 61a8b46..428375d 100644
--- a/backend/manager/dbscripts/upgrade/pre_upgrade/0000_config.sql
+++ b/backend/manager/dbscripts/upgrade/pre_upgrade/0000_config.sql
@@ -84,6 +84,7 @@
 select fn_db_add_config_value('DefaultMaxThreadPoolSize','500','general');
 select fn_db_add_config_value('DefaultMinThreadPoolSize','50','general');
 select fn_db_add_config_value('DefaultTimeZone','(GMT) GMT Standard 
Time','general');
+select fn_db_add_config_value('DefaultGeneralTimeZone','Etc/GMT','general');
 --Handling Default Workgroup
 select fn_db_add_config_value('DefaultWorkgroup','WORKGROUP','general');
 select 
fn_db_add_config_value('DesktopAudioDeviceType','WindowsXP,ac97,RHEL4,ac97,RHEL3,ac97,Windows2003x64,ac97,RHEL4x64,ac97,RHEL3x64,ac97,OtherLinux,ac97,Other,ac97,default,ich6','3.0');
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetDefualtTimeZoneQuery.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetDefualtTimeZoneQuery.java
index 15d35a4..e72f518 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetDefualtTimeZoneQuery.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetDefualtTimeZoneQuery.java
@@ -1,20 +1,29 @@
 package org.ovirt.engine.core.bll;
 
+import java.util.TimeZone;
+
 import org.ovirt.engine.core.common.config.Config;
 import org.ovirt.engine.core.common.config.ConfigValues;
-import org.ovirt.engine.core.common.queries.VdcQueryParametersBase;
+import org.ovirt.engine.core.common.queries.TimeZoneQueryParams;
 import org.ovirt.engine.core.compat.KeyValuePairCompat;
 import org.ovirt.engine.core.vdsbroker.vdsbroker.SysprepHandler;
 
-public class GetDefualtTimeZoneQuery<P extends VdcQueryParametersBase> extends 
QueriesCommandBase<P> {
+public class GetDefualtTimeZoneQuery<P extends TimeZoneQueryParams> extends 
QueriesCommandBase<P> {
     public GetDefualtTimeZoneQuery(P parameters) {
         super(parameters);
     }
 
     @Override
     protected void executeQueryCommand() {
-        String timezone = Config.<String> 
GetValue(ConfigValues.DefaultTimeZone);
-        getQueryReturnValue().setReturnValue(new KeyValuePairCompat<String, 
String>(SysprepHandler.getTimezoneKey(timezone),
-                timezone));
+        ConfigValues defaultTimeZoneConfigKey = getParameters().isWindowsOS() 
? ConfigValues.DefaultTimeZone : ConfigValues.DefaultGeneralTimeZone;
+        String timezone = Config.<String> GetValue(defaultTimeZoneConfigKey);
+        KeyValuePairCompat<String, String> returnValue;
+        if (getParameters().isWindowsOS()) {
+            returnValue = new KeyValuePairCompat<String, 
String>(SysprepHandler.getTimezoneKey(timezone), timezone);
+        } else {
+            // DefaultGeneralTimeZone is already stored as key
+            returnValue = new KeyValuePairCompat<String, String>(timezone, 
TimeZone.getTimeZone(timezone).getDisplayName());
+        }
+        getQueryReturnValue().setReturnValue(returnValue);
     }
 }
diff --git 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/GetDefualtTimeZoneQueryTest.java
 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/GetDefualtTimeZoneQueryTest.java
index e3c4faa..5d34900 100644
--- 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/GetDefualtTimeZoneQueryTest.java
+++ 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/GetDefualtTimeZoneQueryTest.java
@@ -1,20 +1,23 @@
 package org.ovirt.engine.core.bll;
 
 import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.when;
 
 import org.junit.Test;
 import org.ovirt.engine.core.common.config.ConfigValues;
-import org.ovirt.engine.core.common.queries.VdcQueryParametersBase;
+import org.ovirt.engine.core.common.queries.TimeZoneQueryParams;
 import org.ovirt.engine.core.compat.KeyValuePairCompat;
 
-public class GetDefualtTimeZoneQueryTest extends 
AbstractSysprepQueryTest<VdcQueryParametersBase, 
GetDefualtTimeZoneQuery<VdcQueryParametersBase>> {
+public class GetDefualtTimeZoneQueryTest extends 
AbstractSysprepQueryTest<TimeZoneQueryParams, 
GetDefualtTimeZoneQuery<TimeZoneQueryParams>> {
 
     /** The default time zone for the test */
     private static final String DEFAULT_TIME_ZONE = "Israel Standard Time";
+    private static final String DEFAULT_GENERAL_TIME_ZONE_KEY = "Etc/GMT";
 
     @Test
-    public void testExecuteQueryCommand() {
+    public void testQueryDefaultWindowsTimeZone() {
         mcr.mockConfigValue(ConfigValues.DefaultTimeZone, DEFAULT_TIME_ZONE);
+        when(getQueryParameters().isWindowsOS()).thenReturn(true);
         getQuery().executeQueryCommand();
 
         @SuppressWarnings("unchecked")
@@ -23,4 +26,17 @@
 
         assertTrue("Wrong default time zone", 
result.getValue().equals(DEFAULT_TIME_ZONE));
     }
+
+    @Test
+    public void testQueryDefaultGeneralTimeZone() {
+        mcr.mockConfigValue(ConfigValues.DefaultGeneralTimeZone, 
DEFAULT_GENERAL_TIME_ZONE_KEY);
+        when(getQueryParameters().isWindowsOS()).thenReturn(false);
+        getQuery().executeQueryCommand();
+
+        @SuppressWarnings("unchecked")
+        KeyValuePairCompat<String, String> result =
+                (KeyValuePairCompat<String, String>) 
getQuery().getQueryReturnValue().getReturnValue();
+
+        assertTrue("Wrong default time zone: " + result.getKey(), 
result.getKey().equals(DEFAULT_GENERAL_TIME_ZONE_KEY));
+    }
 }
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/config/ConfigValues.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/config/ConfigValues.java
index 20346a2..fa280b9 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/config/ConfigValues.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/config/ConfigValues.java
@@ -627,6 +627,10 @@
     @DefaultValueAttribute("(GMT) GMT Standard Time")
     DefaultTimeZone(260),
 
+    @TypeConverterAttribute(String.class)
+    @DefaultValueAttribute("Etc/GMT")
+    DefaultGeneralTimeZone(261),
+
     @TypeConverterAttribute(Integer.class)
     @DefaultValueAttribute("389")
     LDAPServerPort(263),
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/dataprovider/AsyncDataProvider.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/dataprovider/AsyncDataProvider.java
index 2dc547f..c726bef 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/dataprovider/AsyncDataProvider.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/dataprovider/AsyncDataProvider.java
@@ -797,7 +797,10 @@
                 return ""; //$NON-NLS-1$
             }
         };
-        Frontend.RunQuery(VdcQueryType.GetDefualtTimeZone, new 
VdcQueryParametersBase(), aQuery);
+
+        TimeZoneQueryParams params = new TimeZoneQueryParams();
+        params.setWindowsOS(((VmModelBehaviorBase) 
aQuery.getModel()).getModel().getIsWindowsOS());
+        Frontend.RunQuery(VdcQueryType.GetDefualtTimeZone, params, aQuery);
     }
 
     public static void GetHostById(AsyncQuery aQuery, Guid id) {
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 3e17798..5e28e31 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
@@ -209,7 +209,7 @@
         }
         else
         {
-            UpdateDefaultTimeZone();
+            updateDefaultTimeZone();
         }
 
         // 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 db41012..57cc1b4 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
@@ -121,7 +121,7 @@
             }
             else
             {
-                UpdateDefaultTimeZone();
+                updateDefaultTimeZone();
             }
 
             // Update domain list
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 3defc53..96df49c 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
@@ -137,7 +137,7 @@
             }
             else
             {
-                UpdateDefaultTimeZone();
+                updateDefaultTimeZone();
             }
 
             // 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 3e56362..042fb1e 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,7 +164,7 @@
         }
         else
         {
-            UpdateDefaultTimeZone();
+            updateDefaultTimeZone();
         }
 
         // Update domain list
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 70671b2..4c09de6 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
@@ -7,7 +7,6 @@
 import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
-import java.util.Map.Entry;
 
 import org.ovirt.engine.core.common.businessentities.BootSequence;
 import org.ovirt.engine.core.common.businessentities.DisplayType;
@@ -1197,19 +1196,6 @@
         setCpuPinning(new NotChangableForVmInPoolEntityModel());
         getCpuPinning().setEntity("");
         getCpuPinning().setIsChangable(false);
-
-        initTimeZones();
-    }
-
-    private void initTimeZones() {
-        getOSType().getSelectedItemChangedEvent().addListener(new 
IEventListener() {
-
-            @Override
-            public void eventRaised(Event ev, Object sender, EventArgs args) {
-                getBehavior().updateTimeZone();
-            }
-        });
-
     }
 
     public void Initialize(SystemTreeItemModel SystemTreeSelectedItem)
@@ -1623,12 +1609,8 @@
         getKernel_parameters().setIsAvailable(getIsLinuxOS());
 
         getDomain().setIsChangable(getIsWindowsOS());
-        if (getTimeZone().getSelectedItem() == null) {
-            getBehavior().updateTimeZone();
-        } else {
-            getBehavior().updateTimeZone(((Entry<String, 
String>)getTimeZone().getSelectedItem()).getKey());
-        }
 
+        getBehavior().updateDefaultTimeZone();
     }
 
     private void FirstBootDevice_SelectedItemChanged(Object sender, EventArgs 
args)
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 f686369..aeee862 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
@@ -146,6 +146,7 @@
     }
 
     private final Map<TimezoneType, Iterable<Entry<String, String>>> 
cachedTimeZones = new HashMap<VmModelBehaviorBase.TimezoneType, 
Iterable<Entry<String,String>>>();
+    private final Map<TimezoneType, String> cachedDefaultTimeZoneKeys = new 
HashMap<TimezoneType, String>();
 
     private enum TimezoneType {
         WINDOWS_TIMEZONE,
@@ -156,17 +157,9 @@
         }
     }
 
-    private boolean lastIsWinOS = false;
-    private String winTimezoneString;
-    private String generalTimezonesString;
-
-    protected void updateTimeZone() {
-        updateTimeZone(null);
-    }
-
     protected void updateTimeZone(final String selectedTimeZone)
     {
-        final TimezoneType timezoneType = 
TimezoneType.getTimezoneByOs(getModel().getIsWindowsOS());
+        final TimezoneType timezoneType = getTimeZoneType();
 
         if (cachedTimeZones.get(timezoneType) == null)
         {
@@ -176,42 +169,22 @@
                         public void onSuccess(Object target, Object 
returnValue) {
                             VmModelBehaviorBase behavior = 
(VmModelBehaviorBase) target;
                             Map<String, String> timezones = (Map<String, 
String>) returnValue;
-                            // empty entry for default timezone
-                            timezones.put(null, ""); //$NON-NLS-1$
                             cachedTimeZones.put(timezoneType, 
timezones.entrySet());
-                            behavior.PostUpdateTimeZone(selectedTimeZone);
+                            behavior.postUpdateTimeZone(selectedTimeZone);
                         }
                     }, getModel().getHash()));
         }
         else
         {
-            PostUpdateTimeZone(selectedTimeZone);
+            postUpdateTimeZone(selectedTimeZone);
         }
     }
 
-    private void PostUpdateTimeZone(String selectedTimeZone)
+    private void postUpdateTimeZone(String selectedTimeZone)
     {
-        if (getModel().getIsWindowsOS() != lastIsWinOS) {
-            lastIsWinOS = getModel().getIsWindowsOS();
-            if (selectedTimeZone != null) {
-                if (getModel().getIsWindowsOS()) {
-                    generalTimezonesString = selectedTimeZone;
-                } else {
-                    winTimezoneString = selectedTimeZone;
-                }
-            }
-            selectedTimeZone = getModel().getIsWindowsOS() ? winTimezoneString 
: generalTimezonesString;
-        } else {
-            if (selectedTimeZone != null) {
-                if (getModel().getIsWindowsOS()) {
-                    winTimezoneString = selectedTimeZone;
-                } else {
-                    generalTimezonesString = selectedTimeZone;
-                }
-            }
-        }
-        final TimezoneType timezoneType = 
TimezoneType.getTimezoneByOs(getModel().getIsWindowsOS());
+        final TimezoneType timezoneType = getTimeZoneType();
         getModel().getTimeZone().setItems(cachedTimeZones.get(timezoneType));
+
 
         // If there was some time zone selected before, try select it again.
         Entry<String, String> selectedTimeZoneEntry =
@@ -219,8 +192,8 @@
         Map.Entry<String, String> selectedItem = selectedTimeZoneEntry != null 
?
                 selectedTimeZoneEntry : (Map.Entry<String, String>) 
getModel().getTimeZone().getSelectedItem();
 
-        getModel().getTimeZone().setSelectedItem(selectedItem == null ? null :
-            Linq.FirstOrDefault(cachedTimeZones.get(timezoneType), new 
Linq.TimeZonePredicate(selectedItem.getKey())));
+        getModel().getTimeZone().setSelectedItem(
+                Linq.FirstOrDefault(cachedTimeZones.get(timezoneType), new 
Linq.TimeZonePredicate(selectedItem.getKey())));
     }
 
     private Entry<String, String> getTimezoneEntryByKey(String key, 
Iterable<Entry<String, String>> timeZones) {
@@ -233,11 +206,11 @@
         return null;
     }
 
-    private String cachedDefaultTimeZoneKey;
-
-    protected void UpdateDefaultTimeZone()
+    protected void updateDefaultTimeZone()
     {
-        if (cachedDefaultTimeZoneKey == null)
+        final TimezoneType timezoneType = getTimeZoneType();
+
+        if (cachedDefaultTimeZoneKeys.get(timezoneType) == null)
         {
             AsyncDataProvider.GetDefaultTimeZone(new AsyncQuery(this,
                     new INewAsyncCallback() {
@@ -245,21 +218,25 @@
                         public void onSuccess(Object target, Object 
returnValue) {
 
                             VmModelBehaviorBase behavior = 
(VmModelBehaviorBase) target;
-                            cachedDefaultTimeZoneKey = (String) returnValue;
-                            behavior.PostUpdateDefaultTimeZone();
+                            cachedDefaultTimeZoneKeys.put(timezoneType, 
(String) returnValue);
+                            behavior.postUpdateDefaultTimeZone();
 
                         }
                     }, getModel().getHash()));
         }
         else
         {
-            PostUpdateDefaultTimeZone();
+            postUpdateDefaultTimeZone();
         }
     }
 
-    public void PostUpdateDefaultTimeZone()
+    public void postUpdateDefaultTimeZone()
     {
-        updateTimeZone(cachedDefaultTimeZoneKey);
+        updateTimeZone(cachedDefaultTimeZoneKeys.get(getTimeZoneType()));
+    }
+
+    public TimezoneType getTimeZoneType() {
+        return TimezoneType.getTimezoneByOs(getModel().getIsWindowsOS());
     }
 
     protected void UpdateDomain()


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

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

Reply via email to