gcube-cms-suite/cms-plugin-framework/src/main/java/org/gcube/application/cms/implementations/ImplementationProvider.java

49 lines
1.3 KiB
Java
Raw Normal View History

package org.gcube.application.cms.implementations;
import lombok.Synchronized;
2022-03-10 18:15:10 +01:00
import org.gcube.application.cms.caches.Cache;
import org.gcube.application.cms.caches.Engine;
import org.gcube.application.geoportal.common.model.rest.ConfigurationException;
2022-03-30 18:39:10 +02:00
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
public class ImplementationProvider {
private static ImplementationProvider instance=null;
@Synchronized
public static ImplementationProvider get() {
if(instance==null) {
instance=new ImplementationProvider();
}
return instance;
}
2022-03-04 18:28:45 +01:00
public <T> T getEngineByManagedClass(Class<T> clazz) throws ConfigurationException {
return (T) implementationsRegistry.get(clazz).getObject();
}
2022-03-10 18:15:10 +01:00
private ConcurrentHashMap<Class,Engine> implementationsRegistry=new ConcurrentHashMap<>();
public <T> void setEngine(Engine<T> engine, Class<T> clazz){
implementationsRegistry.put(clazz,engine);
}
2022-02-25 11:44:56 +01:00
private ImplementationProvider(){
//Defaults
2022-02-25 11:46:58 +01:00
setEngine(new DefaultISProvider(),ISInterface.class);
2022-02-25 11:44:56 +01:00
}
2022-03-30 18:39:10 +02:00
public Map<Class,String> getManagerList(){
HashMap<Class,String> toReturn=new HashMap<>();
implementationsRegistry.forEach(
(aClass, engine) -> {toReturn.put(engine.getClass(),aClass.getCanonicalName());}
);
return toReturn;
}
}