xref: /AOO41X/main/ucb/source/cacher/dynamicresultsetwrapper.hxx (revision 6df1ea1f75e32b7bdb9b43f28f6c06e1fbd0c5ce)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 #ifndef _DYNAMIC_RESULTSET_WRAPPER_HXX
25 #define _DYNAMIC_RESULTSET_WRAPPER_HXX
26 
27 #include <osl/mutex.hxx>
28 #include <osl/conditn.hxx>
29 #include <ucbhelper/macros.hxx>
30 #include <cppuhelper/weak.hxx>
31 #include <com/sun/star/lang/XTypeProvider.hpp>
32 #include <com/sun/star/lang/XServiceInfo.hpp>
33 #include <cppuhelper/interfacecontainer.hxx>
34 #include <com/sun/star/ucb/XDynamicResultSet.hpp>
35 #include <com/sun/star/ucb/XSourceInitialization.hpp>
36 
37 #ifndef __com_sun_star_lang_DisposedException_idl__
38 #include <com/sun/star/lang/DisposedException.hpp>
39 #endif
40 #include <com/sun/star/ucb/XDynamicResultSetListener.hpp>
41 #include <com/sun/star/lang/XMultiServiceFactory.hpp>
42 
43 //#define CACHED_CRS_STUB_SERVICE_NAME "com.sun.star.ucb.CachedContentResultSetStub"
44 //#define CACHED_CRS_STUB_FACTORY_NAME "com.sun.star.ucb.CachedContentResultSetStubFactory"
45 
46 //=========================================================================
47 
48 class DynamicResultSetWrapperListener;
49 class DynamicResultSetWrapper
50                 : public cppu::OWeakObject
51                 , public com::sun::star::ucb::XDynamicResultSet
52                 , public com::sun::star::ucb::XSourceInitialization
53 {
54 private:
55     //management of listeners
56     sal_Bool                m_bDisposed; ///Dispose call ready.
57     sal_Bool                m_bInDispose;///In dispose call
58     osl::Mutex              m_aContainerMutex;
59     cppu::OInterfaceContainerHelper*
60                             m_pDisposeEventListeners;
61 protected:
62     com::sun::star::uno::Reference< com::sun::star::ucb::XDynamicResultSetListener >
63                             m_xMyListenerImpl;
64     DynamicResultSetWrapperListener*
65                             m_pMyListenerImpl;
66 
67     com::sun::star::uno::Reference< com::sun::star::lang::XMultiServiceFactory >
68                             m_xSMgr;
69 
70     osl::Mutex              m_aMutex;
71     sal_Bool                m_bStatic;
72     sal_Bool                m_bGotWelcome;
73 
74     //different Interfaces from Origin:
75     com::sun::star::uno::Reference< com::sun::star::ucb::XDynamicResultSet >
76                             m_xSource;
77     com::sun::star::uno::Reference< com::sun::star::sdbc::XResultSet >
78                             m_xSourceResultOne;
79     com::sun::star::uno::Reference< com::sun::star::sdbc::XResultSet >
80                             m_xSourceResultTwo;
81     //com::sun::star::uno::Reference< com::sun::star::sdbc::XResultSet >
82     //                      m_xSourceResultCurrent;
83     //sal_Bool              m_bUseOne;
84     //
85     com::sun::star::uno::Reference< com::sun::star::sdbc::XResultSet >
86                             m_xMyResultOne;
87     com::sun::star::uno::Reference< com::sun::star::sdbc::XResultSet >
88                             m_xMyResultTwo;
89     //
90     com::sun::star::uno::Reference< com::sun::star::ucb::XDynamicResultSetListener >
91                             m_xListener;
92 
93     osl::Condition          m_aSourceSet;
94     osl::Condition          m_aListenerSet;
95 
96 protected:
97     void SAL_CALL impl_init();
98     void SAL_CALL impl_deinit();
99     void SAL_CALL
100     impl_EnsureNotDisposed()
101         throw( com::sun::star::lang::DisposedException,
102                com::sun::star::uno::RuntimeException );
103 
104     virtual void SAL_CALL
105     impl_InitResultSetOne( const com::sun::star::uno::Reference<
106                 com::sun::star::sdbc::XResultSet >& xResultSet );
107     virtual void SAL_CALL
108     impl_InitResultSetTwo( const com::sun::star::uno::Reference<
109                 com::sun::star::sdbc::XResultSet >& xResultSet );
110 
111 public:
112 
113     DynamicResultSetWrapper(
114         com::sun::star::uno::Reference<
115                         com::sun::star::ucb::XDynamicResultSet > xOrigin
116         , const com::sun::star::uno::Reference<
117                         com::sun::star::lang::XMultiServiceFactory > & xSMgr );
118 
119     virtual ~DynamicResultSetWrapper();
120 
121     //-----------------------------------------------------------------
122     // XInterface
123     virtual com::sun::star::uno::Any SAL_CALL
124     queryInterface( const com::sun::star::uno::Type & rType )
125         throw( com::sun::star::uno::RuntimeException );
126 
127     //-----------------------------------------------------------------
128     // XDynamicResultSet
129     virtual com::sun::star::uno::Reference< com::sun::star::sdbc::XResultSet > SAL_CALL
130     getStaticResultSet()
131         throw( com::sun::star::ucb::ListenerAlreadySetException
132         , com::sun::star::uno::RuntimeException );
133 
134     virtual void SAL_CALL
135     setListener( const com::sun::star::uno::Reference<
136         com::sun::star::ucb::XDynamicResultSetListener > & Listener )
137         throw( com::sun::star::ucb::ListenerAlreadySetException
138             , com::sun::star::uno::RuntimeException );
139 
140     virtual void SAL_CALL
141     connectToCache( const com::sun::star::uno::Reference<
142         com::sun::star::ucb::XDynamicResultSet > & xCache )
143         throw( com::sun::star::ucb::ListenerAlreadySetException
144             , com::sun::star::ucb::AlreadyInitializedException
145             , com::sun::star::ucb::ServiceNotFoundException
146             , com::sun::star::uno::RuntimeException );
147 
148     virtual sal_Int16 SAL_CALL
149     getCapabilities() throw( com::sun::star::uno::RuntimeException );
150 
151     //-----------------------------------------------------------------
152     // XComponent ( base of XDynamicResultSet )
153     virtual void SAL_CALL
154     dispose() throw( com::sun::star::uno::RuntimeException );
155 
156     virtual void SAL_CALL
157     addEventListener( const com::sun::star::uno::Reference<
158         com::sun::star::lang::XEventListener >& Listener )
159             throw( com::sun::star::uno::RuntimeException );
160 
161     virtual void SAL_CALL
162     removeEventListener( const com::sun::star::uno::Reference<
163         com::sun::star::lang::XEventListener >& Listener )
164             throw( com::sun::star::uno::RuntimeException );
165 
166     //-----------------------------------------------------------------
167     // XSourceInitialization
168 
169     virtual void SAL_CALL
170     setSource(  const com::sun::star::uno::Reference<
171         com::sun::star::uno::XInterface > & Source )
172          throw( com::sun::star::ucb::AlreadyInitializedException
173                 , com::sun::star::uno::RuntimeException );
174 
175     //-----------------------------------------------------------------
176     // own methods:
177     virtual void SAL_CALL
178     impl_disposing( const com::sun::star::lang::EventObject& Source )
179         throw( com::sun::star::uno::RuntimeException );
180 
181     virtual void SAL_CALL
182     impl_notify( const ::com::sun::star::ucb::ListEvent& Changes )
183         throw( com::sun::star::uno::RuntimeException );
184 };
185 
186 //=========================================================================
187 
188 class DynamicResultSetWrapperListener
189                 : public cppu::OWeakObject
190                 , public com::sun::star::ucb::XDynamicResultSetListener
191 {
192 protected:
193     DynamicResultSetWrapper*    m_pOwner;
194     osl::Mutex                  m_aMutex;
195 
196 public:
197     DynamicResultSetWrapperListener( DynamicResultSetWrapper* pOwner );
198 
199     virtual ~DynamicResultSetWrapperListener();
200 
201     //-----------------------------------------------------------------
202     // XInterface
203     //-----------------------------------------------------------------
204     XINTERFACE_DECL()
205 
206     //-----------------------------------------------------------------
207     // XEventListener ( base of XDynamicResultSetListener )
208     //-----------------------------------------------------------------
209     virtual void SAL_CALL
210     disposing( const com::sun::star::lang::EventObject& Source )
211         throw( com::sun::star::uno::RuntimeException );
212     //-----------------------------------------------------------------
213     // XDynamicResultSetListener
214     virtual void SAL_CALL
215     notify( const ::com::sun::star::ucb::ListEvent& Changes )
216         throw( com::sun::star::uno::RuntimeException );
217 
218     //-----------------------------------------------------------------
219     // own methods:
220     void SAL_CALL impl_OwnerDies();
221 };
222 
223 
224 #endif
225 
226