/**************************************************************
 *
 * 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_container_XIdentifierReplace_idl__
#define __com_sun_star_container_XIdentifierReplace_idl__

#ifndef __com_sun_star_container_XIdentifierAccess_idl__
#include <com/sun/star/container/XIdentifierAccess.idl>
#endif

#ifndef __com_sun_star_lang_IllegalArgumentException_idl__
#include <com/sun/star/lang/IllegalArgumentException.idl>
#endif

#ifndef __com_sun_star_container_NoSuchElementException_idl__
#include <com/sun/star/container/NoSuchElementException.idl>
#endif

#ifndef __com_sun_star_lang_WrappedTargetException_idl__
#include <com/sun/star/lang/WrappedTargetException.idl>
#endif


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

module com {  module sun {  module star {  module container {

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

/** This is the generic interface for supporting the replacement of elements
	with unique identifiers.
*/
published interface XIdentifierReplace: com::sun::star::container::XIdentifierAccess
{
	/** replaces the element with the specified identifier.

		@param Identifier
			specifies the identifier of the element that should be retrieved.

		@param aElement
			the new element that replaces the old element for the specified identifier.

		@throws com::sun::star::lang::IllegalArgumentException
			If the argument is not valid for this container.

		@throws com::sun::star::lang::NoSuchElementException
			If the identifier is not existing.

		@throws  com::sun::star::lang::WrappedTargetException
			If the implementation has internal reasons for exceptions,
			then wrap these in a <type scope="com::sun::star::lang">WrappedTargetException</type>
			exception.
	 */
	void replaceByIdentifer( [in] long Identifier,
			 [in] any aElement )
			raises( com::sun::star::lang::IllegalArgumentException,
					com::sun::star::container::NoSuchElementException,
					com::sun::star::lang::WrappedTargetException );

};

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

}; }; }; };

#endif
