package uk.bl.odin.orcid.domain;
import java.util.concurrent.TimeUnit;
import javax.inject.Inject;
import javax.inject.Named;
import uk.bl.odin.orcid.client.SearchKey;
import uk.bl.odin.orcid.schema.messages.onepointtwo.OrcidProfile;
import uk.bl.odin.orcid.schema.messages.onepointtwo.OrcidSearchResults;
import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder;
/**
* Default cacheManager. Uses Guava cache
*
* TODO: refactor into interface so we can swap memcached in/out using Guice if
* required.
*
* @author tom
*
*/
public class CacheManager {
private final Cache<SearchKey, OrcidSearchResults> searchCache;
private final Cache<String, OrcidProfile> profileCache;
@Inject
public CacheManager(@Named("OrcidCacheTimeout") Integer timeOutInMinutes,
@Named("OrcidCacheMaxsize") Integer maximumSize) {
searchCache = CacheBuilder.newBuilder().expireAfterWrite(timeOutInMinutes, TimeUnit.MINUTES)
.maximumSize(maximumSize).build();
profileCache = CacheBuilder.newBuilder().expireAfterWrite(timeOutInMinutes, TimeUnit.MINUTES)
.maximumSize(maximumSize).build();
}
public Cache<SearchKey, OrcidSearchResults> getSearchCache() {
return searchCache;
}
public Cache<String, OrcidProfile> getProfilecache() {
return profileCache;
}
}