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