package org.exoplatform.portal.mop.page; import org.exoplatform.commons.cache.future.FutureExoCache; import org.exoplatform.commons.cache.future.Loader; import org.exoplatform.commons.scope.ScopedKey; import org.exoplatform.portal.pom.config.POMSession; import org.exoplatform.services.cache.CacheService; import org.exoplatform.services.cache.ExoCache; /** @author <a href="mailto:julien.viet@exoplatform.com">Julien Viet</a> */ public class ExoDataCache extends DataCache { /** . */ protected ExoCache<ScopedKey<PageKey>, PageData> cache; /** . */ protected FutureExoCache<ScopedKey<PageKey>, PageData, POMSession> objects; /** . */ private Loader<ScopedKey<PageKey>, PageData, POMSession> pageLoader = new Loader<ScopedKey<PageKey>, PageData, POMSession>() { public PageData retrieve(POMSession session, ScopedKey<PageKey> scopedKey) throws Exception { PageData data = loadPage(session, scopedKey.getKey()); return data == PageData.EMPTY ? null : data; } }; public ExoDataCache(CacheService cacheService) { this.cache = cacheService.getCacheInstance(PageService.class.getSimpleName()); this.objects = new FutureExoCache<ScopedKey<PageKey>, PageData, POMSession>(pageLoader, cache); } @Override protected PageData getPage(POMSession session, PageKey key) { return objects.get(session, ScopedKey.create(key)); } @Override protected void removePage(POMSession session, PageKey key) { cache.remove(ScopedKey.create(key)); } @Override protected void putPage(PageData data) { cache.put(ScopedKey.create(data.key), data); } @Override protected void clear() { cache.clearCache(); } }