package er.extensions.formatters; import java.text.DateFormatSymbols; import java.text.Format; import java.util.Hashtable; import java.util.Map; import com.webobjects.foundation.NSTimestamp; import com.webobjects.foundation.NSTimestampFormatter; import er.extensions.localization.ERXLocalizer; /** * Provides localization to timestamp formatters. */ public class ERXTimestampFormatter extends NSTimestampFormatter { /** * Do I need to update serialVersionUID? * See section 5.6 <cite>Type Changes Affecting Serialization</cite> on page 51 of the * <a href="http://java.sun.com/j2se/1.4/pdf/serial-spec.pdf">Java Object Serialization Spec</a> */ private static final long serialVersionUID = 1L; /** holds a reference to the repository */ private static final Map<String, NSTimestampFormatter> _repository = new Hashtable<>(); protected static final String DefaultKey = "ERXTimestampFormatter.DefaultKey"; /** The default pattern used in the UI */ public static final String DEFAULT_PATTERN = "%m/%d/%Y"; static { _repository.put(DefaultKey, new ERXTimestampFormatter()); } /** * The default pattern used by WOString and friends when no pattern is set. * Looks like this only for compatibility's sake. * @param object */ public static Format defaultDateFormatterForObject(Object object) { Format result = null; if(object != null && object instanceof NSTimestamp) { result = dateFormatterForPattern("%Y/%m/%d"); } return result; } /** * Returns a shared instance for the specified pattern. * @return shared instance of formatter */ public static NSTimestampFormatter dateFormatterForPattern(String pattern) { NSTimestampFormatter formatter; if(ERXLocalizer.useLocalizedFormatters()) { ERXLocalizer localizer = ERXLocalizer.currentLocalizer(); formatter = (NSTimestampFormatter)localizer.localizedDateFormatForKey(pattern); } else { synchronized(_repository) { formatter = _repository.get(pattern); if(formatter == null) { formatter = new NSTimestampFormatter(pattern); _repository.put(pattern, formatter); } } } return formatter; } /** * Sets a shared instance for the specified pattern. */ public static void setDateFormatterForPattern(NSTimestampFormatter formatter, String pattern) { if(ERXLocalizer.useLocalizedFormatters()) { ERXLocalizer localizer = ERXLocalizer.currentLocalizer(); localizer.setLocalizedDateFormatForKey(formatter, pattern); } else { synchronized(_repository) { if(formatter == null) { _repository.remove(pattern); } else { _repository.put(pattern, formatter); } } } } /** * */ public ERXTimestampFormatter() { super(); } /** * @param arg0 */ public ERXTimestampFormatter(String arg0) { super(arg0); } /** * @param arg0 * @param arg1 */ public ERXTimestampFormatter(String arg0, DateFormatSymbols arg1) { super(arg0, arg1); } }