DateFormatter.java

package org.xandercat.pmdb.util.format;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * Data formatter for dates (less time).
 * 
 * @author Scott Arnold
 */
public class DateFormatter extends AbstractDataFormatter<Date> {

	private List<DateFormat> dateParsers = new ArrayList<DateFormat>();
	private DateFormat displayFormat = new SimpleDateFormat("MM/dd/yyyy");
	private DateFormat sortFormat = new SimpleDateFormat("yyyyMMdd");
	
	@Override
	protected Date parse(String value) throws ParseException {
		for (DateFormat dateFormat : dateParsers) {
			try {
				return dateFormat.parse(value);
			} catch (ParseException e) {
			}
		}
		throw new ParseException("Unable to parse \"" + value + "\" to a date.", 0);
	}

	@Override
	protected String getDisplayValue(Date value) {
		return displayFormat.format(value);
	}

	@Override
	protected String getSortValue(Date value) {
		return sortFormat.format(value);
	}

	public DateFormatter parseFormat(String parseFormat) {
		dateParsers.add(new SimpleDateFormat(parseFormat));
		return this;
	}

	public DateFormatter parseFormats(String... parseFormats) {
		for (String parseFormat : parseFormats) {
			dateParsers.add(new SimpleDateFormat(parseFormat));
		}
		return this;
	}
	
	public DateFormatter displayFormat(String displayFormat) {
		this.displayFormat = new SimpleDateFormat(displayFormat);
		return this;
	}
}