/**************************************************************
 * 
 * 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_SetUpdate_idl__
#define __com_sun_star_configuration_SetUpdate_idl__

#ifndef __com_sun_star_configuration_SetAccess_idl__
#include <com/sun/star/configuration/SetAccess.idl>
#endif

#ifndef __com_sun_star_configuration_SimpleSetUpdate_idl__
#include <com/sun/star/configuration/SimpleSetUpdate.idl>
#endif

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

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

//=============================================================================
/** provides write access to a dynamic homogeneous set of values or nested
 trees within a hierarchy.

 <p>Allows adding and removing elements.
 Helps creates new elements to be added.
 </p>

 <p>This service extends <type>SetAccess</type> to support
 modifying the container.
 </p>

 <p>Any child and descendant objects support modifying access as well,
 unless they represent a read-only tree element (as indicated by
 <const scope="com::sun::star::beans">PropertyAttribute::READONLY</const>).
 </p>
*/
published service SetUpdate
{
/** is the basic service providing read access to a <em>set</em> within the 
 hierarchy.
*/
	service SetAccess;

/** is the basic service providing modifying access to a
 not necessarily hierarchical <em>set</em>.

 <p>Changes can be observed by registering a listener with interface
 <type scope="com::sun::star::container">XContainer</type>.
 </p>

 <p>If the elements of this set are of object type, new elements are constructed
 to match the tree structure prescribed by the element template of this set, when
 using interfaces <type scope="com::sun::star::lang">XSingleServiceFactory</type>
 and (if supported) <type scope="com::sun::star::lang">XMultiServiceFactory</type>.
 </p>

 <p>Objects that are removed from a set can be reinserted into any set supporting
 the same template within the same hierarchy. Even under a different name.
 </p>

 <p>Implementations that support insertion of objects that weren't obtained
 from within the hierarchy must reject elements that don't have the correct
 structure as described by the template, even if the object returns the
 correct template name from <member>XTemplateInstance::getTemplateName()</member>.
 </p>

 <p>Other ways in which an element may be moved among or within compatible sets
 include <member scope="com::sun::star::container">XChild::setParent()</member>
 and <member scope="com::sun::star::container">XNamed::setName()</member>, if
 the element implements them.
 </p>

 @see com::sun::star::configuration::SetElement
*/
	service SimpleSetUpdate;

};

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

}; }; }; }; 

#endif
