15#include <unordered_map>
22#include <com/sun/star/beans/XPropertySet.hpp>
23#include <com/sun/star/beans/XPropertySetInfo.hpp>
24#include <com/sun/star/container/XContentEnumerationAccess.hpp>
25#include <com/sun/star/container/XSet.hpp>
26#include <com/sun/star/lang/XEventListener.hpp>
27#include <com/sun/star/lang/XInitialization.hpp>
28#include <com/sun/star/lang/XMultiComponentFactory.hpp>
29#include <com/sun/star/lang/XMultiServiceFactory.hpp>
30#include <com/sun/star/lang/XServiceInfo.hpp>
31#include <com/sun/star/uno/Reference.hxx>
34#include <rtl/ustring.hxx>
37 class XSingleComponentFactory;
39namespace cppu {
struct ContextEntry_Init; }
40namespace com :: sun :: star :: lang {
class XSingleServiceFactory; }
41namespace com :: sun :: star ::
uno {
class XComponentContext; }
50 css::uno::XComponentContext *, css::uno::Sequence<css::uno::Any>
const &);
54typedef std::function<css::uno::XInterface * (css::uno::XComponentContext *, css::uno::Sequence<css::uno::Any>
const&)>
WrapperConstructorFn;
56typedef cppu::WeakComponentImplHelper<
57 css::lang::XServiceInfo, css::lang::XMultiServiceFactory,
58 css::lang::XMultiComponentFactory, css::container::XSet,
59 css::container::XContentEnumerationAccess, css::beans::XPropertySet,
60 css::beans::XPropertySetInfo, css::lang::XEventListener,
61 css::lang::XInitialization>
75 OUString theName, OUString theLoader,
76 OUString theUri, OUString theEnvironment,
77 OUString theConstructorName,
79 bool theIsSingleInstance,
80 css::uno::Reference< css::uno::XComponentContext > theAlienContext,
91 css::uno::Reference< css::lang::XSingleComponentFactory >
93 css::uno::Reference< css::lang::XSingleServiceFactory >
const &
95 css::uno::Reference< css::lang::XComponent > theComponent):
99 { assert(theFactory1.is() || theFactory2.is()); }
105 css::uno::Reference<css::uno::XComponentContext>
const &
107 bool singletonRequest);
109 css::uno::Reference<css::uno::XInterface>
111 css::uno::Reference<css::uno::XComponentContext>
const &
113 bool singletonRequest,
114 css::uno::Sequence<css::uno::Any>
const & arguments);
143 css::uno::Reference< css::lang::XSingleComponentFactory >
factory1;
144 css::uno::Reference< css::lang::XSingleServiceFactory >
factory2;
155 css::uno::Reference<css::uno::XComponentContext>
const & context);
158 css::uno::Reference<css::uno::XComponentContext>
const & context,
159 css::uno::Sequence<css::uno::Any>
const & arguments);
162 bool singletonRequest,
163 css::uno::Reference<css::uno::XInterface>
const & instance);
166 typedef std::unordered_map< OUString, std::shared_ptr< Implementation > >
171 css::uno::Reference< css::lang::XServiceInfo >,
172 std::shared_ptr< Implementation > >
178 std::vector< std::shared_ptr< Implementation > > >
192 using ServiceManagerBase::acquire;
193 using ServiceManagerBase::release;
195 void init(std::u16string_view rdbUris);
198 css::uno::Reference< css::uno::XComponentContext >
const & context)
200 assert(context.is());
206 std::vector< cppu::ContextEntry_Init > * entries);
208 css::uno::Reference< css::uno::XComponentContext >
const &
getContext()
216 css::uno::Reference< css::uno::XComponentContext >
const & context,
217 std::shared_ptr< Data::Implementation >
const & implementation);
222 virtual void SAL_CALL
disposing()
override;
228 virtual css::uno::Sequence< OUString > SAL_CALL
231 virtual css::uno::Reference< css::uno::XInterface > SAL_CALL
createInstance(
232 OUString
const & aServiceSpecifier)
override;
234 virtual css::uno::Reference< css::uno::XInterface > SAL_CALL
236 OUString
const & ServiceSpecifier,
237 css::uno::Sequence< css::uno::Any >
const & Arguments)
override;
239 virtual css::uno::Sequence< OUString > SAL_CALL
242 virtual css::uno::Reference< css::uno::XInterface > SAL_CALL
244 OUString
const & aServiceSpecifier,
245 css::uno::Reference< css::uno::XComponentContext >
const & Context)
override;
247 virtual css::uno::Reference< css::uno::XInterface > SAL_CALL
249 OUString
const & ServiceSpecifier,
250 css::uno::Sequence< css::uno::Any >
const & Arguments,
251 css::uno::Reference< css::uno::XComponentContext >
const & Context)
override;
257 virtual css::uno::Reference< css::container::XEnumeration > SAL_CALL
260 virtual sal_Bool SAL_CALL
has(css::uno::Any
const & aElement)
override;
262 virtual void SAL_CALL
insert(css::uno::Any
const & aElement)
override;
264 virtual void SAL_CALL
remove(css::uno::Any
const & aElement)
override;
266 virtual css::uno::Reference< css::container::XEnumeration > SAL_CALL
269 virtual css::uno::Reference< css::beans::XPropertySetInfo > SAL_CALL
273 OUString
const & aPropertyName, css::uno::Any
const & aValue)
override;
276 OUString
const & PropertyName)
override;
279 OUString
const & aPropertyName,
280 css::uno::Reference< css::beans::XPropertyChangeListener >
const &
284 OUString
const & aPropertyName,
285 css::uno::Reference< css::beans::XPropertyChangeListener >
const &
289 OUString
const & PropertyName,
290 css::uno::Reference< css::beans::XVetoableChangeListener >
const &
294 OUString
const & PropertyName,
295 css::uno::Reference< css::beans::XVetoableChangeListener >
const &
298 virtual css::uno::Sequence< css::beans::Property > SAL_CALL
getProperties()
override;
301 OUString
const & aName)
override;
305 virtual void SAL_CALL
disposing(css::lang::EventObject
const & Source)
override;
308 css::uno::Sequence<css::uno::Any>
const & aArguments)
312 bool isDisposed()
const {
return rBHelper.bDisposed || rBHelper.bInDispose; }
315 css::uno::Reference< css::lang::XComponent >
const & component);
319 void readRdbFile(OUString
const & uri,
bool optional);
325 OUString
const & path);
329 OUString
const & path, std::vector< OUString > * strings);
332 std::vector< OUString >
const & uris,
333 css::uno::Reference< css::uno::XComponentContext >
const &
337 css::uno::Reference< css::lang::XServiceInfo >
const & factoryInfo);
344 css::uno::Reference< css::lang::XServiceInfo >
const & factoryInfo,
345 bool removeListener);
350 css::uno::Reference< css::uno::XComponentContext >
const & context,
351 OUString
const & specifier);
355 css::uno::Reference< css::uno::XComponentContext >
context_;
base class for all classes who want derive from cppu::WeakComponentImplHelperXX.
mutable::osl::Mutex m_aMutex
virtual css::uno::Sequence< css::beans::Property > SAL_CALL getProperties() override
bool readLegacyRdbFile(OUString const &uri)
virtual css::uno::Sequence< OUString > SAL_CALL getAvailableServiceNames() override
const ServiceManager & operator=(const ServiceManager &)=delete
virtual void SAL_CALL removeVetoableChangeListener(OUString const &PropertyName, css::uno::Reference< css::beans::XVetoableChangeListener > const &aListener) override
void loadImplementation(css::uno::Reference< css::uno::XComponentContext > const &context, std::shared_ptr< Data::Implementation > const &implementation)
bool insertExtraData(Data const &extra)
void addSingletonContextEntries(std::vector< cppu::ContextEntry_Init > *entries)
void removeEventListenerFromComponent(css::uno::Reference< css::lang::XComponent > const &component)
virtual void SAL_CALL setPropertyValue(OUString const &aPropertyName, css::uno::Any const &aValue) override
virtual sal_Bool SAL_CALL hasPropertyByName(OUString const &Name) override
virtual void SAL_CALL insert(css::uno::Any const &aElement) override
void insertLegacyFactory(css::uno::Reference< css::lang::XServiceInfo > const &factoryInfo)
virtual sal_Bool SAL_CALL hasElements() override
virtual css::uno::Reference< css::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo() override
virtual void SAL_CALL removePropertyChangeListener(OUString const &aPropertyName, css::uno::Reference< css::beans::XPropertyChangeListener > const &aListener) override
virtual css::uno::Reference< css::container::XEnumeration > SAL_CALL createEnumeration() override
virtual ~ServiceManager() override
virtual void SAL_CALL disposing() override
void readRdbDirectory(std::u16string_view uri, bool optional)
virtual css::beans::Property SAL_CALL getPropertyByName(OUString const &aName) override
virtual void SAL_CALL addVetoableChangeListener(OUString const &PropertyName, css::uno::Reference< css::beans::XVetoableChangeListener > const &aListener) override
void insertRdbFiles(std::vector< OUString > const &uris, css::uno::Reference< css::uno::XComponentContext > const &alientContext)
void readLegacyRdbStrings(std::u16string_view uri, RegistryKey &key, OUString const &path, std::vector< OUString > *strings)
virtual css::uno::Reference< css::uno::XInterface > SAL_CALL createInstanceWithArgumentsAndContext(OUString const &ServiceSpecifier, css::uno::Sequence< css::uno::Any > const &Arguments, css::uno::Reference< css::uno::XComponentContext > const &Context) override
std::shared_ptr< Data::Implementation > findServiceImplementation(css::uno::Reference< css::uno::XComponentContext > const &context, OUString const &specifier)
void removeImplementation(const OUString &name)
bool removeLegacyFactory(css::uno::Reference< css::lang::XServiceInfo > const &factoryInfo, bool removeListener)
virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override
virtual sal_Bool SAL_CALL has(css::uno::Any const &aElement) override
css::uno::Reference< css::uno::XComponentContext > const & getContext() const
virtual void SAL_CALL remove(css::uno::Any const &aElement) override
void removeRdbFiles(std::vector< OUString > const &uris)
void setContext(css::uno::Reference< css::uno::XComponentContext > const &context)
virtual css::uno::Any SAL_CALL getPropertyValue(OUString const &PropertyName) override
void preloadImplementations()
Used only by LibreOfficeKit when used by Online to pre-initialize.
virtual css::uno::Reference< css::uno::XInterface > SAL_CALL createInstance(OUString const &aServiceSpecifier) override
virtual OUString SAL_CALL getImplementationName() override
virtual css::uno::Reference< css::uno::XInterface > SAL_CALL createInstanceWithContext(OUString const &aServiceSpecifier, css::uno::Reference< css::uno::XComponentContext > const &Context) override
virtual css::uno::Reference< css::uno::XInterface > SAL_CALL createInstanceWithArguments(OUString const &ServiceSpecifier, css::uno::Sequence< css::uno::Any > const &Arguments) override
ServiceManager(const ServiceManager &)=delete
virtual void SAL_CALL initialize(css::uno::Sequence< css::uno::Any > const &aArguments) override
virtual css::uno::Reference< css::container::XEnumeration > SAL_CALL createContentEnumeration(OUString const &aServiceName) override
virtual sal_Bool SAL_CALL supportsService(OUString const &ServiceName) override
void readRdbFile(OUString const &uri, bool optional)
css::uno::Reference< css::uno::XComponentContext > context_
OUString readLegacyRdbString(std::u16string_view uri, RegistryKey &key, OUString const &path)
virtual css::uno::Type SAL_CALL getElementType() override
virtual void SAL_CALL addPropertyChangeListener(OUString const &aPropertyName, css::uno::Reference< css::beans::XPropertyChangeListener > const &xListener) override
void init(std::u16string_view rdbUris)
css::uno::XInterface * ImplementationConstructorFn(css::uno::XComponentContext *, css::uno::Sequence< css::uno::Any > const &)
cppu::WeakComponentImplHelper< css::lang::XServiceInfo, css::lang::XMultiServiceFactory, css::lang::XMultiComponentFactory, css::container::XSet, css::container::XContentEnumerationAccess, css::beans::XPropertySet, css::beans::XPropertySetInfo, css::lang::XEventListener, css::lang::XInitialization > ServiceManagerBase
std::function< css::uno::XInterface *(css::uno::XComponentContext *, css::uno::Sequence< css::uno::Any > const &)> WrapperConstructorFn
css::uno::Reference< css::lang::XComponent > disposeInstance
css::uno::Reference< css::uno::XInterface > createInstanceWithArguments(css::uno::Reference< css::uno::XComponentContext > const &context, bool singletonRequest, css::uno::Sequence< css::uno::Any > const &arguments)
const Implementation & operator=(const Implementation &)=delete
bool shallDispose() const
css::uno::Reference< css::uno::XInterface > doCreateInstanceWithArguments(css::uno::Reference< css::uno::XComponentContext > const &context, css::uno::Sequence< css::uno::Any > const &arguments)
css::uno::Reference< css::uno::XInterface > createInstance(css::uno::Reference< css::uno::XComponentContext > const &context, bool singletonRequest)
Implementation(OUString theName, OUString theLoader, OUString theUri, OUString theEnvironment, OUString theConstructorName, OUString thePrefix, bool theIsSingleInstance, css::uno::Reference< css::uno::XComponentContext > theAlienContext, OUString theRdbFile)
std::vector< OUString > singletons
css::uno::Reference< css::uno::XInterface > doCreateInstance(css::uno::Reference< css::uno::XComponentContext > const &context)
css::uno::Reference< css::lang::XSingleServiceFactory > factory2
css::uno::Reference< css::lang::XSingleComponentFactory > factory1
Implementation(OUString theName, css::uno::Reference< css::lang::XSingleComponentFactory > const &theFactory1, css::uno::Reference< css::lang::XSingleServiceFactory > const &theFactory2, css::uno::Reference< css::lang::XComponent > theComponent)
Implementation(const Implementation &)=delete
WrapperConstructorFn constructorFn
css::uno::Reference< css::uno::XInterface > singleInstance
css::uno::Reference< css::lang::XComponent > component
void updateDisposeInstance(bool singletonRequest, css::uno::Reference< css::uno::XInterface > const &instance)
css::uno::Reference< css::uno::XComponentContext > alienContext
std::vector< OUString > services
std::unordered_map< OUString, std::shared_ptr< Implementation > > NamedImplementations
ImplementationMap services
DynamicImplementations dynamicImplementations
std::unordered_map< css::uno::Reference< css::lang::XServiceInfo >, std::shared_ptr< Implementation > > DynamicImplementations
const Data & operator=(const Data &)=delete
Data(const Data &)=delete
NamedImplementations namedImplementations
ImplementationMap singletons
std::unordered_map< OUString, std::vector< std::shared_ptr< Implementation > > > ImplementationMap