/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * This file is part of the LibreOffice project. * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. * * This file incorporates work covered by the following license notice: * * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed * with this work for additional information regarding copyright * ownership. The ASF licenses this file to you under the Apache * License, Version 2.0 (the "License"); you may not use this file * except in compliance with the License. You may obtain a copy of * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define SERVICENAME "com.sun.star.loader.SharedLibrary" #define IMPLNAME "com.sun.star.comp.stoc.DLLComponentLoader" using namespace com::sun::star; using namespace com::sun::star::uno; using namespace com::sun::star::loader; using namespace com::sun::star::lang; using namespace com::sun::star::registry; using namespace cppu; using namespace osl; namespace stoc_bootstrap { Sequence< OUString > loader_getSupportedServiceNames() { Sequence< OUString > seqNames(1); seqNames.getArray()[0] = OUString(SERVICENAME); return seqNames; } OUString loader_getImplementationName() { return OUString(IMPLNAME); } } namespace stoc_loader { //************************************************************************* // DllComponentLoader //************************************************************************* class DllComponentLoader : public WeakImplHelper3< XImplementationLoader, XInitialization, XServiceInfo > { public: DllComponentLoader( const Reference & xCtx ); ~DllComponentLoader(); // XServiceInfo virtual OUString SAL_CALL getImplementationName( ) throw(::com::sun::star::uno::RuntimeException); virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) throw(::com::sun::star::uno::RuntimeException); virtual Sequence< OUString > SAL_CALL getSupportedServiceNames( ) throw(::com::sun::star::uno::RuntimeException); // XInitialization virtual void SAL_CALL initialize( const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >& aArguments ) throw(::com::sun::star::uno::Exception, ::com::sun::star::uno::RuntimeException); // XImplementationLoader virtual Reference SAL_CALL activate( const OUString& implementationName, const OUString& implementationLoaderUrl, const OUString& locationUrl, const Reference& xKey ) throw(CannotActivateFactoryException, RuntimeException); virtual sal_Bool SAL_CALL writeRegistryInfo( const Reference& xKey, const OUString& implementationLoaderUrl, const OUString& locationUrl ) throw(CannotRegisterImplementationException, RuntimeException); private: Reference m_xSMgr; }; //************************************************************************* DllComponentLoader::DllComponentLoader( const Reference & xCtx ) { m_xSMgr.set( xCtx->getServiceManager(), UNO_QUERY ); } //************************************************************************* DllComponentLoader::~DllComponentLoader() {} //************************************************************************* OUString SAL_CALL DllComponentLoader::getImplementationName( ) throw(::com::sun::star::uno::RuntimeException) { return stoc_bootstrap::loader_getImplementationName(); } sal_Bool SAL_CALL DllComponentLoader::supportsService( const OUString& ServiceName ) throw(::com::sun::star::uno::RuntimeException) { return cppu::supportsService(this, ServiceName); } Sequence SAL_CALL DllComponentLoader::getSupportedServiceNames( ) throw(::com::sun::star::uno::RuntimeException) { return stoc_bootstrap::loader_getSupportedServiceNames(); } //************************************************************************* void DllComponentLoader::initialize( const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >& ) throw(::com::sun::star::uno::Exception, ::com::sun::star::uno::RuntimeException) { OSL_FAIL( "dllcomponentloader::initialize should not be called !" ); // if( aArgs.getLength() != 1 ) // { // throw IllegalArgumentException(); // } // Reference< XMultiServiceFactory > rServiceManager; // if( aArgs.getConstArray()[0].getValueType().getTypeClass() == TypeClass_INTERFACE ) // { // aArgs.getConstArray()[0] >>= rServiceManager; // } // if( !rServiceManager.is() ) // { // throw IllegalArgumentException(); // } // m_xSMgr = rServiceManager; } //************************************************************************* Reference SAL_CALL DllComponentLoader::activate( const OUString & rImplName, const OUString &, const OUString & rLibName, const Reference< XRegistryKey > & ) throw(CannotActivateFactoryException, RuntimeException) { return loadSharedLibComponentFactory( cppu::bootstrap_expandUri(rLibName), OUString(), rImplName, m_xSMgr, css::uno::Reference(), OUString() ); } //************************************************************************* sal_Bool SAL_CALL DllComponentLoader::writeRegistryInfo( const Reference< XRegistryKey > & xKey, const OUString &, const OUString & rLibName ) throw(CannotRegisterImplementationException, RuntimeException) { #ifdef DISABLE_DYNLOADING (void) xKey; (void) rLibName; OSL_FAIL( "DllComponentLoader::writeRegistryInfo() should not be called I think?" ); return sal_False; #else writeSharedLibComponentInfo( cppu::bootstrap_expandUri(rLibName), OUString(), m_xSMgr, xKey ); return sal_True; #endif } } namespace stoc_bootstrap { //************************************************************************* Reference SAL_CALL DllComponentLoader_CreateInstance( const Reference & xCtx ) throw(Exception) { Reference xRet; XImplementationLoader *pXLoader = (XImplementationLoader *)new stoc_loader::DllComponentLoader(xCtx); if (pXLoader) { xRet = Reference::query(pXLoader); } return xRet; } } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */