package com.browseengine.bobo.facets.data; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; /** * Internal data are stored in a long[] with values generated from {@link Date#getTime()} */ public class TermDateList extends TermLongList { private ThreadLocal<SimpleDateFormat> _dateFormatter = null; public TermDateList(String formatString) { super(); setFormatString(formatString); } public TermDateList(int capacity, String formatString) { super(capacity, formatString); setFormatString(formatString); } public String getFormatString() { return _formatString; } protected void setFormatString(final String formatString) { _formatString = formatString; _dateFormatter = new ThreadLocal<SimpleDateFormat>() { protected SimpleDateFormat initialValue() { if (formatString != null) { return new SimpleDateFormat(formatString); } else { return null; } } }; } @Override protected long parse(String o) { if (o == null || o.length() == 0) { return 0L; } else { try { return _dateFormatter.get().parse(o).getTime(); } catch (ParseException pe) { throw new RuntimeException(pe.getMessage(), pe); } } } @Override public String get(int index) { SimpleDateFormat formatter = _dateFormatter.get(); if (formatter == null) return String.valueOf(_elements[index]); return formatter.format(_elements[index]); } @Override public String format(Object o) { Long val; if (o instanceof String) { val = parse((String) o); } else { val = (Long) o; } if (_formatter == null) { return String.valueOf(o); } else { SimpleDateFormat formatter = _dateFormatter.get(); if (formatter == null) return String.valueOf(o); return _formatter.get().format(new Date(val.longValue())); } } }