001/*
002// $Id: //open/util/resgen/src/org/eigenbase/xom/NodeDef.java#4 $
003// Package org.eigenbase.xom is an XML Object Mapper.
004// Copyright (C) 2005-2008 The Eigenbase Project
005// Copyright (C) 2005-2008 Disruptive Tech
006// Copyright (C) 2005-2008 LucidEra, Inc.
007// Portions Copyright (C) 2001-2005 Kana Software, Inc. and others.
008//
009// This library is free software; you can redistribute it and/or modify it
010// under the terms of the GNU Lesser General Public License as published by the
011// Free Software Foundation; either version 2 of the License, or (at your
012// option) any later version approved by The Eigenbase Project.
013//
014// This library is distributed in the hope that it will be useful,
015// but WITHOUT ANY WARRANTY; without even the implied warranty of
016// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
017// GNU Lesser General Public License for more details.
018//
019// You should have received a copy of the GNU Lesser General Public License
020// along with this library; if not, write to the Free Software
021// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
022//
023// jhyde, 11 October, 2001
024*/
025
026package org.eigenbase.xom;
027import java.io.PrintWriter;
028
029/**
030 * <code>NodeDef</code> represents a node in a parse tree. It is a base class
031 * for {@link ElementDef}, {@link TextDef}, etc.
032 *
033 * @author jhyde
034 * @since 11 October, 2001
035 * @version $Id: //open/util/resgen/src/org/eigenbase/xom/NodeDef.java#4 $
036 **/
037public interface NodeDef {
038
039    /**
040     * Returns the name of this node's tag.
041     **/
042    String getName();
043
044    /**
045     * Returns the type of this element.
046     * Values are as for {@link DOMWrapper#getType}.
047     */
048    int getType();
049
050    /**
051     * Returns the text inside this node.
052     **/
053    String getText();
054
055    /**
056     * Returns the children of this node.
057     **/
058    NodeDef[] getChildren();
059
060    /**
061     * Outputs this element definition in XML to any XMLOutput.
062     * @param out the XMLOutput class to display the XML
063     **/
064    void displayXML(XMLOutput out, int indent);
065
066    /**
067     * Outputs this node to any PrintWriter,
068     * in a formatted fashion with automatic indenting.
069     * @param out the PrintWriter to which to write this NodeDef.
070     * @param indent the indentation level for the printout.
071     */
072    void display(PrintWriter out, int indent);
073
074    /**
075     * Retrieves the {@link DOMWrapper} which was used to create this
076     * node. Only works if this nodes's {@link MetaDef.Element#keepDef} was
077     * true (or, if it is not set, if the default
078     * {@link MetaDef.Model#defaultKeepDef} is true);
079     * otherwise, returns <code>null</code>.
080     *
081     * @return wrapper underlying this node
082     */
083    DOMWrapper getWrapper();
084
085    /**
086     * Returns the location of this element in its document.
087     *
088     * @return location of this element, or null if location is not available
089     */
090    Location getLocation();
091}
092
093// End NodeDef.java