package org.gcube.data.access.storagehub.handlers.plugins; import java.util.HashMap; import java.util.Map; import javax.annotation.PostConstruct; import javax.enterprise.inject.Instance; import javax.inject.Inject; import javax.inject.Singleton; import org.gcube.common.storagehub.model.exceptions.PluginNotFoundException; import org.gcube.common.storagehub.model.items.nodes.PayloadBackend; import org.gcube.common.storagehub.model.storages.StorageBackendFactory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @Singleton public class StorageBackendHandler { private static Logger log = LoggerFactory.getLogger(StorageBackendHandler.class); @Inject Instance factories; Map storagebackendMap= new HashMap(); @PostConstruct void init(){ if (factories !=null) for (StorageBackendFactory connector : factories) { if (storagebackendMap.containsKey(connector.getName())) { log.error("multiple storage backend with the same name"); throw new RuntimeException("multiple storage backend with the same name"); } storagebackendMap.put(connector.getName(), connector); } else throw new RuntimeException("storage backend implementation not found"); } public StorageBackendFactory get(PayloadBackend payload) throws PluginNotFoundException { if (payload == null || !storagebackendMap.containsKey(payload.getStorageName())) throw new PluginNotFoundException(String.format("implementation for storage %s not found", payload.getStorageName())); return storagebackendMap.get(payload.getStorageName()); } }