// Decompiled by Jad v1.5.8e. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://www.geocities.com/kpdus/jad.html
// Decompiler options: packimports(3)
// Source File Name: GenericRootClass.java
package hep.rootio.implementation;
import hep.rootio.*;
import hep.rootio.interfaces.RootObject;
import java.io.IOException;
import java.lang.reflect.*;
import java.util.Hashtable;
import java.util.Vector;
// Referenced classes of package hep.rootio.implementation:
// GenericRootObject, StreamerInfo
public class GenericRootClass
implements RootClass
{
public GenericRootClass(String name, StreamerInfo info, RootFileReader rfr)
{
methodMap = new Hashtable();
streamerInfo = info;
this.name = name;
this.rfr = rfr;
}
public void resolve(RootClassFactory factory)
throws RootClassNotFound
{
streamerInfo.resolve(factory);
}
public String getClassName()
{
return name;
}
public RootObjectRepresentation newInstance()
{
GenericRootObject gen = new GenericRootObject();
gen.init(this, streamerInfo);
return gen;
}
public Object read(RootInput in)
throws IOException
{
RootObjectRepresentation obj = newInstance();
obj.read(in);
return obj;
}
public RootClass[] getSuperClasses()
{
return streamerInfo.getSuperClasses();
}
public String toString()
{
return "RootClass: " + getClassName();
}
public boolean instanceOf(RootClass superClass)
{
if(superClass == this)
return true;
RootClass classes[] = getSuperClasses();
for(int i = 0; i < classes.length; i++)
if(classes[i].instanceOf(superClass))
return true;
return false;
}
public RootMember[] getMembers()
{
return streamerInfo.getMembers();
}
public String getJavaType()
{
return nameMangler.mangleClass(name);
}
private void addSuperClasses(Vector interFaces, RootClass klass, ClassLoader classLoader)
{
try
{
Class k = Class.forName(klass.getJavaType(), true, classLoader);
if(interFaces.contains(k))
return;
if(!k.isInterface() || !(hep.rootio.interfaces.RootObject.class).isAssignableFrom(k))
throw new RuntimeException("Invalid proxy class " + k);
interFaces.add(k);
}
catch(ClassNotFoundException classnotfoundexception) { }
RootClass superClasses[] = klass.getSuperClasses();
for(int i = 0; i < superClasses.length; i++)
addSuperClasses(interFaces, superClasses[i], classLoader);
}
public RootObject createProxy(InvocationHandler object)
{
try
{
ClassLoader classLoader = rfr.getClassLoader();
if(proxyConstructor == null || proxyConstructor.getClass().getClassLoader() != classLoader)
{
if(classLoader == null)
classLoader = getClass().getClassLoader();
Vector interFaces = new Vector();
interFaces.add(hep.rootio.interfaces.RootObject.class);
addSuperClasses(interFaces, this, classLoader);
Class iClass[] = new Class[interFaces.size()];
interFaces.copyInto(iClass);
Class proxyClass = Proxy.getProxyClass(classLoader, iClass);
proxyConstructor = proxyClass.getConstructor(new Class[] {
java.lang.reflect.InvocationHandler.class
});
}
return (RootObject)proxyConstructor.newInstance(new Object[] {
object
});
}
catch(Throwable t)
{
t.printStackTrace();
}
throw new RuntimeException("Unable to create proxy for " + getClassName());
}
public int getVersion()
{
return streamerInfo.getVersion();
}
public int getCheckSum()
{
return streamerInfo.getCheckSum();
}
Hashtable getMethodMap()
{
return methodMap;
}
public boolean instanceOf(String className)
{
if(name.equals(className))
return true;
RootClass sups[] = getSuperClasses();
for(int i = 0; i < sups.length; i++)
if(sups[i].instanceOf(className))
return true;
return false;
}
private Constructor proxyConstructor;
protected StreamerInfo streamerInfo;
private String name;
private Hashtable methodMap;
private static final NameMangler nameMangler = NameMangler.instance();
private RootFileReader rfr;
}
Ads help maintain this website.