xref: /trunk/main/framework/inc/macros/registration.hxx (revision 1ecadb572e7010ff3b3382ad9bf179dbc6efadbb)
1 /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
11  * OpenOffice.org is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * OpenOffice.org is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Lesser General Public License version 3 for more details
19  * (a copy is included in the LICENSE file that accompanied this code).
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * version 3 along with OpenOffice.org.  If not, see
23  * <http://www.openoffice.org/license.html>
24  * for a copy of the LGPLv3 License.
25  *
26  ************************************************************************/
27 
28 #ifndef __FRAMEWORK_MACROS_REGISTRATION_HXX_
29 #define __FRAMEWORK_MACROS_REGISTRATION_HXX_
30 
31 //_________________________________________________________________________________________________________________
32 //  my own includes
33 //_________________________________________________________________________________________________________________
34 
35 #include <macros/debug.hxx>
36 
37 //_________________________________________________________________________________________________________________
38 //  interface includes
39 //_________________________________________________________________________________________________________________
40 #include <com/sun/star/lang/XSingleServiceFactory.hpp>
41 #include <com/sun/star/lang/XMultiServiceFactory.hpp>
42 
43 //_________________________________________________________________________________________________________________
44 //  other includes
45 //_________________________________________________________________________________________________________________
46 
47 //_________________________________________________________________________________________________________________
48 //  namespace
49 //_________________________________________________________________________________________________________________
50 
51 //namespace framework{
52 
53 /*_________________________________________________________________________________________________________________
54 
55     macros for registration of services
56     Please use follow public macros only!
57 
58     IFFACTORY( CLASS )                          => use it as parameter for COMPONENT_GETFACTORY( IFFACTORIES )
59     COMPONENTGETIMPLEMENTATIONENVIRONMENT       => use it to define exported function component_getImplementationEnvironment()
60     COMPONENTGETFACTORY( IFFACTORIES )          => use it to define exported function component_getFactory()
61 
62 _________________________________________________________________________________________________________________*/
63 
64 //*****************************************************************************************************************
65 //  public
66 //  use it as parameter for COMPONENT_GETFACTORY( IFFACTORIES )
67 //*****************************************************************************************************************
68 #define IFFACTORY( CLASS )                                                                                                              \
69     /* If searched name found ... */                                                                                                    \
70     /* You can't add some statements before follow line ... Here can be an ELSE-statement! */                                           \
71     if ( CLASS::impl_getStaticImplementationName().equals( ::rtl::OUString::createFromAscii( pImplementationName ) ) )                  \
72     {                                                                                                                                   \
73         LOG_REGISTRATION_GETFACTORY( "\t\tImplementationname found - try to create factory! ...\n" )                                    \
74         /* ... then create right factory for this service.                                  */                                          \
75         /* xFactory and xServiceManager are local variables of method which use this macro. */                                          \
76         xFactory = CLASS::impl_createFactory( xServiceManager );                                                                        \
77     }
78 
79 //*****************************************************************************************************************
80 //  public
81 //  define helper to get information about service environment
82 //*****************************************************************************************************************
83 #define COMPONENTGETIMPLEMENTATIONENVIRONMENT                                                                                           \
84     extern "C" SAL_DLLPUBLIC_EXPORT void SAL_CALL component_getImplementationEnvironment( const sal_Char**          ppEnvironmentTypeName   ,               \
85                                                                             uno_Environment**                           )               \
86     {                                                                                                                                   \
87         *ppEnvironmentTypeName = CPPU_CURRENT_LANGUAGE_BINDING_NAME ;                                                                   \
88     }
89 
90 //*****************************************************************************************************************
91 //  public
92 //  define method to instanciate new services
93 //*****************************************************************************************************************
94 #define COMPONENTGETFACTORY( IFFACTORIES )                                                                                              \
95     extern "C" SAL_DLLPUBLIC_EXPORT void* SAL_CALL component_getFactory(    const   sal_Char*   pImplementationName ,                                           \
96                                                             void*       pServiceManager     ,                                           \
97                                                             void*     /*pRegistryKey*/      )                                           \
98     {                                                                                                                                   \
99         LOG_REGISTRATION_GETFACTORY( "\t[start]\n" )                                                                                    \
100         /* Set default return value for this operation - if it failed. */                                                               \
101         void* pReturn = NULL ;                                                                                                          \
102         if  (                                                                                                                           \
103                 ( pImplementationName   !=  NULL ) &&                                                                                   \
104                 ( pServiceManager       !=  NULL )                                                                                      \
105             )                                                                                                                           \
106         {                                                                                                                               \
107             LOG_REGISTRATION_GETFACTORY( "\t\tpImplementationName and pServiceManager are valid ...\n" )                                \
108             /* Define variables which are used in following macros. */                                                                  \
109             ::com::sun::star::uno::Reference< ::com::sun::star::lang::XSingleServiceFactory >   xFactory            ;                   \
110             ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >    xServiceManager     ;                   \
111             xServiceManager = reinterpret_cast< ::com::sun::star::lang::XMultiServiceFactory* >( pServiceManager )  ;                   \
112             /* These parameter will expand to      */                                                                                   \
113             /* "IF_NAME_CREATECOMPONENTFACTORY(a)  */                                                                                   \
114             /*  else                               */                                                                                   \
115             /*  ...                                */                                                                                   \
116             /*  else                               */                                                                                   \
117             /*  IF_NAME_CREATECOMPONENTFACTORY(z)" */                                                                                   \
118             IFFACTORIES                                                                                                                 \
119             /* Factory is valid, if service was found. */                                                                               \
120             if ( xFactory.is() == sal_True )                                                                                            \
121             {                                                                                                                           \
122                 LOG_REGISTRATION_GETFACTORY( "\t\t\txFactory valid - service was found ...\n" )                                         \
123                 xFactory->acquire();                                                                                                    \
124                 pReturn = xFactory.get();                                                                                               \
125             }                                                                                                                           \
126         }                                                                                                                               \
127         LOG_REGISTRATION_GETFACTORY( "\t[end]\n" )                                                                                      \
128         /* Return with result of this operation. */                                                                                     \
129         return pReturn ;                                                                                                                \
130     }
131 
132 //}     //  namespace framework
133 
134 #endif  //  #ifndef __FRAMEWORK_MACROS_REGISTRATION_HXX_
135