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

49 lines
1.3 KiB
Java

package org.gcube.application.cms.implementations;
import lombok.Synchronized;
import org.gcube.application.cms.caches.Cache;
import org.gcube.application.cms.caches.Engine;
import org.gcube.application.geoportal.common.model.rest.ConfigurationException;
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;
}
public <T> T getEngineByManagedClass(Class<T> clazz) throws ConfigurationException {
return (T) implementationsRegistry.get(clazz).getObject();
}
private ConcurrentHashMap<Class,Engine> implementationsRegistry=new ConcurrentHashMap<>();
public <T> void setEngine(Engine<T> engine, Class<T> clazz){
implementationsRegistry.put(clazz,engine);
}
private ImplementationProvider(){
//Defaults
setEngine(new DefaultISProvider(),ISInterface.class);
}
public Map<Class,String> getManagerList(){
HashMap<Class,String> toReturn=new HashMap<>();
implementationsRegistry.forEach(
(aClass, engine) -> {toReturn.put(engine.getClass(),aClass.getCanonicalName());}
);
return toReturn;
}
}