/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
 * This file is part of the LibreOffice project.
 *
 * This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
 *
 * This file incorporates work covered by the following license notice:
 *
 *   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 .
 */
#ifndef __com_sun_star_lang_ServiceManager_idl__
#define __com_sun_star_lang_ServiceManager_idl__

#include <com/sun/star/lang/MultiServiceFactory.idl>

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

#include <com/sun/star/container/XSet.idl>

#include <com/sun/star/container/XContentEnumerationAccess.idl>

#include <com/sun/star/lang/XMultiServiceFactory.idl>
#include <com/sun/star/lang/XMultiComponentFactory.idl>

#include <com/sun/star/lang/XServiceInfo.idl>

#include <com/sun/star/beans/XPropertySet.idl>


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 com::sun::star::container::XSet
    should support the following interfaces: </p>

    <dl>
    <dt>XServiceInfo</dt>
    <dd>supported interfaces/ implementation name</dd>

    <dt>XSingleComponentFactory(optional)</dt>
    <dd>is used to create instances of the implementation.</dd>

    <dt>XComponent (optional)</dt>
    <dd>The service manager calls the method
    com::sun::star::lang::XComponent::dispose()
    on the factory when going down (i.e. it is commonly disposed by the component context).</dd>
    </dl>

    <p>Since LibreOffice 3.6, in addition to instances of
    XServiceInfo et al, the
    com::sun::star::container::XSet of at least the default
    C++ service manager implementation now also supports sequences of
    com::sun::star::beans::NamedValue in <code>insert</code>
    and <code>remove</code>.  The sequence elements must each have a
    <code>Name</code> of <code>uri</code> and a string <code>Value</code> that
    is the URI of a service rdb.  It is legal for there to be no such
    <code>uri</code> elements.  For <code>insert</code>, there can additionally
    be an optional element with a <code>Name</code> of
    <code>component-context</code> and a value that is a non-null reference of
    type com::sun::star::uno::XComponentContext that shall
    be used instead of this service manager's default component context when
    loading the corresponding implementations.

    @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
        com::sun::star::container::XContentEnumerationAccess::createContentEnumeration() method.
        The enumerator commonly returns XSingleComponentFactory
        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 instantiating services
        via XMultiServiceFactory
    */
    [optional, property] com::sun::star::uno::XComponentContext DefaultContext;
};


}; }; }; };

#endif

/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
