001    package railo.commons.i18n;
002    
003    import java.text.SimpleDateFormat;
004    import java.util.Date;
005    import java.util.Locale;
006    import java.util.Map;
007    import java.util.TimeZone;
008    import java.util.WeakHashMap;
009    
010    /**
011     * 
012     */
013    public final class DateFormatPool {
014        
015        private final static Map data=new WeakHashMap();
016        
017        /**
018         * pool for formated dates
019         * @param locale
020         * @param timeZone
021         * @param pattern
022         * @param date
023         * @return date matching given values
024         */
025        public static synchronized String format(Locale locale, TimeZone timeZone, String pattern,Date date) {
026            String key=locale.toString()+'-'+timeZone.getID()+'-'+pattern;
027            Object obj=data.get(key);
028            if(obj!=null) {
029                return ((SimpleDateFormat)obj).format(date);
030            }
031            SimpleDateFormat sdf = new SimpleDateFormat(pattern,locale);
032            sdf.setTimeZone(timeZone);
033            data.put(key,sdf);
034            return sdf.format(date);
035        }
036    
037        /**
038         * pool for formated dates
039         * @param locale
040         * @param pattern
041         * @param date
042         * @return date matching given values
043         */
044        public static synchronized String format(Locale locale, String pattern,Date date) {
045            String key=locale.toString()+'-'+pattern;
046            
047            Object obj=data.get(key);
048            if(obj!=null) {
049                return ((SimpleDateFormat)obj).format(date);
050            }//print.ln(key);
051            SimpleDateFormat sdf = new SimpleDateFormat(pattern,locale);
052            data.put(key,sdf);
053            return sdf.format(date);
054        }
055    
056        /**
057         * pool for formated dates
058         * @param pattern
059         * @param date
060         * @return date matching given values
061         */
062        public static synchronized String format(String pattern,Date date) {
063            Object obj=data.get(pattern);
064            if(obj!=null) {
065                return ((SimpleDateFormat)obj).format(date);
066            }//print.ln(pattern);
067            SimpleDateFormat sdf = new SimpleDateFormat(pattern);
068            data.put(pattern,sdf);
069            return sdf.format(date);
070        }
071        
072    }