package org.safehaus.penrose.adapter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.safehaus.penrose.partition.Partition; import org.safehaus.penrose.partition.PartitionConfig; import org.safehaus.penrose.partition.PartitionContext; import java.util.Map; import java.util.LinkedHashMap; import java.util.Collection; /** * @author Endi Sukma Dewata */ public class AdapterManager { public Logger log = LoggerFactory.getLogger(getClass()); Partition partition; protected Map<String,Adapter> adapters = new LinkedHashMap<String,Adapter>(); public void init(Partition partition) throws Exception { this.partition = partition; PartitionConfig partitionConfig = partition.getPartitionConfig(); for (AdapterConfig adapterConfig : partitionConfig.getAdapterConfigs()) { Adapter adapter = createAdapter(adapterConfig); addAdapter(adapter); } } public void destroy() throws Exception { for (Adapter adapter : adapters.values()) { adapter.destroy(); } } public Adapter createAdapter(AdapterConfig adapterConfig) throws Exception { PartitionContext partitionContext = partition.getPartitionContext(); String adapterClass = adapterConfig.getAdapterClass(); ClassLoader cl = partitionContext.getClassLoader(); Class clazz = cl.loadClass(adapterClass); Adapter adapter = (Adapter)clazz.newInstance(); AdapterContext adapterContext = new AdapterContext(); adapterContext.setPartition(partition); adapter.init(adapterConfig, adapterContext); return adapter; } public void addAdapter(Adapter adapter) { adapters.put(adapter.getName(), adapter); } public Collection<Adapter> getAdapters() { return adapters.values(); } public Adapter getAdapter(String name) { Adapter adapter = adapters.get(name); if (adapter != null) return adapter; if (partition.getName().equals(PartitionConfig.ROOT)) return null; Partition rootPartition = partition.getPartitionContext().getPartition(PartitionConfig.ROOT); AdapterManager adapterManager = rootPartition.getAdapterManager(); return adapterManager.getAdapter(name); } }