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 _SORTDYNRES_HXX 25 #define _SORTDYNRES_HXX 26 27 #include <com/sun/star/lang/XMultiServiceFactory.hpp> 28 #include <com/sun/star/lang/XTypeProvider.hpp> 29 #include <com/sun/star/lang/XServiceInfo.hpp> 30 #include <com/sun/star/lang/XComponent.hpp> 31 #include <com/sun/star/ucb/NumberedSortingInfo.hpp> 32 #include <com/sun/star/sdbc/XResultSet.hpp> 33 #include <com/sun/star/ucb/XDynamicResultSet.hpp> 34 #include <com/sun/star/ucb/XDynamicResultSetListener.hpp> 35 #include <com/sun/star/ucb/ListenerAlreadySetException.hpp> 36 #include <com/sun/star/ucb/XSortedDynamicResultSetFactory.hpp> 37 #include <cppuhelper/weak.hxx> 38 #include <osl/mutex.hxx> 39 #include <ucbhelper/macros.hxx> 40 #include "sortresult.hxx" 41 42 namespace cppu { 43 class OInterfaceContainerHelper; 44 } 45 46 //----------------------------------------------------------------------------- 47 48 #define NUMBERED_SORTINGINFO com::sun::star::ucb::NumberedSortingInfo 49 #define RUNTIMEEXCEPTION com::sun::star::uno::RuntimeException 50 #define REFERENCE com::sun::star::uno::Reference 51 #define SEQUENCE com::sun::star::uno::Sequence 52 #define EVENTOBJECT com::sun::star::lang::EventObject 53 #define XEVENTLISTENER com::sun::star::lang::XEventListener 54 #define XMULTISERVICEFACTORY com::sun::star::lang::XMultiServiceFactory 55 #define XRESULTSET com::sun::star::sdbc::XResultSet 56 #define SQLEXCEPTION com::sun::star::sdbc::SQLException 57 #define XANYCOMPAREFACTORY com::sun::star::ucb::XAnyCompareFactory 58 #define XDYNAMICRESULTSET com::sun::star::ucb::XDynamicResultSet 59 #define XDYNAMICRESULTSETLISTENER com::sun::star::ucb::XDynamicResultSetListener 60 #define LISTENERALREADYSETEXCEPTION com::sun::star::ucb::ListenerAlreadySetException 61 62 #define DYNAMIC_RESULTSET_SERVICE_NAME "com.sun.star.ucb.SortedDynamicResultSet" 63 #define DYNAMIC_RESULTSET_FACTORY_NAME "com.sun.star.ucb.SortedDynamicResultSetFactory" 64 65 //----------------------------------------------------------------------------- 66 class SortedDynamicResultSetListener; 67 68 class SortedDynamicResultSet: 69 public cppu::OWeakObject, 70 public com::sun::star::lang::XTypeProvider, 71 public com::sun::star::lang::XServiceInfo, 72 public com::sun::star::ucb::XDynamicResultSet 73 { 74 cppu::OInterfaceContainerHelper *mpDisposeEventListeners; 75 76 REFERENCE < XDYNAMICRESULTSETLISTENER > mxListener; 77 REFERENCE < XDYNAMICRESULTSETLISTENER > mxOwnListener; 78 79 REFERENCE < XRESULTSET > mxOne; 80 REFERENCE < XRESULTSET > mxTwo; 81 REFERENCE < XDYNAMICRESULTSET > mxOriginal; 82 SEQUENCE < NUMBERED_SORTINGINFO > maOptions; 83 REFERENCE < XANYCOMPAREFACTORY > mxCompFac; 84 REFERENCE < XMULTISERVICEFACTORY > mxSMgr; 85 86 SortedResultSet* mpOne; 87 SortedResultSet* mpTwo; 88 SortedDynamicResultSetListener* mpOwnListener; 89 90 EventList maActions; 91 osl::Mutex maMutex; 92 sal_Bool mbGotWelcome :1; 93 sal_Bool mbUseOne :1; 94 sal_Bool mbStatic :1; 95 96 private: 97 98 void SendNotify(); 99 100 public: 101 SortedDynamicResultSet( const REFERENCE < XDYNAMICRESULTSET > &xOriginal, 102 const SEQUENCE < NUMBERED_SORTINGINFO > &aOptions, 103 const REFERENCE < XANYCOMPAREFACTORY > &xCompFac, 104 const REFERENCE < XMULTISERVICEFACTORY > &xSMgr ); 105 106 ~SortedDynamicResultSet(); 107 108 //----------------------------------------------------------------- 109 // XInterface 110 //----------------------------------------------------------------- 111 XINTERFACE_DECL() 112 113 //----------------------------------------------------------------- 114 // XTypeProvider 115 //----------------------------------------------------------------- 116 XTYPEPROVIDER_DECL() 117 118 //----------------------------------------------------------------- 119 // XServiceInfo 120 //----------------------------------------------------------------- 121 XSERVICEINFO_NOFACTORY_DECL() 122 123 //----------------------------------------------------------------- 124 // XComponent 125 //----------------------------------------------------------------- 126 virtual void SAL_CALL 127 dispose() throw( RUNTIME_EXCEPTION ); 128 129 virtual void SAL_CALL 130 addEventListener( const REFERENCE< XEVENTLISTENER >& Listener ) 131 throw( RUNTIME_EXCEPTION ); 132 133 virtual void SAL_CALL 134 removeEventListener( const REFERENCE< XEVENTLISTENER >& Listener ) 135 throw( RUNTIME_EXCEPTION ); 136 137 //----------------------------------------------------------------- 138 // XDynamicResultSet 139 //----------------------------------------------------------------- 140 virtual REFERENCE< XRESULTSET > SAL_CALL 141 getStaticResultSet( ) 142 throw( LISTENERALREADYSETEXCEPTION, RUNTIMEEXCEPTION ); 143 144 virtual void SAL_CALL 145 setListener( const REFERENCE< XDYNAMICRESULTSETLISTENER >& Listener ) 146 throw( LISTENERALREADYSETEXCEPTION, RUNTIMEEXCEPTION ); 147 148 virtual void SAL_CALL 149 connectToCache( const REFERENCE< XDYNAMICRESULTSET > & xCache ) 150 throw( LISTENERALREADYSETEXCEPTION, 151 com::sun::star::ucb::AlreadyInitializedException, 152 com::sun::star::ucb::ServiceNotFoundException, 153 RUNTIMEEXCEPTION ); 154 155 virtual sal_Int16 SAL_CALL 156 getCapabilities() 157 throw( RUNTIMEEXCEPTION ); 158 159 //----------------------------------------------------------------- 160 // own methods: 161 //----------------------------------------------------------------- 162 virtual void SAL_CALL 163 impl_disposing( const EVENTOBJECT& Source ) 164 throw( RUNTIMEEXCEPTION ); 165 166 virtual void SAL_CALL 167 impl_notify( const ::com::sun::star::ucb::ListEvent& Changes ) 168 throw( RUNTIMEEXCEPTION ); 169 }; 170 171 //----------------------------------------------------------------------------- 172 173 class SortedDynamicResultSetListener: 174 public cppu::OWeakObject, 175 public com::sun::star::ucb::XDynamicResultSetListener 176 { 177 SortedDynamicResultSet *mpOwner; 178 osl::Mutex maMutex; 179 180 public: 181 SortedDynamicResultSetListener( SortedDynamicResultSet *mOwner ); 182 ~SortedDynamicResultSetListener(); 183 184 //----------------------------------------------------------------- 185 // XInterface 186 //----------------------------------------------------------------- 187 XINTERFACE_DECL() 188 189 //----------------------------------------------------------------- 190 // XEventListener ( base of XDynamicResultSetListener ) 191 //----------------------------------------------------------------- 192 virtual void SAL_CALL 193 disposing( const EVENTOBJECT& Source ) 194 throw( RUNTIMEEXCEPTION ); 195 196 //----------------------------------------------------------------- 197 // XDynamicResultSetListener 198 //----------------------------------------------------------------- 199 virtual void SAL_CALL 200 notify( const ::com::sun::star::ucb::ListEvent& Changes ) 201 throw( RUNTIMEEXCEPTION ); 202 203 //----------------------------------------------------------------- 204 // own methods: 205 //----------------------------------------------------------------- 206 void SAL_CALL impl_OwnerDies(); 207 }; 208 209 //----------------------------------------------------------------------------- 210 211 class SortedDynamicResultSetFactory: 212 public cppu::OWeakObject, 213 public com::sun::star::lang::XTypeProvider, 214 public com::sun::star::lang::XServiceInfo, 215 public com::sun::star::ucb::XSortedDynamicResultSetFactory 216 { 217 218 REFERENCE< XMULTISERVICEFACTORY > mxSMgr; 219 220 public: 221 222 SortedDynamicResultSetFactory( 223 const REFERENCE< XMULTISERVICEFACTORY > & rSMgr); 224 225 ~SortedDynamicResultSetFactory(); 226 227 //----------------------------------------------------------------- 228 // XInterface 229 //----------------------------------------------------------------- 230 XINTERFACE_DECL() 231 232 //----------------------------------------------------------------- 233 // XTypeProvider 234 //----------------------------------------------------------------- 235 XTYPEPROVIDER_DECL() 236 237 //----------------------------------------------------------------- 238 // XServiceInfo 239 //----------------------------------------------------------------- 240 XSERVICEINFO_DECL() 241 242 //----------------------------------------------------------------- 243 // XSortedDynamicResultSetFactory 244 245 virtual REFERENCE< XDYNAMICRESULTSET > SAL_CALL 246 createSortedDynamicResultSet( 247 const REFERENCE< XDYNAMICRESULTSET > & Source, 248 const SEQUENCE< NUMBERED_SORTINGINFO > & Info, 249 const REFERENCE< XANYCOMPAREFACTORY > & CompareFactory ) 250 throw( RUNTIMEEXCEPTION ); 251 }; 252 253 #endif 254