package org.codehaus.plexus.configuration;
/*
* Copyright 2001-2006 Codehaus Foundation.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/**
* A configuration data hierarchy for configuring aspects of plexus. For
* example, to populate a ComponentDescriptor. Implementation of
* PlexusConfiguration may be populated by any means, for example, by XML file.
*/
public interface PlexusConfiguration
{
// ----------------------------------------------------------------------
// Name handling
// ----------------------------------------------------------------------
/**
* Returns the name of this configuration.
* @return the name of this configuration
*/
String getName();
/**
* Sets the name of this configuration.
* @param name
*/
void setName(String name);
// ----------------------------------------------------------------------
// Value handling
// ----------------------------------------------------------------------
/**
* Returns the value of this configuration.
* @return the value of this configuration
*/
String getValue();
/**
* Returns the value of this configuration, or default if one cannot be
* found.
* @param defaultValue value to return if none is found
* @return the value of this configuration
*/
String getValue( String defaultValue );
/**
* Set the value of a configuration element.
* @param value
* @return
*/
void setValue( String value );
/**
* Set the value of a configuration element and return the PlexusConfiguration object
* so that further operations can be carried out.
* @param value
* @return
*/
PlexusConfiguration setValueAndGetSelf( String value );
// ----------------------------------------------------------------------
// Attribute handling
// ----------------------------------------------------------------------
/**
* Sets an attribute on this configuration.
* @param name
* @param value
*/
void setAttribute( String name, String value );
/**
* Returns an array of attribute names.
* @return an array of attribute names
*/
String[] getAttributeNames();
/**
* Returns the value of the named attribute.
* @return the value of the named attribute
* @throws PlexusConfigurationException
*/
String getAttribute( String paramName )
throws PlexusConfigurationException;
/**
* Returns the value of the named attribute, or default if one cannot be
* found.
* @param defaultValue value to return if none is found
* @return the value of the named attribute
*/
String getAttribute( String name, String defaultValue );
// ----------------------------------------------------------------------
// Child handling
// ----------------------------------------------------------------------
/**
* Returns the child configuration of the given name.
* @param child the name of the child to return
* @return the child configuration of the given name
*/
PlexusConfiguration getChild( String child );
/**
* Returns the child configuration at the given location.
* @param i the position of the child under this configuration
* @return the child configuration at the given location
*/
PlexusConfiguration getChild( int i );
/**
* Returns the child configuration of the given name.
* @param child the name of the child to return
* @param createChild true if a new child should be create, if none found
* @return the child configuration of the given name, or new child if
* created
*/
PlexusConfiguration getChild( String child, boolean createChild );
/**
* Returns an array of all child configurations.
* @return an array of all child configurations
*/
PlexusConfiguration[] getChildren();
/**
* Returns an array of all child configurations with the given name.
* @param name the name of the children configurations to return
* @return an array of all child configurations with the given name
*/
PlexusConfiguration[] getChildren( String name );
/**
* Adds a configuration under this configuration, which acts as
* a parent.
* @param configuration the child configuration to add
*/
void addChild( PlexusConfiguration configuration );
/**
* Add a child element with a given name and return the newly created element.
* @param name
* @return
*/
PlexusConfiguration addChild( String name );
/**
* Add a child element with a given name, and given value and return the
* newly created element.
* @param name
* @return
*/
PlexusConfiguration addChild( String name, String value );
/**
* Returns the number of directly children under this configuration.
* @return the number of directly children under this configuration.
*/
int getChildCount();
}