// Copyright 2002-2005, FreeHEP. package org.freehep.aid; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import org.freehep.aid.cli.Aid; import org.freehep.rtti.IClass; import org.freehep.rtti.IPackage; import org.freehep.util.UserProperties; import org.freehep.util.io.IndentPrintWriter; /** * Generates one header file which includes all other header files * * @author Mark Donszelmann * @version $Id: CPPPackageHeaderGenerator.java 8584 2006-08-10 23:06:37Z duns $ */ public class CPPPackageHeaderGenerator extends AbstractGenerator { protected final static String language = "cpp"; protected CPPTypeConverter converter; protected UserProperties includeProperties = new UserProperties(); public CPPPackageHeaderGenerator(String propDir) { super(); AidUtil.loadProperties(properties, getClass(), propDir, "aid.cpp.properties"); AidUtil.loadProperties(includeProperties, getClass(), propDir, "aid.includes."+language+".properties"); converter = new CPPTypeConverter(propDir); } protected String namespace(IClass clazz) { return converter.namespace(clazz.getPackageName()); } public String directory(IClass clazz) { return namespace(clazz).replaceAll("::","_"); } public String filename(IClass clazz) { String name = directory(clazz); if (name.equals("")) name = "DEFAULT"; return name+".h"; } public boolean print(File file, IClass clazz) throws IOException { IndentPrintWriter out = new IndentPrintWriter(new PrintWriter(new BufferedWriter(new FileWriter(file)))); out.setIndentString(" "); out.println("// -*- C++ -*-"); warning(out); String define = filename(clazz).toUpperCase().replaceAll("::", "_").replaceAll("\\.", "_"); out.println("#ifndef "+define); out.println("#define "+define+" 1"); out.println(); // FIXME we need to use tha package names here... IPackage[] p = Aid.getRTTI().getPackages(); for (int i=0; i<p.length; i++) { IClass[] c = p[i].getClasses(); for (int j=0; j<c.length; j++ ) { IClass cls = c[j]; String name = converter.qualifiedName(cls.getName(), "" ); out.println("#include \""+includeProperties.getProperty(name, name)+"\""); } } out.println(); out.println("#endif /* ifndef "+define+" */"); out.close(); return true; } }