gcat/src/main/java/org/gcube/gcat/persistence/ckan/CKANUserCache.java

67 lines
1.8 KiB
Java
Raw Normal View History

2019-09-16 12:00:49 +02:00
package org.gcube.gcat.persistence.ckan;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import javax.cache.Cache;
import javax.cache.CacheManager;
import javax.cache.Caching;
import javax.cache.configuration.MutableConfiguration;
import javax.cache.expiry.CreatedExpiryPolicy;
import javax.cache.expiry.Duration;
import javax.cache.spi.CachingProvider;
public abstract class CKANUserCache {
private static final CacheManager cacheManager;
private static final String USERS_CACHE = "userCache";
private static final MutableConfiguration<String,CKANUser> userCacheConfiguration;
private static final Map<String,Cache<String,CKANUser>> userCachePerCkanInstance;
static {
CachingProvider provider = Caching.getCachingProvider();
cacheManager = provider.getCacheManager();
userCacheConfiguration = new MutableConfiguration<String,CKANUser>().setTypes(String.class, CKANUser.class)
.setStoreByValue(false)
.setExpiryPolicyFactory(CreatedExpiryPolicy.factoryOf(new Duration(TimeUnit.HOURS, 3)));
userCachePerCkanInstance = new HashMap<String,Cache<String,CKANUser>>();
}
private CKANUserCache() {
}
public static CKANUser getCurrrentCKANUser() {
String ckanURL = CKANInstance.getInstance().getCKANURL();
Cache<String,CKANUser> userCache = userCachePerCkanInstance.get(ckanURL);
if(userCache==null) {
userCache = cacheManager.createCache(USERS_CACHE, userCacheConfiguration);
userCachePerCkanInstance.put(ckanURL, userCache);
}
String ckanUserName = CKANUser.getCKANUsername();
CKANUser ckanUser = userCache.get(ckanUserName);
if(ckanUser==null) {
ckanUser = new CKANUser();
ckanUser.retrieve();
}
return ckanUser;
}
@Override
protected void finalize() throws Throwable {
super.finalize();
cacheManager.close();
}
}