/**************************************************************
 * 
 * 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_embed_XEncryptionProtectedSource_idl__
#define __com_sun_star_embed_XEncryptionProtectedSource_idl__

#ifndef __com_sun_star_uno_XInterface_idl__
#include <com/sun/star/uno/XInterface.idl>
#endif

#ifndef __com_sun_star_io_IOException_idl__
#include <com/sun/star/io/IOException.idl>
#endif

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

 module com {  module sun {  module star {  module embed {

//============================================================================
/** This interface allows to set a password for an object.
 */
published interface XEncryptionProtectedSource: com::sun::star::uno::XInterface
{
	// -----------------------------------------------------------------------
	/** sets a password for the object.

	@param sPassword
		the new password

	@throws ::com::sun::star::io::IOException
		in case password could not be set
	 */
	void setEncryptionPassword( [in] string sPassword )
		raises( ::com::sun::star::io::IOException );
	
	// -----------------------------------------------------------------------
	/** removes encryption from the object.

	@throws ::com::sun::star::io::IOException
		in case encryption could not be removed
	 */
	void removeEncryption()
		raises( ::com::sun::star::io::IOException );
};

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

}; }; }; };

#endif

