/**************************************************************
 * 
 * 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_TransientDocumentsDocumentContent_idl__
#define __com_sun_star_ucb_TransientDocumentsDocumentContent_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

#ifndef __com_sun_star_ucb_XContentCreator_idl__
#include <com/sun/star/ucb/XContentCreator.idl>
#endif

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

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

//=============================================================================
/** A TDCP Document represents the root folder of a transient document.

    <p>It is a container for other TDCP Folders and TDCP Streams. It is always
    a child of the TDCP Root.

    @see TransientDocumentsContentProvider
    @see TransientDocumentsRootContent
    @see TransientDocumentsFolderContent
    @see TransientDocumentsStreamContent

    @since OOo 2.0
*/
service TransientDocumentsDocumentContent
{
	//-------------------------------------------------------------------------
	/** 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>
        <li>
        transfer (only transfers TDCP documents, TDCP folders and TDCP streams.
        It does not handle contents with a URL scheme other than the TDOC URL
        scheme)
        </li>
		</ul>

		<b>Supported Properties</b>
		<ul>
		<li>
        string ContentType ( read-only, always "application/vnd.sun.star.tdoc-document" )
		</li>
		<li>
		boolean IsDocument ( read-only, always false )
		</li>
		<li>
		boolean IsFolder ( read-only, always true )
		</li>
		<li>
        string Title ( read-only )
		</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;

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

        <p>To create a new child of a TDCP Document:

		<ol>
		<li>
        Let the parent folder create a new content by calling
        <member>XContentCreator::createNewContent</member> on it. The content
        type to use for new folders is "application/vnd.sun.star.tdoc-folder".
        To create a new stream, use the type string
        "application/vnd.sun.star.tdoc-stream".
		</li>
		<li>
        Set a title for the new folder/stream. (Let the new child execute the
        command "setPropertyValues"; pass a non-empty value for the property
        "Title").
        </li>
		<li>
        Let the new child ( not the parent! ) execute the command "insert".
        This will commit the creation process. For streams, you need to supply
        the implementation of an
        <type scope="com::sun::star::io">XInputStream</type> with the command's
        parameters, that provides access to the stream data.
		</li>
		</ol>

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

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

}; }; }; };

#endif
