/************************************************************************* * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * Copyright 2008 by Sun Microsystems, Inc. * * OpenOffice.org - a multi-platform office productivity suite * * $RCSfile: multistratumbackend.hxx,v $ * $Revision: 1.6 $ * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License version 3 * only, as published by the Free Software Foundation. * * OpenOffice.org is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License version 3 for more details * (a copy is included in the LICENSE file that accompanied this code). * * You should have received a copy of the GNU Lesser General Public License * version 3 along with OpenOffice.org. If not, see * * for a copy of the LGPLv3 License. * ************************************************************************/ #ifndef CONFIGMGR_BACKEND_MULTISTRATUMBACKEND_HXX_ #define CONFIGMGR_BACKEND_MULTISTRATUMBACKEND_HXX_ #include #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 cppu::WeakComponentImplHelper7< backenduno::XBackend, backenduno::XBackendEntities, backenduno::XVersionedSchemaSupplier, backenduno::XBackendChangesNotifier, backenduno::XBackendChangesListener, lang::XInitialization, lang::XServiceInfo> BackendBase ; /** Class implementing the Backend service for multibackend access. It creates the required backends and coordinates access to them. */ class MultiStratumBackend : public BackendBase { public : /** Service constructor from a service factory. @param xContext component context */ explicit MultiStratumBackend( const uno::Reference& xContext) ; /** Destructor */ ~MultiStratumBackend() ; // XInitialize virtual void SAL_CALL initialize( const uno::Sequence& aParameters) throw (uno::RuntimeException, uno::Exception, css::configuration::InvalidBootstrapFileException, backenduno::BackendSetupException) ; // XVersionedSchemaSupplier virtual rtl::OUString SAL_CALL getSchemaVersion(const rtl::OUString& aComponent) throw (backenduno::BackendAccessException, lang::IllegalArgumentException, uno::RuntimeException) ; // XSchemaSupplier virtual uno::Reference SAL_CALL getComponentSchema(const rtl::OUString& aComponent) throw (backenduno::BackendAccessException, lang::IllegalArgumentException, uno::RuntimeException) ; // 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) ; // XBackendEntities virtual rtl::OUString SAL_CALL getOwnerEntity( ) throw (uno::RuntimeException); virtual rtl::OUString SAL_CALL getAdminEntity( ) throw (uno::RuntimeException); virtual sal_Bool SAL_CALL supportsEntity( const rtl::OUString& aEntity ) throw (backenduno::BackendAccessException, uno::RuntimeException); virtual sal_Bool SAL_CALL isEqualEntity( const rtl::OUString& aEntity, const rtl::OUString& aOtherEntity ) throw ( backenduno::BackendAccessException, lang::IllegalArgumentException, uno::RuntimeException); // 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 (::com::sun::star::uno::RuntimeException); virtual void SAL_CALL removeChangesListener( const uno::Reference& xListner, const rtl::OUString& aComponent) throw (::com::sun::star::uno::RuntimeException); // XBackendChangesListener virtual void SAL_CALL componentDataChanged(const backenduno::ComponentChangeEvent& aEvent) throw (::com::sun::star::uno::RuntimeException); virtual void SAL_CALL disposing( lang::EventObject const & rSource ) throw (uno::RuntimeException); void notifyListeners(const backenduno::ComponentChangeEvent& aEvent) const; protected: // ComponentHelper virtual void SAL_CALL disposing(); private : /** Initialize the schema supplier backend */ void initializeSchemaSupplier(const uno::Reference& aContext); /** Initialize strata(SingleLayer or MultiLayer) backend */ void initializeBackendStrata(const uno::Reference& aContext); /** Get Layers from Backend Strata */ uno::Sequence > searchSupportingStrata(sal_Int32 nNumLayer, rtl::OUString aEntity, const rtl::OUString& aComponent) ; /** Find the Stratum that supports the specified Entity * @return Number of Supported Strata */ sal_Int32 findSupportingStratum(const rtl::OUString& aEntity) ; /** Check state of MultiStratumBackend - @return true if not disposed/uninitialized */ bool checkOkState(); /** Service factory */ uno::Reference mFactory ; /** Mutex for resource protection */ osl::Mutex mMutex ; typedef std::vector< uno::Reference > BackendStrata; uno::Reference mSchemaSupplier ; /** list of all backends */ BackendStrata mBackendStrata; rtl::OUString mOwnerEntity; /** Helper object that listens to the Strata Backends */ typedef uno::Reference ListenerRef; ListenerRef mStrataListener; /** List of higher level listeners */ typedef std::multimap ListenerList; ListenerList mListenerList; } ; } } // configmgr.backend #endif // CONFIGMGR_BACKEND_MULTISTRATUMBACKEND_HXX_