xref: /AOO41X/main/vcl/source/components/factory.cxx (revision 498ce99153ecb4d3be27d4561ce8071b1b76ece1)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_vcl.hxx"
26 #include <tools/debug.hxx>
27 #ifndef _OSL_MUTEX_HXX
28 #include <osl/mutex.hxx>
29 #endif
30 #ifndef _RTL_USTRBUF_HXX
31 #include <rtl/ustrbuf.hxx>
32 #endif
33 #include <uno/dispatcher.h> // declaration of generic uno interface
34 #include <uno/mapping.hxx> // mapping stuff
35 #include <cppuhelper/factory.hxx>
36 #include <com/sun/star/lang/XMultiServiceFactory.hpp>
37 #include <vcl/dllapi.h>
38 
39 using ::rtl::OUString;
40 using ::rtl::OUStringBuffer;
41 using namespace com::sun::star::uno;
42 using namespace com::sun::star::lang;
43 
44 // service implementation
45 extern Sequence< OUString > SAL_CALL vcl_session_getSupportedServiceNames();
46 extern OUString SAL_CALL vcl_session_getImplementationName();
47 extern Reference< XInterface > SAL_CALL vcl_session_createInstance( const Reference< XMultiServiceFactory > & );
48 
49 namespace vcl
50 {
51 extern Sequence< OUString > SAL_CALL DisplayAccess_getSupportedServiceNames();
52 extern OUString SAL_CALL DisplayAccess_getImplementationName();
53 extern Reference< XInterface > SAL_CALL DisplayAccess_createInstance( const Reference< XMultiServiceFactory > & );
54 
55 extern Sequence< OUString > SAL_CALL FontIdentificator_getSupportedServiceNames();
56 extern OUString SAL_CALL FontIdentificator_getImplementationName();
57 extern Reference< XInterface > SAL_CALL FontIdentificator_createInstance( const Reference< XMultiServiceFactory > & );
58 
59 extern Sequence< OUString > SAL_CALL StringMirror_getSupportedServiceNames();
60 extern OUString SAL_CALL StringMirror_getImplementationName();
61 extern Reference< XInterface > SAL_CALL StringMirror_createInstance( const Reference< XMultiServiceFactory > & );
62 
63 extern Sequence< OUString > SAL_CALL Clipboard_getSupportedServiceNames();
64 extern OUString SAL_CALL Clipboard_getImplementationName();
65 extern Reference< XSingleServiceFactory > SAL_CALL Clipboard_createFactory( const Reference< XMultiServiceFactory > & );
66 
67 extern Sequence< OUString > SAL_CALL DragSource_getSupportedServiceNames();
68 extern OUString SAL_CALL DragSource_getImplementationName();
69 extern Reference< XInterface > SAL_CALL DragSource_createInstance( const Reference< XMultiServiceFactory > & );
70 
71 extern Sequence< OUString > SAL_CALL DropTarget_getSupportedServiceNames();
72 extern OUString SAL_CALL DropTarget_getImplementationName();
73 extern Reference< XInterface > SAL_CALL DropTarget_createInstance( const Reference< XMultiServiceFactory > & );
74 }
75 
76 extern "C" {
77 
component_getImplementationEnvironment(const sal_Char ** ppEnvTypeName,uno_Environment **)78     VCL_DLLPUBLIC void SAL_CALL component_getImplementationEnvironment(
79         const sal_Char** ppEnvTypeName,
80         uno_Environment** /*ppEnv*/ )
81     {
82         *ppEnvTypeName = CPPU_CURRENT_LANGUAGE_BINDING_NAME;
83     }
84 
component_getFactory(const sal_Char * pImplementationName,void * pXUnoSMgr,void *)85     VCL_DLLPUBLIC void* SAL_CALL component_getFactory(
86         const sal_Char* pImplementationName,
87         void* pXUnoSMgr,
88         void* /*pXUnoKey*/
89         )
90     {
91         void* pRet = 0;
92 
93         if( pXUnoSMgr )
94         {
95             Reference< ::com::sun::star::lang::XMultiServiceFactory > xMgr(
96                 reinterpret_cast< ::com::sun::star::lang::XMultiServiceFactory* >( pXUnoSMgr )
97                 );
98             Reference< ::com::sun::star::lang::XSingleServiceFactory > xFactory;
99             if( vcl_session_getImplementationName().equalsAscii( pImplementationName ) )
100             {
101                 xFactory = ::cppu::createSingleFactory(
102                     xMgr, vcl_session_getImplementationName(), vcl_session_createInstance,
103                     vcl_session_getSupportedServiceNames() );
104             }
105             else if( vcl::DisplayAccess_getImplementationName().equalsAscii( pImplementationName ) )
106             {
107                 xFactory = ::cppu::createSingleFactory(
108                     xMgr, vcl::DisplayAccess_getImplementationName(), vcl::DisplayAccess_createInstance,
109                     vcl::DisplayAccess_getSupportedServiceNames() );
110             }
111             else if( vcl::FontIdentificator_getImplementationName().equalsAscii( pImplementationName ) )
112             {
113                 xFactory = ::cppu::createSingleFactory(
114                     xMgr, vcl::FontIdentificator_getImplementationName(), vcl::FontIdentificator_createInstance,
115                     vcl::FontIdentificator_getSupportedServiceNames() );
116             }
117             else if( vcl::StringMirror_getImplementationName().equalsAscii( pImplementationName ) )
118             {
119                 xFactory = ::cppu::createSingleFactory(
120                     xMgr, vcl::StringMirror_getImplementationName(), vcl::StringMirror_createInstance,
121                     vcl::StringMirror_getSupportedServiceNames() );
122             }
123             else if( vcl::Clipboard_getImplementationName().equalsAscii( pImplementationName ) )
124             {
125                 xFactory = vcl::Clipboard_createFactory( xMgr );
126             }
127             else if( vcl::DragSource_getImplementationName().equalsAscii( pImplementationName ) )
128             {
129                 xFactory = ::cppu::createSingleFactory(
130                     xMgr, vcl::DragSource_getImplementationName(), vcl::DragSource_createInstance,
131                     vcl::DragSource_getSupportedServiceNames() );
132             }
133             else if( vcl::DropTarget_getImplementationName().equalsAscii( pImplementationName ) )
134             {
135                 xFactory = ::cppu::createSingleFactory(
136                     xMgr, vcl::DropTarget_getImplementationName(), vcl::DropTarget_createInstance,
137                     vcl::DropTarget_getSupportedServiceNames() );
138             }
139             if( xFactory.is() )
140             {
141                 xFactory->acquire();
142                 pRet = xFactory.get();
143             }
144         }
145         return pRet;
146     }
147 
148 } /* extern "C" */
149