package name.abuchen.portfolio.online.impl; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import name.abuchen.portfolio.model.LatestSecurityPrice; /* package */ class PageCache { private static class PageEntry { long ts; List<LatestSecurityPrice> answer; public PageEntry(List<LatestSecurityPrice> prices) { this.ts = System.currentTimeMillis(); this.answer = prices; } } private static final int CACHE_SIZE = 50; private static final long EXPIRATION_TIME = 5 * 60 * 1000; // 5 minutes private HashMap<String, PageEntry> map = new LinkedHashMap<String, PageEntry>() { private static final long serialVersionUID = 1L; protected boolean removeEldestEntry(Map.Entry<String, PageEntry> eldest) { return size() >= CACHE_SIZE; } }; public synchronized List<LatestSecurityPrice> lookup(String url) { PageEntry entry = map.get(url); if (entry == null) return null; if (entry.ts < System.currentTimeMillis() - EXPIRATION_TIME) { map.remove(url); return null; } else { return entry.answer; } } public synchronized void put(String url, List<LatestSecurityPrice> prices) { map.put(url, new PageEntry(prices)); } }