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

79 lines
2.4 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;
import org.gcube.common.authorization.utils.manager.SecretManager;
import org.gcube.common.authorization.utils.manager.SecretManagerProvider;
2019-09-16 14:48:18 +02:00
2022-04-05 17:32:03 +02:00
/**
* @author Luca Frosini (ISTI - CNR)
*/
2019-09-16 12:00:49 +02:00
public abstract class CKANUserCache {
private static final CacheManager cacheManager;
private static final MutableConfiguration<String,CKANUser> userCacheConfiguration;
private static final Map<String,Cache<String,CKANUser>> userCachePerContext;
2019-09-16 12:00:49 +02:00
static {
CachingProvider provider = Caching.getCachingProvider();
cacheManager = provider.getCacheManager();
userCacheConfiguration = new MutableConfiguration<String,CKANUser>().setTypes(String.class, CKANUser.class)
.setStoreByValue(false)
2019-09-16 14:55:57 +02:00
.setExpiryPolicyFactory(CreatedExpiryPolicy.factoryOf(new Duration(TimeUnit.MINUTES, 15)));
2019-09-16 12:00:49 +02:00
userCachePerContext = new HashMap<String,Cache<String,CKANUser>>();
2019-09-16 12:00:49 +02:00
}
private CKANUserCache() {
}
public static CKANUser getCurrrentCKANUser() {
SecretManager secretManager = SecretManagerProvider.instance.get();
2022-02-28 10:28:48 +01:00
String context = secretManager.getContext();
Cache<String,CKANUser> userCache = userCachePerContext.get(context);
2019-09-16 14:48:18 +02:00
if(userCache == null) {
userCache = cacheManager.createCache(context, userCacheConfiguration);
userCachePerContext.put(context, userCache);
2019-09-16 12:00:49 +02:00
}
2022-02-28 10:28:48 +01:00
String gcubeUsername = secretManager.getUser().getUsername();
2019-09-16 14:48:18 +02:00
CKANUser ckanUser = userCache.get(gcubeUsername);
if(ckanUser == null) {
2019-09-16 12:00:49 +02:00
ckanUser = new CKANUser();
ckanUser.retrieve();
2019-09-16 14:48:18 +02:00
userCache.put(gcubeUsername, ckanUser);
2019-09-16 12:00:49 +02:00
}
return ckanUser;
}
2022-04-21 16:43:24 +02:00
public static void removeUserFromCache() {
SecretManager secretManager = SecretManagerProvider.instance.get();
String context = secretManager.getContext();
Cache<String,CKANUser> userCache = userCachePerContext.get(context);
if(userCache != null) {
String gcubeUsername = secretManager.getUser().getUsername();
userCache.remove(gcubeUsername);
}
}
2019-09-16 12:00:49 +02:00
@Override
protected void finalize() throws Throwable {
super.finalize();
cacheManager.close();
}
}