001: /*--
002:
003: Copyright (C) 2000-2003 Anthony Eden.
004: All rights reserved.
005:
006: Redistribution and use in source and binary forms, with or without
007: modification, are permitted provided that the following conditions
008: are met:
009:
010: 1. Redistributions of source code must retain the above copyright
011: notice, this list of conditions, and the following disclaimer.
012:
013: 2. Redistributions in binary form must reproduce the above copyright
014: notice, this list of conditions, and the disclaimer that follows
015: these conditions in the documentation and/or other materials
016: provided with the distribution.
017:
018: 3. The name "EdenLib" must not be used to endorse or promote products
019: derived from this software without prior written permission. For
020: written permission, please contact me@anthonyeden.com.
021:
022: 4. Products derived from this software may not be called "EdenLib", nor
023: may "EdenLib" appear in their name, without prior written permission
024: from Anthony Eden (me@anthonyeden.com).
025:
026: In addition, I request (but do not require) that you include in the
027: end-user documentation provided with the redistribution and/or in the
028: software itself an acknowledgement equivalent to the following:
029: "This product includes software developed by
030: Anthony Eden (http://www.anthonyeden.com/)."
031:
032: THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
033: WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
034: OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
035: DISCLAIMED. IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT,
036: INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
037: (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
038: SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
039: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
040: STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
041: IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
042: POSSIBILITY OF SUCH DAMAGE.
043:
044: For more information on EdenLib, please see <http://edenlib.sf.net/>.
045:
046: */
047:
048: package com.anthonyeden.lib.config;
049:
050: import java.util.List;
051:
052: /**
053: * The Configuration interface represents a node in a configuration tree.
054: *
055: * @author Anthony Eden
056: */
057:
058: public interface Configuration {
059:
060: /**
061: * Get the node's name.
062: *
063: * @return The node's name
064: */
065:
066: public String getName();
067:
068: /**
069: * Get the parent configuration object. This method will return null
070: * if this configuration object is the top-most configuration object
071: * in the configuration tree.
072: *
073: * @return The parent configuration object or null
074: */
075:
076: public Configuration getParent();
077:
078: /**
079: * Get the child configuration object with the given name. If the
080: * child with the name does not exist then this method returns
081: * null. If more than one child with the given name exists then
082: * this method returns the first child.
083: *
084: * @param name The child name
085: * @return The first named child or null
086: */
087:
088: public Configuration getChild(String name);
089:
090: /**
091: * Get the value of the first child configuration object with the
092: * given name. If the child cannot be found or the child had no
093: * data then this method returns null.
094: *
095: * @param name The child name
096: * @return The value or null
097: */
098:
099: public String getChildValue(String name);
100:
101: /**
102: * Get the value of the first child configuration object with the
103: * given name. If the child cannot be found or the child had no
104: * data then this method returns the given default value.
105: *
106: * @param name The child name
107: * @param defaultValue The default value
108: * @return The value
109: */
110:
111: public String getChildValue(String name, String defaultValue);
112:
113: /**
114: * Get a list of all child nodes.
115: *
116: * @return A List of Configuration objects
117: */
118:
119: public List getChildren();
120:
121: /**
122: * Get a list of all child nodes with the given name.
123: *
124: * @param name The child node name
125: * @return A List of Configuration objects
126: */
127:
128: public List getChildren(String name);
129:
130: /**
131: * Get a List of attribute names.
132: *
133: * @return A List of attribute names
134: */
135:
136: public List getAttributeNames();
137:
138: /**
139: * Get the named attribute or null.
140: *
141: * @param name The attribute name
142: * @return The attribute value
143: */
144:
145: public String getAttribute(String name);
146:
147: /**
148: * Get the named attribute. If the attribute is not found then
149: * return the given default value.
150: *
151: * @param name The attribute name
152: * @param defaultValue The default value
153: * @return The attribute value
154: */
155:
156: public String getAttribute(String name, String defaultValue);
157:
158: /**
159: * Get the node's value or null if the node contains no data.
160: *
161: * @return The node value or null
162: */
163:
164: public String getValue();
165:
166: /**
167: * Get the node's value. If the node contains no data then return
168: * the given default value.
169: *
170: * @param defaultValue The default value
171: * @return The node value
172: */
173:
174: public String getValue(String defaultValue);
175:
176: public Location getLocation();
177:
178: public void setLocation(String id);
179:
180: /**
181: * Get the copy of the current Configuration.
182: * Whether this copy is shallow or deep depends on implementation.
183: *
184: * @return copy of this Configuration
185: */
186: public Configuration copy();
187:
188: }
|