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