/**************************************************************
 * 
 * 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_packages_PackageStream_idl__ 
#define __com_sun_star_packages_PackageStream_idl__ 
 

#ifndef __com_sun_star_container_XNamed_idl__ 
#include <com/sun/star/container/XNamed.idl>
#endif

#ifndef __com_sun_star_container_XChild_idl__ 
#include <com/sun/star/container/XChild.idl>
#endif

#ifndef __com_sun_star_beans_XPropertySet_idl__ 
#include <com/sun/star/beans/XPropertySet.idl>
#endif

#ifndef __com_sun_star_io_XActiveDataSink_idl__ 
#include <com/sun/star/io/XActiveDataSink.idl>
#endif

//============================================================================= 
 
module com {  module sun {  module star {   module packages {  
 
//============================================================================= 

/**This service represents a stream contained within a Package. Instances of
this class can only be constructed by the implementation of the Package 
service.
*/
published service PackageStream
{
	/**
	This sets or gets the name of the Stream as contained within its parent
	PackageFolder.
	*/
	interface com::sun::star::container::XNamed;
	/**
	getParent returns the PackageFolder that the PackageStream is in. This
	may be the root PackageFolder. setParent moves a PackageStream.
	*/
	interface com::sun::star::container::XChild;
	/**
	getInputStream provides read access to the contents of this PackageStream.
	If this PackageStream was a member of the Package when it was instantiated,
	the XInputStream returned is a Reference to the stream of the whole Package,
	with limits set on where it can seek to and read from. If the PackageStream
	is a new addition to the package, then getInputStream returns a Reference
	to the XInputStream which was specified with setInputStream.

	setInputStream - provides a stream to the data contained in the PackageStream
	this must be specified for new PackageStreams added to the Package. If this
	is called more than once, it will replace the existing stream.
	*/
	interface com::sun::star::io::XActiveDataSink;
	/**
	This interface provides access to the properties of the package entry.
	Currently, this supports three entries:

	1. Size, describing the uncompressed size of PackageStream.
	2. MediaType, a string describing the MIME type of the stream.
	3. Compress, a boolean flag to specify whether or not to compress
	   this PackageStream.
	*/
	interface com::sun::star::beans::XPropertySet;
};
}; }; }; };
 
#endif 
