| /************************************************************** |
| * |
| * 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 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| *************************************************************/ |
| |
| |
| |
| #ifndef _DBA_CORE_BOOKMARKCONTAINER_HXX_ |
| #define _DBA_CORE_BOOKMARKCONTAINER_HXX_ |
| |
| #ifndef _CPPUHELPER_INTERFACECONTAINER_HXX_ |
| #include <cppuhelper/interfacecontainer.hxx> |
| #endif |
| #ifndef _CPPUHELPER_IMPLBASE6_HXX_ |
| #include <cppuhelper/implbase6.hxx> |
| #endif |
| #ifndef _COMPHELPER_STLTYPES_HXX_ |
| #include <comphelper/stl_types.hxx> |
| #endif |
| #ifndef _OSL_MUTEX_HXX_ |
| #include <osl/mutex.hxx> |
| #endif |
| #ifndef _COM_SUN_STAR_CONTAINER_XCHILD_HPP_ |
| #include <com/sun/star/container/XChild.hpp> |
| #endif |
| #ifndef _COM_SUN_STAR_CONTAINER_XNAMECONTAINER_HPP_ |
| #include <com/sun/star/container/XNameContainer.hpp> |
| #endif |
| #ifndef _COM_SUN_STAR_CONTAINER_XCONTAINER_HPP_ |
| #include <com/sun/star/container/XContainer.hpp> |
| #endif |
| #ifndef _COM_SUN_STAR_CONTAINER_XENUMERATIONACCESS_HPP_ |
| #include <com/sun/star/container/XEnumerationAccess.hpp> |
| #endif |
| #ifndef _COM_SUN_STAR_CONTAINER_XINDEXACCESS_HPP_ |
| #include <com/sun/star/container/XIndexAccess.hpp> |
| #endif |
| #ifndef _COM_SUN_STAR_LANG_XSERVICEINFO_HPP_ |
| #include <com/sun/star/lang/XServiceInfo.hpp> |
| #endif |
| #ifndef _COM_SUN_STAR_LANG_XSINGLESERVICEFACTORY_HPP_ |
| #include <com/sun/star/lang/XSingleServiceFactory.hpp> |
| #endif |
| #ifndef _COM_SUN_STAR_BEANS_XPROPERTYSET_HPP_ |
| #include <com/sun/star/beans/XPropertySet.hpp> |
| #endif |
| #ifndef _COM_SUN_STAR_LANG_DISPOSEDEXCEPTION_HPP_ |
| #include <com/sun/star/lang/DisposedException.hpp> |
| #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.<BR> |
| after the construction of the object the creator has to call <code>initialize</code>. |
| @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 <code>initialize</code> 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); |
| |
| /** 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_ |
| |