summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatúš Kukan <matus.kukan@collabora.com>2014-01-09 20:29:20 +0100
committerMatúš Kukan <matus.kukan@collabora.com>2014-01-10 16:29:19 +0100
commit714a4d106a968ce270ea5cfe0e8c11c6cf31c59b (patch)
tree045863861f2bff446a93ea60a8332295bb269b17
parent301ba2494c7a57d67bbe7afd87fe8b160c8f3e17 (diff)
fwk: Use constructor feature for ModuleManager.
Change-Id: Ic0bcec6fffc52ed1ce535f87da933bdf01c6db01
-rw-r--r--framework/inc/services/modulemanager.hxx209
-rw-r--r--framework/source/register/registerservices.cxx2
-rw-r--r--framework/source/services/modulemanager.cxx190
-rw-r--r--framework/util/fwk.component3
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"