#ifndef CONFIGMGR_BACKEND_SYSTEMINTEGRATIONMANAGER_HXX_ #define CONFIGMGR_BACKEND_SYSTEMINTEGRATIONMANAGER_HXX_ #include #include #include #include #include #include #include #include #include #include #include #ifndef INCLUDED_MAP #include #define INCLUDED_MAP #endif namespace configmgr { namespace backend { namespace css = com::sun::star ; namespace uno = css::uno ; namespace lang = css::lang ; namespace backenduno = css::configuration::backend ; typedef uno::Reference BackendFactory; typedef uno::Reference PlatformBackend; /* Class containing a reference to a service factory(XSingleComponentFactory) object and a platform backend (XSingleLayerStratum). The reference to the platform backend will be NULL until the platform backend is initialised */ class BackendRef { BackendFactory mFactory; PlatformBackend mBackend; public: explicit BackendRef(const BackendFactory& aFactory) :mFactory(aFactory) ,mBackend() {} PlatformBackend getBackend(uno::Reference const & xContext); void disposeBackend(); }; typedef cppu::WeakComponentImplHelper4< backenduno::XBackend, backenduno::XBackendChangesNotifier, lang::XInitialization, lang::XServiceInfo> BackendBase ; /** Class implementing the Backend service for system integration backend access. It creates the required backends and coordinates access to them. */ class SystemIntegrationManager : public BackendBase { public: /** Service constructor from a service factory. @param xContext component context */ explicit SystemIntegrationManager( const uno::Reference& xContext) ; /** Destructor */ ~SystemIntegrationManager() ; // XBackend virtual uno::Sequence > SAL_CALL listOwnLayers(const rtl::OUString& aComponent) throw (backenduno::BackendAccessException, lang::IllegalArgumentException, uno::RuntimeException) ; virtual uno::Reference SAL_CALL getOwnUpdateHandler(const rtl::OUString& aComponent) throw (backenduno::BackendAccessException, lang::IllegalArgumentException, lang::NoSupportException, uno::RuntimeException) ; virtual uno::Sequence > SAL_CALL listLayers(const rtl::OUString& aComponent, const rtl::OUString& aEntity) throw (backenduno::BackendAccessException, lang::IllegalArgumentException, uno::RuntimeException) ; virtual uno::Reference SAL_CALL getUpdateHandler(const rtl::OUString& aComponent, const rtl::OUString& aEntity) throw (backenduno::BackendAccessException, lang::IllegalArgumentException, lang::NoSupportException, uno::RuntimeException) ; // XInitialize virtual void SAL_CALL initialize(const uno::Sequence& aParameters) throw (uno::RuntimeException, uno::Exception, lang::IllegalArgumentException, backenduno::BackendSetupException) ; // XServiceInfo virtual rtl::OUString SAL_CALL getImplementationName() throw (uno::RuntimeException) ; virtual sal_Bool SAL_CALL supportsService(const rtl::OUString& aServiceName) throw (uno::RuntimeException) ; virtual uno::Sequence SAL_CALL getSupportedServiceNames(void) throw (uno::RuntimeException) ; // XBackendChangesNotifier virtual void SAL_CALL addChangesListener( const uno::Reference& xListner, const rtl::OUString& aComponent) throw (uno::RuntimeException); virtual void SAL_CALL removeChangesListener( const uno::Reference& xListner, const rtl::OUString& aComponent) throw (uno::RuntimeException); /** Provides the implementation name. @return implementation name */ static rtl::OUString SAL_CALL getSystemIntegrationManagerName(void) ; /** Provides the list of supported services. @return list of service names */ static uno::Sequence SAL_CALL getServiceNames(void) ; protected: // ComponentHelper virtual void SAL_CALL disposing(); private : typedef std::multimap BackendFactoryList; typedef std::vector PlatformBackendList; /** build lookup up table */ void buildLookupTable(); /** get list of supported components */ uno::Sequence getSupportedComponents(const BackendFactory& xFactory); /** get supporting backends from lookup table */ PlatformBackendList getSupportingBackends(const rtl::OUString& aComponent); private : /** Mutex for resource protection */ osl::Mutex mMutex ; /** Component Context */ uno::Reference mContext ; BackendFactoryList mPlatformBackends; } ; } } // configmgr.backend #endif // CONFIGMGR_BACKEND_SYSTEMINTEGRATIONMANAGER_HXX_