/* * Created on 06.03.2005 */ package biz.ganttproject.core.chart.text; import java.util.Date; import java.util.HashMap; import biz.ganttproject.core.chart.text.TimeFormatters.LocaleApi; import biz.ganttproject.core.time.DateFrameable; import biz.ganttproject.core.time.TimeUnit; /** * @author bard */ public abstract class CachingTextFormatter { private final HashMap<Date, TimeUnitText[]> myTextCache = new HashMap<Date, TimeUnitText[]>(); protected CachingTextFormatter() { } public TimeUnitText[] format(TimeUnit timeUnit, Date baseDate) { TimeUnitText[] result = null; Date adjustedLeft = ((DateFrameable) timeUnit).adjustLeft(baseDate); result = getCachedText(adjustedLeft); if (result == null) { result = createTimeUnitText(adjustedLeft); myTextCache.put(adjustedLeft, result); } return result; } protected TimeUnitText[] getCachedText(Date startDate) { return myTextCache.get(startDate); } public void setLocale(LocaleApi locale) { myTextCache.clear(); } public int getTextCount() { return 1; } protected abstract TimeUnitText[] createTimeUnitText(Date adjustedLeft); }