package org.jboss.mx.util;
import javax.management.MBeanServer;
import javax.management.ObjectName;
import java.lang.reflect.Proxy;
import java.util.ArrayList;
import java.util.List;
public class MBeanTyper
{
static final boolean DEBUG = Boolean.getBoolean("jboss.jmx.debug");
public static final Object typeMBean(MBeanServer server, ObjectName mbean, Class mainInterface)
throws Exception
{
List interfaces = new ArrayList();
if (mainInterface.isInterface())
{
interfaces.add(mainInterface);
}
addInterfaces(mainInterface.getInterfaces(), interfaces);
Class cl[] = (Class[]) interfaces.toArray(new Class[interfaces.size()]);
if (DEBUG)
{
System.err.println("typeMean->server=" + server + ",mbean=" + mbean + ",mainInterface=" + mainInterface);
for (int c = 0; c < cl.length; c++)
{
System.err.println(" :" + cl[c]);
}
}
return Proxy.newProxyInstance(Thread.currentThread().getContextClassLoader(), cl, new MBeanTyperInvoker(server, mbean));
}
private static final void addInterfaces(Class cl[], List list)
{
if (cl == null) return;
for (int c = 0; c < cl.length; c++)
{
list.add(cl[c]);
addInterfaces(cl[c].getInterfaces(), list);
}
}
}