Author: adrianc
Date: Wed Dec 24 23:37:06 2014
New Revision: 1647861

URL: http://svn.apache.org/r1647861
Log:
UtilDateTime.java improvements:

1. Replace DCL code with lazy-initializer class.
2. Remove class name from static method calls.

Modified:
    ofbiz/trunk/framework/base/src/org/ofbiz/base/util/UtilDateTime.java

Modified: ofbiz/trunk/framework/base/src/org/ofbiz/base/util/UtilDateTime.java
URL: 
http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/src/org/ofbiz/base/util/UtilDateTime.java?rev=1647861&r1=1647860&r2=1647861&view=diff
==============================================================================
--- ofbiz/trunk/framework/base/src/org/ofbiz/base/util/UtilDateTime.java 
(original)
+++ ofbiz/trunk/framework/base/src/org/ofbiz/base/util/UtilDateTime.java Wed 
Dec 24 23:37:06 2014
@@ -25,8 +25,8 @@ import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.Date;
-import java.util.LinkedList;
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
@@ -1045,30 +1045,34 @@ public class UtilDateTime {
         return dateFormat.format(stamp);
     }
 
-    protected static List<TimeZone> availableTimeZoneList = null;
+    // Private lazy-initializer class 
+    private static class TimeZoneHolder {
+        private static final List<TimeZone> availableTimeZoneList = 
getTimeZones();
+
+        private static List<TimeZone> getTimeZones() {
+            ArrayList<TimeZone> availableTimeZoneList = new 
ArrayList<TimeZone>();
+            List<String> idList = null;
+            String tzString = UtilProperties.getPropertyValue("general", 
"timeZones.available");
+            if (UtilValidate.isNotEmpty(tzString)) {
+                idList = StringUtil.split(tzString, ",");
+            } else {
+                idList = Arrays.asList(TimeZone.getAvailableIDs());
+            }
+            for (String id : idList) {
+                TimeZone curTz = TimeZone.getTimeZone(id);
+                availableTimeZoneList.add(curTz);
+            }
+            availableTimeZoneList.trimToSize();
+            return Collections.unmodifiableList(availableTimeZoneList);
+        }
+
+    }
+
     /** Returns a List of available TimeZone objects.
      * @see java.util.TimeZone
      */
     public static List<TimeZone> availableTimeZones() {
-        if (availableTimeZoneList == null) {
-            synchronized(UtilDateTime.class) {
-                if (availableTimeZoneList == null) {
-                    availableTimeZoneList = new LinkedList<TimeZone>();
-                    List<String> idList = null;
-                    String tzString = 
UtilProperties.getPropertyValue("general", "timeZones.available");
-                    if (UtilValidate.isNotEmpty(tzString)) {
-                        idList = StringUtil.split(tzString, ",");
-                    } else {
-                        idList = Arrays.asList(TimeZone.getAvailableIDs());
-                    }
-                    for (String id: idList) {
-                        TimeZone curTz = TimeZone.getTimeZone(id);
-                        availableTimeZoneList.add(curTz);
-                    }
-                }
-            }
-        }
-        return availableTimeZoneList;
+        return TimeZoneHolder.availableTimeZoneList;
     }
 
     /** Returns a TimeZone object based upon a time zone ID. Method defaults to
@@ -1095,47 +1099,47 @@ public class UtilDateTime {
     }
 
     public static int getSecond(Timestamp stamp, TimeZone timeZone, Locale 
locale) {
-        Calendar cal = UtilDateTime.toCalendar(stamp, timeZone, locale);
+        Calendar cal = toCalendar(stamp, timeZone, locale);
         return cal.get(Calendar.SECOND);
     }
 
     public static int getMinute(Timestamp stamp, TimeZone timeZone, Locale 
locale) {
-        Calendar cal = UtilDateTime.toCalendar(stamp, timeZone, locale);
+        Calendar cal = toCalendar(stamp, timeZone, locale);
         return cal.get(Calendar.MINUTE);
     }
 
     public static int getHour(Timestamp stamp, TimeZone timeZone, Locale 
locale) {
-        Calendar cal = UtilDateTime.toCalendar(stamp, timeZone, locale);
+        Calendar cal = toCalendar(stamp, timeZone, locale);
         return cal.get(Calendar.HOUR_OF_DAY);
     }
 
     public static int getDayOfWeek(Timestamp stamp, TimeZone timeZone, Locale 
locale) {
-        Calendar cal = UtilDateTime.toCalendar(stamp, timeZone, locale);
+        Calendar cal = toCalendar(stamp, timeZone, locale);
         return cal.get(Calendar.DAY_OF_WEEK);
     }
 
     public static int getDayOfMonth(Timestamp stamp, TimeZone timeZone, Locale 
locale) {
-        Calendar cal = UtilDateTime.toCalendar(stamp, timeZone, locale);
+        Calendar cal = toCalendar(stamp, timeZone, locale);
         return cal.get(Calendar.DAY_OF_MONTH);
     }
 
     public static int getDayOfYear(Timestamp stamp, TimeZone timeZone, Locale 
locale) {
-        Calendar cal = UtilDateTime.toCalendar(stamp, timeZone, locale);
+        Calendar cal = toCalendar(stamp, timeZone, locale);
         return cal.get(Calendar.DAY_OF_YEAR);
     }
 
     public static int getWeek(Timestamp stamp, TimeZone timeZone, Locale 
locale) {
-        Calendar cal = UtilDateTime.toCalendar(stamp, timeZone, locale);
+        Calendar cal = toCalendar(stamp, timeZone, locale);
         return cal.get(Calendar.WEEK_OF_YEAR);
     }
 
     public static int getMonth(Timestamp stamp, TimeZone timeZone, Locale 
locale) {
-        Calendar cal = UtilDateTime.toCalendar(stamp, timeZone, locale);
+        Calendar cal = toCalendar(stamp, timeZone, locale);
         return cal.get(Calendar.MONTH);
     }
 
     public static int getYear(Timestamp stamp, TimeZone timeZone, Locale 
locale) {
-        Calendar cal = UtilDateTime.toCalendar(stamp, timeZone, locale);
+        Calendar cal = toCalendar(stamp, timeZone, locale);
         return cal.get(Calendar.YEAR);
     }
 


Reply via email to