/**************************************************************
 * 
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you 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.
 * 
 *************************************************************/


#ifndef __com_sun_star_configuration_HierarchyAccess_idl__
#define __com_sun_star_configuration_HierarchyAccess_idl__

#ifndef __com_sun_star_container_XNameAccess_idl__
#include <com/sun/star/container/XNameAccess.idl>
#endif

#ifndef __com_sun_star_container_XHierarchicalNameAccess_idl__
#include <com/sun/star/container/XHierarchicalNameAccess.idl>
#endif

#ifndef __com_sun_star_container_XContainer_idl__
#include <com/sun/star/container/XContainer.idl>
#endif

#ifndef __com_sun_star_beans_XExactName_idl__
#include <com/sun/star/beans/XExactName.idl>
#endif

#ifndef __com_sun_star_beans_XPropertySetInfo_idl__
#include <com/sun/star/beans/XPropertySetInfo.idl>
#endif

#ifndef __com_sun_star_beans_XPropertyState_idl__
#include <com/sun/star/beans/XPropertyState.idl>
#endif

#ifndef __com_sun_star_beans_XMultiPropertyState_idl__
#include <com/sun/star/beans/XMultiPropertyStates.idl>
#endif

//=============================================================================

module com { module sun { module star { module configuration { 

//=============================================================================
/** provides access to a hierarchy of descendant elements.

 <p>Subnodes are accessed by their name. Values that are direct or indirect 
 descendants of this tree node can be retrieved. Non-value subnodes can be 
 navigated using container interfaces.
 Other interfaces provide access to information about this node.
 Changes to values in the subtree can be monitored by event listeners.
 </p>

 <p>Elements of this container that are not simple values
 are similar containers themselves, thus (recursively) forming a
 hierarchical tree.
 </p>

 <p>Implementations of this service usually also implement
 service <type>HierarchyElement</type>, which concerns the complementary role
 of being accessible as an element of the hierarchy.
 </p>
*/
published service HierarchyAccess
{
/** allows access to immediate children of this node.

 <p><member scope="com::sun::star::container">XNameAccess::getByName()</member>
 returns an <atom>any</atom> holding either a simple value or an interface
 on another HierarchyAccess if the child is not a simple value.
 </p>
*/
	interface com::sun::star::container::XNameAccess;

/** allows access to all descendants of this node 

 <p><member scope="com::sun::star::container">XHierarchicalNameAccess::getByHierarchicalName()</member>
 returns an <atom>any</atom> holding either a simple value or an interface
 on another HierarchyAccess if the descendant is not a simple value.
 </p>
*/
	interface com::sun::star::container::XHierarchicalNameAccess;

/** allows attaching listeners to this node to monitor changes to immediate child nodes.
*/
	interface com::sun::star::container::XContainer;

/** provides support for inexact names.
 <p>Exact names can be obtained for simple or hierarchical names for use in
 <type scope="com::sun::star::container">XNameAccess</type>,
 <type scope="com::sun::star::container">XHierarchicalNameAccess</type>,
 <type scope="com::sun::star::beans">XPropertySet</type> or
 any other interfaces that allow access to or manipulation of subnodes 
 selected by name or hierarchical name. 
 </p>
 <p>If an inexact name could be matched to either a simple or a hierachical 
 name, the simple (immediate child) name is preferred.
 </p>
*/
	interface com::sun::star::beans::XExactName;

/** provides information about immediate children of this node. [optional]

 <p>This interface may be missing, if the hierarchy supports no traits that are
 described by <type scope="com::sun::star::beans">PropertyAttribute</type>
 values or if the same information is available by other means, 
 e.g. if the implementation supports 
 <member scope="com::sun::star::beans">XPropertySet::getPropertySetInfo()</member>.
 </p>

 <p>If a child of this node is an object that implements 
 <type scope="com::sun::star::beans">XProperty</type>, then this implementation  
 returns the same <type scope="com::sun::star::beans">Property</type> for that
 child as the child itself.
 </p>
*/
	[optional] interface com::sun::star::beans::XPropertySetInfo;

/** provides access to the state of child elements of an implementation. [optional]
 
 <p>This interface may be missing if the hierarchy (or a hierarchy fragment
 that contains this implementation as element) does not support default values or
 if the node does not support accessing the default state of individual children.
 </p>
 
 <p>If elements that are not simple values, but objects themselves, support
 a default state (as indicated by 
 <const scope="com::sun::star::beans">PropertyAttribute::MAYBEDEFAULT</const>),
 they should implement 
 <type scope="com::sun::star::beans">XPropertyWithState</type>, in which case
 the <type scope="com::sun::star::beans">PropertyState</type> applies to all
 their children and recursively to all descendants. 
 </p>

 <p>If an implementation is part of a <em>read-only</em> view of the hierarchy,
 attempts to change property states will fail.
 </p>
*/
	[optional] interface com::sun::star::beans::XPropertyState;

/** provides access to the states of multiple child elements of 
 an implementation. [optional]
 
 <p>This interface may be missing if the hierarchy (or a hierarchy fragment
 that contains this implementation as element) does not support default values 
 if the node does not support accessing the default state of individual children.
 </p>
 
 <p>If elements that are not simple values, but objects themselves, support
 a default state (as indicated by 
 <const scope="com::sun::star::beans">PropertyAttribute::MAYBEDEFAULT</const>),
 they should implement 
 <type scope="com::sun::star::beans">XPropertyWithState</type>, in which case
 the <type scope="com::sun::star::beans">PropertyState</type> applies to all
 their children and recursively to all descendants. 
 </p>

 <p>If an implementation is part of a <em>read-only</em> view of the hierarchy,
 attempts to change property states will fail.
 </p>
*/
	[optional] interface com::sun::star::beans::XMultiPropertyStates;
};

//=============================================================================

}; }; }; }; 

#endif
