merged tag ooo/DEV300_m83
[LibreOffice.git] / ucb / source / cacher / dynamicresultsetwrapper.hxx
blob47ff822a6ce1b303d47666db03e9aa58a6620d80
1 /*************************************************************************
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 * Copyright 2000, 2010 Oracle and/or its affiliates.
7 * OpenOffice.org - a multi-platform office productivity suite
9 * This file is part of OpenOffice.org.
11 * OpenOffice.org is free software: you can redistribute it and/or modify
12 * it under the terms of the GNU Lesser General Public License version 3
13 * only, as published by the Free Software Foundation.
15 * OpenOffice.org is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU Lesser General Public License version 3 for more details
19 * (a copy is included in the LICENSE file that accompanied this code).
21 * You should have received a copy of the GNU Lesser General Public License
22 * version 3 along with OpenOffice.org. If not, see
23 * <http://www.openoffice.org/license.html>
24 * for a copy of the LGPLv3 License.
26 ************************************************************************/
28 #ifndef _DYNAMIC_RESULTSET_WRAPPER_HXX
29 #define _DYNAMIC_RESULTSET_WRAPPER_HXX
31 #include <osl/mutex.hxx>
32 #include <osl/conditn.hxx>
33 #include <ucbhelper/macros.hxx>
34 #include <cppuhelper/weak.hxx>
35 #include <com/sun/star/lang/XTypeProvider.hpp>
36 #include <com/sun/star/lang/XServiceInfo.hpp>
37 #include <cppuhelper/interfacecontainer.hxx>
38 #include <com/sun/star/ucb/XDynamicResultSet.hpp>
39 #include <com/sun/star/ucb/XSourceInitialization.hpp>
41 #ifndef __com_sun_star_lang_DisposedException_idl__
42 #include <com/sun/star/lang/DisposedException.hpp>
43 #endif
44 #include <com/sun/star/ucb/XDynamicResultSetListener.hpp>
45 #include <com/sun/star/lang/XMultiServiceFactory.hpp>
47 //#define CACHED_CRS_STUB_SERVICE_NAME "com.sun.star.ucb.CachedContentResultSetStub"
48 //#define CACHED_CRS_STUB_FACTORY_NAME "com.sun.star.ucb.CachedContentResultSetStubFactory"
50 //=========================================================================
52 class DynamicResultSetWrapperListener;
53 class DynamicResultSetWrapper
54 : public cppu::OWeakObject
55 , public com::sun::star::ucb::XDynamicResultSet
56 , public com::sun::star::ucb::XSourceInitialization
58 private:
59 //management of listeners
60 sal_Bool m_bDisposed; ///Dispose call ready.
61 sal_Bool m_bInDispose;///In dispose call
62 osl::Mutex m_aContainerMutex;
63 cppu::OInterfaceContainerHelper*
64 m_pDisposeEventListeners;
65 protected:
66 com::sun::star::uno::Reference< com::sun::star::ucb::XDynamicResultSetListener >
67 m_xMyListenerImpl;
68 DynamicResultSetWrapperListener*
69 m_pMyListenerImpl;
71 com::sun::star::uno::Reference< com::sun::star::lang::XMultiServiceFactory >
72 m_xSMgr;
74 osl::Mutex m_aMutex;
75 sal_Bool m_bStatic;
76 sal_Bool m_bGotWelcome;
78 //different Interfaces from Origin:
79 com::sun::star::uno::Reference< com::sun::star::ucb::XDynamicResultSet >
80 m_xSource;
81 com::sun::star::uno::Reference< com::sun::star::sdbc::XResultSet >
82 m_xSourceResultOne;
83 com::sun::star::uno::Reference< com::sun::star::sdbc::XResultSet >
84 m_xSourceResultTwo;
85 //com::sun::star::uno::Reference< com::sun::star::sdbc::XResultSet >
86 // m_xSourceResultCurrent;
87 //sal_Bool m_bUseOne;
89 com::sun::star::uno::Reference< com::sun::star::sdbc::XResultSet >
90 m_xMyResultOne;
91 com::sun::star::uno::Reference< com::sun::star::sdbc::XResultSet >
92 m_xMyResultTwo;
94 com::sun::star::uno::Reference< com::sun::star::ucb::XDynamicResultSetListener >
95 m_xListener;
97 osl::Condition m_aSourceSet;
98 osl::Condition m_aListenerSet;
100 protected:
101 void SAL_CALL impl_init();
102 void SAL_CALL impl_deinit();
103 void SAL_CALL
104 impl_EnsureNotDisposed()
105 throw( com::sun::star::lang::DisposedException,
106 com::sun::star::uno::RuntimeException );
108 virtual void SAL_CALL
109 impl_InitResultSetOne( const com::sun::star::uno::Reference<
110 com::sun::star::sdbc::XResultSet >& xResultSet );
111 virtual void SAL_CALL
112 impl_InitResultSetTwo( const com::sun::star::uno::Reference<
113 com::sun::star::sdbc::XResultSet >& xResultSet );
115 public:
117 DynamicResultSetWrapper(
118 com::sun::star::uno::Reference<
119 com::sun::star::ucb::XDynamicResultSet > xOrigin
120 , const com::sun::star::uno::Reference<
121 com::sun::star::lang::XMultiServiceFactory > & xSMgr );
123 virtual ~DynamicResultSetWrapper();
125 //-----------------------------------------------------------------
126 // XInterface
127 virtual com::sun::star::uno::Any SAL_CALL
128 queryInterface( const com::sun::star::uno::Type & rType )
129 throw( com::sun::star::uno::RuntimeException );
131 //-----------------------------------------------------------------
132 // XDynamicResultSet
133 virtual com::sun::star::uno::Reference< com::sun::star::sdbc::XResultSet > SAL_CALL
134 getStaticResultSet()
135 throw( com::sun::star::ucb::ListenerAlreadySetException
136 , com::sun::star::uno::RuntimeException );
138 virtual void SAL_CALL
139 setListener( const com::sun::star::uno::Reference<
140 com::sun::star::ucb::XDynamicResultSetListener > & Listener )
141 throw( com::sun::star::ucb::ListenerAlreadySetException
142 , com::sun::star::uno::RuntimeException );
144 virtual void SAL_CALL
145 connectToCache( const com::sun::star::uno::Reference<
146 com::sun::star::ucb::XDynamicResultSet > & xCache )
147 throw( com::sun::star::ucb::ListenerAlreadySetException
148 , com::sun::star::ucb::AlreadyInitializedException
149 , com::sun::star::ucb::ServiceNotFoundException
150 , com::sun::star::uno::RuntimeException );
152 virtual sal_Int16 SAL_CALL
153 getCapabilities() throw( com::sun::star::uno::RuntimeException );
155 //-----------------------------------------------------------------
156 // XComponent ( base of XDynamicResultSet )
157 virtual void SAL_CALL
158 dispose() throw( com::sun::star::uno::RuntimeException );
160 virtual void SAL_CALL
161 addEventListener( const com::sun::star::uno::Reference<
162 com::sun::star::lang::XEventListener >& Listener )
163 throw( com::sun::star::uno::RuntimeException );
165 virtual void SAL_CALL
166 removeEventListener( const com::sun::star::uno::Reference<
167 com::sun::star::lang::XEventListener >& Listener )
168 throw( com::sun::star::uno::RuntimeException );
170 //-----------------------------------------------------------------
171 // XSourceInitialization
173 virtual void SAL_CALL
174 setSource( const com::sun::star::uno::Reference<
175 com::sun::star::uno::XInterface > & Source )
176 throw( com::sun::star::ucb::AlreadyInitializedException
177 , com::sun::star::uno::RuntimeException );
179 //-----------------------------------------------------------------
180 // own methods:
181 virtual void SAL_CALL
182 impl_disposing( const com::sun::star::lang::EventObject& Source )
183 throw( com::sun::star::uno::RuntimeException );
185 virtual void SAL_CALL
186 impl_notify( const ::com::sun::star::ucb::ListEvent& Changes )
187 throw( com::sun::star::uno::RuntimeException );
190 //=========================================================================
192 class DynamicResultSetWrapperListener
193 : public cppu::OWeakObject
194 , public com::sun::star::ucb::XDynamicResultSetListener
196 protected:
197 DynamicResultSetWrapper* m_pOwner;
198 osl::Mutex m_aMutex;
200 public:
201 DynamicResultSetWrapperListener( DynamicResultSetWrapper* pOwner );
203 virtual ~DynamicResultSetWrapperListener();
205 //-----------------------------------------------------------------
206 // XInterface
207 //-----------------------------------------------------------------
208 XINTERFACE_DECL()
210 //-----------------------------------------------------------------
211 // XEventListener ( base of XDynamicResultSetListener )
212 //-----------------------------------------------------------------
213 virtual void SAL_CALL
214 disposing( const com::sun::star::lang::EventObject& Source )
215 throw( com::sun::star::uno::RuntimeException );
216 //-----------------------------------------------------------------
217 // XDynamicResultSetListener
218 virtual void SAL_CALL
219 notify( const ::com::sun::star::ucb::ListEvent& Changes )
220 throw( com::sun::star::uno::RuntimeException );
222 //-----------------------------------------------------------------
223 // own methods:
224 void SAL_CALL impl_OwnerDies();
228 #endif