/**************************************************************
 * 
 * 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_sdb_DocumentSaveRequest_idl__ 
#define __com_sun_star_sdb_DocumentSaveRequest_idl__ 
 
#ifndef __com_sun_star_task_ClassifiedInteractionRequest_idl__ 
#include <com/sun/star/task/ClassifiedInteractionRequest.idl> 
#endif 
#ifndef __com_sun_star_ucb_XContent_idl__ 
#include <com/sun/star/ucb/XContent.idl> 
#endif 
 
//============================================================================= 
 
 module com {  module sun {  module star {  module sdb { 
 
//============================================================================= 
 
/** an error specifying the lack of a document name
	<p>
	Usually thrown if someone tries to save a document which hasn't a name yet.
	</p>
	@since OOo 2.0
*/
exception DocumentSaveRequest: com::sun::star::task::ClassifiedInteractionRequest
{ 
	/** specifies the content where the document should save inside.
		Somebody handling the request could, e.g., use the content as root content 
		to display the hierarchy of the sub contents.
	*/
	com::sun::star::ucb::XContent Content;

	/** The default name of the document, may be empty.
	 */
	string Name;
}; 
 
//============================================================================= 
 
}; }; }; }; 
 
/*============================================================================= 
 
=============================================================================*/ 
#endif 

