/**************************************************************
 * 
 * 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_lang_ServiceManager_idl__ 
#define __com_sun_star_lang_ServiceManager_idl__ 
 
#ifndef __com_sun_star_lang_MultiServiceFactory_idl__ 
#include <com/sun/star/lang/MultiServiceFactory.idl> 
#endif 
 
#ifndef __com_sun_star_lang_XComponent_idl__ 
#include <com/sun/star/lang/XComponent.idl> 
#endif 
 
#ifndef __com_sun_star_container_XSet_idl__ 
#include <com/sun/star/container/XSet.idl> 
#endif 
 
#ifndef __com_sun_star_container_XContentEnumerationAccess_idl__ 
#include <com/sun/star/container/XContentEnumerationAccess.idl> 
#endif 
 
#ifndef __com_sun_star_lang_XMultiServiceFactory_idl__ 
#include <com/sun/star/lang/XMultiServiceFactory.idl> 
#endif

#ifndef __com_sun_star_lang_XMultiComponentFactory_idl__ 
#include <com/sun/star/lang/XMultiComponentFactory.idl> 
#endif 
 
#ifndef __com_sun_star_lang_XServiceInfo_idl__ 
#include <com/sun/star/lang/XServiceInfo.idl> 
#endif 
 
#ifndef __com_sun_star_beans_XPropertySet_idl__ 
#include <com/sun/star/beans/XPropertySet.idl> 
#endif

//============================================================================= 
 
module com {  module sun {  module star {  module lang {  
 
//============================================================================= 
 
/** Provides a collection of implementations for services.  This is a singleton
    you commonly find in your component context under key
    <code>/singletons/com.sun.star.lang.theServiceManager</code>.
	
	<p>
    The factories are accessed with a service name. It is possible to
	access the factories with their implementation names, but you should
	avoid this.
    </p>
    
	<p>Service factories added via <type scope="com::sun::star::container">XSet</type> 
	should support the following interfaces: </p>
	
	<dl>
    <dt><type>XServiceInfo</type></dt>
    <dd>supported interfaces/ implementation name</dd>
    
    <dt><type>XSingleComponentFactory</type>(optional)</dt>
    <dd>is used to create instances of the implementation.</dd>
    
    <dt><type>XComponent</type> (optional)</dt>
    <dd>The service manager calls the method
    <member scope="com::sun::star::lang">XComponent::dispose</member>
    on the factory when going down (i.e. it is commonly disposed by the component context).</dd>
	</dl>
    
    @see com::sun::star::uno::XComponentContext
*/
published service ServiceManager
{
    /** This is a derived MultiServiceFactory service.
    */
	service com::sun::star::lang::MultiServiceFactory;
    
	/** Disposing of service manager.
        <p>
        The component context disposes its service manager singleton when going down
        (i.e. when the component context is disposed).
		</p>
    */
	interface com::sun::star::lang::XComponent; 
    
	/** Management of service factories.
    */
	interface com::sun::star::container::XSet; 
    
	/** Enumeration of all service factories.
        <p>
        It is possible to enumerate all implementations that support the 
		service specified with the argument of the 
		<member scope="com::sun::star::container">XContentEnumerationAccess::createContentEnumeration</member> method. 
		The enumerator commonly returns <type>XSingleComponentFactory</type>
        interfaces.
        </p>
    */
	interface com::sun::star::container::XContentEnumerationAccess; 
    
	/** Property access.
	*/
	[optional] interface com::sun::star::beans::XPropertySet; 
	/** specifies the default component context to be used, if instanciating services
        via <type>XMultiServiceFactory</type>
    */
	[optional, property] com::sun::star::uno::XComponentContext DefaultContext; 
};
 
//============================================================================= 
 
}; }; }; };  
 
/*============================================================================= 
 
=============================================================================*/ 
#endif 
