gcube-cms-suite/geoportal-service/src/main/java/org/gcube/application/geoportal/service/engine/providers/ConfigurationCache.java

65 lines
2.3 KiB
Java

package org.gcube.application.geoportal.service.engine.providers;
import jdk.nashorn.internal.runtime.regexp.joni.Config;
import lombok.NonNull;
import lombok.extern.slf4j.Slf4j;
import org.gcube.application.cms.caches.AbstractScopedMap;
import org.gcube.application.cms.caches.Cache;
import org.gcube.application.cms.caches.TimedMap;
import org.gcube.application.cms.implementations.ImplementationProvider;
import org.gcube.application.geoportal.common.model.configuration.Configuration;
import org.gcube.application.geoportal.common.model.rest.ConfigurationException;
import org.gcube.application.geoportal.service.engine.mongo.ProfiledMongoManager;
import org.gcube.application.geoportal.service.model.internal.faults.RegistrationException;
import java.time.Duration;
import java.time.temporal.ChronoUnit;
import java.time.temporal.TemporalAmount;
import java.time.temporal.TemporalUnit;
@Slf4j
public class ConfigurationCache extends AbstractScopedMap<ConfigurationCache.ConfigurationMap> {
public static class ConfigurationMap extends TimedMap<String, Configuration>{
public ConfigurationMap(@NonNull String name) {
super(name);
}
@Override
public TemporalAmount getTTL(){
return Duration.of(2, ChronoUnit.MINUTES);
}
@Override
protected Configuration retrieveObject(String key) throws ConfigurationException {
return getForProfile(key);
}
}
public ConfigurationCache() {
super("Configuration Cache");
}
@Override
protected ConfigurationMap retrieveObject(String key) throws ConfigurationException {
return new ConfigurationMap(key+"_configuration_cache") {
};
}
private static Configuration getForProfile(String profileID) throws ConfigurationException{
log.info("Evaluating Configuration for profile {} ",profileID);
try{
return new ProfiledMongoManager(profileID).getConfiguration();
} catch (ConfigurationException e) {
log.error("Unable to get configuration for {} ",profileID,e);
throw e;
} catch (Throwable t){
log.error("Unable to get configuration for {} ",profileID,t);
throw new ConfigurationException("Unable to get configuration for "+profileID,t);
}
}
}