1 /*************************************************************************
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 * Copyright 2008 by Sun Microsystems, Inc.
7 * OpenOffice.org - a multi-platform office productivity suite
9 * $RCSfile: desktopbecdef.cxx,v $
12 * This file is part of OpenOffice.org.
14 * OpenOffice.org is free software: you can redistribute it and/or modify
15 * it under the terms of the GNU Lesser General Public License version 3
16 * only, as published by the Free Software Foundation.
18 * OpenOffice.org is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU Lesser General Public License version 3 for more details
22 * (a copy is included in the LICENSE file that accompanied this code).
24 * You should have received a copy of the GNU Lesser General Public License
25 * version 3 along with OpenOffice.org. If not, see
26 * <http://www.openoffice.org/license.html>
27 * for a copy of the LGPLv3 License.
29 ************************************************************************/
31 // MARKER(update_precomp.py): autogen include statement, do not remove
32 #include "precompiled_shell.hxx"
34 #ifndef _COM_SUN_STAR_CONFIGURATION_BACKEND_XSCHEMASUPPLIER_HPP_
35 #include <com/sun/star/configuration/backend/XSingleLayerStratum.hpp>
37 #include <com/sun/star/registry/XRegistryKey.hpp>
39 #ifndef _CPPUHELPER_IMPLEMENTATIONENTRY_HXX_
40 #include <cppuhelper/implementationentry.hxx>
42 #include <com/sun/star/uno/XComponentContext.hpp>
44 #include "uno/current_context.hxx"
46 namespace css
= com::sun::star
;
47 namespace uno
= css::uno
;
48 namespace lang
= css::lang
;
49 namespace backend
= css::configuration::backend
;
51 //==============================================================================
53 static uno::Reference
<uno::XInterface
> SAL_CALL
createDesktopBackend(const uno::Reference
<uno::XComponentContext
>& xContext
)
56 uno::Reference
< uno::XCurrentContext
> xCurrentContext(uno::getCurrentContext());
58 if (xCurrentContext
.is())
60 uno::Any aValue
= xCurrentContext
->getValueByName(
61 rtl::OUString::createFromAscii( "system.desktop-environment" ) );
63 rtl::OUString aDesktopEnvironment
;
64 if ( aValue
>>= aDesktopEnvironment
)
66 rtl::OUString aDesktopService
;
67 if ( aDesktopEnvironment
.equalsIgnoreAsciiCaseAscii( "gnome" ) )
68 aDesktopService
= rtl::OUString::createFromAscii( "com.sun.star.configuration.backend.GconfBackend" );
69 else if ( aDesktopEnvironment
.equalsIgnoreAsciiCaseAscii( "kde" ) )
70 aDesktopService
= rtl::OUString::createFromAscii( "com.sun.star.configuration.backend.KDEBackend" );
72 return uno::Reference
<uno::XInterface
>();
74 uno::Reference
< lang::XMultiComponentFactory
> xServiceManager
= xContext
->getServiceManager();
75 if( xServiceManager
.is() )
77 return uno::Reference
< backend::XSingleLayerStratum
>::query(
78 xServiceManager
->createInstanceWithContext( aDesktopService
, xContext
) );
82 } catch (uno::RuntimeException e
) {
85 return uno::Reference
<uno::XInterface
>();
88 static rtl::OUString SAL_CALL
getBackendName(void) {
90 RTL_CONSTASCII_USTRINGPARAM("com.sun.star.comp.configuration.backend.DesktopBackend") );
93 static uno::Sequence
<rtl::OUString
> SAL_CALL
getBackendServiceNames(void)
95 uno::Sequence
<rtl::OUString
> aServices(2) ;
96 aServices
[0] = rtl::OUString(
97 RTL_CONSTASCII_USTRINGPARAM("com.sun.star.configuration.backend.DesktopBackend")) ;
98 aServices
[1] = rtl::OUString(
99 RTL_CONSTASCII_USTRINGPARAM("com.sun.star.configuration.backend.PlatformBackend")) ;
104 static uno::Sequence
<rtl::OUString
> SAL_CALL
getSupportedComponents(void)
106 const sal_Int32 nComponents
= 7;
108 uno::Sequence
<rtl::OUString
> aSupportedComponentsList(nComponents
) ;
110 aSupportedComponentsList
[0] = rtl::OUString(
111 RTL_CONSTASCII_USTRINGPARAM("org.openoffice.VCL")) ;
112 aSupportedComponentsList
[1] = rtl::OUString(
113 RTL_CONSTASCII_USTRINGPARAM("org.openoffice.Inet")) ;
114 aSupportedComponentsList
[2] = rtl::OUString(
115 RTL_CONSTASCII_USTRINGPARAM("org.openoffice.Office.Common")) ;
116 aSupportedComponentsList
[3] = rtl::OUString(
117 RTL_CONSTASCII_USTRINGPARAM("org.openoffice.Office.Paths")) ;
119 aSupportedComponentsList
[4] = rtl::OUString(
120 RTL_CONSTASCII_USTRINGPARAM("org.openoffice.UserProfile")) ;
121 aSupportedComponentsList
[5] = rtl::OUString(
122 RTL_CONSTASCII_USTRINGPARAM("org.openoffice.Office.Recovery")) ;
123 aSupportedComponentsList
[6] = rtl::OUString(
124 RTL_CONSTASCII_USTRINGPARAM("org.openoffice.Setup")) ;
126 return aSupportedComponentsList
;
128 //==============================================================================
130 static const cppu::ImplementationEntry kImplementations_entries
[] =
133 createDesktopBackend
,
135 getBackendServiceNames
,
136 cppu::createSingleComponentFactory
,
140 { NULL
, NULL
, NULL
, NULL
, NULL
, 0 }
142 //------------------------------------------------------------------------------
144 extern "C" void SAL_CALL
component_getImplementationEnvironment(
145 const sal_Char
**aEnvTypeName
,
146 uno_Environment
** /* aEnvironment */)
148 *aEnvTypeName
= CPPU_CURRENT_LANGUAGE_BINDING_NAME
;
151 //------------------------------------------------------------------------------
153 extern "C" sal_Bool SAL_CALL
component_writeInfo(void * /* pServiceManager */,
156 using namespace ::com::sun::star::registry
;
161 uno::Reference
< XRegistryKey
> xImplKey
= static_cast< XRegistryKey
* >( pRegistryKey
)->createKey(
162 rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("/") ) + getBackendName()
165 // Register associated service names
166 uno::Reference
< XRegistryKey
> xServicesKey
= xImplKey
->createKey(
167 rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("/UNO/SERVICES") )
170 uno::Sequence
<rtl::OUString
> sServiceNames
= getBackendServiceNames();
171 for (sal_Int32 i
= 0 ; i
< sServiceNames
.getLength() ; ++ i
)
172 xServicesKey
->createKey(sServiceNames
[i
]);
174 // Register supported components
175 uno::Reference
<XRegistryKey
> xComponentKey
= xImplKey
->createKey(
176 rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("/DATA/SupportedComponents") )
179 xComponentKey
->setAsciiListValue( getSupportedComponents() );
184 catch( InvalidRegistryException
& )
186 OSL_ENSURE(sal_False
, "InvalidRegistryException caught");
193 //------------------------------------------------------------------------------
195 extern "C" void *component_getFactory(const sal_Char
*aImplementationName
,
196 void *aServiceManager
,
199 return cppu::component_getFactoryHelper(
203 kImplementations_entries
) ;
205 //------------------------------------------------------------------------------