/**************************************************************
 * 
 * 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_XHierarchicalStorageAccess2_idl__
#define __com_sun_star_embed_XHierarchicalStorageAccess2_idl__

#ifndef __com_sun_star_embed_XHierarchicalStorageAccess_idl__
#include <com/sun/star/embed/XHierarchicalStorageAccess.idl>
#endif

#ifndef __com_sun_star_beans_NamedValue_idl__
#include <com/sun/star/beans/NamedValue.idl>
#endif

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

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

//============================================================================
/** This interface extends XHierarchicalStorageAccess interface.
 */
interface XHierarchicalStorageAccess2 : XHierarchicalStorageAccess
{
	// -----------------------------------------------------------------------
	/** allows to get access to a child encrypted stream with encryption data
        using hierarchical path.

		<p>
		If storage does not allow any encryption this method will always throw
		<type scope="com::sun::star::packages">NoEncryptionException</type>.
		</p>
	
		<p>
		In case the stream is open in readonly mode the
		<method scope="com::sun::star::io">XStream::getOutputStream</method>
		method will return an empty reference.
		</p>

		@param sStreamPath
			the path to the substream that should be open
	
		@param nOpenMode
			a mode the stream should be open in,
			can be a combination of <type>ElementModes</type> values

		@param aEncryptionData
			this parameter allowes to specify an encryption data for the
			stream, the data must be correct, otherwise an
			exception will be thrown

		@throws ::com::sun::star::embed::InvalidStorageException
			this storage is in invalid state for any reason

		@throws ::com::sun::star::lang::IllegalArgumentException
			one of provided arguments is illegal

		@throws ::com::sun::star::packages::NoEncryptionException
			the stream is not encrypted

		@throws ::com::sun::star::packages::WrongPasswordException
			the provided password is wrong

		@throws ::com::sun::star::io::IOException
			in case of io errors during stream opening

		@throws ::com::sun::star::embed::StorageWrappedTargetException
			wraps other exceptions
	 */
    XExtendedStorageStream  openEncryptedStreamByHierarchicalName(
			[in] string sStreamName,
			[in] long nOpenMode,
			[in] sequence< ::com::sun::star::beans::NamedValue > aEncryptionData )
		raises( ::com::sun::star::embed::InvalidStorageException,
				::com::sun::star::lang::IllegalArgumentException,
				::com::sun::star::packages::NoEncryptionException,
				::com::sun::star::packages::WrongPasswordException,
				::com::sun::star::io::IOException,
				::com::sun::star::embed::StorageWrappedTargetException );
};

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

}; }; }; };

#endif

