package net.djpowell.liverepl.discovery; import net.djpowell.liverepl.discovery.impl.SystemDiscovery; import net.djpowell.liverepl.discovery.impl.ThreadDiscovery; import net.djpowell.liverepl.discovery.impl.TomcatDiscovery; import java.io.PrintStream; import java.util.ArrayList; import java.util.Collection; import java.util.List; /** * API for obtaining a list of ClassLoaders by using available implementations of ClassLoaderDiscovery */ public class Discovery implements ClassLoaderDiscovery { private final List<ClassLoaderDiscovery> impls = new ArrayList<ClassLoaderDiscovery>(); public Discovery() { ClassLoaderRegistry registry=new ClassLoaderRegistry(); impls.add(new SystemDiscovery(registry)); impls.add(new TomcatDiscovery(registry)); impls.add(new ThreadDiscovery(registry)); } public Collection<ClassLoaderInfo> listClassLoaders() { List<ClassLoaderInfo> ret = new ArrayList(); for (ClassLoaderDiscovery discovery : impls) { ret.addAll(discovery.listClassLoaders()); } return ret; } public String discoveryName() { return "All ClassLoaders"; } public void dumpList(PrintStream out) { for (ClassLoaderDiscovery discovery : impls) { Collection<ClassLoaderInfo> clis = discovery.listClassLoaders(); if (!clis.isEmpty()) { out.println(); out.println(discovery.discoveryName() + ":"); out.println(); out.println(ClassLoaderInfo.header); for (ClassLoaderInfo cli : clis) { out.println(cli.toString()); } } } } public ClassLoaderInfo findClassLoader(String clId) { for (ClassLoaderInfo cli : listClassLoaders()) { if (cli.id.equals(clId)) { return cli; } } return null; } }