xref: /AOO41X/main/ucb/source/cacher/dynamicresultsetwrapper.hxx (revision cdf0e10c4e3984b49a9502b011690b615761d4a3)
1 /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
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.
14  *
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).
20  *
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.
25  *
26  ************************************************************************/
27 
28 #ifndef _DYNAMIC_RESULTSET_WRAPPER_HXX
29 #define _DYNAMIC_RESULTSET_WRAPPER_HXX
30 
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>
40 
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>
46 
47 //#define CACHED_CRS_STUB_SERVICE_NAME "com.sun.star.ucb.CachedContentResultSetStub"
48 //#define CACHED_CRS_STUB_FACTORY_NAME "com.sun.star.ucb.CachedContentResultSetStubFactory"
49 
50 //=========================================================================
51 
52 class DynamicResultSetWrapperListener;
53 class DynamicResultSetWrapper
54                 : public cppu::OWeakObject
55                 , public com::sun::star::ucb::XDynamicResultSet
56                 , public com::sun::star::ucb::XSourceInitialization
57 {
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;
70 
71     com::sun::star::uno::Reference< com::sun::star::lang::XMultiServiceFactory >
72                             m_xSMgr;
73 
74     osl::Mutex              m_aMutex;
75     sal_Bool                m_bStatic;
76     sal_Bool                m_bGotWelcome;
77 
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;
88     //
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;
93     //
94     com::sun::star::uno::Reference< com::sun::star::ucb::XDynamicResultSetListener >
95                             m_xListener;
96 
97     osl::Condition          m_aSourceSet;
98     osl::Condition          m_aListenerSet;
99 
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 );
107 
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 );
114 
115 public:
116 
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 );
122 
123     virtual ~DynamicResultSetWrapper();
124 
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 );
130 
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 );
137 
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 );
143 
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 );
151 
152     virtual sal_Int16 SAL_CALL
153     getCapabilities() throw( com::sun::star::uno::RuntimeException );
154 
155     //-----------------------------------------------------------------
156     // XComponent ( base of XDynamicResultSet )
157     virtual void SAL_CALL
158     dispose() throw( com::sun::star::uno::RuntimeException );
159 
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 );
164 
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 );
169 
170     //-----------------------------------------------------------------
171     // XSourceInitialization
172 
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 );
178 
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 );
184 
185     virtual void SAL_CALL
186     impl_notify( const ::com::sun::star::ucb::ListEvent& Changes )
187         throw( com::sun::star::uno::RuntimeException );
188 };
189 
190 //=========================================================================
191 
192 class DynamicResultSetWrapperListener
193                 : public cppu::OWeakObject
194                 , public com::sun::star::ucb::XDynamicResultSetListener
195 {
196 protected:
197     DynamicResultSetWrapper*    m_pOwner;
198     osl::Mutex                  m_aMutex;
199 
200 public:
201     DynamicResultSetWrapperListener( DynamicResultSetWrapper* pOwner );
202 
203     virtual ~DynamicResultSetWrapperListener();
204 
205     //-----------------------------------------------------------------
206     // XInterface
207     //-----------------------------------------------------------------
208     XINTERFACE_DECL()
209 
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 );
221 
222     //-----------------------------------------------------------------
223     // own methods:
224     void SAL_CALL impl_OwnerDies();
225 };
226 
227 
228 #endif
229 
230