package com.github.windbender.service; import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; import org.joda.time.DateTimeZone; import com.github.windbender.core.LatLonPair; import com.google.common.cache.CacheBuilder; import com.google.common.cache.CacheLoader; import com.google.common.cache.LoadingCache; public class CachingTimeZoneGetter implements TimeZoneGetter { LoadingCache<LatLonPair, DateTimeZone> graphs; public CachingTimeZoneGetter(final TimeZoneGetter rootGetter) { graphs = CacheBuilder.newBuilder().maximumSize(1000).expireAfterAccess(1, TimeUnit.HOURS) .build(new CacheLoader<LatLonPair, DateTimeZone>() { public DateTimeZone load(LatLonPair key) { return rootGetter.getTimeZone(key); } }); } @Override public DateTimeZone getTimeZone(LatLonPair pair) { try { return graphs.get(pair); } catch (Exception e) { return null; } } }