/**************************************************************
 * 
 * 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_XStorageRawAccess_idl__
#define __com_sun_star_embed_XStorageRawAccess_idl__

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

#ifndef __com_sun_star_io_XStream_idl__
#include <com/sun/star/io/XStream.idl>
#endif

#ifndef __com_sun_star_io_XInputStream_idl__
#include <com/sun/star/io/XInputStream.idl>
#endif

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

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

#ifndef __com_sun_star_embed_StorageWrappedTargetException_idl__
#include <com/sun/star/embed/StorageWrappedTargetException.idl>
#endif

#ifndef __com_sun_star_embed_InvalidStorageException_idl__
#include <com/sun/star/embed/InvalidStorageException.idl>
#endif

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

#ifndef __com_sun_star_container_ElementExistException_idl__
#include <com/sun/star/container/ElementExistException.idl>
#endif

#ifndef __com_sun_star_packages_NoEncryptionException_idl__
#include <com/sun/star/packages/NoEncryptionException.idl>
#endif

#ifndef __com_sun_star_packages_NoRawFormatException_idl__
#include <com/sun/star/packages/NoRawFormatException.idl>
#endif


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

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

//============================================================================
/** This interface represents main storage functionality.
 */
published interface XStorageRawAccess
{
	// -----------------------------------------------------------------------
	/** allows to get a plain raw stream representing a package stream.

		<p>
		This method returns a stream from the package as it is stored there,
		without any decompression/decription and etc. This method can be
		helpful to check file consistency, for example by signing.
		</p>

		@returns
			the raw representation of encrypted stream with all the data
			required to copy the stream without information loss

		@param sStreamName
			the name of the substream that should be open
	
		@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::container::NoSuchElementException
			there is no element with specified name 

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

		@throws ::com::sun::star::embed::StorageWrappedTargetException
			wraps other exceptions
	 */
    ::com::sun::star::io::XInputStream getPlainRawStreamElement(
			[in] string sStreamName )
		raises( ::com::sun::star::embed::InvalidStorageException,
				::com::sun::star::lang::IllegalArgumentException,
				::com::sun::star::container::NoSuchElementException,
				::com::sun::star::io::IOException,
				::com::sun::star::embed::StorageWrappedTargetException );

	// -----------------------------------------------------------------------
	/** allows to get a raw stream representing encrypted stream with header.

		<p>
		This method allows to transport encrypted streams without decryption.
		Mainly this method is introduced to allow to copy one encrypted
		storage stream to another without decryption. It is not recommended to
		use this method outside of storage implementation since different
		storages implementation could have different encryption format. If the
		method is used outside of storage implementation the user code is
		resposible to get sure that the raw format of source and target
		storages is the same.
		</p>

		<p>
		The difference of this method from the previous one is that it handles
		only encrypted streams. The contents of returned by these methods
		streams can differ for the same entry, since this method can add
		additional data into the stream to allow successful insertion.
		</p>

		@param sStreamName
			the name of the substream that should be open
	
		@param xInputStream
			a raw stream representing encrypted stream

		@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 an encrypted one

		@throws ::com::sun::star::container::NoSuchElementException
			there is no element with specified name 

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

		@throws ::com::sun::star::embed::StorageWrappedTargetException
			wraps other exceptions
	 */
    ::com::sun::star::io::XInputStream getRawEncrStreamElement(
			[in] string sStreamName )
		raises( ::com::sun::star::embed::InvalidStorageException,
				::com::sun::star::lang::IllegalArgumentException,
				::com::sun::star::packages::NoEncryptionException,
				::com::sun::star::container::NoSuchElementException,
				::com::sun::star::io::IOException,
				::com::sun::star::embed::StorageWrappedTargetException );

	// -----------------------------------------------------------------------
	/** allows to insert a raw stream representing encrypted stream with
		header.

		<p>
		This method allows to insert a stream retrived by
		<method>XStorageRawAccess::getRawEncrStreamElement()</method> into a
		storage.
		</p>

		<p>
		This method allows to transport encrypted streams without decryption.
		Mainly this method is introduced to allow to copy one encrypted
		storage stream to another without decryption. It is not recommended to
		use this method outside of storage implementation since different
		storages implementation could have different encryption format.
		</p>

		@param sStreamName
			the name of the substream that should be open
	
		@param xInputStream
			a raw stream representing encrypted stream

		@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::NoRawFormatException
			the stream is not one of raw package stream format

		@throws ::com::sun::star::container::ElementExistException
			an element with specified name already exists

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

		@throws ::com::sun::star::embed::StorageWrappedTargetException
			wraps other exceptions
	 */
    void insertRawEncrStreamElement(
			[in] string sStreamName,
			[in] ::com::sun::star::io::XInputStream xInStream )
		raises( ::com::sun::star::embed::InvalidStorageException,
				::com::sun::star::lang::IllegalArgumentException,
				::com::sun::star::packages::NoRawFormatException,
				::com::sun::star::container::ElementExistException,
				::com::sun::star::io::IOException,
				::com::sun::star::embed::StorageWrappedTargetException );
};

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

}; }; }; };

#endif

