/**************************************************************
 * 
 * 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_ConfigurationRegistry_idl__
#define __com_sun_star_configuration_ConfigurationRegistry_idl__

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

#ifndef __com_sun_star_registry_XSimpleRegistry_idl__
#include <com/sun/star/registry/XSimpleRegistry.idl>
#endif
#ifndef __com_sun_star_util_XFlushable_idl__
#include <com/sun/star/util/XFlushable.idl>
#endif

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

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


/*	provides access to a configuration tree as a registry. 

    <p>This service is deprecated,
    <type scope="com.sun.star.configuration">ConfigurationProvider</type> should
    be used instead.</p>

	<p> Using the <type scope="com::sun::star::registry">XSimpleRegistry</type> 
	interface, the service can be bound to a subtree within the 
	configuration tree, as provided by an 
	<type scope="com.sun.star.configuration">ConfigurationProvider</type>
	service, which must be accessible from the service factory you use for the
	creation of this service.
	</p>
	<p>	There are some restrictions when accessing a configuration tree using a registry.
	Most of them are implications of the fact that a configuration tree is very static in
	it's structure. Removal and addition of sub nodes is allowed only for special
	nodes, and even then the new elements have to comply to a given scheme (which is some
	kind of attribute of the container node). So for instance the
	<member scope="com.sun.star.registry">XRegistryKey::createKey()</member> method is not allowed
	for some nodes.
	</p><p>
	Thus anybody using this service is strongly advised to read and understand the specification
	of an configuration provider (<type scope="com.sun.star.configuration">ConfigurationProvider</type>)
	and all of it's aspects.
	</p>

	@author	Frank Schoenheit
	@version 1.0 2000/07/06
*/

published service ConfigurationRegistry
{
	/** controls the binding of the object to a configuration sub tree.
		<p><member scope="com::sun::star::registry">XSimpleRegistry::open()</member> 
		is used to open a special subtree within the configuration tree.
		</p>
		<p>The parameters of this method control the location of the root of the to-be-opened
		configuration node and the access mode (read only or updatable).
		</p>
	*/
	interface com::sun::star::registry::XSimpleRegistry;

	/** is used to commit changes to the configuration.
		<p>As specified for the 
		<type scope="com::sun::star::configuration">ConfigurationUpdateAccess</type>
		service, all changes made to an configuration subtree have to be committed 
		before they become persistent. 
		To do this for a configuration accessed as a registry, call
		<method scope="com::sun::star::util">XFlushable::flush</method>.
		</p>
		<p><strong>Warning:</strong><em>Changes that are not flushed will be 
		lost.</em>
		</p>
	*/
	interface com::sun::star::util::XFlushable;
};


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

}; }; }; }; 


#endif

