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 getEngineByManagedClass(Class clazz) throws ConfigurationException { return (T) implementationsRegistry.get(clazz).getObject(); } private ConcurrentHashMap implementationsRegistry=new ConcurrentHashMap<>(); public void setEngine(Engine engine, Class clazz){ implementationsRegistry.put(clazz,engine); } private ImplementationProvider(){ //Defaults setEngine(new DefaultISProvider(),ISInterface.class); } public Map getManagerList(){ HashMap toReturn=new HashMap<>(); implementationsRegistry.forEach( (aClass, engine) -> {toReturn.put(engine.getClass(),aClass.getCanonicalName());} ); return toReturn; } }