/**************************************************************
 * 
 * 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_ucb_TransientDocumentsRootContent_idl__
#define __com_sun_star_ucb_TransientDocumentsRootContent_idl__

#ifndef __com_sun_star_lang_XComponent_idl__
#include <com/sun/star/lang/XComponent.idl>
#endif

#ifndef __com_sun_star_ucb_XContent_idl__
#include <com/sun/star/ucb/XContent.idl>
#endif

#ifndef __com_sun_star_ucb_XCommandProcessor_idl__
#include <com/sun/star/ucb/XCommandProcessor.idl>
#endif

#ifndef __com_sun_star_ucb_XCommandProcessor2_idl__
#include <com/sun/star/ucb/XCommandProcessor2.idl>
#endif

#ifndef __com_sun_star_beans_XPropertiesChangeNotifier_idl__
#include <com/sun/star/beans/XPropertiesChangeNotifier.idl>
#endif

#ifndef __com_sun_star_beans_XPropertyContainer_idl__
#include <com/sun/star/beans/XPropertyContainer.idl>
#endif

#ifndef __com_sun_star_beans_XPropertySetInfoChangeNotifier_idl__
#include <com/sun/star/beans/XPropertySetInfoChangeNotifier.idl>
#endif

#ifndef __com_sun_star_ucb_XCommandInfoChangeNotifier_idl__
#include <com/sun/star/ucb/XCommandInfoChangeNotifier.idl>
#endif

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

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

module com { module sun { module star { module ucb {

//=============================================================================
/** A TDCP Root Folder is the root container for all other DTCP contents.

    <p>There is at most one instance of a TDCP Root at a time. All other TDCP
    contents are children of this folder. The TDCP Root Folder can contain
    only TDCP Documents. It has the fixed URL "vnd.sun.star.tdoc:/".

    @see TransientDocumentsContentProvider
    @see TransientDocumentsDocumentContent
    @see TransientDocumentsFolderContent
    @see TransientDocumentsStreamContent

    @since OOo 2.0
*/
service TransientDocumentsRootContent
{
	//-------------------------------------------------------------------------
	/** This interface is implemented according to the specification of
		service <type>Content</type>.
	 */
	interface com::sun::star::lang::XComponent;

	//-------------------------------------------------------------------------
	/** This interface is implemented according to the specification of
		service <type>Content</type>.
	 */
	interface com::sun::star::ucb::XContent;

	//-------------------------------------------------------------------------
	/** This interface is implemented according to the specification of
		service <type>Content</type>.

		<p>

		<b>Supported Commands</b>
		<ul>
		<li>
		getCommandInfo
		</li>
		<li>
		getPropertySetInfo
		</li>
		<li>
		getPropertyValues
		</li>
		<li>
		setPropertyValues
		</li>
		<li>
		open
		</li>
		</ul>

		<b>Supported Properties</b>
		<ul>
		<li>
        string ContentType ( read-only, always "application/vnd.sun.star.tdoc-root" )
		</li>
		<li>
		boolean IsDocument ( read-only, always false )
		</li>
		<li>
		boolean IsFolder ( read-only, always true )
		</li>
		<li>
		string Title ( read-only, always an empty string )
		</li>
		</ul>

		</p>
	 */
	interface com::sun::star::ucb::XCommandProcessor;

    //-------------------------------------------------------------------------
    /** is an enhanced version of <type>XCommandProcessor</type> that has an
        additional method for releasing command identifiers obtained via
        <member>XCommandProcessor::createCommandIdentifier</member> to avoid
        resource leaks. For a detailed description of the problem refer to
        <member>XCommandProcessor2::releaseCommandIdentifier</member>.

        <p>Where many existing <type>Content</type> implementations do not
        (yet), every new implementation should support this interface.
     */
    [optional] interface com::sun::star::ucb::XCommandProcessor2;

	//-------------------------------------------------------------------------
	/** This interface is implemented according to the specification of
		service <type>Content</type>.
	 */
	interface com::sun::star::beans::XPropertiesChangeNotifier;

	//-------------------------------------------------------------------------
	/** This interface is implemented according to the specification of
		service <type>Content</type>.
	 */
	interface com::sun::star::beans::XPropertyContainer;

	//-------------------------------------------------------------------------
	/** This interface is implemented according to the specification of
		service <type>Content</type>.
	 */
	interface com::sun::star::beans::XPropertySetInfoChangeNotifier;

	//-------------------------------------------------------------------------
	/** This interface is implemented according to the specification of
		service <type>Content</type>.
	 */
	interface com::sun::star::ucb::XCommandInfoChangeNotifier;

	//-------------------------------------------------------------------------
	/** This interface is implemented according to the specification of
		service <type>Content</type>.
	 */
	interface com::sun::star::container::XChild;
};

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

}; }; }; };

#endif
