/**************************************************************
 * 
 * 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_ContentProvider_idl__
#define __com_sun_star_ucb_ContentProvider_idl__

#ifndef __com_sun_star_ucb_XContentProvider_idl__
#include <com/sun/star/ucb/XContentProvider.idl>
#endif

#ifndef __com_sun_star_ucb_XContentIdentifierFactory_idl__
#include <com/sun/star/ucb/XContentIdentifierFactory.idl>
#endif

#ifndef __com_sun_star_ucb_XParameterizedContentProvider_idl__
#include <com/sun/star/ucb/XParameterizedContentProvider.idl>
#endif

#ifndef __com_sun_star_ucb_XContentProviderSupplier_idl__
#include <com/sun/star/ucb/XContentProviderSupplier.idl>
#endif

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

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

//=============================================================================
/** provides access to a set of <type>Content</type>s.
*/
published service ContentProvider
{
	//-------------------------------------------------------------------------
	/** gives access to all contents provided by this provider.
	 */
	interface com::sun::star::ucb::XContentProvider;

	//-------------------------------------------------------------------------
	/** creates special <type>XContentIdentifier</type> implementation
		objects for the contents provided by this content provider.

		<p>This interface can be implemented in case the provider wants to
		provide some additional interfaces with its	implementation of the
		identifier objects.
	 */
	[optional] interface com::sun::star::ucb::XContentIdentifierFactory;

	//-------------------------------------------------------------------------
	/** allows a <type>ContentProvider</type> to adjust itself to special
		needs.

		<p>Whenever a ContentProvider that supports this interface is
	    registered at a <type>XContentProviderManager</type>, the method
	    <member>XParameterizedContentProvider::registerInstance</member>
		should first be called, using the returned <type>XContentProvider</type>
		to register at the XContentProviderManager.
	 */
	[optional] interface com::sun::star::ucb::XParameterizedContentProvider;

};

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

}; }; }; };

#endif
