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

132 lines
4.7 KiB
Java
Raw Normal View History

2021-12-07 16:12:43 +01:00
package org.gcube.application.geoportal.service.engine.providers;
2022-01-12 18:42:22 +01:00
import lombok.extern.slf4j.Slf4j;
2022-02-18 14:41:41 +01:00
import org.gcube.application.cms.caches.AbstractScopedMap;
2022-02-24 18:09:30 +01:00
import org.gcube.application.cms.plugins.*;
2022-01-12 18:42:22 +01:00
import org.gcube.application.cms.plugins.faults.InitializationException;
2022-03-04 11:30:48 +01:00
import org.gcube.application.cms.plugins.faults.PluginExecutionException;
2022-01-12 18:42:22 +01:00
import org.gcube.application.cms.plugins.faults.ShutDownException;
import org.gcube.application.cms.plugins.reports.InitializationReport;
import org.gcube.application.geoportal.common.utils.ContextUtils;
2022-02-04 17:45:47 +01:00
import org.gcube.application.geoportal.common.model.rest.ConfigurationException;
2021-12-07 16:12:43 +01:00
2022-01-12 18:42:22 +01:00
import java.util.HashMap;
2021-12-07 16:12:43 +01:00
2022-01-12 18:42:22 +01:00
@Slf4j
public class PluginManager extends AbstractScopedMap<PluginManager.PluginMap> implements PluginManagerInterface {
2021-12-07 16:12:43 +01:00
public static class PluginMap extends HashMap<String,Plugin>{
}
PluginMap implementations=new PluginMap();
2021-12-07 16:12:43 +01:00
2022-01-12 18:42:22 +01:00
public PluginManager(){
super("Plugin Cache");
// reflections
2022-02-24 18:09:30 +01:00
implementations.putAll(PluginsReflections.load());
log.info("Loaded {} plugins",implementations.keySet().size());
2022-01-12 18:42:22 +01:00
// Init plugins
implementations.forEach((id,p)->{
2022-02-24 18:09:30 +01:00
log.info("Registering plugin Manager ");
if(p instanceof LifecycleManager) {
log.debug("Registering plugin Manager to {} ",id);
((LifecycleManager) p).setPluginManager(this);
}
2022-01-12 18:42:22 +01:00
if(p instanceof InitializablePlugin){
log.info("INIT Plugin {}",id);
try {
InitializablePlugin ip=(InitializablePlugin) p;
2022-02-16 18:29:34 +01:00
logReport(ip,ip.init());
2022-01-12 18:42:22 +01:00
}catch (InitializationException e){
log.error("Failed to initialize "+id,e);
}catch(Throwable t){
log.error("Unable to initialize "+id,t);
}
}
});
2021-12-07 16:12:43 +01:00
}
2022-01-12 18:42:22 +01:00
2021-12-07 16:12:43 +01:00
@Override
2022-03-10 18:15:10 +01:00
protected PluginMap retrieveObject(String context) throws ConfigurationException {
2022-02-24 18:09:30 +01:00
log.warn("PLUGIN INITIALIZTIONS IN CONTEXT {} ",context);
2022-01-12 18:42:22 +01:00
// Init plugins
implementations.forEach((id,p)->{
if(p instanceof InitializablePlugin){
2022-02-24 18:09:30 +01:00
log.info("INIT Plugin {} in context {} ",id, context);
2022-01-12 18:42:22 +01:00
try {
InitializablePlugin ip=(InitializablePlugin) p;
2022-02-16 18:29:34 +01:00
logReport(ip,ip.initInContext());
2022-01-12 18:42:22 +01:00
}catch (InitializationException e){
log.error("Failed to initialize "+id,e);
}catch(Throwable t){
log.error("Unable to initialize "+id,t);
}
}
});
return implementations;
}
2021-12-07 16:12:43 +01:00
2022-01-12 18:42:22 +01:00
@Override
protected void dispose(PluginMap toDispose) {
2022-01-12 18:42:22 +01:00
// ShutDown plugins
implementations.forEach((id,p)->{
if(p instanceof InitializablePlugin){
log.info("Shutting down Plugin {}",id);
try {
InitializablePlugin ip=(InitializablePlugin) p;
ip.shutdown();
}catch (ShutDownException e){
log.error("Failed to shutdown "+id,e);
}catch(Throwable t){
log.error("Unable to shutdown "+id,t);
}
}
});
2021-12-07 16:12:43 +01:00
}
@Override
2022-01-12 18:42:22 +01:00
public void init() {
2021-12-07 16:12:43 +01:00
}
2022-02-16 18:29:34 +01:00
@Override
public Plugin getById(String pluginID) throws ConfigurationException {
2022-02-18 18:11:34 +01:00
Plugin toReturn = getObject().get(pluginID);
if(toReturn == null ) throw new ConfigurationException("Plugin "+pluginID+" not found ");
return toReturn;
2022-02-16 18:29:34 +01:00
}
private static final void logReport(Plugin p, InitializationReport report){
2022-03-04 11:30:48 +01:00
if(report==null)
log.warn("WARNING : Initialization Report by {} IS null ",p.getDescriptor().getId());
else
try {
report.validate();
switch (report.getStatus()) {
case ERROR: {
log.error("Plugin [{}] STATUS : {}, INFO {} ", p.getDescriptor().getId(), report.getStatus(), report.getMessages());
break;
}
case WARNING: {
log.warn("Plugin [{}] STATUS : {}, INFO {} ", p.getDescriptor().getId(), report.getStatus(), report.getMessages());
break;
}
default: {
log.info("Plugin [{}] STATUS : {}, INFO {} ", p.getDescriptor().getId(), report.getStatus(), report.getMessages());
}
2022-02-16 18:29:34 +01:00
}
2022-03-04 11:30:48 +01:00
}catch (PluginExecutionException e) {
log.warn("Invalid report provided by {} ",p.getDescriptor().getId(),e);
2022-02-16 18:29:34 +01:00
}
}
2021-12-07 16:12:43 +01:00
}