// Copyright 2000-2005, FreeHEP. package org.freehep.rtti; import java.util.*; /** * Defines a class/interface in the RTTI. * * @author Mark Donszelmann * @version $Id: IClass.java 8584 2006-08-10 23:06:37Z duns $ */ public class IClass { private String name; private boolean isClass; private String packageName; private Vector packageComments; private Vector comments; private Vector eocComments; private Vector eopComments; private Vector eofComments; private String[] templateParameters; private String[] interfaces; private IConstructor[] constructors; private IDestructor destructor; private IMethod[] methods; private IField[] fields; private IField[] enumFields = new IField[0]; IClass(String name, boolean isClass, String packageName, Vector packageComments, Vector comments, Vector eocComments, String[] templateParameters, String[] interfaces, IConstructor[] constructors, IDestructor destructor, IMethod[] methods, IField[] fields) { this.name = name; this.isClass = isClass; this.packageName = packageName; this.packageComments = packageComments; this.comments = comments; this.eocComments = eocComments; this.templateParameters = templateParameters; this.interfaces = interfaces; this.constructors = constructors; this.destructor = destructor; this.methods = methods; this.fields = fields; } /** * returns the name of this class * * * @return name of the class (unqualified) */ public String getName() { return name; } /** * returns true if this is a class * * * @return true if this is a class */ public boolean isClass() { return isClass; } /** * Returns the package name * * @return full package name */ public String getPackageName() { return packageName; } /** * Returns the package name, consisting of the prefix and the defined package name. * * * @param packagePrefix prefix to be prefix to the defined package name, or null, if not necessary. * * @return full package name including prefix */ public String getPackageName(String packagePrefix) { if ((packagePrefix != null) && (!packagePrefix.equals(""))) { if ((packageName != null) && (!packageName.equals(""))) { return packagePrefix + "." + packageName; } else { return packagePrefix; } } return packageName; } /** * Returns the list of package comments describing this class. * * * @return list of package comments. */ public String[] getPackageComments(String language) { return RTTI.getComments(packageComments, language); } /** * Returns the list of comments describing this class. * * * @return list of comments. */ public String[] getComments(String language) { return RTTI.getComments(comments, language); } /** * Returns the list of end-of-class comments. * * * @return list of comments. */ public String[] getEOCComments(String language) { return RTTI.getComments(eocComments, language); } /** * Returns the list of end-of-package comments. * * * @return list of comments. */ public String[] getEOPComments(String language) { return RTTI.getComments(eopComments, language); } public void setEOPComments(Vector eopComments) { this.eopComments = eopComments; } /** * Returns the list of end-of-file comments. * * * @return list of comments. */ public String[] getEOFComments(String language) { return RTTI.getComments(eofComments, language); } public void setEOFComments(Vector eofComments) { this.eofComments = eofComments; } public IField[] getEnumFields() { return enumFields; } public void setEnumFields(Vector enumFields) { this.enumFields = new IField[enumFields.size()]; enumFields.toArray(this.enumFields); } /** * Returns the list of template parameters used by this class. * * * @return list of template parameter names */ public String[] getTemplateParameters() { return templateParameters; } /** * Returns the list of interfaces, implemented by this class. * * * @return list of interface names */ public String[] getInterfaces() { return interfaces; } /** * Returns the list of constructors defined in this class. * * * @return list of constructors */ public IConstructor[] getConstructors() { return constructors; } /** * Returns the destructor defined in this class. * * * @return destructor */ public IDestructor getDestructor() { return destructor; } /** * Returns the list of methods (including static ones) defined in this class * * * @return list of methods */ public IMethod[] getMethods() { return methods; } /** * Returns the list of fields (including static ones) defined in this class * * * @return list of fields */ public IField[] getFields() { return fields; } /** * Semi-java string representation of this class without package prefix. * * * @return Semi-java string representation of this class without package prefix. */ public String toString() { return toString(null); } /** * Semi-java string representation of this class without package prefix. * * @param packagePrefix prefix to be used in the string representation. * * @return Semi-java string representation of this class without package prefix. */ public String toString(String packagePrefix) { StringBuffer s = new StringBuffer(); String[] packageComments = getPackageComments(null); for (int i = 0; i < packageComments.length; i++) { s.append(packageComments[i]); } s.append("package "); s.append(getPackageName(packagePrefix)); s.append(";"); String[] comments = getComments(null); for (int i = 0; i < comments.length; i++) { s.append(comments[i]); } s.append("\n"); s.append("public "); s.append(isClass() ? "class" : "interface"); s.append(" "); s.append(getName()); String[] interfaces = getInterfaces(); if (interfaces.length > 0) { s.append(" extends "); for (int i = 0; i < interfaces.length; i++) { s.append(interfaces[i]); if (i < interfaces.length - 1) { s.append(", "); } } } s.append(" {"); s.append("\n"); IConstructor[] constructors = getConstructors(); for (int i = 0; i < constructors.length; i++) { s.append(constructors[i]); } IDestructor destructor = getDestructor(); if (destructor != null) { s.append(destructor); } IMethod[] methods = getMethods(); for (int i = 0; i < methods.length; i++) { s.append(methods[i]); } IField[] fields = getFields(); for (int i = 0; i < fields.length; i++) { s.append(fields[i]); } String[] eocComments = getEOCComments(null); for (int i = 0; i < eocComments.length; i++) { s.append(eocComments[i]); } s.append("\n"); s.append("\n}\n"); String[] eofComments = getEOFComments(null); for (int i = 0; i < eofComments.length; i++) { s.append(eofComments[i]); } s.append("\n"); return s.toString(); } }