LibreOffice Module ucb (master)  1
filrset.cxx
Go to the documentation of this file.
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
3  * This file is part of the LibreOffice project.
4  *
5  * This Source Code Form is subject to the terms of the Mozilla Public
6  * License, v. 2.0. If a copy of the MPL was not distributed with this
7  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8  *
9  * This file incorporates work covered by the following license notice:
10  *
11  * Licensed to the Apache Software Foundation (ASF) under one or more
12  * contributor license agreements. See the NOTICE file distributed
13  * with this work for additional information regarding copyright
14  * ownership. The ASF licenses this file to you under the Apache
15  * License, Version 2.0 (the "License"); you may not use this file
16  * except in compliance with the License. You may obtain a copy of
17  * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18  */
19 
20 #include <sal/config.h>
21 #include <sal/log.hxx>
22 
23 #include <com/sun/star/sdbc/SQLException.hpp>
24 #include <com/sun/star/ucb/ListenerAlreadySetException.hpp>
25 #include <com/sun/star/ucb/ServiceNotFoundException.hpp>
26 #include <com/sun/star/ucb/WelcomeDynamicResultSetStruct.hpp>
27 #include "filid.hxx"
28 #include "filtask.hxx"
29 #include "filprp.hxx"
30 #include "filrset.hxx"
31 #include <com/sun/star/ucb/OpenMode.hpp>
32 #include "prov.hxx"
33 #include <com/sun/star/uno/Reference.h>
34 
35 #include <com/sun/star/beans/PropertyAttribute.hpp>
36 #include <com/sun/star/ucb/ListActionType.hpp>
37 #include <com/sun/star/ucb/XSourceInitialization.hpp>
38 #include <com/sun/star/ucb/CachedDynamicResultSetStubFactory.hpp>
40 
41 using namespace fileaccess;
42 using namespace com::sun::star;
43 
44 #if OSL_DEBUG_LEVEL > 0
45 #define THROW_WHERE SAL_WHERE
46 #else
47 #define THROW_WHERE ""
48 #endif
49 
51  const OUString& aUnqPath,
52  sal_Int32 OpenMode,
53  const uno::Sequence< beans::Property >& seq,
54  const uno::Sequence< ucb::NumberedSortingInfo >& seqSort )
55  : m_pMyShell( pMyShell )
56  , m_nRow( -1 )
57  , m_nWasNull ( false )
58  , m_nOpenMode( OpenMode )
59  , m_bRowCountFinal( false )
60  , m_aBaseDirectory( aUnqPath )
61  , m_aFolder( aUnqPath )
62  , m_sProperty( seq )
63  , m_sSortingInfo( seqSort )
64  , m_nErrorCode( TASKHANDLER_NO_ERROR )
65  , m_nMinorErrorCode( TASKHANDLER_NO_ERROR )
66 {
67  osl::FileBase::RC err = m_aFolder.open();
68  if( err != osl::FileBase::E_None )
69  {
70  m_nIsOpen = false;
71  m_aFolder.close();
72 
74  m_nMinorErrorCode = err;
75  }
76  else
77  m_nIsOpen = true;
78 }
79 
80 
82 {
83  if( m_nIsOpen )
84  m_aFolder.close();
85 }
86 
87 
88 void SAL_CALL
89 XResultSet_impl::disposing( const lang::EventObject& )
90 {
91  // To do, but what
92 }
93 
94 
95 void SAL_CALL
97  const uno::Reference< lang::XEventListener >& Listener )
98 {
99  osl::MutexGuard aGuard( m_aMutex );
100 
101  if ( ! m_pDisposeEventListeners )
104 
105  m_pDisposeEventListeners->addInterface( Listener );
106 }
107 
108 
109 void SAL_CALL
111  const uno::Reference< lang::XEventListener >& Listener )
112 {
113  osl::MutexGuard aGuard( m_aMutex );
114 
116  m_pDisposeEventListeners->removeInterface( Listener );
117 }
118 
119 
120 void SAL_CALL
122 {
123  osl::MutexGuard aGuard( m_aMutex );
124 
125  lang::EventObject aEvt;
126  aEvt.Source = static_cast< lang::XComponent * >( this );
127 
129  {
130  m_pDisposeEventListeners->disposeAndClear( aEvt );
131  }
132  if( m_pRowCountListeners && m_pRowCountListeners->getLength() )
133  {
134  m_pRowCountListeners->disposeAndClear( aEvt );
135  }
136  if( m_pIsFinalListeners && m_pIsFinalListeners->getLength() )
137  {
138  m_pIsFinalListeners->disposeAndClear( aEvt );
139  }
140 }
141 
142 
144 {
145  sal_Int32 aOldValue,aNewValue;
146  std::vector< uno::Reference< beans::XPropertyChangeListener > > seq;
147  {
148  osl::MutexGuard aGuard( m_aMutex );
150  seq = m_pRowCountListeners->getElements();
151  aNewValue = m_aItems.size();
152  aOldValue = aNewValue-1;
153  }
154  beans::PropertyChangeEvent aEv;
155  aEv.PropertyName = "RowCount";
156  aEv.Further = false;
157  aEv.PropertyHandle = -1;
158  aEv.OldValue <<= aOldValue;
159  aEv.NewValue <<= aNewValue;
160  for( const auto& listener : seq )
161  listener->propertyChange( aEv );
162 }
163 
164 
166 {
167  std::vector< uno::Reference< beans::XPropertyChangeListener > > seq;
168  {
169  osl::MutexGuard aGuard( m_aMutex );
170  if( m_pIsFinalListeners )
171  seq = m_pIsFinalListeners->getElements();
172  m_bRowCountFinal = true;
173  }
174  beans::PropertyChangeEvent aEv;
175  aEv.PropertyName = "IsRowCountFinal";
176  aEv.Further = false;
177  aEv.PropertyHandle = -1;
178  aEv.OldValue <<= false;
179  aEv.NewValue <<= true;
180  for( const auto& listener : seq )
181  listener->propertyChange( aEv );
182 }
183 
184 
185 bool
187 {
188  if( ! m_nIsOpen )
189  return false;
190 
191  osl::FileBase::RC err;
192  bool IsRegular;
193  OUString aUnqPath;
194  osl::DirectoryItem aDirIte;
195  uno::Reference< sdbc::XRow > aRow;
196 
197  while( true )
198  {
199  err = m_aFolder.getNextItem( aDirIte );
200 
201  if( err == osl::FileBase::E_NOENT || err == osl::FileBase::E_INVAL )
202  {
203  m_aFolder.close();
204  isFinalChanged();
205  m_nIsOpen = false;
206  return m_nIsOpen;
207  }
208  else if( err == osl::FileBase::E_None )
209  {
210  if (!m_pMyShell->getv( m_sProperty, aDirIte, aUnqPath, IsRegular, aRow ))
211  {
212  SAL_WARN(
213  "ucb.ucp.file",
214  "getting dir item in <" << m_aBaseDirectory << "> failed");
215  continue;
216  }
217 
218  if( m_nOpenMode == ucb::OpenMode::DOCUMENTS && IsRegular )
219  {
220  osl::MutexGuard aGuard( m_aMutex );
221  m_aItems.push_back( aRow );
222  m_aIdents.emplace_back( );
223  m_aUnqPath.push_back( aUnqPath );
224  rowCountChanged();
225  return true;
226 
227  }
228  else if( m_nOpenMode == ucb::OpenMode::DOCUMENTS && ! IsRegular )
229  {
230  continue;
231  }
232  else if( m_nOpenMode == ucb::OpenMode::FOLDERS && ! IsRegular )
233  {
234  osl::MutexGuard aGuard( m_aMutex );
235  m_aItems.push_back( aRow );
236  m_aIdents.emplace_back( );
237  m_aUnqPath.push_back( aUnqPath );
238  rowCountChanged();
239  return true;
240  }
241  else if( m_nOpenMode == ucb::OpenMode::FOLDERS && IsRegular )
242  {
243  continue;
244  }
245  else
246  {
247  osl::MutexGuard aGuard( m_aMutex );
248  m_aItems.push_back( aRow );
249  m_aIdents.emplace_back( );
250  m_aUnqPath.push_back( aUnqPath );
251  rowCountChanged();
252  return true;
253  }
254  }
255  else // error fetching anything
256  {
257  throw sdbc::SQLException( THROW_WHERE, uno::Reference< uno::XInterface >(), OUString(), 0, uno::Any() );
258  }
259  }
260 }
261 
262 
263 sal_Bool SAL_CALL
265 {
266  bool test;
267  if( ++m_nRow < sal::static_int_cast<sal_Int32>(m_aItems.size()) ) test = true;
268  else
269  test = OneMore();
270  return test;
271 }
272 
273 
274 sal_Bool SAL_CALL
276 {
277  return m_nRow == -1;
278 }
279 
280 
281 sal_Bool SAL_CALL
283 {
284  return m_nRow >= sal::static_int_cast<sal_Int32>(m_aItems.size()); // Cannot happen, if m_aFolder.isOpen()
285 }
286 
287 
288 sal_Bool SAL_CALL
290 {
291  return m_nRow == 0;
292 }
293 
294 
295 sal_Bool SAL_CALL
297 {
298  if( m_nRow == sal::static_int_cast<sal_Int32>(m_aItems.size()) - 1 )
299  return ! OneMore();
300  else
301  return false;
302 }
303 
304 
305 void SAL_CALL
307 {
308  m_nRow = -1;
309 }
310 
311 
312 void SAL_CALL
314 {
315  m_nRow = sal::static_int_cast<sal_Int32>(m_aItems.size());
316  while( OneMore() )
317  ++m_nRow;
318 }
319 
320 
321 sal_Bool SAL_CALL
323 {
324  m_nRow = -1;
325  return next();
326 }
327 
328 
329 sal_Bool SAL_CALL
331 {
332  m_nRow = sal::static_int_cast<sal_Int32>(m_aItems.size()) - 1;
333  while( OneMore() )
334  ++m_nRow;
335  return true;
336 }
337 
338 
339 sal_Int32 SAL_CALL
341 {
342  // Test, whether behind last row
343  if( -1 == m_nRow || m_nRow >= sal::static_int_cast<sal_Int32>(m_aItems.size()) )
344  return 0;
345  else
346  return m_nRow+1;
347 }
348 
349 
350 sal_Bool SAL_CALL XResultSet_impl::absolute( sal_Int32 row )
351 {
352  if( row >= 0 )
353  {
354  m_nRow = row - 1;
355  if( row >= sal::static_int_cast<sal_Int32>(m_aItems.size()) )
356  while( row-- && OneMore() )
357  ;
358  }
359  else
360  {
361  last();
362  m_nRow += ( row + 1 );
363  if( m_nRow < -1 )
364  m_nRow = -1;
365  }
366 
367  return 0<= m_nRow && m_nRow < sal::static_int_cast<sal_Int32>(m_aItems.size());
368 }
369 
370 
371 sal_Bool SAL_CALL
373 {
374  if( isAfterLast() || isBeforeFirst() )
375  throw sdbc::SQLException( THROW_WHERE, uno::Reference< uno::XInterface >(), OUString(), 0, uno::Any() );
376  if( row > 0 )
377  while( row-- ) next();
378  else if( row < 0 )
379  while( row++ && m_nRow > - 1 ) previous();
380 
381  return 0 <= m_nRow && m_nRow < sal::static_int_cast<sal_Int32>(m_aItems.size());
382 }
383 
384 
385 sal_Bool SAL_CALL
387 {
388  if( m_nRow > sal::static_int_cast<sal_Int32>(m_aItems.size()) )
389  m_nRow = sal::static_int_cast<sal_Int32>(m_aItems.size()); // Correct Handling of afterLast
390  if( 0 <= m_nRow ) -- m_nRow;
391 
392  return 0 <= m_nRow && m_nRow < sal::static_int_cast<sal_Int32>(m_aItems.size());
393 }
394 
395 
396 void SAL_CALL
398 {
399  // get the row from the filesystem
400 }
401 
402 
403 sal_Bool SAL_CALL
405 {
406  return false;
407 }
408 
409 sal_Bool SAL_CALL
411 {
412  return false;
413 }
414 
415 sal_Bool SAL_CALL
417 {
418  return false;
419 }
420 
421 
422 uno::Reference< uno::XInterface > SAL_CALL
424 {
425  return uno::Reference< uno::XInterface >();
426 }
427 
428 
429 // XCloseable
430 
431 void SAL_CALL
433 {
434  if( m_nIsOpen )
435  {
436  m_aFolder.close();
437  isFinalChanged();
438  osl::MutexGuard aGuard( m_aMutex );
439  m_nIsOpen = false;
440  }
441 }
442 
443 
444 OUString SAL_CALL
446 {
447  uno::Reference< ucb::XContentIdentifier > xContentId
449 
450  if( xContentId.is() )
451  return xContentId->getContentIdentifier();
452  else
453  return OUString();
454 }
455 
456 
457 uno::Reference< ucb::XContentIdentifier > SAL_CALL
459 {
460  if( 0 <= m_nRow && m_nRow < sal::static_int_cast<sal_Int32>(m_aItems.size()) )
461  {
462  if( ! m_aIdents[m_nRow].is() )
463  {
465  }
466  return m_aIdents[m_nRow];
467  }
468  return uno::Reference< ucb::XContentIdentifier >();
469 }
470 
471 
472 uno::Reference< ucb::XContent > SAL_CALL
474 {
475  if( 0 <= m_nRow && m_nRow < sal::static_int_cast<sal_Int32>(m_aItems.size()) )
477  else
478  return uno::Reference< ucb::XContent >();
479 }
480 
481 
482 // XDynamicResultSet
483 
484 
485 // virtual
486 uno::Reference< sdbc::XResultSet > SAL_CALL
488 {
489  osl::MutexGuard aGuard( m_aMutex );
490 
491  if ( m_xListener.is() )
492  throw ucb::ListenerAlreadySetException( THROW_WHERE );
493 
494  return uno::Reference< sdbc::XResultSet >( this );
495 }
496 
497 
498 // virtual
499 void SAL_CALL
501  const uno::Reference< ucb::XDynamicResultSetListener >& Listener )
502 {
503  osl::ClearableMutexGuard aGuard( m_aMutex );
504 
505  if ( m_xListener.is() )
506  throw ucb::ListenerAlreadySetException( THROW_WHERE );
507 
508  m_xListener = Listener;
509 
510 
511  // Create "welcome event" and send it to listener.
512 
513 
514  // Note: We only have the implementation for a static result set at the
515  // moment (src590). The dynamic result sets passed to the listener
516  // are a fake. This implementation will never call "notify" at the
517  // listener to propagate any changes!!!
518 
519  uno::Any aInfo;
520  aInfo <<= ucb::WelcomeDynamicResultSetStruct( this, /* "old" */
521  this /* "new" */ );
522 
523  uno::Sequence< ucb::ListAction > aActions( 1 );
524  aActions.getArray()[ 0 ] = ucb::ListAction( 0, // Position; not used
525  0, // Count; not used
526  ucb::ListActionType::WELCOME,
527  aInfo );
528  aGuard.clear();
529 
530  Listener->notify(
531  ucb::ListEvent(
532  static_cast< cppu::OWeakObject * >( this ), aActions ) );
533 }
534 
535 
536 // virtual
537 void SAL_CALL
539  const uno::Reference< ucb::XDynamicResultSet > & xCache )
540 {
541  if( m_xListener.is() )
542  throw ucb::ListenerAlreadySetException( THROW_WHERE );
543 
544  uno::Reference< ucb::XSourceInitialization > xTarget(
545  xCache, uno::UNO_QUERY );
546  if( xTarget.is() && m_pMyShell->m_xContext.is() )
547  {
548  uno::Reference< ucb::XCachedDynamicResultSetStubFactory > xStubFactory;
549  try
550  {
551  xStubFactory
552  = ucb::CachedDynamicResultSetStubFactory::create(
554  }
555  catch ( uno::Exception const & )
556  {
557  }
558 
559  if( xStubFactory.is() )
560  {
561  xStubFactory->connectToCache(
562  this, xCache,m_sSortingInfo, nullptr );
563  return;
564  }
565  }
566  throw ucb::ServiceNotFoundException( THROW_WHERE );
567 }
568 
569 
570 // virtual
571 sal_Int16 SAL_CALL
573 {
574  // Never set ucb::ContentResultSetCapability::SORTED
575  // - Underlying content cannot provide sorted data...
576  return 0;
577 }
578 
579 // XResultSetMetaDataSupplier
580 uno::Reference< sdbc::XResultSetMetaData > SAL_CALL
582 {
583  auto pProp = std::find_if(std::cbegin(m_sProperty), std::cend(m_sProperty),
584  [](const beans::Property& rProp) { return rProp.Name == "Title"; });
585  if (pProp != std::cend(m_sProperty))
586  {
587  std::vector< ::ucbhelper::ResultSetColumnData >
588  aColumnData( m_sProperty.getLength() );
589  auto n = std::distance(std::cbegin(m_sProperty), pProp);
590  // @@@ #82177# - Determine correct value!
591  aColumnData[ n ].isCaseSensitive = false;
592 
593  return new ::ucbhelper::ResultSetMetaData(
595  m_sProperty,
596  std::move(aColumnData) );
597  }
598 
599  return new ::ucbhelper::ResultSetMetaData( m_pMyShell->m_xContext, m_sProperty );
600 }
601 
602 
603 // XPropertySet
604 uno::Reference< beans::XPropertySetInfo > SAL_CALL
606 {
607 
608  uno::Sequence< beans::Property > seq
609  {
610  { "RowCount", -1, cppu::UnoType<sal_Int32>::get(), beans::PropertyAttribute::READONLY },
611  { "IsRowCountFinal", -1, cppu::UnoType<sal_Bool>::get(), beans::PropertyAttribute::READONLY }
612  };
613 
614  return new XPropertySetInfo_impl( m_pMyShell, seq );
615 }
616 
617 
619  const OUString& aPropertyName, const uno::Any& )
620 {
621  if( aPropertyName == "IsRowCountFinal" ||
622  aPropertyName == "RowCount" )
623  return;
624  throw beans::UnknownPropertyException( aPropertyName );
625 }
626 
627 
629  const OUString& PropertyName )
630 {
631  if( PropertyName == "IsRowCountFinal" )
632  {
633  return uno::Any(m_bRowCountFinal);
634  }
635  else if ( PropertyName == "RowCount" )
636  {
637  sal_Int32 count = sal::static_int_cast<sal_Int32>(m_aItems.size());
638  return uno::Any(count);
639  }
640  else
641  throw beans::UnknownPropertyException( PropertyName );
642 }
643 
644 
646  const OUString& aPropertyName,
647  const uno::Reference< beans::XPropertyChangeListener >& xListener )
648 {
649  if( aPropertyName == "IsRowCountFinal" )
650  {
651  osl::MutexGuard aGuard( m_aMutex );
652  if ( ! m_pIsFinalListeners )
653  m_pIsFinalListeners.reset(
655 
656  m_pIsFinalListeners->addInterface( xListener );
657  }
658  else if ( aPropertyName == "RowCount" )
659  {
660  osl::MutexGuard aGuard( m_aMutex );
661  if ( ! m_pRowCountListeners )
662  m_pRowCountListeners.reset(
664  m_pRowCountListeners->addInterface( xListener );
665  }
666  else
667  throw beans::UnknownPropertyException( aPropertyName );
668 }
669 
670 
672  const OUString& aPropertyName,
673  const uno::Reference< beans::XPropertyChangeListener >& aListener )
674 {
675  if( aPropertyName == "IsRowCountFinal" &&
677  {
678  osl::MutexGuard aGuard( m_aMutex );
679  m_pIsFinalListeners->removeInterface( aListener );
680  }
681  else if ( aPropertyName == "RowCount" &&
683  {
684  osl::MutexGuard aGuard( m_aMutex );
685 
686  m_pRowCountListeners->removeInterface( aListener );
687  }
688  else
689  throw beans::UnknownPropertyException( aPropertyName );
690 }
691 
693  const OUString&,
694  const uno::Reference< beans::XVetoableChangeListener >& )
695 {
696 }
697 
698 
700  const OUString&,
701  const uno::Reference< beans::XVetoableChangeListener >& )
702 {
703 }
704 
705 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
virtual OUString SAL_CALL queryContentIdentifierString() override
Definition: filrset.cxx:445
virtual sal_Bool SAL_CALL rowDeleted() override
Definition: filrset.cxx:416
virtual sal_Bool SAL_CALL first() override
Definition: filrset.cxx:322
#define THROW_WHERE
Definition: filrset.cxx:45
virtual void SAL_CALL setPropertyValue(const OUString &aPropertyName, const css::uno::Any &aValue) override
Definition: filrset.cxx:618
css::uno::Reference< css::ucb::XDynamicResultSetListener > m_xListener
Definition: filrset.hxx:416
virtual sal_Bool SAL_CALL rowUpdated() override
Definition: filrset.cxx:404
virtual void SAL_CALL addPropertyChangeListener(const OUString &aPropertyName, const css::uno::Reference< css::beans::XPropertyChangeListener > &xListener) override
Definition: filrset.cxx:645
Reference< XInterface > xTarget
virtual css::uno::Reference< css::sdbc::XResultSetMetaData > SAL_CALL getMetaData() override
Definition: filrset.cxx:581
sal_Int64 n
virtual void SAL_CALL close() override
Definition: filrset.cxx:432
virtual sal_Int32 SAL_CALL getRow() override
Definition: filrset.cxx:340
virtual css::uno::Reference< css::uno::XInterface > SAL_CALL getStatement() override
Definition: filrset.cxx:423
virtual css::uno::Reference< css::ucb::XContent > SAL_CALL queryContent() override
Definition: filrset.cxx:473
virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getStaticResultSet() override
Definition: filrset.cxx:487
virtual sal_Int16 SAL_CALL getCapabilities() override
Definition: filrset.cxx:572
virtual css::uno::Reference< css::ucb::XContentIdentifier > SAL_CALL queryContentIdentifier() override
Definition: filrset.cxx:458
virtual void SAL_CALL disposing(const css::lang::EventObject &Source) override
Definition: filrset.cxx:89
XResultSet_impl(TaskManager *pMyShell, const OUString &aUnqPath, sal_Int32 OpenMode, const css::uno::Sequence< css::beans::Property > &seq, const css::uno::Sequence< css::ucb::NumberedSortingInfo > &seqSort)
Definition: filrset.cxx:50
virtual sal_Bool SAL_CALL next() override
Definition: filrset.cxx:264
osl::Directory m_aFolder
Definition: filrset.hxx:406
FileProvider * m_pProvider
Definition: filtask.hxx:483
std::unique_ptr< comphelper::OInterfaceContainerHelper3< css::lang::XEventListener > > m_pDisposeEventListeners
Definition: filrset.hxx:412
virtual sal_Bool SAL_CALL isLast() override
Definition: filrset.cxx:296
std::unique_ptr< comphelper::OInterfaceContainerHelper3< css::beans::XPropertyChangeListener > > m_pRowCountListeners
Definition: filrset.hxx:413
css::uno::Sequence< css::ucb::NumberedSortingInfo > m_sSortingInfo
Definition: filrset.hxx:408
virtual void SAL_CALL addEventListener(const css::uno::Reference< css::lang::XEventListener > &xListener) override
Definition: filrset.cxx:96
std::unique_ptr< comphelper::OInterfaceContainerHelper3< css::beans::XPropertyChangeListener > > m_pIsFinalListeners
Definition: filrset.hxx:414
css::uno::Reference< css::uno::XComponentContext > m_xContext
Definition: filtask.hxx:484
virtual void SAL_CALL dispose() override
Definition: filrset.cxx:121
#define TASKHANDLING_OPEN_FOR_DIRECTORYLISTING
Definition: filerror.hxx:48
err
virtual void SAL_CALL setListener(const css::uno::Reference< css::ucb::XDynamicResultSetListener > &Listener) override
Definition: filrset.cxx:500
virtual void SAL_CALL beforeFirst() override
Definition: filrset.cxx:306
virtual sal_Bool SAL_CALL isBeforeFirst() override
Definition: filrset.cxx:275
unsigned char sal_Bool
TaskManager * m_pMyShell
Definition: filrset.hxx:391
virtual css::uno::Reference< css::ucb::XContent > SAL_CALL queryContent(const css::uno::Reference< css::ucb::XContentIdentifier > &Identifier) override
Definition: prov.cxx:112
css::uno::Type const & get()
virtual void SAL_CALL removeVetoableChangeListener(const OUString &PropertyName, const css::uno::Reference< css::beans::XVetoableChangeListener > &aListener) override
Definition: filrset.cxx:699
virtual css::uno::Reference< css::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo() override
Definition: filrset.cxx:605
virtual ~XResultSet_impl() override
Definition: filrset.cxx:81
virtual sal_Bool SAL_CALL previous() override
Definition: filrset.cxx:386
virtual void SAL_CALL removeEventListener(const css::uno::Reference< css::lang::XEventListener > &aListener) override
Definition: filrset.cxx:110
virtual void SAL_CALL connectToCache(const css::uno::Reference< css::ucb::XDynamicResultSet > &xCache) override
Definition: filrset.cxx:538
virtual void SAL_CALL afterLast() override
Definition: filrset.cxx:313
const OUString m_aBaseDirectory
Definition: filrset.hxx:404
css::uno::Reference< css::sdbc::XRow > getv(sal_Int32 CommandId, const OUString &aUnqPath, const css::uno::Sequence< css::beans::Property > &properties)
Reads the values of the properties belonging to fileURL aUnqPath; Returns an XRow object containing t...
virtual void SAL_CALL refreshRow() override
Definition: filrset.cxx:397
virtual sal_Bool SAL_CALL relative(sal_Int32 rows) override
Definition: filrset.cxx:372
virtual sal_Bool SAL_CALL isAfterLast() override
Definition: filrset.cxx:282
virtual void SAL_CALL removePropertyChangeListener(const OUString &aPropertyName, const css::uno::Reference< css::beans::XPropertyChangeListener > &aListener) override
Definition: filrset.cxx:671
virtual sal_Bool SAL_CALL last() override
Definition: filrset.cxx:330
std::vector< OUString > m_aUnqPath
Definition: filrset.hxx:403
#define SAL_WARN(area, stream)
css::uno::Sequence< css::beans::Property > m_sProperty
Definition: filrset.hxx:407
virtual void SAL_CALL addVetoableChangeListener(const OUString &PropertyName, const css::uno::Reference< css::beans::XVetoableChangeListener > &aListener) override
Definition: filrset.cxx:692
virtual css::uno::Any SAL_CALL getPropertyValue(const OUString &PropertyName) override
Definition: filrset.cxx:628
virtual sal_Bool SAL_CALL isFirst() override
Definition: filrset.cxx:289
#define TASKHANDLER_NO_ERROR
Definition: filerror.hxx:26
virtual sal_Bool SAL_CALL rowInserted() override
Definition: filrset.cxx:410
osl::Mutex m_aEventListenerMutex
Definition: filrset.hxx:411
virtual sal_Bool SAL_CALL absolute(sal_Int32 row) override
Definition: filrset.cxx:350
bool m_bDetectedRangeSegmentation false