1 30 31 34 package com.nightlabs.l10n; 35 36 import java.text.DateFormat ; 37 import java.text.DateFormatSymbols ; 38 import java.text.SimpleDateFormat ; 39 import java.util.HashMap ; 40 import java.util.Locale ; 41 import java.util.Map ; 42 43 import com.nightlabs.config.Config; 44 45 49 public class DefaultDateFormatProvider implements DateFormatProvider 50 { 51 protected Config config; 52 protected DefaultDateFormatCfMod defaultDateFormatCfMod; 53 protected String isoLanguage; 54 protected String isoCountry; 55 56 public DefaultDateFormatProvider() 57 { 58 } 59 60 63 public void init(Config config, String isoLanguage, String isoCountry) 64 { 65 try { 66 this.config = config; 67 this.isoLanguage = isoLanguage; 68 this.isoCountry = isoCountry; 69 this.defaultDateFormatCfMod = (DefaultDateFormatCfMod) ConfigUtil.createConfigModule(config, DefaultDateFormatCfMod.class, isoLanguage, isoCountry); 70 } catch (RuntimeException x) { 71 throw x; 72 } catch (Exception x) { 73 throw new RuntimeException (x); 74 } 75 } 76 77 81 protected Map dateFormatsByFlags = new HashMap (); 82 83 86 public DateFormat getDateFormat(long flags) 87 { 88 Long flagsL = new Long (flags); 89 SimpleDateFormat sdf; 90 synchronized (dateFormatsByFlags) { 91 sdf = (SimpleDateFormat ) dateFormatsByFlags.get(flagsL); 92 } 93 if (sdf == null) { 94 String datePattern = null; 95 String timePattern = null; 96 97 if ((flags & DATE_LONG) == DATE_LONG && (flags & DATE_WEEKDAY) == DATE_WEEKDAY) 98 datePattern = defaultDateFormatCfMod.getDateLongWeekday(); 99 else if ((flags & DATE_LONG) == DATE_LONG) 100 datePattern = defaultDateFormatCfMod.getDateLong(); 101 else if ((flags & DATE_SHORT) == DATE_SHORT && (flags & DATE_WEEKDAY) == DATE_WEEKDAY) 102 datePattern = defaultDateFormatCfMod.getDateShortWeekday(); 103 else if ((flags & DATE_SHORT) == DATE_SHORT) 104 datePattern = defaultDateFormatCfMod.getDateShort(); 105 106 if ((flags & TIME_MSEC) == TIME_MSEC) 107 timePattern = defaultDateFormatCfMod.getTimeHMSms(); 108 else if ((flags & TIME_SEC) == TIME_SEC) 109 timePattern = defaultDateFormatCfMod.getTimeHMS(); 110 else if ((flags & TIME) == TIME) 111 timePattern = defaultDateFormatCfMod.getTimeHM(); 112 113 String pattern; 114 if (datePattern != null && timePattern != null) 115 pattern = datePattern + ' ' + timePattern; 116 else if (datePattern != null) 117 pattern = datePattern; 118 else 119 pattern = timePattern; 120 121 if (pattern == null) 122 throw new IllegalArgumentException ("It seems the flags were not producing a senseful pattern!"); 123 124 DateFormatSymbols dfs = new DateFormatSymbols (Locale.getDefault()); 125 dfs.setAmPmStrings(defaultDateFormatCfMod.getAmPmStrings()); 126 dfs.setEras(defaultDateFormatCfMod.getEras()); 127 dfs.setMonths(defaultDateFormatCfMod.getMonthsLong()); 128 dfs.setShortMonths(defaultDateFormatCfMod.getMonthsShort()); 129 dfs.setWeekdays(defaultDateFormatCfMod.getWeekDaysLong()); 130 dfs.setShortWeekdays(defaultDateFormatCfMod.getWeekDaysShort()); 131 sdf = new SimpleDateFormat (pattern, dfs); 132 133 synchronized (dateFormatsByFlags) { 134 dateFormatsByFlags.put(flagsL, sdf); 135 } 136 } 137 return sdf; 138 } 139 140 } 141 | Popular Tags |