package er.extensions.formatters;
import java.text.DateFormatSymbols;
import java.text.FieldPosition;
import java.text.Format;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.TimeZone;
import org.apache.commons.lang3.StringUtils;
import com.webobjects.foundation.NSTimestamp;
/**
* A simple format object for NSTimestamps. It supports the same symbols
* as NSTimestampFormatter and SimpleDateFormat.
*/
public class ERXNSTimestampFormatter extends Format {
private static final long serialVersionUID = 1L;
private final SimpleDateFormat _formatter;
private static final String[] searchList = {
"%a", "%A", "%b", "%B", "%c", "%d", "%e", "%F", "%H", "%I", "%j", "%m", "%M", "%p", "%S", "%w", "%x", "%X", "%y", "%Y", "%Z", "%z", "%%"
};
private static final String[] replacementList = {
"EEE", "EEEE", "MMM", "MMMM", "dd/MM/yyyy hh:mm aa", "dd", "d", "SSS", "HH", "hh", "DDD", "MM", "mm", "aa", "ss", "EE", "dd/MM/yyyy", "hh:mm aa", "yy", "yyyy", "zzzz", "zzzz", "%"
};
public ERXNSTimestampFormatter() {
_formatter = new SimpleDateFormat();
}
public ERXNSTimestampFormatter(String pattern) {
_formatter = new SimpleDateFormat(processPattern(pattern));
}
public ERXNSTimestampFormatter(String pattern, Locale locale) {
_formatter = new SimpleDateFormat(processPattern(pattern), locale);
}
public ERXNSTimestampFormatter(String pattern, DateFormatSymbols symbols) {
_formatter = new SimpleDateFormat(processPattern(pattern), symbols);
}
public ERXNSTimestampFormatter(String pattern, TimeZone timezone) {
_formatter = new SimpleDateFormat(processPattern(pattern));
_formatter.setTimeZone(timezone);
}
public ERXNSTimestampFormatter(String pattern, Locale locale, TimeZone timezone) {
_formatter = new SimpleDateFormat(processPattern(pattern), locale);
_formatter.setTimeZone(timezone);
}
@Override
public StringBuffer format(Object date, StringBuffer stringbuffer, FieldPosition fieldposition) {
return _formatter.format(date, stringbuffer, fieldposition);
}
@Override
public Object parseObject(String s, ParsePosition parseposition) {
Date date = (Date)_formatter.parseObject(s, parseposition);
return new NSTimestamp(date);
}
private static String processPattern(String pattern) {
String result = StringUtils.replaceEach(pattern, searchList, replacementList);
return result;
}
}