xref: /trunk/main/dbaccess/source/core/dataaccess/bookmarkcontainer.hxx (revision 914d351e5f5b84e4342a86d6ab8d4aca7308b9bd)
12e2212a7SAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
32e2212a7SAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
42e2212a7SAndrew Rist  * or more contributor license agreements.  See the NOTICE file
52e2212a7SAndrew Rist  * distributed with this work for additional information
62e2212a7SAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
72e2212a7SAndrew Rist  * to you under the Apache License, Version 2.0 (the
82e2212a7SAndrew Rist  * "License"); you may not use this file except in compliance
92e2212a7SAndrew Rist  * with the License.  You may obtain a copy of the License at
10cdf0e10cSrcweir  *
112e2212a7SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12cdf0e10cSrcweir  *
132e2212a7SAndrew Rist  * Unless required by applicable law or agreed to in writing,
142e2212a7SAndrew Rist  * software distributed under the License is distributed on an
152e2212a7SAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
162e2212a7SAndrew Rist  * KIND, either express or implied.  See the License for the
172e2212a7SAndrew Rist  * specific language governing permissions and limitations
182e2212a7SAndrew Rist  * under the License.
19cdf0e10cSrcweir  *
202e2212a7SAndrew Rist  *************************************************************/
212e2212a7SAndrew Rist 
222e2212a7SAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir #ifndef _DBA_CORE_BOOKMARKCONTAINER_HXX_
25cdf0e10cSrcweir #define _DBA_CORE_BOOKMARKCONTAINER_HXX_
26cdf0e10cSrcweir 
27cdf0e10cSrcweir #ifndef _CPPUHELPER_INTERFACECONTAINER_HXX_
28cdf0e10cSrcweir #include <cppuhelper/interfacecontainer.hxx>
29cdf0e10cSrcweir #endif
30cdf0e10cSrcweir #ifndef _CPPUHELPER_IMPLBASE6_HXX_
31cdf0e10cSrcweir #include <cppuhelper/implbase6.hxx>
32cdf0e10cSrcweir #endif
33cdf0e10cSrcweir #ifndef _COMPHELPER_STLTYPES_HXX_
34cdf0e10cSrcweir #include <comphelper/stl_types.hxx>
35cdf0e10cSrcweir #endif
36cdf0e10cSrcweir #ifndef _OSL_MUTEX_HXX_
37cdf0e10cSrcweir #include <osl/mutex.hxx>
38cdf0e10cSrcweir #endif
39cdf0e10cSrcweir #ifndef _COM_SUN_STAR_CONTAINER_XCHILD_HPP_
40cdf0e10cSrcweir #include <com/sun/star/container/XChild.hpp>
41cdf0e10cSrcweir #endif
42cdf0e10cSrcweir #ifndef _COM_SUN_STAR_CONTAINER_XNAMECONTAINER_HPP_
43cdf0e10cSrcweir #include <com/sun/star/container/XNameContainer.hpp>
44cdf0e10cSrcweir #endif
45cdf0e10cSrcweir #ifndef _COM_SUN_STAR_CONTAINER_XCONTAINER_HPP_
46cdf0e10cSrcweir #include <com/sun/star/container/XContainer.hpp>
47cdf0e10cSrcweir #endif
48cdf0e10cSrcweir #ifndef _COM_SUN_STAR_CONTAINER_XENUMERATIONACCESS_HPP_
49cdf0e10cSrcweir #include <com/sun/star/container/XEnumerationAccess.hpp>
50cdf0e10cSrcweir #endif
51cdf0e10cSrcweir #ifndef _COM_SUN_STAR_CONTAINER_XINDEXACCESS_HPP_
52cdf0e10cSrcweir #include <com/sun/star/container/XIndexAccess.hpp>
53cdf0e10cSrcweir #endif
54cdf0e10cSrcweir #ifndef _COM_SUN_STAR_LANG_XSERVICEINFO_HPP_
55cdf0e10cSrcweir #include <com/sun/star/lang/XServiceInfo.hpp>
56cdf0e10cSrcweir #endif
57cdf0e10cSrcweir #ifndef _COM_SUN_STAR_LANG_XSINGLESERVICEFACTORY_HPP_
58cdf0e10cSrcweir #include <com/sun/star/lang/XSingleServiceFactory.hpp>
59cdf0e10cSrcweir #endif
60cdf0e10cSrcweir #ifndef _COM_SUN_STAR_BEANS_XPROPERTYSET_HPP_
61cdf0e10cSrcweir #include <com/sun/star/beans/XPropertySet.hpp>
62cdf0e10cSrcweir #endif
63cdf0e10cSrcweir #ifndef _COM_SUN_STAR_LANG_DISPOSEDEXCEPTION_HPP_
64cdf0e10cSrcweir #include <com/sun/star/lang/DisposedException.hpp>
65cdf0e10cSrcweir #endif
66cdf0e10cSrcweir 
67cdf0e10cSrcweir //........................................................................
68cdf0e10cSrcweir namespace dbaccess
69cdf0e10cSrcweir {
70cdf0e10cSrcweir //........................................................................
71cdf0e10cSrcweir 
72cdf0e10cSrcweir //==========================================================================
73cdf0e10cSrcweir //= OBookmarkContainer -    base class of collections of database definition
74cdf0e10cSrcweir //=                         documents
75cdf0e10cSrcweir //==========================================================================
76cdf0e10cSrcweir typedef ::cppu::WeakImplHelper6 <
77cdf0e10cSrcweir                                     ::com::sun::star::container::XIndexAccess
78cdf0e10cSrcweir                                 ,   ::com::sun::star::container::XNameContainer
79cdf0e10cSrcweir                                 ,   ::com::sun::star::container::XEnumerationAccess
80cdf0e10cSrcweir                                 ,   ::com::sun::star::container::XContainer
81cdf0e10cSrcweir                                 ,   ::com::sun::star::lang::XServiceInfo
82cdf0e10cSrcweir                                 ,   ::com::sun::star::container::XChild
83cdf0e10cSrcweir                                 >   OBookmarkContainer_Base;
84cdf0e10cSrcweir 
85cdf0e10cSrcweir class OBookmarkContainer
86cdf0e10cSrcweir             :public OBookmarkContainer_Base
87cdf0e10cSrcweir {
88cdf0e10cSrcweir protected:
89cdf0e10cSrcweir     DECLARE_STL_USTRINGACCESS_MAP(::rtl::OUString, MapString2String);
90cdf0e10cSrcweir     DECLARE_STL_VECTOR(MapString2StringIterator, MapIteratorVector);
91cdf0e10cSrcweir 
92cdf0e10cSrcweir     MapString2String        m_aBookmarks;           // the bookmarks itself
93cdf0e10cSrcweir     MapIteratorVector       m_aBookmarksIndexed;    // for index access to the
94cdf0e10cSrcweir 
95cdf0e10cSrcweir protected:
96cdf0e10cSrcweir     ::cppu::OWeakObject&    m_rParent;      // for the ref counting
97cdf0e10cSrcweir     ::cppu::OInterfaceContainerHelper
98cdf0e10cSrcweir                             m_aContainerListeners;
99cdf0e10cSrcweir     ::osl::Mutex&           m_rMutex;
100cdf0e10cSrcweir 
101cdf0e10cSrcweir 
102cdf0e10cSrcweir public:
103cdf0e10cSrcweir     /** constructs the container.<BR>
104cdf0e10cSrcweir         after the construction of the object the creator has to call <code>initialize</code>.
105cdf0e10cSrcweir         @param      _rParent                the parent object which is used for ref counting
106cdf0e10cSrcweir         @param      _rMutex                 the parent's mutex object for access safety
107cdf0e10cSrcweir     */
108cdf0e10cSrcweir     OBookmarkContainer(
109cdf0e10cSrcweir         ::cppu::OWeakObject& _rParent,
110cdf0e10cSrcweir         ::osl::Mutex& _rMutex
111cdf0e10cSrcweir         );
112cdf0e10cSrcweir 
113cdf0e10cSrcweir     /** looks like the dtor ...
114cdf0e10cSrcweir     */
115cdf0e10cSrcweir     virtual ~OBookmarkContainer();
116cdf0e10cSrcweir 
117cdf0e10cSrcweir // ::com::sun::star::uno::XInterface
118cdf0e10cSrcweir     virtual void SAL_CALL acquire(  ) throw();
119cdf0e10cSrcweir     virtual void SAL_CALL release(  ) throw();
120cdf0e10cSrcweir 
121cdf0e10cSrcweir // ::com::sun::star::lang::XServiceInfo
122cdf0e10cSrcweir     virtual ::rtl::OUString SAL_CALL getImplementationName(  ) throw(::com::sun::star::uno::RuntimeException);
123cdf0e10cSrcweir     virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) throw(::com::sun::star::uno::RuntimeException);
124cdf0e10cSrcweir     virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames(  ) throw(::com::sun::star::uno::RuntimeException);
125cdf0e10cSrcweir 
126cdf0e10cSrcweir // ::com::sun::star::container::XElementAccess
127cdf0e10cSrcweir     virtual ::com::sun::star::uno::Type SAL_CALL getElementType(  ) throw(::com::sun::star::uno::RuntimeException);
128cdf0e10cSrcweir     virtual sal_Bool SAL_CALL hasElements(  ) throw(::com::sun::star::uno::RuntimeException);
129cdf0e10cSrcweir 
130cdf0e10cSrcweir // ::com::sun::star::container::XEnumerationAccess
131cdf0e10cSrcweir     virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XEnumeration > SAL_CALL createEnumeration(  ) throw(::com::sun::star::uno::RuntimeException);
132cdf0e10cSrcweir 
133cdf0e10cSrcweir // ::com::sun::star::container::XIndexAccess
134cdf0e10cSrcweir     virtual sal_Int32 SAL_CALL getCount(  ) throw(::com::sun::star::uno::RuntimeException);
135cdf0e10cSrcweir     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);
136cdf0e10cSrcweir 
137cdf0e10cSrcweir // ::com::sun::star::container::XNameContainer
138cdf0e10cSrcweir     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);
139cdf0e10cSrcweir     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);
140cdf0e10cSrcweir 
141cdf0e10cSrcweir // ::com::sun::star::container::XNameReplace
142cdf0e10cSrcweir     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);
143cdf0e10cSrcweir 
144cdf0e10cSrcweir // ::com::sun::star::container::XNameAccess
145cdf0e10cSrcweir     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);
146cdf0e10cSrcweir     virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getElementNames(  ) throw(::com::sun::star::uno::RuntimeException);
147cdf0e10cSrcweir     virtual sal_Bool SAL_CALL hasByName( const ::rtl::OUString& aName ) throw(::com::sun::star::uno::RuntimeException);
148cdf0e10cSrcweir 
149cdf0e10cSrcweir // ::com::sun::star::container::XContainer
150cdf0e10cSrcweir     virtual void SAL_CALL addContainerListener( const ::com::sun::star::uno::Reference< ::com::sun::star::container::XContainerListener >& xListener ) throw(::com::sun::star::uno::RuntimeException);
151cdf0e10cSrcweir     virtual void SAL_CALL removeContainerListener( const ::com::sun::star::uno::Reference< ::com::sun::star::container::XContainerListener >& xListener ) throw(::com::sun::star::uno::RuntimeException);
152cdf0e10cSrcweir 
153cdf0e10cSrcweir // ::com::sun::star::container::XChild
154cdf0e10cSrcweir     virtual ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL getParent(  ) throw (::com::sun::star::uno::RuntimeException);
155cdf0e10cSrcweir     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);
156cdf0e10cSrcweir 
157cdf0e10cSrcweir // helper
158cdf0e10cSrcweir     /** tell the container to free all resources. After that it's in a state like after the construction, i.e.
159cdf0e10cSrcweir         you may call <code>initialize</code> again (maybe with another configuration node).
160cdf0e10cSrcweir     */
161cdf0e10cSrcweir     virtual void    dispose();
162cdf0e10cSrcweir 
163cdf0e10cSrcweir 
164cdf0e10cSrcweir protected:
165cdf0e10cSrcweir     /** checks whether the object is basically alive, i.e. it has been fully initialized (@see initialize) and
166cdf0e10cSrcweir         not disposed (@see dispose)
167cdf0e10cSrcweir         @param      _bIntendWriteAccess     determines whether or not the caller intends to modify the configuration.
168cdf0e10cSrcweir                                             if sal_True and the configuration is readonly, a runtime exception with
169cdf0e10cSrcweir                                             a description string is thrown.
170cdf0e10cSrcweir     */
171cdf0e10cSrcweir     void        checkValid(sal_Bool _bIntendWriteAccess) const throw (::com::sun::star::uno::RuntimeException, ::com::sun::star::lang::DisposedException);
172cdf0e10cSrcweir 
173*30acf5e8Spfg     /** quickly checks if there already is an element with a given name. No access to the configuration occurs, i.e.
174cdf0e10cSrcweir         if there is such an object which is not already loaded, it won't be loaded now.
175cdf0e10cSrcweir         @param      _rName      the object name to check
176cdf0e10cSrcweir         @return                 sal_True if there already exists such an object
177cdf0e10cSrcweir     */
178cdf0e10cSrcweir     inline  sal_Bool    checkExistence(const ::rtl::OUString& _rName);
179cdf0e10cSrcweir 
180cdf0e10cSrcweir     void    implAppend(
181cdf0e10cSrcweir         const ::rtl::OUString& _rName,
182cdf0e10cSrcweir         const ::rtl::OUString& _rDocumentLocation
183cdf0e10cSrcweir         );
184cdf0e10cSrcweir 
185cdf0e10cSrcweir     void implRemove(const ::rtl::OUString& _rName);
186cdf0e10cSrcweir 
187cdf0e10cSrcweir     void implReplace(
188cdf0e10cSrcweir         const ::rtl::OUString& _rName,
189cdf0e10cSrcweir         const ::rtl::OUString& _rNewLink);
190cdf0e10cSrcweir 
191cdf0e10cSrcweir };
192cdf0e10cSrcweir 
193cdf0e10cSrcweir //--------------------------------------------------------------------------
checkExistence(const::rtl::OUString & _rName)194cdf0e10cSrcweir inline  sal_Bool OBookmarkContainer::checkExistence(const ::rtl::OUString& _rName)
195cdf0e10cSrcweir {
196cdf0e10cSrcweir     return m_aBookmarks.find(_rName) != m_aBookmarks.end();
197cdf0e10cSrcweir }
198cdf0e10cSrcweir 
199cdf0e10cSrcweir //........................................................................
200cdf0e10cSrcweir }   // namespace dbaccess
201cdf0e10cSrcweir //........................................................................
202cdf0e10cSrcweir 
203cdf0e10cSrcweir #endif // _DBA_CORE_BOOKMARKCONTAINER_HXX_
204