1 21 package com.jaspersoft.jasperserver.war.common; 22 23 import java.util.ArrayList ; 24 import java.util.Arrays ; 25 import java.util.Collections ; 26 import java.util.Iterator ; 27 import java.util.List ; 28 import java.util.Locale ; 29 import java.util.Map ; 30 import java.util.TimeZone ; 31 32 import org.apache.commons.collections.ReferenceMap; 33 import org.springframework.beans.factory.InitializingBean; 34 35 import com.jaspersoft.jasperserver.api.JSException; 36 import com.jaspersoft.jasperserver.war.dto.StringOption; 37 38 42 public class JdkTimeZonesList implements TimeZonesList, InitializingBean { 43 44 private List timeZonesIds; 45 private final Map userTimeZonesLists; 46 47 public JdkTimeZonesList() { 48 userTimeZonesLists = Collections.synchronizedMap(new ReferenceMap(ReferenceMap.HARD, ReferenceMap.SOFT)); 49 } 50 51 public void afterPropertiesSet() throws Exception { 52 if (timeZonesIds == null) { 53 String [] availableIDs = TimeZone.getAvailableIDs(); 54 timeZonesIds = Arrays.asList(availableIDs); 55 } 56 } 57 58 public List getTimeZones(Locale userLocale) { 59 List timeZones = (List ) userTimeZonesLists.get(userLocale); 60 if (timeZones == null) { 61 timeZones = createTimeZones(userLocale); 62 userTimeZonesLists.put(userLocale, timeZones); 63 } 64 return timeZones; 65 } 66 67 protected List createTimeZones(Locale userLocale) { 68 List timeZones = new ArrayList (timeZonesIds.size()); 69 for (Iterator it = timeZonesIds.iterator(); it.hasNext();) { 70 String id = (String ) it.next(); 71 String description = getTimeZoneDescription(id, userLocale); 72 StringOption option = new StringOption(id, description); 73 timeZones.add(option); 74 } 75 return timeZones; 76 } 77 78 protected String getTimeZoneDescription(String id, Locale userLocale) { 79 TimeZone timeZone = TimeZone.getTimeZone(id); 80 if (timeZone == null) { 81 throw new JSException("Unknown time zone \"" + id + "\""); 82 } 83 return timeZone.getDisplayName(userLocale); 84 } 85 86 public List getTimeZonesIds() { 87 return timeZonesIds; 88 } 89 90 public void setTimeZonesIds(List timeZonesIds) { 91 this.timeZonesIds = timeZonesIds; 92 userTimeZonesLists.clear(); 93 } 94 95 } 96 | Popular Tags |