/**************************************************************
 * 
 * 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_PackageFolder_idl__ 
#define __com_sun_star_packages_PackageFolder_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_container_XNameContainer_idl__ 
#include <com/sun/star/container/XNameContainer.idl>
#endif

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

#ifndef __com_sun_star_container_XEnumerationAccess_udl__ 
#include <com/sun/star/container/XEnumerationAccess.idl>
#endif
//============================================================================= 
 
module com {  module sun {  module star {   module packages {  
 
//============================================================================= 
/**
	The PackageFolder service represents a single folder or directory within 
	a Package. Instances of this service can only be constructed by an
	implementation of the Package service and not via the service manager.
*/
published service PackageFolder
{
	/**
	This interface is used to get or set the name of the folder.
	*/
	interface com::sun::star::container::XNamed;
	/**
	The getParent method of XChild will return the PackageFolder that 
	contains this PackageFolder or nothing if this PackageFolder is
	the root PackageFolder.

	setParent will move the PackageFolder.
	*/
	interface com::sun::star::container::XChild;
	/**
	This interface describes all of the PackageFolders and PackageStreams
	which are contained within this instance of the PackageFolder service.

	XElementAccess::getElementType returns service PackageStream
	XNameAccess::getByName returns either a PackageFolder or a PackageStream
		as a css::uno::Any
	XNameAccess::getElementNames returns an uno::Sequence of strings containing
		the names of all children stored in the PackageFolder
	*/
	interface com::sun::star::container::XNameContainer;
	/**
	This interface will return an implementation of service 
	PackageFolderEnumeration, which represents an iterator over the children
	of the PackageFolder, or the PackageStreams and PackageFolders contained
	within this instance of the PackageFolder service.
	
	This provides a "snapshot" of the contents of the
	PackageFolder at the time of construction. It is the responsibility of the
	caller to ensure that any given member of the enumeration refers to a valid
	PackageStream or PackageFolder. 
	
	*/
	interface com::sun::star::container::XEnumerationAccess;

	/**
	This interface provides access to the properties of the package entry.
	Currently, this only supports one entry which is a string called
	MediaType. This contains the MIME type of the stream (eg. "text/html").
	For PackageFolders, this is always an empty string.
	*/
	interface com::sun::star::beans::XPropertySet;
};
}; }; }; };
 
#endif 
