12f86921cSAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 32f86921cSAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 42f86921cSAndrew Rist * or more contributor license agreements. See the NOTICE file 52f86921cSAndrew Rist * distributed with this work for additional information 62f86921cSAndrew Rist * regarding copyright ownership. The ASF licenses this file 72f86921cSAndrew Rist * to you under the Apache License, Version 2.0 (the 82f86921cSAndrew Rist * "License"); you may not use this file except in compliance 92f86921cSAndrew Rist * with the License. You may obtain a copy of the License at 10cdf0e10cSrcweir * 112f86921cSAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12cdf0e10cSrcweir * 132f86921cSAndrew Rist * Unless required by applicable law or agreed to in writing, 142f86921cSAndrew Rist * software distributed under the License is distributed on an 152f86921cSAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 162f86921cSAndrew Rist * KIND, either express or implied. See the License for the 172f86921cSAndrew Rist * specific language governing permissions and limitations 182f86921cSAndrew Rist * under the License. 19cdf0e10cSrcweir * 202f86921cSAndrew Rist *************************************************************/ 212f86921cSAndrew Rist 222f86921cSAndrew Rist 23cdf0e10cSrcweir 24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 25*421ed02eSdamjan #include "precompiled_file.hxx" 26cdf0e10cSrcweir #include <com/sun/star/ucb/WelcomeDynamicResultSetStruct.hpp> 27cdf0e10cSrcweir #include "filid.hxx" 28cdf0e10cSrcweir #include "shell.hxx" 29cdf0e10cSrcweir #include "filprp.hxx" 30cdf0e10cSrcweir #include "filrset.hxx" 31cdf0e10cSrcweir #include <com/sun/star/ucb/OpenMode.hpp> 32cdf0e10cSrcweir #include "prov.hxx" 33cdf0e10cSrcweir #include <com/sun/star/uno/Reference.h> 34cdf0e10cSrcweir 35cdf0e10cSrcweir #ifndef _COM_SUN_STAR_BEANS_PROPERTYATTRIBBUTE_HPP_ 36cdf0e10cSrcweir #include <com/sun/star/beans/PropertyAttribute.hpp> 37cdf0e10cSrcweir #endif 38cdf0e10cSrcweir #include <com/sun/star/ucb/ListActionType.hpp> 39cdf0e10cSrcweir #include <com/sun/star/ucb/XSourceInitialization.hpp> 40cdf0e10cSrcweir #include <com/sun/star/ucb/XCachedDynamicResultSetStubFactory.hpp> 41cdf0e10cSrcweir #include <ucbhelper/resultsetmetadata.hxx> 42cdf0e10cSrcweir 43cdf0e10cSrcweir using namespace fileaccess; 44cdf0e10cSrcweir using namespace com::sun::star; 45cdf0e10cSrcweir 46cdf0e10cSrcweir XResultSet_impl::XResultSet_impl( 47cdf0e10cSrcweir shell* pMyShell, 48cdf0e10cSrcweir const rtl::OUString& aUnqPath, 49cdf0e10cSrcweir sal_Int32 OpenMode, 50cdf0e10cSrcweir const uno::Sequence< beans::Property >& seq, 51cdf0e10cSrcweir const uno::Sequence< ucb::NumberedSortingInfo >& seqSort ) 52cdf0e10cSrcweir : m_pMyShell( pMyShell ), 53cdf0e10cSrcweir m_xProvider( pMyShell->m_pProvider ), 54cdf0e10cSrcweir m_nRow( -1 ), 55cdf0e10cSrcweir m_nOpenMode( OpenMode ), 56cdf0e10cSrcweir m_bRowCountFinal( false ), 57cdf0e10cSrcweir m_aBaseDirectory( aUnqPath ), 58cdf0e10cSrcweir m_aFolder( aUnqPath ), 59cdf0e10cSrcweir m_sProperty( seq ), 60cdf0e10cSrcweir m_sSortingInfo( seqSort ), 61cdf0e10cSrcweir m_pDisposeEventListeners( 0 ), 62cdf0e10cSrcweir m_pRowCountListeners( 0 ), 63cdf0e10cSrcweir m_pIsFinalListeners( 0 ), 64cdf0e10cSrcweir m_bStatic( false ), 65cdf0e10cSrcweir m_nErrorCode( TASKHANDLER_NO_ERROR ), 66cdf0e10cSrcweir m_nMinorErrorCode( TASKHANDLER_NO_ERROR ) 67cdf0e10cSrcweir { 68cdf0e10cSrcweir osl::FileBase::RC err = m_aFolder.open(); 69cdf0e10cSrcweir if( err != osl::FileBase::E_None ) 70cdf0e10cSrcweir { 71cdf0e10cSrcweir m_nIsOpen = false; 72cdf0e10cSrcweir m_aFolder.close(); 73cdf0e10cSrcweir 74cdf0e10cSrcweir m_nErrorCode = TASKHANDLING_OPEN_FOR_DIRECTORYLISTING; 75cdf0e10cSrcweir m_nMinorErrorCode = err; 76cdf0e10cSrcweir } 77cdf0e10cSrcweir else 78cdf0e10cSrcweir m_nIsOpen = true; 79cdf0e10cSrcweir 80cdf0e10cSrcweir m_pMyShell->registerNotifier( m_aBaseDirectory,this ); 81cdf0e10cSrcweir } 82cdf0e10cSrcweir 83cdf0e10cSrcweir 84cdf0e10cSrcweir XResultSet_impl::~XResultSet_impl() 85cdf0e10cSrcweir { 86cdf0e10cSrcweir m_pMyShell->deregisterNotifier( m_aBaseDirectory,this ); 87cdf0e10cSrcweir 88cdf0e10cSrcweir if( m_nIsOpen ) 89cdf0e10cSrcweir m_aFolder.close(); 90cdf0e10cSrcweir 91cdf0e10cSrcweir delete m_pDisposeEventListeners; 92cdf0e10cSrcweir delete m_pRowCountListeners; 93cdf0e10cSrcweir delete m_pIsFinalListeners; 94cdf0e10cSrcweir } 95cdf0e10cSrcweir 96cdf0e10cSrcweir 97cdf0e10cSrcweir 98cdf0e10cSrcweir sal_Int32 SAL_CALL XResultSet_impl::CtorSuccess() 99cdf0e10cSrcweir { 100cdf0e10cSrcweir return m_nErrorCode; 101cdf0e10cSrcweir } 102cdf0e10cSrcweir 103cdf0e10cSrcweir 104cdf0e10cSrcweir 105cdf0e10cSrcweir sal_Int32 SAL_CALL XResultSet_impl::getMinorError() 106cdf0e10cSrcweir { 107cdf0e10cSrcweir return m_nMinorErrorCode; 108cdf0e10cSrcweir } 109cdf0e10cSrcweir 110cdf0e10cSrcweir 111cdf0e10cSrcweir void SAL_CALL 112cdf0e10cSrcweir XResultSet_impl::acquire( 113cdf0e10cSrcweir void ) 114cdf0e10cSrcweir throw() 115cdf0e10cSrcweir { 116cdf0e10cSrcweir OWeakObject::acquire(); 117cdf0e10cSrcweir } 118cdf0e10cSrcweir 119cdf0e10cSrcweir 120cdf0e10cSrcweir void SAL_CALL 121cdf0e10cSrcweir XResultSet_impl::release( 122cdf0e10cSrcweir void ) 123cdf0e10cSrcweir throw() 124cdf0e10cSrcweir { 125cdf0e10cSrcweir OWeakObject::release(); 126cdf0e10cSrcweir } 127cdf0e10cSrcweir 128cdf0e10cSrcweir 129cdf0e10cSrcweir 130cdf0e10cSrcweir uno::Any SAL_CALL 131cdf0e10cSrcweir XResultSet_impl::queryInterface( 132cdf0e10cSrcweir const uno::Type& rType ) 133cdf0e10cSrcweir throw( uno::RuntimeException ) 134cdf0e10cSrcweir { 135cdf0e10cSrcweir uno::Any aRet = cppu::queryInterface( 136cdf0e10cSrcweir rType, 137cdf0e10cSrcweir SAL_STATIC_CAST( lang::XComponent*, this), 138cdf0e10cSrcweir SAL_STATIC_CAST( lang::XTypeProvider*, this), 139cdf0e10cSrcweir SAL_STATIC_CAST( lang::XEventListener*, this), 140cdf0e10cSrcweir SAL_STATIC_CAST( sdbc::XRow*, this), 141cdf0e10cSrcweir SAL_STATIC_CAST( sdbc::XResultSet*, this), 142cdf0e10cSrcweir SAL_STATIC_CAST( sdbc::XCloseable*, this), 143cdf0e10cSrcweir SAL_STATIC_CAST( sdbc::XResultSetMetaDataSupplier*, this), 144cdf0e10cSrcweir SAL_STATIC_CAST( beans::XPropertySet*, this ), 145cdf0e10cSrcweir SAL_STATIC_CAST( ucb::XContentAccess*, this), 146cdf0e10cSrcweir SAL_STATIC_CAST( ucb::XDynamicResultSet*,this) ); 147cdf0e10cSrcweir return aRet.hasValue() ? aRet : OWeakObject::queryInterface( rType ); 148cdf0e10cSrcweir } 149cdf0e10cSrcweir 150cdf0e10cSrcweir 151cdf0e10cSrcweir void SAL_CALL 152cdf0e10cSrcweir XResultSet_impl::disposing( const lang::EventObject& ) 153cdf0e10cSrcweir throw( uno::RuntimeException ) 154cdf0e10cSrcweir { 155cdf0e10cSrcweir // To do, but what 156cdf0e10cSrcweir } 157cdf0e10cSrcweir 158cdf0e10cSrcweir 159cdf0e10cSrcweir XTYPEPROVIDER_IMPL_10( XResultSet_impl, 160cdf0e10cSrcweir lang::XTypeProvider, 161cdf0e10cSrcweir lang::XTypeProvider, 162cdf0e10cSrcweir lang::XEventListener, 163cdf0e10cSrcweir sdbc::XRow, 164cdf0e10cSrcweir sdbc::XResultSet, 165cdf0e10cSrcweir XDynamicResultSet, 166cdf0e10cSrcweir sdbc::XCloseable, 167cdf0e10cSrcweir sdbc::XResultSetMetaDataSupplier, 168cdf0e10cSrcweir beans::XPropertySet, 169cdf0e10cSrcweir ucb::XContentAccess ) 170cdf0e10cSrcweir 171cdf0e10cSrcweir 172cdf0e10cSrcweir void SAL_CALL 173cdf0e10cSrcweir XResultSet_impl::addEventListener( 174cdf0e10cSrcweir const uno::Reference< lang::XEventListener >& Listener ) 175cdf0e10cSrcweir throw( uno::RuntimeException ) 176cdf0e10cSrcweir { 177cdf0e10cSrcweir osl::MutexGuard aGuard( m_aMutex ); 178cdf0e10cSrcweir 179cdf0e10cSrcweir if ( ! m_pDisposeEventListeners ) 180cdf0e10cSrcweir m_pDisposeEventListeners = 181cdf0e10cSrcweir new cppu::OInterfaceContainerHelper( m_aEventListenerMutex ); 182cdf0e10cSrcweir 183cdf0e10cSrcweir m_pDisposeEventListeners->addInterface( Listener ); 184cdf0e10cSrcweir } 185cdf0e10cSrcweir 186cdf0e10cSrcweir 187cdf0e10cSrcweir void SAL_CALL 188cdf0e10cSrcweir XResultSet_impl::removeEventListener( 189cdf0e10cSrcweir const uno::Reference< lang::XEventListener >& Listener ) 190cdf0e10cSrcweir throw( uno::RuntimeException ) 191cdf0e10cSrcweir { 192cdf0e10cSrcweir osl::MutexGuard aGuard( m_aMutex ); 193cdf0e10cSrcweir 194cdf0e10cSrcweir if ( m_pDisposeEventListeners ) 195cdf0e10cSrcweir m_pDisposeEventListeners->removeInterface( Listener ); 196cdf0e10cSrcweir } 197cdf0e10cSrcweir 198cdf0e10cSrcweir 199cdf0e10cSrcweir 200cdf0e10cSrcweir void SAL_CALL 201cdf0e10cSrcweir XResultSet_impl::dispose() 202cdf0e10cSrcweir throw( uno::RuntimeException ) 203cdf0e10cSrcweir { 204cdf0e10cSrcweir osl::MutexGuard aGuard( m_aMutex ); 205cdf0e10cSrcweir 206cdf0e10cSrcweir lang::EventObject aEvt; 207cdf0e10cSrcweir aEvt.Source = static_cast< lang::XComponent * >( this ); 208cdf0e10cSrcweir 209cdf0e10cSrcweir if ( m_pDisposeEventListeners && m_pDisposeEventListeners->getLength() ) 210cdf0e10cSrcweir { 211cdf0e10cSrcweir m_pDisposeEventListeners->disposeAndClear( aEvt ); 212cdf0e10cSrcweir } 213cdf0e10cSrcweir if( m_pRowCountListeners && m_pRowCountListeners->getLength() ) 214cdf0e10cSrcweir { 215cdf0e10cSrcweir m_pRowCountListeners->disposeAndClear( aEvt ); 216cdf0e10cSrcweir } 217cdf0e10cSrcweir if( m_pIsFinalListeners && m_pIsFinalListeners->getLength() ) 218cdf0e10cSrcweir { 219cdf0e10cSrcweir m_pIsFinalListeners->disposeAndClear( aEvt ); 220cdf0e10cSrcweir } 221cdf0e10cSrcweir } 222cdf0e10cSrcweir 223cdf0e10cSrcweir 224cdf0e10cSrcweir 225cdf0e10cSrcweir void XResultSet_impl::rowCountChanged() 226cdf0e10cSrcweir { 227cdf0e10cSrcweir sal_Int32 aOldValue,aNewValue; 228cdf0e10cSrcweir uno::Sequence< uno::Reference< uno::XInterface > > seq; 229cdf0e10cSrcweir { 230cdf0e10cSrcweir osl::MutexGuard aGuard( m_aMutex ); 231cdf0e10cSrcweir if( m_pRowCountListeners ) 232cdf0e10cSrcweir seq = m_pRowCountListeners->getElements(); 233cdf0e10cSrcweir aNewValue = m_aItems.size(); 234cdf0e10cSrcweir aOldValue = aNewValue-1; 235cdf0e10cSrcweir } 236cdf0e10cSrcweir beans::PropertyChangeEvent aEv; 237cdf0e10cSrcweir aEv.PropertyName = rtl::OUString::createFromAscii( "RowCount" ); 238cdf0e10cSrcweir aEv.Further = false; 239cdf0e10cSrcweir aEv.PropertyHandle = -1; 240cdf0e10cSrcweir aEv.OldValue <<= aOldValue; 241cdf0e10cSrcweir aEv.NewValue <<= aNewValue; 242cdf0e10cSrcweir for( sal_Int32 i = 0; i < seq.getLength(); ++i ) 243cdf0e10cSrcweir { 244cdf0e10cSrcweir uno::Reference< beans::XPropertyChangeListener > listener( 245cdf0e10cSrcweir seq[i], uno::UNO_QUERY ); 246cdf0e10cSrcweir if( listener.is() ) 247cdf0e10cSrcweir listener->propertyChange( aEv ); 248cdf0e10cSrcweir } 249cdf0e10cSrcweir } 250cdf0e10cSrcweir 251cdf0e10cSrcweir 252cdf0e10cSrcweir void XResultSet_impl::isFinalChanged() 253cdf0e10cSrcweir { 254cdf0e10cSrcweir uno::Sequence< uno::Reference< XInterface > > seq; 255cdf0e10cSrcweir { 256cdf0e10cSrcweir osl::MutexGuard aGuard( m_aMutex ); 257cdf0e10cSrcweir if( m_pIsFinalListeners ) 258cdf0e10cSrcweir seq = m_pIsFinalListeners->getElements(); 259cdf0e10cSrcweir m_bRowCountFinal = true; 260cdf0e10cSrcweir } 261cdf0e10cSrcweir beans::PropertyChangeEvent aEv; 262cdf0e10cSrcweir aEv.PropertyName = rtl::OUString::createFromAscii( "IsRowCountFinal" ); 263cdf0e10cSrcweir aEv.Further = false; 264cdf0e10cSrcweir aEv.PropertyHandle = -1; 265cdf0e10cSrcweir sal_Bool fval = false; 266cdf0e10cSrcweir sal_Bool tval = true; 267cdf0e10cSrcweir aEv.OldValue <<= fval; 268cdf0e10cSrcweir aEv.NewValue <<= tval; 269cdf0e10cSrcweir for( sal_Int32 i = 0; i < seq.getLength(); ++i ) 270cdf0e10cSrcweir { 271cdf0e10cSrcweir uno::Reference< beans::XPropertyChangeListener > listener( 272cdf0e10cSrcweir seq[i], uno::UNO_QUERY ); 273cdf0e10cSrcweir if( listener.is() ) 274cdf0e10cSrcweir listener->propertyChange( aEv ); 275cdf0e10cSrcweir } 276cdf0e10cSrcweir } 277cdf0e10cSrcweir 278cdf0e10cSrcweir 279cdf0e10cSrcweir sal_Bool SAL_CALL 280cdf0e10cSrcweir XResultSet_impl::OneMore( 281cdf0e10cSrcweir void ) 282cdf0e10cSrcweir throw( sdbc::SQLException, 283cdf0e10cSrcweir uno::RuntimeException ) 284cdf0e10cSrcweir { 285cdf0e10cSrcweir if( ! m_nIsOpen ) 286cdf0e10cSrcweir return false; 287cdf0e10cSrcweir 288cdf0e10cSrcweir osl::FileBase::RC err; 289cdf0e10cSrcweir sal_Bool IsRegular; 290cdf0e10cSrcweir rtl::OUString aUnqPath; 291cdf0e10cSrcweir osl::DirectoryItem m_aDirIte; 292cdf0e10cSrcweir uno::Reference< sdbc::XRow > aRow; 293cdf0e10cSrcweir 294cdf0e10cSrcweir while( true ) 295cdf0e10cSrcweir { 296cdf0e10cSrcweir err = m_aFolder.getNextItem( m_aDirIte ); 297cdf0e10cSrcweir 298cdf0e10cSrcweir if( err == osl::FileBase::E_NOENT || err == osl::FileBase::E_INVAL ) 299cdf0e10cSrcweir { 300cdf0e10cSrcweir m_aFolder.close(); 301cdf0e10cSrcweir isFinalChanged(); 302cdf0e10cSrcweir return ( m_nIsOpen = false ); 303cdf0e10cSrcweir } 304cdf0e10cSrcweir else if( err == osl::FileBase::E_None ) 305cdf0e10cSrcweir { 306cdf0e10cSrcweir aRow = m_pMyShell->getv( 307cdf0e10cSrcweir this, m_sProperty, m_aDirIte, aUnqPath, IsRegular ); 308cdf0e10cSrcweir 309cdf0e10cSrcweir if( m_nOpenMode == ucb::OpenMode::DOCUMENTS && IsRegular ) 310cdf0e10cSrcweir { 311cdf0e10cSrcweir osl::MutexGuard aGuard( m_aMutex ); 312cdf0e10cSrcweir m_aItems.push_back( aRow ); 313cdf0e10cSrcweir m_aIdents.push_back( 314cdf0e10cSrcweir uno::Reference< ucb::XContentIdentifier >() ); 315cdf0e10cSrcweir m_aUnqPath.push_back( aUnqPath ); 316cdf0e10cSrcweir rowCountChanged(); 317cdf0e10cSrcweir return true; 318cdf0e10cSrcweir 319cdf0e10cSrcweir } 320cdf0e10cSrcweir else if( m_nOpenMode == ucb::OpenMode::DOCUMENTS && ! IsRegular ) 321cdf0e10cSrcweir { 322cdf0e10cSrcweir continue; 323cdf0e10cSrcweir } 324cdf0e10cSrcweir else if( m_nOpenMode == ucb::OpenMode::FOLDERS && ! IsRegular ) 325cdf0e10cSrcweir { 326cdf0e10cSrcweir osl::MutexGuard aGuard( m_aMutex ); 327cdf0e10cSrcweir m_aItems.push_back( aRow ); 328cdf0e10cSrcweir m_aIdents.push_back( 329cdf0e10cSrcweir uno::Reference< ucb::XContentIdentifier >() ); 330cdf0e10cSrcweir m_aUnqPath.push_back( aUnqPath ); 331cdf0e10cSrcweir rowCountChanged(); 332cdf0e10cSrcweir return true; 333cdf0e10cSrcweir } 334cdf0e10cSrcweir else if( m_nOpenMode == ucb::OpenMode::FOLDERS && IsRegular ) 335cdf0e10cSrcweir { 336cdf0e10cSrcweir continue; 337cdf0e10cSrcweir } 338cdf0e10cSrcweir else 339cdf0e10cSrcweir { 340cdf0e10cSrcweir osl::MutexGuard aGuard( m_aMutex ); 341cdf0e10cSrcweir m_aItems.push_back( aRow ); 342cdf0e10cSrcweir m_aIdents.push_back( 343cdf0e10cSrcweir uno::Reference< ucb::XContentIdentifier >() ); 344cdf0e10cSrcweir m_aUnqPath.push_back( aUnqPath ); 345cdf0e10cSrcweir rowCountChanged(); 346cdf0e10cSrcweir return true; 347cdf0e10cSrcweir } 348cdf0e10cSrcweir } 349cdf0e10cSrcweir else // error fetching anything 350cdf0e10cSrcweir { 351cdf0e10cSrcweir throw sdbc::SQLException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX ) ), uno::Reference< uno::XInterface >(), ::rtl::OUString(), 0, uno::Any() ); 352cdf0e10cSrcweir } 353cdf0e10cSrcweir } 354cdf0e10cSrcweir } 355cdf0e10cSrcweir 356cdf0e10cSrcweir 357cdf0e10cSrcweir 358cdf0e10cSrcweir 359cdf0e10cSrcweir 360cdf0e10cSrcweir sal_Bool SAL_CALL 361cdf0e10cSrcweir XResultSet_impl::next( 362cdf0e10cSrcweir void ) 363cdf0e10cSrcweir throw( sdbc::SQLException, 364cdf0e10cSrcweir uno::RuntimeException ) 365cdf0e10cSrcweir { 366cdf0e10cSrcweir sal_Bool test; 367cdf0e10cSrcweir if( ++m_nRow < sal::static_int_cast<sal_Int32>(m_aItems.size()) ) test = true; 368cdf0e10cSrcweir else 369cdf0e10cSrcweir test = OneMore(); 370cdf0e10cSrcweir return test; 371cdf0e10cSrcweir } 372cdf0e10cSrcweir 373cdf0e10cSrcweir 374cdf0e10cSrcweir sal_Bool SAL_CALL 375cdf0e10cSrcweir XResultSet_impl::isBeforeFirst( 376cdf0e10cSrcweir void ) 377cdf0e10cSrcweir throw( sdbc::SQLException, 378cdf0e10cSrcweir uno::RuntimeException ) 379cdf0e10cSrcweir { 380cdf0e10cSrcweir return m_nRow == -1; 381cdf0e10cSrcweir } 382cdf0e10cSrcweir 383cdf0e10cSrcweir 384cdf0e10cSrcweir sal_Bool SAL_CALL 385cdf0e10cSrcweir XResultSet_impl::isAfterLast( 386cdf0e10cSrcweir void ) 387cdf0e10cSrcweir throw( sdbc::SQLException, 388cdf0e10cSrcweir uno::RuntimeException ) 389cdf0e10cSrcweir { 390cdf0e10cSrcweir return m_nRow >= sal::static_int_cast<sal_Int32>(m_aItems.size()); // Cannot happen, if m_aFolder.isOpen() 391cdf0e10cSrcweir } 392cdf0e10cSrcweir 393cdf0e10cSrcweir 394cdf0e10cSrcweir sal_Bool SAL_CALL 395cdf0e10cSrcweir XResultSet_impl::isFirst( 396cdf0e10cSrcweir void ) 397cdf0e10cSrcweir throw( sdbc::SQLException, 398cdf0e10cSrcweir uno::RuntimeException ) 399cdf0e10cSrcweir { 400cdf0e10cSrcweir return m_nRow == 0; 401cdf0e10cSrcweir } 402cdf0e10cSrcweir 403cdf0e10cSrcweir 404cdf0e10cSrcweir sal_Bool SAL_CALL 405cdf0e10cSrcweir XResultSet_impl::isLast( 406cdf0e10cSrcweir void ) 407cdf0e10cSrcweir throw( sdbc::SQLException, 408cdf0e10cSrcweir uno::RuntimeException) 409cdf0e10cSrcweir { 410cdf0e10cSrcweir if( m_nRow == sal::static_int_cast<sal_Int32>(m_aItems.size()) - 1 ) 411cdf0e10cSrcweir return ! OneMore(); 412cdf0e10cSrcweir else 413cdf0e10cSrcweir return false; 414cdf0e10cSrcweir } 415cdf0e10cSrcweir 416cdf0e10cSrcweir 417cdf0e10cSrcweir void SAL_CALL 418cdf0e10cSrcweir XResultSet_impl::beforeFirst( 419cdf0e10cSrcweir void ) 420cdf0e10cSrcweir throw( sdbc::SQLException, 421cdf0e10cSrcweir uno::RuntimeException) 422cdf0e10cSrcweir { 423cdf0e10cSrcweir m_nRow = -1; 424cdf0e10cSrcweir } 425cdf0e10cSrcweir 426cdf0e10cSrcweir 427cdf0e10cSrcweir void SAL_CALL 428cdf0e10cSrcweir XResultSet_impl::afterLast( 429cdf0e10cSrcweir void ) 430cdf0e10cSrcweir throw( sdbc::SQLException, 431cdf0e10cSrcweir uno::RuntimeException ) 432cdf0e10cSrcweir { 433cdf0e10cSrcweir m_nRow = sal::static_int_cast<sal_Int32>(m_aItems.size()); 434cdf0e10cSrcweir while( OneMore() ) 435cdf0e10cSrcweir ++m_nRow; 436cdf0e10cSrcweir } 437cdf0e10cSrcweir 438cdf0e10cSrcweir 439cdf0e10cSrcweir sal_Bool SAL_CALL 440cdf0e10cSrcweir XResultSet_impl::first( 441cdf0e10cSrcweir void ) 442cdf0e10cSrcweir throw( sdbc::SQLException, 443cdf0e10cSrcweir uno::RuntimeException) 444cdf0e10cSrcweir { 445cdf0e10cSrcweir m_nRow = -1; 446cdf0e10cSrcweir return next(); 447cdf0e10cSrcweir } 448cdf0e10cSrcweir 449cdf0e10cSrcweir 450cdf0e10cSrcweir sal_Bool SAL_CALL 451cdf0e10cSrcweir XResultSet_impl::last( 452cdf0e10cSrcweir void ) 453cdf0e10cSrcweir throw( sdbc::SQLException, 454cdf0e10cSrcweir uno::RuntimeException ) 455cdf0e10cSrcweir { 456cdf0e10cSrcweir m_nRow = sal::static_int_cast<sal_Int32>(m_aItems.size()) - 1; 457cdf0e10cSrcweir while( OneMore() ) 458cdf0e10cSrcweir ++m_nRow; 459cdf0e10cSrcweir return true; 460cdf0e10cSrcweir } 461cdf0e10cSrcweir 462cdf0e10cSrcweir 463cdf0e10cSrcweir sal_Int32 SAL_CALL 464cdf0e10cSrcweir XResultSet_impl::getRow( 465cdf0e10cSrcweir void ) 466cdf0e10cSrcweir throw( sdbc::SQLException, 467cdf0e10cSrcweir uno::RuntimeException) 468cdf0e10cSrcweir { 469cdf0e10cSrcweir // Test, whether behind last row 470cdf0e10cSrcweir if( -1 == m_nRow || m_nRow >= sal::static_int_cast<sal_Int32>(m_aItems.size()) ) 471cdf0e10cSrcweir return 0; 472cdf0e10cSrcweir else 473cdf0e10cSrcweir return m_nRow+1; 474cdf0e10cSrcweir } 475cdf0e10cSrcweir 476cdf0e10cSrcweir 477cdf0e10cSrcweir 478cdf0e10cSrcweir sal_Bool SAL_CALL XResultSet_impl::absolute( sal_Int32 row ) 479cdf0e10cSrcweir throw( sdbc::SQLException, uno::RuntimeException) 480cdf0e10cSrcweir { 481cdf0e10cSrcweir if( row >= 0 ) 482cdf0e10cSrcweir { 483cdf0e10cSrcweir m_nRow = row - 1; 484cdf0e10cSrcweir if( row >= sal::static_int_cast<sal_Int32>(m_aItems.size()) ) 485cdf0e10cSrcweir while( row-- && OneMore() ) 486cdf0e10cSrcweir ; 487cdf0e10cSrcweir } 488cdf0e10cSrcweir else 489cdf0e10cSrcweir { 490cdf0e10cSrcweir last(); 491cdf0e10cSrcweir m_nRow += ( row + 1 ); 492cdf0e10cSrcweir if( m_nRow < -1 ) 493cdf0e10cSrcweir m_nRow = -1; 494cdf0e10cSrcweir } 495cdf0e10cSrcweir 496cdf0e10cSrcweir return 0<= m_nRow && m_nRow < sal::static_int_cast<sal_Int32>(m_aItems.size()); 497cdf0e10cSrcweir } 498cdf0e10cSrcweir 499cdf0e10cSrcweir 500cdf0e10cSrcweir 501cdf0e10cSrcweir 502cdf0e10cSrcweir sal_Bool SAL_CALL 503cdf0e10cSrcweir XResultSet_impl::relative( 504cdf0e10cSrcweir sal_Int32 row ) 505cdf0e10cSrcweir throw( sdbc::SQLException, 506cdf0e10cSrcweir uno::RuntimeException) 507cdf0e10cSrcweir { 508cdf0e10cSrcweir if( isAfterLast() || isBeforeFirst() ) 509cdf0e10cSrcweir throw sdbc::SQLException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX ) ), uno::Reference< uno::XInterface >(), ::rtl::OUString(), 0, uno::Any() ); 510cdf0e10cSrcweir if( row > 0 ) 511cdf0e10cSrcweir while( row-- ) next(); 512cdf0e10cSrcweir else if( row < 0 ) 513cdf0e10cSrcweir while( row++ && m_nRow > - 1 ) previous(); 514cdf0e10cSrcweir 515cdf0e10cSrcweir return 0 <= m_nRow && m_nRow < sal::static_int_cast<sal_Int32>(m_aItems.size()); 516cdf0e10cSrcweir } 517cdf0e10cSrcweir 518cdf0e10cSrcweir 519cdf0e10cSrcweir 520cdf0e10cSrcweir sal_Bool SAL_CALL 521cdf0e10cSrcweir XResultSet_impl::previous( 522cdf0e10cSrcweir void ) 523cdf0e10cSrcweir throw( sdbc::SQLException, 524cdf0e10cSrcweir uno::RuntimeException) 525cdf0e10cSrcweir { 526cdf0e10cSrcweir if( m_nRow > sal::static_int_cast<sal_Int32>(m_aItems.size()) ) 527cdf0e10cSrcweir m_nRow = sal::static_int_cast<sal_Int32>(m_aItems.size()); // Correct Handling of afterLast 528cdf0e10cSrcweir if( 0 <= m_nRow ) -- m_nRow; 529cdf0e10cSrcweir 530cdf0e10cSrcweir return 0 <= m_nRow && m_nRow < sal::static_int_cast<sal_Int32>(m_aItems.size()); 531cdf0e10cSrcweir } 532cdf0e10cSrcweir 533cdf0e10cSrcweir 534cdf0e10cSrcweir void SAL_CALL 535cdf0e10cSrcweir XResultSet_impl::refreshRow( 536cdf0e10cSrcweir void ) 537cdf0e10cSrcweir throw( sdbc::SQLException, 538cdf0e10cSrcweir uno::RuntimeException) 539cdf0e10cSrcweir { 540cdf0e10cSrcweir // get the row from the filesystem 541cdf0e10cSrcweir return; 542cdf0e10cSrcweir } 543cdf0e10cSrcweir 544cdf0e10cSrcweir 545cdf0e10cSrcweir sal_Bool SAL_CALL 546cdf0e10cSrcweir XResultSet_impl::rowUpdated( 547cdf0e10cSrcweir void ) 548cdf0e10cSrcweir throw( sdbc::SQLException, 549cdf0e10cSrcweir uno::RuntimeException ) 550cdf0e10cSrcweir { 551cdf0e10cSrcweir return false; 552cdf0e10cSrcweir } 553cdf0e10cSrcweir 554cdf0e10cSrcweir sal_Bool SAL_CALL 555cdf0e10cSrcweir XResultSet_impl::rowInserted( 556cdf0e10cSrcweir void ) 557cdf0e10cSrcweir throw( sdbc::SQLException, 558cdf0e10cSrcweir uno::RuntimeException ) 559cdf0e10cSrcweir { 560cdf0e10cSrcweir return false; 561cdf0e10cSrcweir } 562cdf0e10cSrcweir 563cdf0e10cSrcweir sal_Bool SAL_CALL 564cdf0e10cSrcweir XResultSet_impl::rowDeleted( 565cdf0e10cSrcweir void ) 566cdf0e10cSrcweir throw( sdbc::SQLException, 567cdf0e10cSrcweir uno::RuntimeException ) 568cdf0e10cSrcweir { 569cdf0e10cSrcweir return false; 570cdf0e10cSrcweir } 571cdf0e10cSrcweir 572cdf0e10cSrcweir 573cdf0e10cSrcweir uno::Reference< uno::XInterface > SAL_CALL 574cdf0e10cSrcweir XResultSet_impl::getStatement( 575cdf0e10cSrcweir void ) 576cdf0e10cSrcweir throw( sdbc::SQLException, 577cdf0e10cSrcweir uno::RuntimeException ) 578cdf0e10cSrcweir { 579cdf0e10cSrcweir return uno::Reference< uno::XInterface >(); 580cdf0e10cSrcweir } 581cdf0e10cSrcweir 582cdf0e10cSrcweir 583cdf0e10cSrcweir // XCloseable 584cdf0e10cSrcweir 585cdf0e10cSrcweir void SAL_CALL 586cdf0e10cSrcweir XResultSet_impl::close( 587cdf0e10cSrcweir void ) 588cdf0e10cSrcweir throw( sdbc::SQLException, 589cdf0e10cSrcweir uno::RuntimeException) 590cdf0e10cSrcweir { 591cdf0e10cSrcweir if( m_nIsOpen ) 592cdf0e10cSrcweir { 593cdf0e10cSrcweir m_aFolder.close(); 594cdf0e10cSrcweir isFinalChanged(); 595cdf0e10cSrcweir osl::MutexGuard aGuard( m_aMutex ); 596cdf0e10cSrcweir m_nIsOpen = false; 597cdf0e10cSrcweir } 598cdf0e10cSrcweir } 599cdf0e10cSrcweir 600cdf0e10cSrcweir 601cdf0e10cSrcweir 602cdf0e10cSrcweir rtl::OUString SAL_CALL 603cdf0e10cSrcweir XResultSet_impl::queryContentIdentifierString( 604cdf0e10cSrcweir void ) 605cdf0e10cSrcweir throw( uno::RuntimeException ) 606cdf0e10cSrcweir { 607cdf0e10cSrcweir uno::Reference< ucb::XContentIdentifier > xContentId 608cdf0e10cSrcweir = queryContentIdentifier(); 609cdf0e10cSrcweir 610cdf0e10cSrcweir if( xContentId.is() ) 611cdf0e10cSrcweir return xContentId->getContentIdentifier(); 612cdf0e10cSrcweir else 613cdf0e10cSrcweir return rtl::OUString(); 614cdf0e10cSrcweir } 615cdf0e10cSrcweir 616cdf0e10cSrcweir 617cdf0e10cSrcweir uno::Reference< ucb::XContentIdentifier > SAL_CALL 618cdf0e10cSrcweir XResultSet_impl::queryContentIdentifier( 619cdf0e10cSrcweir void ) 620cdf0e10cSrcweir throw( uno::RuntimeException ) 621cdf0e10cSrcweir { 622cdf0e10cSrcweir if( 0 <= m_nRow && m_nRow < sal::static_int_cast<sal_Int32>(m_aItems.size()) ) 623cdf0e10cSrcweir { 624cdf0e10cSrcweir if( ! m_aIdents[m_nRow].is() ) 625cdf0e10cSrcweir { 626cdf0e10cSrcweir FileContentIdentifier* p 627cdf0e10cSrcweir = new FileContentIdentifier( m_pMyShell, 628cdf0e10cSrcweir m_aUnqPath[ m_nRow ] ); 629cdf0e10cSrcweir m_aIdents[m_nRow] = uno::Reference< ucb::XContentIdentifier >(p); 630cdf0e10cSrcweir } 631cdf0e10cSrcweir return m_aIdents[m_nRow]; 632cdf0e10cSrcweir } 633cdf0e10cSrcweir return uno::Reference< ucb::XContentIdentifier >(); 634cdf0e10cSrcweir } 635cdf0e10cSrcweir 636cdf0e10cSrcweir 637cdf0e10cSrcweir uno::Reference< ucb::XContent > SAL_CALL 638cdf0e10cSrcweir XResultSet_impl::queryContent( 639cdf0e10cSrcweir void ) 640cdf0e10cSrcweir throw( uno::RuntimeException ) 641cdf0e10cSrcweir { 642cdf0e10cSrcweir if( 0 <= m_nRow && m_nRow < sal::static_int_cast<sal_Int32>(m_aItems.size()) ) 643cdf0e10cSrcweir return m_pMyShell->m_pProvider->queryContent( queryContentIdentifier() ); 644cdf0e10cSrcweir else 645cdf0e10cSrcweir return uno::Reference< ucb::XContent >(); 646cdf0e10cSrcweir } 647cdf0e10cSrcweir 648cdf0e10cSrcweir 649cdf0e10cSrcweir // XDynamicResultSet 650cdf0e10cSrcweir 651cdf0e10cSrcweir 652cdf0e10cSrcweir // virtual 653cdf0e10cSrcweir uno::Reference< sdbc::XResultSet > SAL_CALL 654cdf0e10cSrcweir XResultSet_impl::getStaticResultSet() 655cdf0e10cSrcweir throw( ucb::ListenerAlreadySetException, 656cdf0e10cSrcweir uno::RuntimeException ) 657cdf0e10cSrcweir { 658cdf0e10cSrcweir osl::MutexGuard aGuard( m_aMutex ); 659cdf0e10cSrcweir 660cdf0e10cSrcweir if ( m_xListener.is() ) 661cdf0e10cSrcweir throw ucb::ListenerAlreadySetException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX ) ), uno::Reference< uno::XInterface >() ); 662cdf0e10cSrcweir 663cdf0e10cSrcweir return uno::Reference< sdbc::XResultSet >( this ); 664cdf0e10cSrcweir } 665cdf0e10cSrcweir 666cdf0e10cSrcweir //========================================================================= 667cdf0e10cSrcweir // virtual 668cdf0e10cSrcweir void SAL_CALL 669cdf0e10cSrcweir XResultSet_impl::setListener( 670cdf0e10cSrcweir const uno::Reference< ucb::XDynamicResultSetListener >& Listener ) 671cdf0e10cSrcweir throw( ucb::ListenerAlreadySetException, 672cdf0e10cSrcweir uno::RuntimeException ) 673cdf0e10cSrcweir { 674cdf0e10cSrcweir osl::ClearableMutexGuard aGuard( m_aMutex ); 675cdf0e10cSrcweir 676cdf0e10cSrcweir if ( m_xListener.is() ) 677cdf0e10cSrcweir throw ucb::ListenerAlreadySetException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX ) ), uno::Reference< uno::XInterface >() ); 678cdf0e10cSrcweir 679cdf0e10cSrcweir m_xListener = Listener; 680cdf0e10cSrcweir 681cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////// 682cdf0e10cSrcweir // Create "welcome event" and send it to listener. 683cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////// 684cdf0e10cSrcweir 685cdf0e10cSrcweir // Note: We only have the implementation for a static result set at the 686cdf0e10cSrcweir // moment (src590). The dynamic result sets passed to the listener 687cdf0e10cSrcweir // are a fake. This implementation will never call "notify" at the 688cdf0e10cSrcweir // listener to propagate any changes!!! 689cdf0e10cSrcweir 690cdf0e10cSrcweir uno::Any aInfo; 691cdf0e10cSrcweir aInfo <<= ucb::WelcomeDynamicResultSetStruct( this, /* "old" */ 692cdf0e10cSrcweir this /* "new" */ ); 693cdf0e10cSrcweir 694cdf0e10cSrcweir uno::Sequence< ucb::ListAction > aActions( 1 ); 695cdf0e10cSrcweir aActions.getArray()[ 0 ] = ucb::ListAction( 0, // Position; not used 696cdf0e10cSrcweir 0, // Count; not used 697cdf0e10cSrcweir ucb::ListActionType::WELCOME, 698cdf0e10cSrcweir aInfo ); 699cdf0e10cSrcweir aGuard.clear(); 700cdf0e10cSrcweir 701cdf0e10cSrcweir Listener->notify( 702cdf0e10cSrcweir ucb::ListEvent( 703cdf0e10cSrcweir static_cast< cppu::OWeakObject * >( this ), aActions ) ); 704cdf0e10cSrcweir } 705cdf0e10cSrcweir 706cdf0e10cSrcweir //========================================================================= 707cdf0e10cSrcweir // virtual 708cdf0e10cSrcweir void SAL_CALL 709cdf0e10cSrcweir XResultSet_impl::connectToCache( 710cdf0e10cSrcweir const uno::Reference< ucb::XDynamicResultSet > & xCache ) 711cdf0e10cSrcweir throw( ucb::ListenerAlreadySetException, 712cdf0e10cSrcweir ucb::AlreadyInitializedException, 713cdf0e10cSrcweir ucb::ServiceNotFoundException, 714cdf0e10cSrcweir uno::RuntimeException ) 715cdf0e10cSrcweir { 716cdf0e10cSrcweir uno::Reference< lang::XMultiServiceFactory > mxSMgr 717cdf0e10cSrcweir = m_pMyShell->m_xMultiServiceFactory; 718cdf0e10cSrcweir 719cdf0e10cSrcweir if( m_xListener.is() ) 720cdf0e10cSrcweir throw ucb::ListenerAlreadySetException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX ) ), uno::Reference< uno::XInterface >() ); 721cdf0e10cSrcweir if( m_bStatic ) 722cdf0e10cSrcweir throw ucb::ListenerAlreadySetException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX ) ), uno::Reference< uno::XInterface >() ); 723cdf0e10cSrcweir 724cdf0e10cSrcweir uno::Reference< ucb::XSourceInitialization > xTarget( 725cdf0e10cSrcweir xCache, uno::UNO_QUERY ); 726cdf0e10cSrcweir if( xTarget.is() && mxSMgr.is() ) 727cdf0e10cSrcweir { 728cdf0e10cSrcweir uno::Reference< ucb::XCachedDynamicResultSetStubFactory > xStubFactory; 729cdf0e10cSrcweir try 730cdf0e10cSrcweir { 731cdf0e10cSrcweir xStubFactory 732cdf0e10cSrcweir = uno::Reference< ucb::XCachedDynamicResultSetStubFactory >( 733cdf0e10cSrcweir mxSMgr->createInstance( 734cdf0e10cSrcweir rtl::OUString::createFromAscii( 735cdf0e10cSrcweir "com.sun.star.ucb.CachedDynamicResultSetStubFactory" ) ), 736cdf0e10cSrcweir uno::UNO_QUERY ); 737cdf0e10cSrcweir } 738cdf0e10cSrcweir catch ( uno::Exception const & ) 739cdf0e10cSrcweir { 740cdf0e10cSrcweir } 741cdf0e10cSrcweir 742cdf0e10cSrcweir if( xStubFactory.is() ) 743cdf0e10cSrcweir { 744cdf0e10cSrcweir xStubFactory->connectToCache( 745cdf0e10cSrcweir this, xCache,m_sSortingInfo, NULL ); 746cdf0e10cSrcweir return; 747cdf0e10cSrcweir } 748cdf0e10cSrcweir } 749cdf0e10cSrcweir throw ucb::ServiceNotFoundException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX ) ), uno::Reference< uno::XInterface >() ); 750cdf0e10cSrcweir } 751cdf0e10cSrcweir 752cdf0e10cSrcweir //========================================================================= 753cdf0e10cSrcweir // virtual 754cdf0e10cSrcweir sal_Int16 SAL_CALL 755cdf0e10cSrcweir XResultSet_impl::getCapabilities() 756cdf0e10cSrcweir throw( uno::RuntimeException ) 757cdf0e10cSrcweir { 758cdf0e10cSrcweir // Never set ucb::ContentResultSetCapability::SORTED 759cdf0e10cSrcweir // - Underlying content cannot provide sorted data... 760cdf0e10cSrcweir return 0; 761cdf0e10cSrcweir } 762cdf0e10cSrcweir 763cdf0e10cSrcweir // XResultSetMetaDataSupplier 764cdf0e10cSrcweir uno::Reference< sdbc::XResultSetMetaData > SAL_CALL 765cdf0e10cSrcweir XResultSet_impl::getMetaData( 766cdf0e10cSrcweir void ) 767cdf0e10cSrcweir throw( sdbc::SQLException, 768cdf0e10cSrcweir uno::RuntimeException ) 769cdf0e10cSrcweir { 770cdf0e10cSrcweir for ( sal_Int32 n = 0; n < m_sProperty.getLength(); ++n ) 771cdf0e10cSrcweir { 772cdf0e10cSrcweir if ( m_sProperty.getConstArray()[ n ].Name.compareToAscii( "Title" ) 773cdf0e10cSrcweir == 0 ) 774cdf0e10cSrcweir { 775cdf0e10cSrcweir // @@@ #82177# - Determine correct value! 776cdf0e10cSrcweir sal_Bool bCaseSensitiveChildren = sal_False; 777cdf0e10cSrcweir 778cdf0e10cSrcweir std::vector< ::ucbhelper::ResultSetColumnData > 779cdf0e10cSrcweir aColumnData( m_sProperty.getLength() ); 780cdf0e10cSrcweir aColumnData[ n ].isCaseSensitive = bCaseSensitiveChildren; 781cdf0e10cSrcweir 782cdf0e10cSrcweir ::ucbhelper::ResultSetMetaData* p = 783cdf0e10cSrcweir new ::ucbhelper::ResultSetMetaData( 784cdf0e10cSrcweir m_pMyShell->m_xMultiServiceFactory, 785cdf0e10cSrcweir m_sProperty, 786cdf0e10cSrcweir aColumnData ); 787cdf0e10cSrcweir return uno::Reference< sdbc::XResultSetMetaData >( p ); 788cdf0e10cSrcweir } 789cdf0e10cSrcweir } 790cdf0e10cSrcweir 791cdf0e10cSrcweir ::ucbhelper::ResultSetMetaData* p = 792cdf0e10cSrcweir new ::ucbhelper::ResultSetMetaData( 793cdf0e10cSrcweir m_pMyShell->m_xMultiServiceFactory, m_sProperty ); 794cdf0e10cSrcweir return uno::Reference< sdbc::XResultSetMetaData >( p ); 795cdf0e10cSrcweir } 796cdf0e10cSrcweir 797cdf0e10cSrcweir 798cdf0e10cSrcweir 799cdf0e10cSrcweir // XPropertySet 800cdf0e10cSrcweir uno::Reference< beans::XPropertySetInfo > SAL_CALL 801cdf0e10cSrcweir XResultSet_impl::getPropertySetInfo() 802cdf0e10cSrcweir throw( uno::RuntimeException) 803cdf0e10cSrcweir { 804cdf0e10cSrcweir 805cdf0e10cSrcweir uno::Sequence< beans::Property > seq(2); 806cdf0e10cSrcweir seq[0].Name = rtl::OUString::createFromAscii( "RowCount" ); 807cdf0e10cSrcweir seq[0].Handle = -1; 808cdf0e10cSrcweir seq[0].Type = getCppuType( static_cast< sal_Int32* >(0) ); 809cdf0e10cSrcweir seq[0].Attributes = beans::PropertyAttribute::READONLY; 810cdf0e10cSrcweir 811cdf0e10cSrcweir seq[0].Name = rtl::OUString::createFromAscii( "IsRowCountFinal" ); 812cdf0e10cSrcweir seq[0].Handle = -1; 813cdf0e10cSrcweir seq[0].Type = getCppuType( static_cast< sal_Bool* >(0) ); 814cdf0e10cSrcweir seq[0].Attributes = beans::PropertyAttribute::READONLY; 815cdf0e10cSrcweir 816cdf0e10cSrcweir XPropertySetInfo_impl* p = new XPropertySetInfo_impl( m_pMyShell, 817cdf0e10cSrcweir seq ); 818cdf0e10cSrcweir return uno::Reference< beans::XPropertySetInfo > ( p ); 819cdf0e10cSrcweir } 820cdf0e10cSrcweir 821cdf0e10cSrcweir 822cdf0e10cSrcweir 823cdf0e10cSrcweir void SAL_CALL XResultSet_impl::setPropertyValue( 824cdf0e10cSrcweir const rtl::OUString& aPropertyName, const uno::Any& ) 825cdf0e10cSrcweir throw( beans::UnknownPropertyException, 826cdf0e10cSrcweir beans::PropertyVetoException, 827cdf0e10cSrcweir lang::IllegalArgumentException, 828cdf0e10cSrcweir lang::WrappedTargetException, 829cdf0e10cSrcweir uno::RuntimeException) 830cdf0e10cSrcweir { 831cdf0e10cSrcweir if( aPropertyName == rtl::OUString::createFromAscii( "IsRowCountFinal" ) || 832cdf0e10cSrcweir aPropertyName == rtl::OUString::createFromAscii( "RowCount" ) ) 833cdf0e10cSrcweir return; 834cdf0e10cSrcweir throw beans::UnknownPropertyException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX ) ), uno::Reference< uno::XInterface >() ); 835cdf0e10cSrcweir } 836cdf0e10cSrcweir 837cdf0e10cSrcweir 838cdf0e10cSrcweir uno::Any SAL_CALL XResultSet_impl::getPropertyValue( 839cdf0e10cSrcweir const rtl::OUString& PropertyName ) 840cdf0e10cSrcweir throw( beans::UnknownPropertyException, 841cdf0e10cSrcweir lang::WrappedTargetException, 842cdf0e10cSrcweir uno::RuntimeException) 843cdf0e10cSrcweir { 844cdf0e10cSrcweir if( PropertyName == rtl::OUString::createFromAscii( "IsRowCountFinal" ) ) 845cdf0e10cSrcweir { 846cdf0e10cSrcweir uno::Any aAny; 847cdf0e10cSrcweir aAny <<= m_bRowCountFinal; 848cdf0e10cSrcweir return aAny; 849cdf0e10cSrcweir } 850cdf0e10cSrcweir else if ( PropertyName == rtl::OUString::createFromAscii( "RowCount" ) ) 851cdf0e10cSrcweir { 852cdf0e10cSrcweir uno::Any aAny; 853cdf0e10cSrcweir sal_Int32 count = sal::static_int_cast<sal_Int32>(m_aItems.size()); 854cdf0e10cSrcweir aAny <<= count; 855cdf0e10cSrcweir return aAny; 856cdf0e10cSrcweir } 857cdf0e10cSrcweir else 858cdf0e10cSrcweir throw beans::UnknownPropertyException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX ) ), uno::Reference< uno::XInterface >() ); 859cdf0e10cSrcweir } 860cdf0e10cSrcweir 861cdf0e10cSrcweir 862cdf0e10cSrcweir void SAL_CALL XResultSet_impl::addPropertyChangeListener( 863cdf0e10cSrcweir const rtl::OUString& aPropertyName, 864cdf0e10cSrcweir const uno::Reference< beans::XPropertyChangeListener >& xListener ) 865cdf0e10cSrcweir throw( beans::UnknownPropertyException, 866cdf0e10cSrcweir lang::WrappedTargetException, 867cdf0e10cSrcweir uno::RuntimeException) 868cdf0e10cSrcweir { 869cdf0e10cSrcweir if( aPropertyName == rtl::OUString::createFromAscii( "IsRowCountFinal" ) ) 870cdf0e10cSrcweir { 871cdf0e10cSrcweir osl::MutexGuard aGuard( m_aMutex ); 872cdf0e10cSrcweir if ( ! m_pIsFinalListeners ) 873cdf0e10cSrcweir m_pIsFinalListeners = 874cdf0e10cSrcweir new cppu::OInterfaceContainerHelper( m_aEventListenerMutex ); 875cdf0e10cSrcweir 876cdf0e10cSrcweir m_pIsFinalListeners->addInterface( xListener ); 877cdf0e10cSrcweir } 878cdf0e10cSrcweir else if ( aPropertyName == rtl::OUString::createFromAscii( "RowCount" ) ) 879cdf0e10cSrcweir { 880cdf0e10cSrcweir osl::MutexGuard aGuard( m_aMutex ); 881cdf0e10cSrcweir if ( ! m_pRowCountListeners ) 882cdf0e10cSrcweir m_pRowCountListeners = 883cdf0e10cSrcweir new cppu::OInterfaceContainerHelper( m_aEventListenerMutex ); 884cdf0e10cSrcweir m_pRowCountListeners->addInterface( xListener ); 885cdf0e10cSrcweir } 886cdf0e10cSrcweir else 887cdf0e10cSrcweir throw beans::UnknownPropertyException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX ) ), uno::Reference< uno::XInterface >() ); 888cdf0e10cSrcweir } 889cdf0e10cSrcweir 890cdf0e10cSrcweir 891cdf0e10cSrcweir void SAL_CALL XResultSet_impl::removePropertyChangeListener( 892cdf0e10cSrcweir const rtl::OUString& aPropertyName, 893cdf0e10cSrcweir const uno::Reference< beans::XPropertyChangeListener >& aListener ) 894cdf0e10cSrcweir throw( beans::UnknownPropertyException, 895cdf0e10cSrcweir lang::WrappedTargetException, 896cdf0e10cSrcweir uno::RuntimeException) 897cdf0e10cSrcweir { 898cdf0e10cSrcweir if( aPropertyName == rtl::OUString::createFromAscii( "IsRowCountFinal" ) && 899cdf0e10cSrcweir m_pIsFinalListeners ) 900cdf0e10cSrcweir { 901cdf0e10cSrcweir osl::MutexGuard aGuard( m_aMutex ); 902cdf0e10cSrcweir m_pIsFinalListeners->removeInterface( aListener ); 903cdf0e10cSrcweir } 904cdf0e10cSrcweir else if ( aPropertyName == rtl::OUString::createFromAscii( "RowCount" ) && 905cdf0e10cSrcweir m_pRowCountListeners ) 906cdf0e10cSrcweir { 907cdf0e10cSrcweir osl::MutexGuard aGuard( m_aMutex ); 908cdf0e10cSrcweir 909cdf0e10cSrcweir m_pRowCountListeners->removeInterface( aListener ); 910cdf0e10cSrcweir } 911cdf0e10cSrcweir else 912cdf0e10cSrcweir throw beans::UnknownPropertyException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX ) ), uno::Reference< uno::XInterface >() ); 913cdf0e10cSrcweir } 914cdf0e10cSrcweir 915cdf0e10cSrcweir void SAL_CALL XResultSet_impl::addVetoableChangeListener( 916cdf0e10cSrcweir const rtl::OUString&, 917cdf0e10cSrcweir const uno::Reference< beans::XVetoableChangeListener >& ) 918cdf0e10cSrcweir throw( beans::UnknownPropertyException, 919cdf0e10cSrcweir lang::WrappedTargetException, 920cdf0e10cSrcweir uno::RuntimeException) 921cdf0e10cSrcweir { 922cdf0e10cSrcweir } 923cdf0e10cSrcweir 924cdf0e10cSrcweir 925cdf0e10cSrcweir void SAL_CALL XResultSet_impl::removeVetoableChangeListener( 926cdf0e10cSrcweir const rtl::OUString&, 927cdf0e10cSrcweir const uno::Reference< beans::XVetoableChangeListener >& ) 928cdf0e10cSrcweir throw( beans::UnknownPropertyException, 929cdf0e10cSrcweir lang::WrappedTargetException, 930cdf0e10cSrcweir uno::RuntimeException) 931cdf0e10cSrcweir { 932cdf0e10cSrcweir } 933