/*
 */
package de.spieleck.config;

import java.io.PrintWriter;
import java.io.IOException;
import java.util.Iterator;


/**
 * Basic interface to programm against when using the Config tool.
 */
public interface ConfigNode
{
    /**
     * Find sub node matching name.
     */
    public ConfigNode node(String path);

    /**
     * Find node or parent sub node matching name.
     */
    public ConfigNode nodeInh(String path);

    /**
     * Find the node responsible for reading this node from file.
     */
    public ConfigFileNode getBranchNode();

    /**
     * Get the name of the node.
     */
    public String getName();

    /**
     * Get the complete path of the node.
     */
    public String getPath();

    /**
     * Get the node above.
     */
    public ConfigNode getParent();

    /** 
     * Get value as a boolean.
     */
    public boolean getBoolean();

    /**
     * Get value as an integer.
     */
    public int getInt();

    /**
     * Get value as a double.
     */
    public double getDouble();

    /**
     * Get value as String.
     */
    public String getString();

    /**
     * Get value of subnode as boolean, using default if necessary.
     */
    public boolean getBoolean(String path, boolean deflt);

    /**
     * Get value of subnode as integer, using default when necessary.
     */
    public int getInt(String path, int deflt);

    /** 
     * Get value of subnode as double, using default when necessary.
     */
    public double getDouble(String path, double deflt);

    /**
     * Get value of subnode as String, using default when necessary.
     */
    public String getString(String path, String deflt);

    /** 
     * Get value of subnode as boolean searching parent nodes before using
     * default.
     */
    public boolean getInhBoolean(String path, boolean deflt);

    /** 
     * Get value of subnode as int searching parent nodes before using
     * default.
     */
    public int getInhInt(String path, int deflt);

    /** 
     * Get value of subnode as double searching parent nodes before using
     * default.
     */
    public double getInhDouble(String path, double deflt);

    /** 
     * Get value of subnode as String searching parent nodes before using
     * default.
     */
    public String getInhString(String path, String deflt);

    /**
     * Count the number of children we have.
     */
    public int countChildren();

    /**
     * Enumerate my children.
     */
    public Iterator children();

    /**
     * Enumerate children of me, having a certain name.
     */
    public Iterator childrenNamed(String key);

    /**
     * Count the number of children we have.
     */
    public int countChildrenNamed(String key);

    /**
     * Pretty print this node with its whole subtree.
     */
    public void print(PrintWriter os)
     throws IOException;

}
//
//    Jacson - Text Filtering with Java.
//    Copyright (C) 2002 Frank S. Nestel (nestefan -at- users.sourceforge.net)
//
//    This library is free software; you can redistribute it and/or
//    modify it under the terms of the GNU Lesser General Public
//    License as published by the Free Software Foundation; either
//    version 2.1 of the License, or (at your option) any later version.
//
//    This library is distributed in the hope that it will be useful,
//    but WITHOUT ANY WARRANTY; without even the implied warranty of
//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
//    Lesser General Public License for more details.
//
//    You should have received a copy of the GNU Lesser General Public
//    License along with this library; if not, write to the Free Software
//    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
//