gcube-cms-suite/sdi-plugins/src/main/java/org/gcube/application/cms/sdi/plugins/SDIAbstractPlugin.java

87 lines
3.5 KiB
Java

package org.gcube.application.cms.sdi.plugins;
import com.fasterxml.jackson.databind.cfg.ContextAttributes;
import lombok.Synchronized;
import lombok.extern.slf4j.Slf4j;
import org.gcube.application.cms.caches.AbstractScopedMap;
import org.gcube.application.cms.implementations.ISInterface;
import org.gcube.application.cms.implementations.ImplementationProvider;
import org.gcube.application.cms.plugins.AbstractPlugin;
import org.gcube.application.cms.plugins.InitializablePlugin;
import org.gcube.application.cms.plugins.faults.InitializationException;
import org.gcube.application.cms.plugins.faults.ShutDownException;
import org.gcube.application.cms.plugins.model.PluginDescriptor;
import org.gcube.application.cms.plugins.reports.InitializationReport;
import org.gcube.application.cms.plugins.reports.Report;
import org.gcube.application.cms.sdi.engine.SDIManager;
import org.gcube.application.cms.sdi.engine.SDIManagerWrapper;
import org.gcube.application.geoportal.common.model.rest.ConfigurationException;
import org.gcube.application.geoportal.common.model.rest.DatabaseConnection;
import org.gcube.application.geoportal.common.utils.ContextUtils;
import org.gcube.data.transfer.model.ServiceConstants;
import java.time.Duration;
import java.time.temporal.ChronoUnit;
import java.time.temporal.TemporalAmount;
import java.time.temporal.TemporalUnit;
@Slf4j
public abstract class SDIAbstractPlugin extends AbstractPlugin implements InitializablePlugin {
protected static AbstractScopedMap<SDIManagerWrapper> sdiCache;
protected static AbstractScopedMap<DatabaseConnection> postgisCache;
@Synchronized
private static void initCache(){
if(sdiCache==null) {
log.info("Creating internal caches.. ");
sdiCache = new AbstractScopedMap<SDIManagerWrapper>("SDI-CACHE") {
@Override
protected SDIManagerWrapper retrieveObject() throws ConfigurationException {
try {
return new SDIManagerWrapper();
} catch (Exception e) {
throw new ConfigurationException(e);
}
}
};
sdiCache.setTTL(Duration.of(10, ChronoUnit.MINUTES));
}
if(postgisCache==null) {
postgisCache = new AbstractScopedMap<DatabaseConnection>("POSTGIS-CREDENTIALS") {
@Override
protected DatabaseConnection retrieveObject() throws ConfigurationException {
try {
DatabaseConnection db = ImplementationProvider.get().getEngineByClass(ISInterface.class).
queryForDatabase("Database","postgis", "GNA_DB","Concessioni");
log.debug("Postgis Connection in {} is {} ", ContextUtils.getCurrentScope(),db);
return db;
} catch (Exception e) {
throw new ConfigurationException(e);
}
}
};
postgisCache.setTTL(Duration.of(10, ChronoUnit.MINUTES));
}
}
@Override
public InitializationReport init() throws InitializationException {
InitializationReport report = new InitializationReport();
try{
initCache();
report.setStatus(Report.Status.OK);
} catch (Throwable e) {
throw new InitializationException("SDI Plugins : Unable to initialize Internal Caches ",e);
}
return report;
}
@Override
public void shutdown() throws ShutDownException {
}
}