/* * Created on Mar 17, 2003 * * @author henkel@cs.colorado.edu * */ package bibtex.dom; import java.io.PrintWriter; import java.io.StringWriter; /** * An abstract superclass for all bibtex model nodes. * * @author henkel */ public abstract class BibtexNode { /** * Some people have asked why this constructor has a parameter of type BibtexFile (which in turn extends BibtexNode). * The reason is that each BibtexNode has a backpointer to the BibtexFile which it belongs to. Of course, for the * file itself that pointer is null. * * By the way, it's unlikely that you need to call this constructor or any constructor for BibtexNodes other than * BibtexFile directly - instead, use the BibtexFile as a factory. * * For example, to create a bibtex file equivalent of this * <pre> * ================ * @article{test1, * author="Johannes Henkel", * title="README" * } * ================ * you'd do * * BibtexFile bibtexFile = new BibtexFile(); * BibtexEntry onlyEntry = bibtexFile.makeEntry("article","test1"); * onlyEntry.setField("author",bibtexFile.makeString("Johannes Henkel")); * onlyEntry.setField("title",bibtexFile.makeString("README")); * </pre> * @param bibtexFile */ BibtexNode(BibtexFile bibtexFile){ assert (this instanceof BibtexFile) || bibtexFile!=null: "bibtexFile parameter may not be null, unless this is a BibtexFile."; this.bibtexFile = bibtexFile; } private final BibtexFile bibtexFile; public BibtexFile getOwnerFile(){ return bibtexFile; } abstract public void printBibtex(PrintWriter writer); public String toString(){ StringWriter stringWriter = new StringWriter(); PrintWriter out = new PrintWriter(stringWriter); printBibtex(out); out.flush(); return stringWriter.toString(); } }