/* -*- 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_reflection_TypeDescriptionManager_idl__
#define __com_sun_star_reflection_TypeDescriptionManager_idl__

#include <com/sun/star/container/XHierarchicalNameAccess.idl>
#include <com/sun/star/container/XSet.idl>
#include <com/sun/star/lang/XInitialization.idl>
#include <com/sun/star/lang/XComponent.idl>
#include <com/sun/star/reflection/XTypeDescriptionEnumerationAccess.idl>


 module com {  module sun {  module star {  module reflection {


/** This service manages type descriptions and acts as a central access point
    to every type description.  It delegates calls for demanded types to
    subsequent
    com::sun::star::reflection::TypeDescriptionProviders
    and may cache type descriptions.<br>
    Using cppuhelper's bootstrapping routines bootstrapping an initial
    component context, there is a singleton accessible via key
    "/singletons/com.sun.star.reflection.theTypeDescriptionManager".
    This singleton object is hooked into the C UNO runtime typelib and
    lives until the context is shut down.<br>

    @see com::sun::star::reflection::TypeDescriptionProvider
    @see com::sun::star::reflection::XTypeDescription
*/
published service TypeDescriptionManager
{
    /** Interface to retrieve type descriptions.

        In addition to the semantics specified for the corresponding interface
        of the TypeDescriptionProvider service (which changed
        slightly for LibreOffice&nbsp;4.1; see there), this interface allows to
        retrieve the following entities:
        <ul>
            <li>The simple types are accessible via <code>"void"</code>,
            <code>"boolean"</code>, <code>"byte"</code>, <code>"short"</code>,
            <code>"unsigned short"</code>, <code>"long"</code>, <code>"unsigned
            long"</code>, <code>"hyper"</code>, <code>"unsigned hyper"</code>,
            <code>"float"</code>, <code>"double"</code>, <code>"char"</code>,
            <code>"string"</code>, <code>"type"</code>, and
            <code>"any"</code>.</li>

            <li>Sequence types are accessible via
            <code>"[]<var>ComponentType</var>"</code></li>

            <li>Instantiated polymorphic struct types are accessible via
            <code>"<var>StructType</var>&lt;<!--
            --><var>Parameter</var><sub>1</sub>,&hellip;,<!--
            --><var>Parameter</var><sub><var>n</var></sub>&gt;"</code>.</li>

            <li>Members of interface types are accessible via
            <code>"<var>InterfaceType</var>::<var>Member</var>"</code>.</li>
        </ul>

        <p>Even though the name of this interface suggests that the used type
        names are hierarchical, this doesn't need to be the case. (For example, consider
        the names of instantiated polymorphic struct types, like
        <code>"Struct&lt;long&gt;"</code>.)</p>
    */
    interface com::sun::star::container::XHierarchicalNameAccess;

    /** You can manually add or remove a providers via this interface.
    */
    interface com::sun::star::container::XSet;

    /** Interface to signal shutdown to the manager.<br>
        This signals all providers to shut down, because usually each provider
        references its manager, listening for disposing events.
    */
    [optional] interface com::sun::star::lang::XComponent;

    /** Interface for creating enumerations for type descriptions supported
        by this TypeDescriptionManager

    @since OOo 1.1.2
    */
    [optional] interface XTypeDescriptionEnumerationAccess;
};


}; }; }; };

#endif

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