Java tutorial
/* * Copyright 2013 Objectos, Fbrica de Software LTDA. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. */ package br.com.objectos.wiki.core.page; import br.com.objectos.comuns.base.cache.CacheBuilder; import com.google.common.base.Optional; import com.google.common.cache.CacheLoader; import com.google.common.cache.CacheLoader.InvalidCacheLoadException; import com.google.common.cache.LoadingCache; import com.google.inject.Inject; import com.google.inject.Singleton; /** * @author edenir.anschau@objectos.com.br (Edenir Norberto Anschau) */ @Singleton class WikiPageCacheGuice implements WikiPageCache { private final LoadingCache<WikiPageKey, WikiPage> pageKeyCache; private final FindWikiPage findWikiPage; @Inject public WikiPageCacheGuice(CacheBuilder cacheBuilder, FindWikiPage findWikiPage) { this.pageKeyCache = cacheBuilder.medium().build(new WikiPageKeyLoader()); this.findWikiPage = findWikiPage; } @Override public Optional<WikiPage> byWikiPageKey(WikiPageKey pageKey) { try { WikiPage page = pageKeyCache.getUnchecked(pageKey); return Optional.fromNullable(page); } catch (InvalidCacheLoadException e) { return Optional.absent(); } } private class WikiPageKeyLoader extends CacheLoader<WikiPageKey, WikiPage> { @Override public WikiPage load(WikiPageKey key) throws Exception { return findWikiPage.byWikiPageKey(key); } } }