package org.gcube.application.cms.caches; import lombok.NonNull; import lombok.RequiredArgsConstructor; import lombok.Setter; import lombok.Synchronized; import lombok.extern.slf4j.Slf4j; import org.gcube.application.geoportal.common.utils.ContextUtils; import org.gcube.application.geoportal.common.model.rest.ConfigurationException; import java.time.LocalDateTime; import java.time.temporal.TemporalAmount; import java.util.concurrent.ConcurrentHashMap; @Slf4j /** * TTL Map Context -> T * */ public abstract class AbstractScopedMap extends TimedMap implements Engine{ public AbstractScopedMap(@NonNull String name) { super(name); } @Override public T getObject() throws ConfigurationException { return get(ContextUtils.getCurrentScope()); } @Override public void init() {} @Override public void shutdown() { log.warn(name + ": shutting down"); scopeMap.forEach((String s,TTLObject o)->{ try{if(o!=null&&o.getTheObject()!=null) dispose(o.getTheObject()); }catch(Throwable t) { log.warn(name +": unable to dispose ",t); } }); } }