/**************************************************************
 * 
 * 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_FTPContent_idl__
#define __com_sun_star_ucb_FTPContent_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_XContentCreator_idl__
#include <com/sun/star/ucb/XContentCreator.idl>
#endif

#ifndef __com_sun_star_ucb_XCommandProcessor_idl__
#include <com/sun/star/ucb/XCommandProcessor.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 FTPContent provides an object representing either a (ftp-server-side) 
    directory object allowing listing of children or a content object providing
    access to a (ftp-server-side) file.

	@see com::sun::star::ucb::FTPContentProvider

    @since OOo 1.1.2
*/
published service FTPContent
{
	//-------------------------------------------------------------------------
	/** 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>An object representing a directory in the file system is able
		to create a new object, which in turn can become the representation
		of a physical file/directory being contained in the initial directory.
		The precise way is the following:

		<p>

		<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 directories is
		"application/vnd.sun.staroffice.ftp-folder". To create a new file
		use the type "application/vnd.sun.staroffice.ftp-file".
		As return value you get a new file content object.
		</li>
		<li>
		Set a title at the new object by letting it execute
		the command "setPropertyValues", which sets at least the property
		"Title" to a non-empty value ).
		</li>
		<li>
		Let the new object ( not the parent! ) execute the command "insert".
		This will create the corresponding physical file or directory.
		For files, 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;

	//-------------------------------------------------------------------------
	/** 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>
		insert
		</li>
		<li>
		delete
		</li>
		</ul>

		<b>Supported Properties</b>
		<ul>
		<li>
		string ContentType ( read-only, either
		"application/vnd.sun.staroffice.ftp-folder" or
		"application/vnd.sun.staroffice.ftp-file" )
		</li>
		<li>
		boolean IsDocument ( read-only, always <true/> for files, always
		<false/> for directories )
		</li>
		<li>
		boolean IsFolder ( read-only ), always <false/> for files, always
		<true/> for directories )
		</li>
		<li>
		boolean IsReadOnly ( read-only attribute )
		</li>
		<li>
		string Title ( file name )
		</li>
		<li>
		hyper Size ( file size )
		</li>
		<li>
		string Title ( file name )
		</li>
		<li>
		<type scope="com::sun::star::util">DateTime</type>DateCreated ( read-only )
		</li>
		</ul>
		</p>
	 */
	interface com::sun::star::ucb::XCommandProcessor;
    
	//-------------------------------------------------------------------------
	/** 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
