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 // MARKER(update_precomp.py): autogen include statement, do not remove 29 #include "precompiled_ucbhelper.hxx" 30 31 #include "com/sun/star/lang/XMultiServiceFactory.hpp" 32 #include "com/sun/star/lang/XSingleServiceFactory.hpp" 33 #include "com/sun/star/registry/XRegistryKey.hpp" 34 35 #include "myucp_provider.hxx" 36 37 using namespace com::sun::star; 38 39 namespace { 40 41 //========================================================================= 42 sal_Bool writeInfo( void * pRegistryKey, 43 const rtl::OUString & rImplementationName, 44 uno::Sequence< rtl::OUString > const & rServiceNames ) 45 { 46 rtl::OUString aKeyName( rtl::OUString::createFromAscii( "/" ) ); 47 aKeyName += rImplementationName; 48 aKeyName += rtl::OUString::createFromAscii( "/UNO/SERVICES" ); 49 50 uno::Reference< registry::XRegistryKey > xKey; 51 try 52 { 53 xKey = static_cast< registry::XRegistryKey * >( 54 pRegistryKey )->createKey( aKeyName ); 55 } 56 catch ( registry::InvalidRegistryException const & ) 57 { 58 } 59 60 if ( !xKey.is() ) 61 return sal_False; 62 63 sal_Bool bSuccess = sal_True; 64 65 for ( sal_Int32 n = 0; n < rServiceNames.getLength(); ++n ) 66 { 67 try 68 { 69 xKey->createKey( rServiceNames[ n ] ); 70 } 71 catch ( registry::InvalidRegistryException const & ) 72 { 73 bSuccess = sal_False; 74 break; 75 } 76 } 77 return bSuccess; 78 } 79 80 } 81 82 //========================================================================= 83 extern "C" void SAL_CALL component_getImplementationEnvironment( 84 const sal_Char ** ppEnvTypeName, uno_Environment ** /*ppEnv*/ ) 85 { 86 *ppEnvTypeName = CPPU_CURRENT_LANGUAGE_BINDING_NAME; 87 } 88 89 //========================================================================= 90 extern "C" sal_Bool SAL_CALL component_writeInfo( 91 void * /*pServiceManager*/, void * pRegistryKey ) 92 { 93 return pRegistryKey && 94 95 ////////////////////////////////////////////////////////////////////// 96 // Write info into registry. 97 ////////////////////////////////////////////////////////////////////// 98 99 // @@@ Adjust namespace names. 100 writeInfo( pRegistryKey, 101 ::myucp::ContentProvider::getImplementationName_Static(), 102 ::myucp::ContentProvider::getSupportedServiceNames_Static() ); 103 } 104 105 //========================================================================= 106 extern "C" void * SAL_CALL component_getFactory( 107 const sal_Char * pImplName, void * pServiceManager, void * /*pRegistryKey*/ ) 108 { 109 void * pRet = 0; 110 111 uno::Reference< lang::XMultiServiceFactory > xSMgr( 112 reinterpret_cast< lang::XMultiServiceFactory * >( pServiceManager ) ); 113 uno::Reference< lang::XSingleServiceFactory > xFactory; 114 115 ////////////////////////////////////////////////////////////////////// 116 // Create factory, if implementation name matches. 117 ////////////////////////////////////////////////////////////////////// 118 119 // @@@ Adjust namespace names. 120 if ( ::myucp::ContentProvider::getImplementationName_Static(). 121 compareToAscii( pImplName ) == 0 ) 122 { 123 xFactory = ::myucp::ContentProvider::createServiceFactory( xSMgr ); 124 } 125 126 ////////////////////////////////////////////////////////////////////// 127 128 if ( xFactory.is() ) 129 { 130 xFactory->acquire(); 131 pRet = xFactory.get(); 132 } 133 134 return pRet; 135 } 136 137