/************************************************************************* * * OpenOffice.org - a multi-platform office productivity suite * * $RCSfile: bookmarkcontainer.hxx,v $ * * $Revision: 1.6 $ * * last change: $Author: rt $ $Date: 2005-09-08 10:39:59 $ * * The Contents of this file are made available subject to * the terms of GNU Lesser General Public License Version 2.1. * * * GNU Lesser General Public License Version 2.1 * ============================================= * Copyright 2005 by Sun Microsystems, Inc. * 901 San Antonio Road, Palo Alto, CA 94303, USA * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License version 2.1, as published by the Free Software Foundation. * * This library 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 for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * MA 02111-1307 USA * ************************************************************************/ #ifndef _DBA_CORE_BOOKMARKCONTAINER_HXX_ #define _DBA_CORE_BOOKMARKCONTAINER_HXX_ #ifndef _CPPUHELPER_INTERFACECONTAINER_HXX_ #include #endif #ifndef _CPPUHELPER_IMPLBASE6_HXX_ #include #endif #ifndef _COMPHELPER_STLTYPES_HXX_ #include #endif #ifndef _OSL_MUTEX_HXX_ #include #endif #ifndef _COM_SUN_STAR_CONTAINER_XCHILD_HPP_ #include #endif #ifndef _COM_SUN_STAR_CONTAINER_XNAMECONTAINER_HPP_ #include #endif #ifndef _COM_SUN_STAR_CONTAINER_XCONTAINER_HPP_ #include #endif #ifndef _COM_SUN_STAR_CONTAINER_XENUMERATIONACCESS_HPP_ #include #endif #ifndef _COM_SUN_STAR_CONTAINER_XINDEXACCESS_HPP_ #include #endif #ifndef _COM_SUN_STAR_LANG_XSERVICEINFO_HPP_ #include #endif #ifndef _COM_SUN_STAR_LANG_XSINGLESERVICEFACTORY_HPP_ #include #endif #ifndef _COM_SUN_STAR_BEANS_XPROPERTYSET_HPP_ #include #endif #ifndef _COM_SUN_STAR_LANG_DISPOSEDEXCEPTION_HPP_ #include #endif //........................................................................ namespace dbaccess { //........................................................................ //========================================================================== //= OBookmarkContainer - base class of collections of database definition //= documents //========================================================================== typedef ::cppu::WeakImplHelper6 < ::com::sun::star::container::XIndexAccess , ::com::sun::star::container::XNameContainer , ::com::sun::star::container::XEnumerationAccess , ::com::sun::star::container::XContainer , ::com::sun::star::lang::XServiceInfo , ::com::sun::star::container::XChild > OBookmarkContainer_Base; class OBookmarkContainer :public OBookmarkContainer_Base { protected: DECLARE_STL_USTRINGACCESS_MAP(::rtl::OUString, MapString2String); DECLARE_STL_VECTOR(MapString2StringIterator, MapIteratorVector); MapString2String m_aBookmarks; // the bookmarks itself MapIteratorVector m_aBookmarksIndexed; // for index access to the protected: ::cppu::OWeakObject& m_rParent; // for the ref counting ::cppu::OInterfaceContainerHelper m_aContainerListeners; ::osl::Mutex& m_rMutex; public: /** constructs the container.
after the construction of the object the creator has to call initialize. @param _rParent the parent object which is used for ref counting @param _rMutex the parent's mutex object for access safety */ OBookmarkContainer( ::cppu::OWeakObject& _rParent, ::osl::Mutex& _rMutex ); /** looks like the dtor ... */ virtual ~OBookmarkContainer(); // ::com::sun::star::uno::XInterface virtual void SAL_CALL acquire( ) throw(); virtual void SAL_CALL release( ) throw(); // ::com::sun::star::lang::XServiceInfo virtual ::rtl::OUString SAL_CALL getImplementationName( ) throw(::com::sun::star::uno::RuntimeException); virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) throw(::com::sun::star::uno::RuntimeException); virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames( ) throw(::com::sun::star::uno::RuntimeException); // ::com::sun::star::container::XElementAccess virtual ::com::sun::star::uno::Type SAL_CALL getElementType( ) throw(::com::sun::star::uno::RuntimeException); virtual sal_Bool SAL_CALL hasElements( ) throw(::com::sun::star::uno::RuntimeException); // ::com::sun::star::container::XEnumerationAccess virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XEnumeration > SAL_CALL createEnumeration( ) throw(::com::sun::star::uno::RuntimeException); // ::com::sun::star::container::XIndexAccess virtual sal_Int32 SAL_CALL getCount( ) throw(::com::sun::star::uno::RuntimeException); virtual ::com::sun::star::uno::Any SAL_CALL getByIndex( sal_Int32 _nIndex ) throw(::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); // ::com::sun::star::container::XNameContainer virtual void SAL_CALL insertByName( const ::rtl::OUString& _rName, const ::com::sun::star::uno::Any& aElement ) throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::container::ElementExistException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); virtual void SAL_CALL removeByName( const ::rtl::OUString& _rName ) throw(::com::sun::star::container::NoSuchElementException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); // ::com::sun::star::container::XNameReplace virtual void SAL_CALL replaceByName( const ::rtl::OUString& _rName, const ::com::sun::star::uno::Any& aElement ) throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::container::NoSuchElementException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); // ::com::sun::star::container::XNameAccess virtual ::com::sun::star::uno::Any SAL_CALL getByName( const ::rtl::OUString& aName ) throw(::com::sun::star::container::NoSuchElementException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getElementNames( ) throw(::com::sun::star::uno::RuntimeException); virtual sal_Bool SAL_CALL hasByName( const ::rtl::OUString& aName ) throw(::com::sun::star::uno::RuntimeException); // ::com::sun::star::container::XContainer virtual void SAL_CALL addContainerListener( const ::com::sun::star::uno::Reference< ::com::sun::star::container::XContainerListener >& xListener ) throw(::com::sun::star::uno::RuntimeException); virtual void SAL_CALL removeContainerListener( const ::com::sun::star::uno::Reference< ::com::sun::star::container::XContainerListener >& xListener ) throw(::com::sun::star::uno::RuntimeException); // ::com::sun::star::container::XChild virtual ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL getParent( ) throw (::com::sun::star::uno::RuntimeException); virtual void SAL_CALL setParent( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& Parent ) throw (::com::sun::star::lang::NoSupportException, ::com::sun::star::uno::RuntimeException); // helper /** tell the container to free all resources. After that it's in a state like after the construction, i.e. you may call initialize again (maybe with another configuration node). */ virtual void dispose(); protected: /** checks whether the object is basically alive, i.e. it has been fully initialized (@see initialize) and not disposed (@see dispose) @param _bIntendWriteAccess determines whether or not the caller intends to modify the configuration. if sal_True and the configuration is readonly, a runtime exception with a description string is thrown. */ void checkValid(sal_Bool _bIntendWriteAccess) const throw (::com::sun::star::uno::RuntimeException, ::com::sun::star::lang::DisposedException); /** checks whether or not the configuration data the object is based on is readonly */ sal_Bool isReadOnly() const; /** quickly checks if there already is an element with a given name. No access to the configuration occures, i.e. if there is such an object which is not already loaded, it won't be loaded now. @param _rName the object name to check @return sal_True if there already exists such an object */ inline sal_Bool checkExistence(const ::rtl::OUString& _rName); void implAppend( const ::rtl::OUString& _rName, const ::rtl::OUString& _rDocumentLocation ); void implRemove(const ::rtl::OUString& _rName); void implReplace( const ::rtl::OUString& _rName, const ::rtl::OUString& _rNewLink); }; //-------------------------------------------------------------------------- inline sal_Bool OBookmarkContainer::checkExistence(const ::rtl::OUString& _rName) { return m_aBookmarks.find(_rName) != m_aBookmarks.end(); } //........................................................................ } // namespace dbaccess //........................................................................ #endif // _DBA_CORE_BOOKMARKCONTAINER_HXX_