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 #ifndef _FTP_FTPRESULTSETBASE_HXX_ 24 #define _FTP_FTPRESULTSETBASE_HXX_ 25 26 #include <vector> 27 #include <cppuhelper/weak.hxx> 28 #include <cppuhelper/interfacecontainer.hxx> 29 #include <com/sun/star/lang/XComponent.hpp> 30 #include <com/sun/star/ucb/XContentAccess.hpp> 31 #include <com/sun/star/sdbc/XCloseable.hpp> 32 #include <com/sun/star/beans/XPropertySet.hpp> 33 #include <com/sun/star/sdbc/XResultSet.hpp> 34 #include <com/sun/star/sdbc/XRow.hpp> 35 #include <com/sun/star/sdbc/XResultSetMetaDataSupplier.hpp> 36 #include <com/sun/star/ucb/NumberedSortingInfo.hpp> 37 #include <com/sun/star/ucb/XContentProvider.hpp> 38 #include <com/sun/star/ucb/XContentIdentifier.hpp> 39 #include <com/sun/star/lang/XMultiServiceFactory.hpp> 40 #include <com/sun/star/beans/Property.hpp> 41 42 43 namespace ftp { 44 45 class ResultSetBase 46 : public cppu::OWeakObject, 47 public com::sun::star::lang::XComponent, 48 public com::sun::star::sdbc::XRow, 49 public com::sun::star::sdbc::XResultSet, 50 public com::sun::star::sdbc::XCloseable, 51 public com::sun::star::sdbc::XResultSetMetaDataSupplier, 52 public com::sun::star::beans::XPropertySet, 53 public com::sun::star::ucb::XContentAccess 54 { 55 public: 56 57 ResultSetBase(const com::sun::star::uno::Reference< 58 com::sun::star::lang::XMultiServiceFactory >& xMSF, 59 const com::sun::star::uno::Reference< 60 com::sun::star::ucb::XContentProvider >& xProvider, 61 sal_Int32 nOpenMode, 62 const com::sun::star::uno::Sequence< 63 com::sun::star::beans::Property >& seq, 64 const com::sun::star::uno::Sequence< 65 com::sun::star::ucb::NumberedSortingInfo >& seqSort); 66 67 virtual ~ResultSetBase(); 68 69 // XInterface 70 virtual com::sun::star::uno::Any SAL_CALL 71 queryInterface( 72 const com::sun::star::uno::Type& aType ) 73 throw( com::sun::star::uno::RuntimeException); 74 75 virtual void SAL_CALL 76 acquire( 77 void ) 78 throw(); 79 80 virtual void SAL_CALL 81 release( 82 void ) 83 throw(); 84 85 // XComponent 86 virtual void SAL_CALL 87 dispose( 88 void ) 89 throw( com::sun::star::uno::RuntimeException ); 90 91 virtual void SAL_CALL 92 addEventListener( 93 const com::sun::star::uno::Reference< 94 com::sun::star::lang::XEventListener >& xListener ) 95 throw( com::sun::star::uno::RuntimeException ); 96 97 virtual void SAL_CALL 98 removeEventListener( const com::sun::star::uno::Reference< 99 com::sun::star::lang::XEventListener >& aListener ) 100 throw( com::sun::star::uno::RuntimeException ); 101 102 103 // XRow 104 virtual sal_Bool SAL_CALL wasNull(void)105 wasNull( 106 void ) 107 throw( com::sun::star::sdbc::SQLException, 108 com::sun::star::uno::RuntimeException ) 109 { 110 if( 0<= m_nRow && m_nRow < sal::static_int_cast<sal_Int32>(m_aItems.size()) ) 111 m_nWasNull = m_aItems[m_nRow]->wasNull(); 112 else 113 m_nWasNull = true; 114 return m_nWasNull; 115 } 116 117 virtual rtl::OUString SAL_CALL getString(sal_Int32 columnIndex)118 getString( 119 sal_Int32 columnIndex ) 120 throw( com::sun::star::sdbc::SQLException, 121 com::sun::star::uno::RuntimeException) 122 { 123 rtl::OUString ret; 124 if( 0 <= m_nRow && m_nRow < sal::static_int_cast<sal_Int32>(m_aItems.size()) ) 125 ret = m_aItems[m_nRow]->getString( columnIndex ); 126 127 return ret; 128 } 129 130 virtual sal_Bool SAL_CALL getBoolean(sal_Int32 columnIndex)131 getBoolean( 132 sal_Int32 columnIndex ) 133 throw( com::sun::star::sdbc::SQLException, 134 com::sun::star::uno::RuntimeException) 135 { 136 if( 0 <= m_nRow && m_nRow < sal::static_int_cast<sal_Int32>(m_aItems.size()) ) 137 return m_aItems[m_nRow]->getBoolean( columnIndex ); 138 else 139 return false; 140 } 141 142 virtual sal_Int8 SAL_CALL getByte(sal_Int32 columnIndex)143 getByte( 144 sal_Int32 columnIndex ) 145 throw( com::sun::star::sdbc::SQLException, 146 com::sun::star::uno::RuntimeException) 147 { 148 if( 0 <= m_nRow && m_nRow < sal::static_int_cast<sal_Int32>(m_aItems.size()) ) 149 return m_aItems[m_nRow]->getByte( columnIndex ); 150 else 151 return sal_Int8( 0 ); 152 } 153 154 virtual sal_Int16 SAL_CALL getShort(sal_Int32 columnIndex)155 getShort( 156 sal_Int32 columnIndex ) 157 throw( 158 com::sun::star::sdbc::SQLException, 159 com::sun::star::uno::RuntimeException) 160 { 161 if( 0 <= m_nRow && m_nRow < sal::static_int_cast<sal_Int32>(m_aItems.size()) ) 162 return m_aItems[m_nRow]->getShort( columnIndex ); 163 else 164 return sal_Int16( 0 ); 165 } 166 167 virtual sal_Int32 SAL_CALL getInt(sal_Int32 columnIndex)168 getInt( 169 sal_Int32 columnIndex ) 170 throw( com::sun::star::sdbc::SQLException, 171 com::sun::star::uno::RuntimeException ) 172 { 173 if( 0 <= m_nRow && m_nRow < sal::static_int_cast<sal_Int32>(m_aItems.size()) ) 174 return m_aItems[m_nRow]->getInt( columnIndex ); 175 else 176 return sal_Int32( 0 ); 177 } 178 179 virtual sal_Int64 SAL_CALL getLong(sal_Int32 columnIndex)180 getLong( 181 sal_Int32 columnIndex ) 182 throw( com::sun::star::sdbc::SQLException, 183 com::sun::star::uno::RuntimeException) 184 { 185 if( 0 <= m_nRow && m_nRow < sal::static_int_cast<sal_Int32>(m_aItems.size()) ) 186 return m_aItems[m_nRow]->getLong( columnIndex ); 187 else 188 return sal_Int64( 0 ); 189 } 190 191 virtual float SAL_CALL getFloat(sal_Int32 columnIndex)192 getFloat( 193 sal_Int32 columnIndex ) 194 throw( com::sun::star::sdbc::SQLException, 195 com::sun::star::uno::RuntimeException ) 196 { 197 if( 0 <= m_nRow && m_nRow < sal::static_int_cast<sal_Int32>(m_aItems.size()) ) 198 return m_aItems[m_nRow]->getFloat( columnIndex ); 199 else 200 return float( 0 ); 201 } 202 203 virtual double SAL_CALL getDouble(sal_Int32 columnIndex)204 getDouble( 205 sal_Int32 columnIndex ) 206 throw( com::sun::star::sdbc::SQLException, 207 com::sun::star::uno::RuntimeException ) 208 { 209 if( 0 <= m_nRow && m_nRow < sal::static_int_cast<sal_Int32>(m_aItems.size()) ) 210 return m_aItems[m_nRow]->getDouble( columnIndex ); 211 else 212 return double( 0 ); 213 } 214 215 virtual com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL getBytes(sal_Int32 columnIndex)216 getBytes( 217 sal_Int32 columnIndex ) 218 throw( com::sun::star::sdbc::SQLException, 219 com::sun::star::uno::RuntimeException ) 220 { 221 if( 0 <= m_nRow && m_nRow < sal::static_int_cast<sal_Int32>(m_aItems.size()) ) 222 return m_aItems[m_nRow]->getBytes( columnIndex ); 223 else 224 return com::sun::star::uno::Sequence< sal_Int8 >(); 225 } 226 227 virtual com::sun::star::util::Date SAL_CALL getDate(sal_Int32 columnIndex)228 getDate( 229 sal_Int32 columnIndex ) 230 throw( com::sun::star::sdbc::SQLException, 231 com::sun::star::uno::RuntimeException) 232 { 233 if( 0 <= m_nRow && m_nRow < sal::static_int_cast<sal_Int32>(m_aItems.size()) ) 234 return m_aItems[m_nRow]->getDate( columnIndex ); 235 else 236 return com::sun::star::util::Date(); 237 } 238 239 virtual com::sun::star::util::Time SAL_CALL getTime(sal_Int32 columnIndex)240 getTime( 241 sal_Int32 columnIndex ) 242 throw( com::sun::star::sdbc::SQLException, 243 com::sun::star::uno::RuntimeException) 244 { 245 if( 0 <= m_nRow && m_nRow < sal::static_int_cast<sal_Int32>(m_aItems.size()) ) 246 return m_aItems[m_nRow]->getTime( columnIndex ); 247 else 248 return com::sun::star::util::Time(); 249 } 250 251 virtual com::sun::star::util::DateTime SAL_CALL getTimestamp(sal_Int32 columnIndex)252 getTimestamp( 253 sal_Int32 columnIndex ) 254 throw( com::sun::star::sdbc::SQLException, 255 com::sun::star::uno::RuntimeException) 256 { 257 if( 0 <= m_nRow && m_nRow < sal::static_int_cast<sal_Int32>(m_aItems.size()) ) 258 return m_aItems[m_nRow]->getTimestamp( columnIndex ); 259 else 260 return com::sun::star::util::DateTime(); 261 } 262 263 264 virtual com::sun::star::uno::Reference< 265 com::sun::star::io::XInputStream > SAL_CALL getBinaryStream(sal_Int32 columnIndex)266 getBinaryStream( 267 sal_Int32 columnIndex ) 268 throw( com::sun::star::sdbc::SQLException, 269 com::sun::star::uno::RuntimeException) 270 { 271 if( 0 <= m_nRow && m_nRow < sal::static_int_cast<sal_Int32>(m_aItems.size()) ) 272 return m_aItems[m_nRow]->getBinaryStream( columnIndex ); 273 else 274 return com::sun::star::uno::Reference< 275 com::sun::star::io::XInputStream >(); 276 } 277 278 virtual com::sun::star::uno::Reference< 279 com::sun::star::io::XInputStream > SAL_CALL getCharacterStream(sal_Int32 columnIndex)280 getCharacterStream( 281 sal_Int32 columnIndex ) 282 throw( com::sun::star::sdbc::SQLException, 283 com::sun::star::uno::RuntimeException) 284 { 285 if( 0 <= m_nRow && m_nRow < sal::static_int_cast<sal_Int32>(m_aItems.size()) ) 286 return m_aItems[m_nRow]->getCharacterStream( columnIndex ); 287 else 288 return com::sun::star::uno::Reference< 289 com::sun::star::io::XInputStream >(); 290 } 291 292 virtual com::sun::star::uno::Any SAL_CALL getObject(sal_Int32 columnIndex,const com::sun::star::uno::Reference<com::sun::star::container::XNameAccess> & typeMap)293 getObject( 294 sal_Int32 columnIndex, 295 const com::sun::star::uno::Reference< 296 com::sun::star::container::XNameAccess >& typeMap ) 297 throw( com::sun::star::sdbc::SQLException, 298 com::sun::star::uno::RuntimeException) 299 { 300 if( 0 <= m_nRow && m_nRow < sal::static_int_cast<sal_Int32>(m_aItems.size()) ) 301 return m_aItems[m_nRow]->getObject( columnIndex,typeMap ); 302 else 303 return com::sun::star::uno::Any(); 304 } 305 306 virtual com::sun::star::uno::Reference< 307 com::sun::star::sdbc::XRef > SAL_CALL getRef(sal_Int32 columnIndex)308 getRef( 309 sal_Int32 columnIndex ) 310 throw( com::sun::star::sdbc::SQLException, 311 com::sun::star::uno::RuntimeException) 312 { 313 if( 0 <= m_nRow && m_nRow < sal::static_int_cast<sal_Int32>(m_aItems.size()) ) 314 return m_aItems[m_nRow]->getRef( columnIndex ); 315 else 316 return com::sun::star::uno::Reference< com::sun::star::sdbc::XRef >(); 317 } 318 319 virtual com::sun::star::uno::Reference< 320 com::sun::star::sdbc::XBlob > SAL_CALL getBlob(sal_Int32 columnIndex)321 getBlob( 322 sal_Int32 columnIndex ) 323 throw( com::sun::star::sdbc::SQLException, 324 com::sun::star::uno::RuntimeException) 325 { 326 if( 0 <= m_nRow && m_nRow < sal::static_int_cast<sal_Int32>(m_aItems.size()) ) 327 return m_aItems[m_nRow]->getBlob( columnIndex ); 328 else 329 return com::sun::star::uno::Reference< com::sun::star::sdbc::XBlob >(); 330 } 331 332 virtual com::sun::star::uno::Reference< 333 com::sun::star::sdbc::XClob > SAL_CALL getClob(sal_Int32 columnIndex)334 getClob( 335 sal_Int32 columnIndex ) 336 throw( com::sun::star::sdbc::SQLException, 337 com::sun::star::uno::RuntimeException) 338 { 339 if( 0 <= m_nRow && m_nRow < sal::static_int_cast<sal_Int32>(m_aItems.size()) ) 340 return m_aItems[m_nRow]->getClob( columnIndex ); 341 else 342 return com::sun::star::uno::Reference< 343 com::sun::star::sdbc::XClob >(); 344 } 345 346 virtual com::sun::star::uno::Reference< 347 com::sun::star::sdbc::XArray > SAL_CALL getArray(sal_Int32 columnIndex)348 getArray( 349 sal_Int32 columnIndex ) 350 throw( com::sun::star::sdbc::SQLException, 351 com::sun::star::uno::RuntimeException) 352 { 353 if( 0 <= m_nRow && m_nRow < sal::static_int_cast<sal_Int32>(m_aItems.size()) ) 354 return m_aItems[m_nRow]->getArray( columnIndex ); 355 else 356 return com::sun::star::uno::Reference< 357 com::sun::star::sdbc::XArray >(); 358 } 359 360 361 // XResultSet 362 363 virtual sal_Bool SAL_CALL 364 next( 365 void ) 366 throw( com::sun::star::sdbc::SQLException, 367 com::sun::star::uno::RuntimeException); 368 369 virtual sal_Bool SAL_CALL 370 isBeforeFirst( 371 void ) 372 throw( com::sun::star::sdbc::SQLException, 373 com::sun::star::uno::RuntimeException); 374 375 virtual sal_Bool SAL_CALL 376 isAfterLast( 377 void ) 378 throw( com::sun::star::sdbc::SQLException, 379 com::sun::star::uno::RuntimeException); 380 381 virtual sal_Bool SAL_CALL 382 isFirst( 383 void ) 384 throw( com::sun::star::sdbc::SQLException, 385 com::sun::star::uno::RuntimeException); 386 387 virtual sal_Bool SAL_CALL 388 isLast( 389 void ) 390 throw( com::sun::star::sdbc::SQLException, 391 com::sun::star::uno::RuntimeException); 392 393 virtual void SAL_CALL 394 beforeFirst( 395 void ) 396 throw( com::sun::star::sdbc::SQLException, 397 com::sun::star::uno::RuntimeException); 398 399 virtual void SAL_CALL 400 afterLast( 401 void ) 402 throw( com::sun::star::sdbc::SQLException, 403 com::sun::star::uno::RuntimeException); 404 405 virtual sal_Bool SAL_CALL 406 first( 407 void ) 408 throw( com::sun::star::sdbc::SQLException, 409 com::sun::star::uno::RuntimeException); 410 411 virtual sal_Bool SAL_CALL 412 last( 413 void ) 414 throw( com::sun::star::sdbc::SQLException, 415 com::sun::star::uno::RuntimeException); 416 417 virtual sal_Int32 SAL_CALL 418 getRow( 419 void ) 420 throw( com::sun::star::sdbc::SQLException, 421 com::sun::star::uno::RuntimeException); 422 423 virtual sal_Bool SAL_CALL 424 absolute( 425 sal_Int32 row ) 426 throw( com::sun::star::sdbc::SQLException, 427 com::sun::star::uno::RuntimeException); 428 429 virtual sal_Bool SAL_CALL 430 relative( 431 sal_Int32 rows ) 432 throw( com::sun::star::sdbc::SQLException, 433 com::sun::star::uno::RuntimeException); 434 435 virtual sal_Bool SAL_CALL 436 previous( 437 void ) 438 throw( com::sun::star::sdbc::SQLException, 439 com::sun::star::uno::RuntimeException); 440 441 virtual void SAL_CALL 442 refreshRow( 443 void ) 444 throw( com::sun::star::sdbc::SQLException, 445 com::sun::star::uno::RuntimeException); 446 447 virtual sal_Bool SAL_CALL 448 rowUpdated( 449 void ) 450 throw( com::sun::star::sdbc::SQLException, 451 com::sun::star::uno::RuntimeException); 452 453 virtual sal_Bool SAL_CALL 454 rowInserted( 455 void ) 456 throw( com::sun::star::sdbc::SQLException, 457 com::sun::star::uno::RuntimeException); 458 459 virtual sal_Bool SAL_CALL 460 rowDeleted( 461 void ) 462 throw( com::sun::star::sdbc::SQLException, 463 com::sun::star::uno::RuntimeException); 464 465 466 virtual com::sun::star::uno::Reference< 467 com::sun::star::uno::XInterface > SAL_CALL 468 getStatement( 469 void ) 470 throw( com::sun::star::sdbc::SQLException, 471 com::sun::star::uno::RuntimeException); 472 473 // XCloseable 474 475 virtual void SAL_CALL 476 close( 477 void ) 478 throw( com::sun::star::sdbc::SQLException, 479 com::sun::star::uno::RuntimeException); 480 481 // XContentAccess 482 483 virtual rtl::OUString SAL_CALL 484 queryContentIdentifierString( 485 void ) 486 throw( com::sun::star::uno::RuntimeException ); 487 488 virtual com::sun::star::uno::Reference< 489 com::sun::star::ucb::XContentIdentifier > SAL_CALL 490 queryContentIdentifier( 491 void ) 492 throw( com::sun::star::uno::RuntimeException ); 493 494 virtual com::sun::star::uno::Reference< 495 com::sun::star::ucb::XContent > SAL_CALL 496 queryContent( 497 void ) 498 throw( com::sun::star::uno::RuntimeException ); 499 500 // XResultSetMetaDataSupplier 501 virtual com::sun::star::uno::Reference< 502 com::sun::star::sdbc::XResultSetMetaData > SAL_CALL 503 getMetaData( 504 void ) 505 throw( com::sun::star::sdbc::SQLException, 506 com::sun::star::uno::RuntimeException); 507 508 509 // XPropertySet 510 virtual com::sun::star::uno::Reference< 511 com::sun::star::beans::XPropertySetInfo > SAL_CALL 512 getPropertySetInfo() 513 throw( com::sun::star::uno::RuntimeException); 514 515 virtual void SAL_CALL setPropertyValue( 516 const rtl::OUString& aPropertyName, 517 const com::sun::star::uno::Any& aValue ) 518 throw( com::sun::star::beans::UnknownPropertyException, 519 com::sun::star::beans::PropertyVetoException, 520 com::sun::star::lang::IllegalArgumentException, 521 com::sun::star::lang::WrappedTargetException, 522 com::sun::star::uno::RuntimeException); 523 524 virtual com::sun::star::uno::Any SAL_CALL 525 getPropertyValue( 526 const rtl::OUString& PropertyName ) 527 throw( com::sun::star::beans::UnknownPropertyException, 528 com::sun::star::lang::WrappedTargetException, 529 com::sun::star::uno::RuntimeException); 530 531 virtual void SAL_CALL 532 addPropertyChangeListener( 533 const rtl::OUString& aPropertyName, 534 const com::sun::star::uno::Reference< 535 com::sun::star::beans::XPropertyChangeListener >& xListener ) 536 throw( com::sun::star::beans::UnknownPropertyException, 537 com::sun::star::lang::WrappedTargetException, 538 com::sun::star::uno::RuntimeException); 539 540 virtual void SAL_CALL 541 removePropertyChangeListener( 542 const rtl::OUString& aPropertyName, 543 const com::sun::star::uno::Reference< 544 com::sun::star::beans::XPropertyChangeListener >& aListener ) 545 throw( com::sun::star::beans::UnknownPropertyException, 546 com::sun::star::lang::WrappedTargetException, 547 com::sun::star::uno::RuntimeException); 548 549 virtual void SAL_CALL 550 addVetoableChangeListener( 551 const rtl::OUString& PropertyName, 552 const com::sun::star::uno::Reference< 553 com::sun::star::beans::XVetoableChangeListener >& aListener ) 554 throw( com::sun::star::beans::UnknownPropertyException, 555 com::sun::star::lang::WrappedTargetException, 556 com::sun::star::uno::RuntimeException); 557 558 virtual void SAL_CALL removeVetoableChangeListener( 559 const rtl::OUString& PropertyName, 560 const com::sun::star::uno::Reference< 561 com::sun::star::beans::XVetoableChangeListener >& aListener ) 562 throw( com::sun::star::beans::UnknownPropertyException, 563 com::sun::star::lang::WrappedTargetException, 564 com::sun::star::uno::RuntimeException); 565 566 protected: 567 568 com::sun::star::uno::Reference< 569 com::sun::star::lang::XMultiServiceFactory > m_xMSF; 570 com::sun::star::uno::Reference< 571 com::sun::star::ucb::XContentProvider > m_xProvider; 572 sal_Int32 m_nRow; 573 sal_Bool m_nWasNull; 574 sal_Int32 m_nOpenMode; 575 sal_Bool m_bRowCountFinal; 576 577 typedef std::vector< com::sun::star::uno::Reference< 578 com::sun::star::ucb::XContentIdentifier > > IdentSet; 579 typedef std::vector< com::sun::star::uno::Reference< 580 com::sun::star::sdbc::XRow > > ItemSet; 581 typedef std::vector< rtl::OUString > 582 PathSet; 583 584 IdentSet m_aIdents; 585 ItemSet m_aItems; 586 PathSet m_aPath; 587 588 com::sun::star::uno::Sequence< 589 com::sun::star::beans::Property > m_sProperty; 590 com::sun::star::uno::Sequence< 591 com::sun::star::ucb::NumberedSortingInfo > m_sSortingInfo; 592 593 osl::Mutex m_aMutex; 594 cppu::OInterfaceContainerHelper* m_pDisposeEventListeners; 595 596 cppu::OInterfaceContainerHelper* m_pRowCountListeners; 597 cppu::OInterfaceContainerHelper* m_pIsFinalListeners; 598 }; 599 600 601 } // end namespace fileaccess 602 603 604 #endif 605