package hep.rootio.util;
import hep.rootio.*;
import hep.rootio.interfaces.TNamed;
import hep.rootio.interfaces.TStreamerInfo;
import java.io.*;
import java.util.*;
public class InterfaceBuilder
{
private String mess="";
public InterfaceBuilder()
{
nameMangler = NameMangler.instance();
base = new File(".");
}
public InterfaceBuilder(File dir)
{
nameMangler = NameMangler.instance();
base = dir;
}
/**
* Build interface
* @param file
* @throws IOException
*/
public InterfaceBuilder(String file) throws IOException
{
String tom="";
RootFileReader rfr = new RootFileReader(new File(file));
RootClassFactory rcf = rfr.getFactory();
InterfaceBuilder ib = new InterfaceBuilder(new File("."));
List list = rfr.streamerInfo();
for(Iterator i = list.iterator(); i.hasNext();)
{
TStreamerInfo info = (TStreamerInfo)i.next();
String name = info.getName();
try
{
Class k = Class.forName("hep.rootio.interfaces." + name);
// System.out.println("Skipping " + name);
tom=tom+"Skipping " + name+ "\n";
}
catch(ClassNotFoundException classnotfoundexception)
{
RootClass rc;
try {
rc = rcf.create(name);
File f = ib.write(rc);
// System.out.println("Created " + f.getPath());
tom=tom+"Created " + f.getPath()+"\n";
} catch (RootClassNotFound e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
mess=tom;
}
/**
* Get message about what was done
* @return
*/
public String message(){
return mess;
}
public File write(RootClass klass)
throws IOException
{
String klassPath = nameMangler.mangleClass(klass.getClassName());
StringBuffer packidge = new StringBuffer();
File file = base;
StringTokenizer t = new StringTokenizer(klassPath, ".");
int count = t.countTokens() - 1;
for(int i = 0; i < count; i++)
{
String token = t.nextToken();
file = new File(file, token);
if(i > 0)
packidge.append('.');
packidge.append(token);
}
String klassName = t.nextToken();
file.mkdirs();
file = new File(file, klassName + ".java");
PrintWriter out = new PrintWriter(new FileOutputStream(file));
out.println("/*");
out.println(" * Interface created by InterfaceBuilder. Do not modify.");
out.println(" *");
out.println(" * Created on " + new Date());
out.println(" */");
out.println();
out.println("package " + packidge + ";");
if(!packidge.toString().equals("hep.rootio.interfaces"))
out.println("import hep.rootio.interfaces.*;");
out.println();
out.print("public interface " + klassName + " extends RootObject");
RootClass superClasses[] = klass.getSuperClasses();
for(int i = 0; i < superClasses.length; i++)
out.print(", " + nameMangler.mangleClass(superClasses[i].getClassName()));
out.println();
out.println("{");
RootMember members[] = klass.getMembers();
for(int i = 0; i < members.length; i++)
{
String comment = members[i].getComment();
if(comment != null && comment.length() > 0)
out.println("\t/** " + comment + " */");
RootClass type = members[i].getType();
StringBuffer jType = new StringBuffer(type.getJavaType());
for(int j = 0; j < members[i].getArrayDim(); j++)
jType.append("[]");
String name = nameMangler.mangleMember(members[i].getName());
out.println("\t" + jType + " " + name + "();");
}
int version = klass.getVersion();
int checkSum = klass.getCheckSum();
if(version > 0 || checkSum > 0)
out.println();
if(version > 0)
out.println("\tpublic final static int rootIOVersion=" + version + ";");
if(checkSum > 0)
out.println("\tpublic final static int rootCheckSum=" + checkSum + ";");
out.println("}");
out.close();
return file;
}
public static void main(String argv[])
throws Exception
{
if(argv.length < 1)
usage();
RootFileReader rfr = new RootFileReader(argv[0]);
RootClassFactory rcf = rfr.getFactory();
InterfaceBuilder ib = new InterfaceBuilder(new File("."));
if(argv.length > 1)
{
RootClass rc = rcf.create(argv[1]);
File f = ib.write(rc);
System.out.println("Created " + f.getPath());
} else
{
List list = rfr.streamerInfo();
for(Iterator i = list.iterator(); i.hasNext();)
{
TStreamerInfo info = (TStreamerInfo)i.next();
String name = info.getName();
try
{
Class k = Class.forName("hep.rootio.interfaces." + name);
System.out.println("Skipping " + name);
}
catch(ClassNotFoundException classnotfoundexception)
{
RootClass rc = rcf.create(name);
File f = ib.write(rc);
System.out.println("Created " + f.getPath());
}
}
}
}
private static void usage()
{
System.out.println("java RootObjectBrowser []");
System.exit(0);
}
private File base;
private NameMangler nameMangler;
}
Ads help maintain this website.