diff options
author | Matúš Kukan <matus.kukan@collabora.com> | 2014-01-09 20:29:20 +0100 |
---|---|---|
committer | Matúš Kukan <matus.kukan@collabora.com> | 2014-01-10 16:29:19 +0100 |
commit | 714a4d106a968ce270ea5cfe0e8c11c6cf31c59b (patch) | |
tree | 045863861f2bff446a93ea60a8332295bb269b17 | |
parent | 301ba2494c7a57d67bbe7afd87fe8b160c8f3e17 (diff) |
fwk: Use constructor feature for ModuleManager.
Change-Id: Ic0bcec6fffc52ed1ce535f87da933bdf01c6db01
-rw-r--r-- | framework/inc/services/modulemanager.hxx | 209 | ||||
-rw-r--r-- | framework/source/register/registerservices.cxx | 2 | ||||
-rw-r--r-- | framework/source/services/modulemanager.cxx | 190 | ||||
-rw-r--r-- | framework/util/fwk.component | 3 |
4 files changed, 163 insertions, 241 deletions
diff --git a/framework/inc/services/modulemanager.hxx b/framework/inc/services/modulemanager.hxx deleted file mode 100644 index a2dae04f4950..000000000000 --- a/framework/inc/services/modulemanager.hxx +++ /dev/null @@ -1,209 +0,0 @@ -/* -*- 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 . - */ - -#ifndef INCLUDED_FRAMEWORK_INC_SERVICES_MODULEMANAGER_HXX -#define INCLUDED_FRAMEWORK_INC_SERVICES_MODULEMANAGER_HXX - -#include "sal/config.h" - -#include <threadhelp/threadhelpbase.hxx> - -#include <boost/noncopyable.hpp> -#include <com/sun/star/lang/XServiceInfo.hpp> -#include <com/sun/star/lang/XMultiServiceFactory.hpp> -#include <com/sun/star/frame/XModuleManager2.hpp> -#include <com/sun/star/container/XNameReplace.hpp> -#include <com/sun/star/container/XContainerQuery.hpp> -#include <com/sun/star/uno/XComponentContext.hpp> -#include <cppuhelper/implbase3.hxx> - -namespace com { namespace sun { namespace star { namespace lang { - class XSingleServiceFactory; -} } } } - -//_______________________________________________ -// definition - -namespace framework -{ - -//_______________________________________________ -/** - implements the service com.sun.star.frame.ModuleManager - */ -class ModuleManager: - public cppu::WeakImplHelper3< - css::lang::XServiceInfo, - css::frame::XModuleManager2, - css::container::XContainerQuery >, - private ThreadHelpBase, private boost::noncopyable -{ - //___________________________________________ - // member - - private: - - //--------------------------------------- - /** the global uno service manager. - Must be used to create own needed services. - */ - css::uno::Reference< css::uno::XComponentContext > m_xContext; - - //--------------------------------------- - /** points to the underlying configuration. - This ModuleManager does not cache - it calls directly the - configuration API! - */ - css::uno::Reference< css::container::XNameAccess > m_xCFG; - - //___________________________________________ - // interface - - public: - - static OUString SAL_CALL impl_getStaticImplementationName(); - - static css::uno::Reference< css::lang::XSingleServiceFactory > SAL_CALL - impl_createFactory( - css::uno::Reference< css::lang::XMultiServiceFactory > const & - manager); - - private: - - static css::uno::Sequence< OUString > - impl_getSupportedServiceNames(); - - static css::uno::Reference< css::uno::XInterface > SAL_CALL - impl_createInstance( - css::uno::Reference< css::lang::XMultiServiceFactory > const & - manager); - - ModuleManager(const css::uno::Reference< css::uno::XComponentContext >& xContext); - - virtual ~ModuleManager( ); - - // XServiceInfo - virtual OUString SAL_CALL getImplementationName() - throw (css::uno::RuntimeException); - - virtual sal_Bool SAL_CALL supportsService( - OUString const & ServiceName) - throw (css::uno::RuntimeException); - - virtual css::uno::Sequence< OUString > SAL_CALL - getSupportedServiceNames() throw (css::uno::RuntimeException); - - // XModuleManager - virtual OUString SAL_CALL identify(const css::uno::Reference< css::uno::XInterface >& xModule) - throw(css::lang::IllegalArgumentException, - css::frame::UnknownModuleException, - css::uno::RuntimeException ); - - // XNameReplace - virtual void SAL_CALL replaceByName(const OUString& sName , - const css::uno::Any& aValue) - throw (css::lang::IllegalArgumentException , - css::container::NoSuchElementException, - css::lang::WrappedTargetException , - css::uno::RuntimeException ); - - // XNameAccess - virtual css::uno::Any SAL_CALL getByName(const OUString& sName) - throw(css::container::NoSuchElementException, - css::lang::WrappedTargetException , - css::uno::RuntimeException ); - - virtual css::uno::Sequence< OUString > SAL_CALL getElementNames() - throw(css::uno::RuntimeException); - - virtual sal_Bool SAL_CALL hasByName(const OUString& sName) - throw(css::uno::RuntimeException); - - // XElementAccess - virtual css::uno::Type SAL_CALL getElementType() - throw(css::uno::RuntimeException); - - virtual sal_Bool SAL_CALL hasElements() - throw(css::uno::RuntimeException); - - // XContainerQuery - virtual css::uno::Reference< css::container::XEnumeration > SAL_CALL createSubSetEnumerationByQuery(const OUString& sQuery) - throw(css::uno::RuntimeException); - - virtual css::uno::Reference< css::container::XEnumeration > SAL_CALL createSubSetEnumerationByProperties(const css::uno::Sequence< css::beans::NamedValue >& lProperties) - throw(css::uno::RuntimeException); - //___________________________________________ - // helper - - private: - - //--------------------------------------- - /** @short open the underlying configuration. - - @descr This method must be called every time - a (reaonly!) configuration is needed. Because - method works together with the member - m_xCFG, open it on demand and cache it - afterwards. - - Note: A writable configuration access - must be created explicitly. Otherwise - we cant make sure that broken write requests - wont affect our read access ! - - @return [com.sun.star.container.XNameAccess] - the configuration object - - @throw [com.sun.star.uno.RuntimeException] - if config could not be opened successfully! - - @threadsafe - */ - css::uno::Reference< css::container::XNameAccess > implts_getConfig() - throw(css::uno::RuntimeException); - - //--------------------------------------- - /** @short makes the real identification of the module. - - @descr It checks for the optional but preferred interface - XModule first. If this module does not exists at the - given component it tries to use XServiceInfo instead. - - Note: This method try to locate a suitable module name. - Nothing else. Selecting the right component and throwing suitable - exceptions must be done outside. - - @see identify() - - @param xComponent - the module for identification. - - @return The identifier of the given module. - Can be empty if given component is not a real module ! - - @threadsafe - */ - OUString implts_identify(const css::uno::Reference< css::uno::XInterface >& xComponent); -}; - -} // namespace framework - -#endif // INCLUDED_FRAMEWORK_INC_SERVICES_MODULEMANAGER_HXX - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/framework/source/register/registerservices.cxx b/framework/source/register/registerservices.cxx index 20c8d3477b07..258f8626ba10 100644 --- a/framework/source/register/registerservices.cxx +++ b/framework/source/register/registerservices.cxx @@ -35,7 +35,6 @@ =================================================================================================================*/ #include <services/desktop.hxx> #include <services/frame.hxx> -#include <services/modulemanager.hxx> #include <jobs/jobexecutor.hxx> #include <services/layoutmanager.hxx> #include <uielement/controlmenucontroller.hxx> @@ -55,7 +54,6 @@ COMPONENTGETFACTORY ( fwk, IFFACTORY( ::framework::JobExecutor ) else IFFACTORY( ::framework::LayoutManager ) else IFFACTORY( ::framework::ControlMenuController ) else - IFFACTORY( ::framework::ModuleManager ) else IFFACTORY( ::framework::MenuBarFactory ) else IFFACTORY( ::framework::GlobalAcceleratorConfiguration ) else IFFACTORY( ::framework::ModuleAcceleratorConfiguration ) else diff --git a/framework/source/services/modulemanager.cxx b/framework/source/services/modulemanager.cxx index 4de26dc6b838..1e515125ae76 100644 --- a/framework/source/services/modulemanager.cxx +++ b/framework/source/services/modulemanager.cxx @@ -18,10 +18,10 @@ */ -#include "services/modulemanager.hxx" -#include "services/frame.hxx" +#include <sal/config.h> #include <threadhelp/readguard.hxx> +#include <threadhelp/threadhelpbase.hxx> #include <threadhelp/writeguard.hxx> #include <services.h> @@ -29,43 +29,162 @@ #include <com/sun/star/frame/XController.hpp> #include <com/sun/star/frame/XModel.hpp> #include <com/sun/star/frame/XModule.hpp> +#include <com/sun/star/lang/XServiceInfo.hpp> +#include <com/sun/star/frame/XModuleManager2.hpp> +#include <com/sun/star/container/XNameReplace.hpp> +#include <com/sun/star/container/XContainerQuery.hpp> +#include <com/sun/star/uno/XComponentContext.hpp> + +#include <cppuhelper/implbase3.hxx> #include <comphelper/configurationhelper.hxx> #include <comphelper/sequenceashashmap.hxx> #include <comphelper/sequenceasvector.hxx> #include <comphelper/enumhelper.hxx> +#include <rtl/ref.hxx> +#include <boost/noncopyable.hpp> -namespace framework -{ +using namespace framework; + +namespace { static const char CFGPATH_FACTORIES[] = "/org.openoffice.Setup/Office/Factories"; static const char MODULEPROP_IDENTIFIER[] = "ooSetupFactoryModuleIdentifier"; -OUString ModuleManager::impl_getStaticImplementationName() { - return IMPLEMENTATIONNAME_MODULEMANAGER; -} - -css::uno::Reference< css::lang::XSingleServiceFactory > -ModuleManager::impl_createFactory( - css::uno::Reference< css::lang::XMultiServiceFactory > const & manager) +class ModuleManager: + public cppu::WeakImplHelper3< + css::lang::XServiceInfo, + css::frame::XModuleManager2, + css::container::XContainerQuery >, + private ThreadHelpBase, private boost::noncopyable { - return cppu::createSingleFactory( - manager, impl_getStaticImplementationName(), &impl_createInstance, - impl_getSupportedServiceNames()); -} +private: -css::uno::Sequence< OUString > -ModuleManager::impl_getSupportedServiceNames() { - css::uno::Sequence< OUString > s(1); - s[0] = "com.sun.star.frame.ModuleManager"; - return s; -} + //--------------------------------------- + /** the global uno service manager. + Must be used to create own needed services. + */ + css::uno::Reference< css::uno::XComponentContext > m_xContext; -css::uno::Reference< css::uno::XInterface > ModuleManager::impl_createInstance( - css::uno::Reference< css::lang::XMultiServiceFactory > const & manager) -{ - return static_cast< cppu::OWeakObject * >(new ModuleManager( comphelper::getComponentContext(manager) )); -} + //--------------------------------------- + /** points to the underlying configuration. + This ModuleManager does not cache - it calls directly the + configuration API! + */ + css::uno::Reference< css::container::XNameAccess > m_xCFG; + +//___________________________________________ +// interface + +public: + + ModuleManager(const css::uno::Reference< css::uno::XComponentContext >& xContext); + + virtual ~ModuleManager(); + + // XServiceInfo + virtual OUString SAL_CALL getImplementationName() + throw (css::uno::RuntimeException); + + virtual sal_Bool SAL_CALL supportsService( + OUString const & ServiceName) + throw (css::uno::RuntimeException); + + virtual css::uno::Sequence< OUString > SAL_CALL + getSupportedServiceNames() throw (css::uno::RuntimeException); + + // XModuleManager + virtual OUString SAL_CALL identify(const css::uno::Reference< css::uno::XInterface >& xModule) + throw(css::lang::IllegalArgumentException, + css::frame::UnknownModuleException, + css::uno::RuntimeException ); + + // XNameReplace + virtual void SAL_CALL replaceByName(const OUString& sName , + const css::uno::Any& aValue) + throw (css::lang::IllegalArgumentException , + css::container::NoSuchElementException, + css::lang::WrappedTargetException , + css::uno::RuntimeException ); + + // XNameAccess + virtual css::uno::Any SAL_CALL getByName(const OUString& sName) + throw(css::container::NoSuchElementException, + css::lang::WrappedTargetException , + css::uno::RuntimeException ); + + virtual css::uno::Sequence< OUString > SAL_CALL getElementNames() + throw(css::uno::RuntimeException); + + virtual sal_Bool SAL_CALL hasByName(const OUString& sName) + throw(css::uno::RuntimeException); + + // XElementAccess + virtual css::uno::Type SAL_CALL getElementType() + throw(css::uno::RuntimeException); + + virtual sal_Bool SAL_CALL hasElements() + throw(css::uno::RuntimeException); + + // XContainerQuery + virtual css::uno::Reference< css::container::XEnumeration > SAL_CALL createSubSetEnumerationByQuery(const OUString& sQuery) + throw(css::uno::RuntimeException); + + virtual css::uno::Reference< css::container::XEnumeration > SAL_CALL createSubSetEnumerationByProperties(const css::uno::Sequence< css::beans::NamedValue >& lProperties) + throw(css::uno::RuntimeException); +//___________________________________________ +// helper + +private: + + //--------------------------------------- + /** @short open the underlying configuration. + + @descr This method must be called every time + a (reaonly!) configuration is needed. Because + method works together with the member + m_xCFG, open it on demand and cache it + afterwards. + + Note: A writable configuration access + must be created explicitly. Otherwise + we cant make sure that broken write requests + wont affect our read access ! + + @return [com.sun.star.container.XNameAccess] + the configuration object + + @throw [com.sun.star.uno.RuntimeException] + if config could not be opened successfully! + + @threadsafe + */ + css::uno::Reference< css::container::XNameAccess > implts_getConfig() + throw(css::uno::RuntimeException); + + //--------------------------------------- + /** @short makes the real identification of the module. + + @descr It checks for the optional but preferred interface + XModule first. If this module does not exists at the + given component it tries to use XServiceInfo instead. + + Note: This method try to locate a suitable module name. + Nothing else. Selecting the right component and throwing suitable + exceptions must be done outside. + + @see identify() + + @param xComponent + the module for identification. + + @return The identifier of the given module. + Can be empty if given component is not a real module ! + + @threadsafe + */ + OUString implts_identify(const css::uno::Reference< css::uno::XInterface >& xComponent); +}; ModuleManager::ModuleManager(const css::uno::Reference< css::uno::XComponentContext >& xContext) : ThreadHelpBase( ) @@ -82,7 +201,7 @@ ModuleManager::~ModuleManager() OUString ModuleManager::getImplementationName() throw (css::uno::RuntimeException) { - return impl_getStaticImplementationName(); + return OUString("com.sun.star.comp.framework.ModuleManager"); } sal_Bool ModuleManager::supportsService(OUString const & ServiceName) @@ -100,7 +219,9 @@ sal_Bool ModuleManager::supportsService(OUString const & ServiceName) css::uno::Sequence< OUString > ModuleManager::getSupportedServiceNames() throw (css::uno::RuntimeException) { - return impl_getSupportedServiceNames(); + css::uno::Sequence< OUString > s(1); + s[0] = "com.sun.star.frame.ModuleManager"; + return s; } OUString SAL_CALL ModuleManager::identify(const css::uno::Reference< css::uno::XInterface >& xModule) @@ -372,6 +493,17 @@ OUString ModuleManager::implts_identify(const css::uno::Reference< css::uno::XIn return OUString(); } -} // namespace framework +} + +extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface * SAL_CALL +com_sun_star_comp_framework_ModuleManager_get_implementation( + css::uno::XComponentContext * context, + uno_Sequence * arguments) +{ + assert(arguments != 0 && arguments->nElements == 0); (void) arguments; + rtl::Reference<ModuleManager> x(new ModuleManager(context)); + x->acquire(); + return static_cast<cppu::OWeakObject *>(x.get()); +} /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/framework/util/fwk.component b/framework/util/fwk.component index 659cf311b58e..4e15465d3764 100644 --- a/framework/util/fwk.component +++ b/framework/util/fwk.component @@ -67,7 +67,8 @@ <implementation name="com.sun.star.comp.framework.ModuleAcceleratorConfiguration"> <service name="com.sun.star.ui.ModuleAcceleratorConfiguration"/> </implementation> - <implementation name="com.sun.star.comp.framework.ModuleManager"> + <implementation name="com.sun.star.comp.framework.ModuleManager" + constructor="com_sun_star_comp_framework_ModuleManager_get_implementation"> <service name="com.sun.star.frame.ModuleManager"/> </implementation> <implementation name="com.sun.star.comp.framework.ModuleUIConfigurationManager" |