/**************************************************************
 * 
 * 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_ConfigurationUpdateAccess_idl__
#define __com_sun_star_configuration_ConfigurationUpdateAccess_idl__

#ifndef __com_sun_star_configuration_ConfigurationAccess_idl__
#include <com/sun/star/configuration/ConfigurationAccess.idl>
#endif

#ifndef __com_sun_star_configuration_SetUpdate_idl__
#include <com/sun/star/configuration/SetUpdate.idl>
#endif

#ifndef __com_sun_star_configuration_GroupUpdate_idl__
#include <com/sun/star/configuration/GroupUpdate.idl>
#endif

#ifndef __com_sun_star_configuration_UpdateRootElement_idl__
#include <com/sun/star/configuration/UpdateRootElement.idl>
#endif

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

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

//=============================================================================
/** provides modifying access to a fragment of the configuration hierarchy.

 <p>Extends <type>ConfigurationAccess</type> to support modifying values
 or inserting and removing elements.
 </p>

 <p>Descendants of this service also implement this service
 unless they are marked <em>read-only</em> (which is indicated by attribute 
 <const scope="com::sun::star::beans">PropertyAttribute::READONLY</const>),
 in which case they only need implement <type>ConfigurationAccess</type>.
 </p>

 <p>The classification of implementations that is described for
 <type>ConfigurationAccess</type> applies to implementations of this service
 as well. Therefore an implementation will support one of several alternate
 services describing its <em>Container</em> role and one of several alternate
 services describing its <em>Element</em> role. These services are
 extensions of the respective services documented for <type>ConfigurationAccess</type>.
 </p>
 <ul>
	<li><em>Container</em> role: 
		A <em>group</em> permits changing child values.
		A <em>set</em> permits inserting and removing contained elements.
	</li>
	<li><em>Element</em> role:
		The root element of a modifiable tree provides extended functionality
		to control processing of changes for the entire tree (fragment) by
		supporting <type scope="com::sun::star::util">XChangesBatch</type>.
		For elements of a <em>set</em> or a <em>group</em> no additinal
		interfaces are supported.
	</li>
 </ul>

 @see ConfigurationProvider
	Root instances of this service can be requested from a
	<type>ConfigurationProvider</type>
*/
published service ConfigurationUpdateAccess
{
	/** is the basic service providing read access to an element of the
	 configuration hierarchy and its child and descendent elements.

	 <p>The <type>HierarchyAccess</type> specialization implemented will be
	 further specialized to support modifying access.
	 Implementations shall therefore implement one of <type>SetUpdate</type> or
	 <type>GroupUpdate</type> depending on the <em>Container</em> role.
	 </p>

	 <p>If the <type>HierarchyElement</type> specialization that is implemented
	 is <type>AccessRootElement</type>, the implementation must support the
	 extended functionality of <type>UpdateRootElement</type>. Otherwise, there
	 are no new requirements mandated by the <em>Element</em> role.
	 </p>

	*/
	service ConfigurationAccess;

	/** specializes <type>SetAccess</type> to support modifying the element.

	 <p>Implemented, if this element is a <em>Set</em>.
	 Otherwise service <type>GroupUpdate</type> is provided.
	 </p>
	*/
	[optional] service SetUpdate;

	/** specializes <type>GroupAccess</type> to support modifying contained
	 data. 

	 <p>Implemented, if this element is a <em>Group</em>.
	 Otherwise service <type>SetUpdate</type> is provided.
	 </p>
	*/
	[optional] service GroupUpdate;

	/** specializes <type>AccessRootElement</type> to support transaction-like
	 control over a batch of changes accumulated within the tree fragment.

	 <p>Implemented, if this element is the <em>Root</em> of the whole hierarchy.
	 Otherwise either <type>SetElement</type> or <type>GroupElement</type> is provided.
	 </p>

	 @see ConfigurationProvider
		Instances obtained from a <type>ConfigurationProvider</type> will
		implement this version of <type>HierarchyElement</type>.
	*/
	[optional] service UpdateRootElement;
};

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

}; }; }; }; 

#endif

