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< uno::XInterface > > 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& r : seq )
161  {
162  uno::Reference< beans::XPropertyChangeListener > listener(
163  r, uno::UNO_QUERY );
164  if( listener.is() )
165  listener->propertyChange( aEv );
166  }
167 }
168 
169 
171 {
172  std::vector< uno::Reference< XInterface > > seq;
173  {
174  osl::MutexGuard aGuard( m_aMutex );
175  if( m_pIsFinalListeners )
176  seq = m_pIsFinalListeners->getElements();
177  m_bRowCountFinal = true;
178  }
179  beans::PropertyChangeEvent aEv;
180  aEv.PropertyName = "IsRowCountFinal";
181  aEv.Further = false;
182  aEv.PropertyHandle = -1;
183  aEv.OldValue <<= false;
184  aEv.NewValue <<= true;
185  for( const auto& r : seq )
186  {
187  uno::Reference< beans::XPropertyChangeListener > listener(
188  r, uno::UNO_QUERY );
189  if( listener.is() )
190  listener->propertyChange( aEv );
191  }
192 }
193 
194 
195 bool
197 {
198  if( ! m_nIsOpen )
199  return false;
200 
201  osl::FileBase::RC err;
202  bool IsRegular;
203  OUString aUnqPath;
204  osl::DirectoryItem aDirIte;
205  uno::Reference< sdbc::XRow > aRow;
206 
207  while( true )
208  {
209  err = m_aFolder.getNextItem( aDirIte );
210 
211  if( err == osl::FileBase::E_NOENT || err == osl::FileBase::E_INVAL )
212  {
213  m_aFolder.close();
214  isFinalChanged();
215  m_nIsOpen = false;
216  return m_nIsOpen;
217  }
218  else if( err == osl::FileBase::E_None )
219  {
220  if (!m_pMyShell->getv( m_sProperty, aDirIte, aUnqPath, IsRegular, aRow ))
221  {
222  SAL_WARN(
223  "ucb.ucp.file",
224  "getting dir item in <" << m_aBaseDirectory << "> failed");
225  continue;
226  }
227 
228  if( m_nOpenMode == ucb::OpenMode::DOCUMENTS && IsRegular )
229  {
230  osl::MutexGuard aGuard( m_aMutex );
231  m_aItems.push_back( aRow );
232  m_aIdents.emplace_back( );
233  m_aUnqPath.push_back( aUnqPath );
234  rowCountChanged();
235  return true;
236 
237  }
238  else if( m_nOpenMode == ucb::OpenMode::DOCUMENTS && ! IsRegular )
239  {
240  continue;
241  }
242  else if( m_nOpenMode == ucb::OpenMode::FOLDERS && ! IsRegular )
243  {
244  osl::MutexGuard aGuard( m_aMutex );
245  m_aItems.push_back( aRow );
246  m_aIdents.emplace_back( );
247  m_aUnqPath.push_back( aUnqPath );
248  rowCountChanged();
249  return true;
250  }
251  else if( m_nOpenMode == ucb::OpenMode::FOLDERS && IsRegular )
252  {
253  continue;
254  }
255  else
256  {
257  osl::MutexGuard aGuard( m_aMutex );
258  m_aItems.push_back( aRow );
259  m_aIdents.emplace_back( );
260  m_aUnqPath.push_back( aUnqPath );
261  rowCountChanged();
262  return true;
263  }
264  }
265  else // error fetching anything
266  {
267  throw sdbc::SQLException( THROW_WHERE, uno::Reference< uno::XInterface >(), OUString(), 0, uno::Any() );
268  }
269  }
270 }
271 
272 
273 sal_Bool SAL_CALL
275 {
276  bool test;
277  if( ++m_nRow < sal::static_int_cast<sal_Int32>(m_aItems.size()) ) test = true;
278  else
279  test = OneMore();
280  return test;
281 }
282 
283 
284 sal_Bool SAL_CALL
286 {
287  return m_nRow == -1;
288 }
289 
290 
291 sal_Bool SAL_CALL
293 {
294  return m_nRow >= sal::static_int_cast<sal_Int32>(m_aItems.size()); // Cannot happen, if m_aFolder.isOpen()
295 }
296 
297 
298 sal_Bool SAL_CALL
300 {
301  return m_nRow == 0;
302 }
303 
304 
305 sal_Bool SAL_CALL
307 {
308  if( m_nRow == sal::static_int_cast<sal_Int32>(m_aItems.size()) - 1 )
309  return ! OneMore();
310  else
311  return false;
312 }
313 
314 
315 void SAL_CALL
317 {
318  m_nRow = -1;
319 }
320 
321 
322 void SAL_CALL
324 {
325  m_nRow = sal::static_int_cast<sal_Int32>(m_aItems.size());
326  while( OneMore() )
327  ++m_nRow;
328 }
329 
330 
331 sal_Bool SAL_CALL
333 {
334  m_nRow = -1;
335  return next();
336 }
337 
338 
339 sal_Bool SAL_CALL
341 {
342  m_nRow = sal::static_int_cast<sal_Int32>(m_aItems.size()) - 1;
343  while( OneMore() )
344  ++m_nRow;
345  return true;
346 }
347 
348 
349 sal_Int32 SAL_CALL
351 {
352  // Test, whether behind last row
353  if( -1 == m_nRow || m_nRow >= sal::static_int_cast<sal_Int32>(m_aItems.size()) )
354  return 0;
355  else
356  return m_nRow+1;
357 }
358 
359 
360 sal_Bool SAL_CALL XResultSet_impl::absolute( sal_Int32 row )
361 {
362  if( row >= 0 )
363  {
364  m_nRow = row - 1;
365  if( row >= sal::static_int_cast<sal_Int32>(m_aItems.size()) )
366  while( row-- && OneMore() )
367  ;
368  }
369  else
370  {
371  last();
372  m_nRow += ( row + 1 );
373  if( m_nRow < -1 )
374  m_nRow = -1;
375  }
376 
377  return 0<= m_nRow && m_nRow < sal::static_int_cast<sal_Int32>(m_aItems.size());
378 }
379 
380 
381 sal_Bool SAL_CALL
383 {
384  if( isAfterLast() || isBeforeFirst() )
385  throw sdbc::SQLException( THROW_WHERE, uno::Reference< uno::XInterface >(), OUString(), 0, uno::Any() );
386  if( row > 0 )
387  while( row-- ) next();
388  else if( row < 0 )
389  while( row++ && m_nRow > - 1 ) previous();
390 
391  return 0 <= m_nRow && m_nRow < sal::static_int_cast<sal_Int32>(m_aItems.size());
392 }
393 
394 
395 sal_Bool SAL_CALL
397 {
398  if( m_nRow > sal::static_int_cast<sal_Int32>(m_aItems.size()) )
399  m_nRow = sal::static_int_cast<sal_Int32>(m_aItems.size()); // Correct Handling of afterLast
400  if( 0 <= m_nRow ) -- m_nRow;
401 
402  return 0 <= m_nRow && m_nRow < sal::static_int_cast<sal_Int32>(m_aItems.size());
403 }
404 
405 
406 void SAL_CALL
408 {
409  // get the row from the filesystem
410 }
411 
412 
413 sal_Bool SAL_CALL
415 {
416  return false;
417 }
418 
419 sal_Bool SAL_CALL
421 {
422  return false;
423 }
424 
425 sal_Bool SAL_CALL
427 {
428  return false;
429 }
430 
431 
432 uno::Reference< uno::XInterface > SAL_CALL
434 {
435  return uno::Reference< uno::XInterface >();
436 }
437 
438 
439 // XCloseable
440 
441 void SAL_CALL
443 {
444  if( m_nIsOpen )
445  {
446  m_aFolder.close();
447  isFinalChanged();
448  osl::MutexGuard aGuard( m_aMutex );
449  m_nIsOpen = false;
450  }
451 }
452 
453 
454 OUString SAL_CALL
456 {
457  uno::Reference< ucb::XContentIdentifier > xContentId
459 
460  if( xContentId.is() )
461  return xContentId->getContentIdentifier();
462  else
463  return OUString();
464 }
465 
466 
467 uno::Reference< ucb::XContentIdentifier > SAL_CALL
469 {
470  if( 0 <= m_nRow && m_nRow < sal::static_int_cast<sal_Int32>(m_aItems.size()) )
471  {
472  if( ! m_aIdents[m_nRow].is() )
473  {
475  }
476  return m_aIdents[m_nRow];
477  }
478  return uno::Reference< ucb::XContentIdentifier >();
479 }
480 
481 
482 uno::Reference< ucb::XContent > SAL_CALL
484 {
485  if( 0 <= m_nRow && m_nRow < sal::static_int_cast<sal_Int32>(m_aItems.size()) )
487  else
488  return uno::Reference< ucb::XContent >();
489 }
490 
491 
492 // XDynamicResultSet
493 
494 
495 // virtual
496 uno::Reference< sdbc::XResultSet > SAL_CALL
498 {
499  osl::MutexGuard aGuard( m_aMutex );
500 
501  if ( m_xListener.is() )
502  throw ucb::ListenerAlreadySetException( THROW_WHERE );
503 
504  return uno::Reference< sdbc::XResultSet >( this );
505 }
506 
507 
508 // virtual
509 void SAL_CALL
511  const uno::Reference< ucb::XDynamicResultSetListener >& Listener )
512 {
513  osl::ClearableMutexGuard aGuard( m_aMutex );
514 
515  if ( m_xListener.is() )
516  throw ucb::ListenerAlreadySetException( THROW_WHERE );
517 
518  m_xListener = Listener;
519 
520 
521  // Create "welcome event" and send it to listener.
522 
523 
524  // Note: We only have the implementation for a static result set at the
525  // moment (src590). The dynamic result sets passed to the listener
526  // are a fake. This implementation will never call "notify" at the
527  // listener to propagate any changes!!!
528 
529  uno::Any aInfo;
530  aInfo <<= ucb::WelcomeDynamicResultSetStruct( this, /* "old" */
531  this /* "new" */ );
532 
533  uno::Sequence< ucb::ListAction > aActions( 1 );
534  aActions.getArray()[ 0 ] = ucb::ListAction( 0, // Position; not used
535  0, // Count; not used
536  ucb::ListActionType::WELCOME,
537  aInfo );
538  aGuard.clear();
539 
540  Listener->notify(
541  ucb::ListEvent(
542  static_cast< cppu::OWeakObject * >( this ), aActions ) );
543 }
544 
545 
546 // virtual
547 void SAL_CALL
549  const uno::Reference< ucb::XDynamicResultSet > & xCache )
550 {
551  if( m_xListener.is() )
552  throw ucb::ListenerAlreadySetException( THROW_WHERE );
553 
554  uno::Reference< ucb::XSourceInitialization > xTarget(
555  xCache, uno::UNO_QUERY );
556  if( xTarget.is() && m_pMyShell->m_xContext.is() )
557  {
558  uno::Reference< ucb::XCachedDynamicResultSetStubFactory > xStubFactory;
559  try
560  {
561  xStubFactory
562  = ucb::CachedDynamicResultSetStubFactory::create(
564  }
565  catch ( uno::Exception const & )
566  {
567  }
568 
569  if( xStubFactory.is() )
570  {
571  xStubFactory->connectToCache(
572  this, xCache,m_sSortingInfo, nullptr );
573  return;
574  }
575  }
576  throw ucb::ServiceNotFoundException( THROW_WHERE );
577 }
578 
579 
580 // virtual
581 sal_Int16 SAL_CALL
583 {
584  // Never set ucb::ContentResultSetCapability::SORTED
585  // - Underlying content cannot provide sorted data...
586  return 0;
587 }
588 
589 // XResultSetMetaDataSupplier
590 uno::Reference< sdbc::XResultSetMetaData > SAL_CALL
592 {
593  auto pProp = std::find_if(m_sProperty.begin(), m_sProperty.end(),
594  [](const beans::Property& rProp) { return rProp.Name == "Title"; });
595  if (pProp != m_sProperty.end())
596  {
597  std::vector< ::ucbhelper::ResultSetColumnData >
598  aColumnData( m_sProperty.getLength() );
599  auto n = std::distance(m_sProperty.begin(), pProp);
600  // @@@ #82177# - Determine correct value!
601  aColumnData[ n ].isCaseSensitive = false;
602 
604  new ::ucbhelper::ResultSetMetaData(
606  m_sProperty,
607  aColumnData );
608  return uno::Reference< sdbc::XResultSetMetaData >( p );
609  }
610 
612  new ::ucbhelper::ResultSetMetaData( m_pMyShell->m_xContext, m_sProperty );
613  return uno::Reference< sdbc::XResultSetMetaData >( p );
614 }
615 
616 
617 // XPropertySet
618 uno::Reference< beans::XPropertySetInfo > SAL_CALL
620 {
621 
622  uno::Sequence< beans::Property > seq(2);
623  seq[0].Name = "RowCount";
624  seq[0].Handle = -1;
625  seq[0].Type = cppu::UnoType<sal_Int32>::get();
626  seq[0].Attributes = beans::PropertyAttribute::READONLY;
627 
628  seq[1].Name = "IsRowCountFinal";
629  seq[1].Handle = -1;
630  seq[1].Type = cppu::UnoType<sal_Bool>::get();
631  seq[1].Attributes = beans::PropertyAttribute::READONLY;
632 
634  seq );
635  return uno::Reference< beans::XPropertySetInfo > ( p );
636 }
637 
638 
640  const OUString& aPropertyName, const uno::Any& )
641 {
642  if( aPropertyName == "IsRowCountFinal" ||
643  aPropertyName == "RowCount" )
644  return;
645  throw beans::UnknownPropertyException( aPropertyName );
646 }
647 
648 
650  const OUString& PropertyName )
651 {
652  if( PropertyName == "IsRowCountFinal" )
653  {
654  return uno::Any(m_bRowCountFinal);
655  }
656  else if ( PropertyName == "RowCount" )
657  {
658  sal_Int32 count = sal::static_int_cast<sal_Int32>(m_aItems.size());
659  return uno::Any(count);
660  }
661  else
662  throw beans::UnknownPropertyException( PropertyName );
663 }
664 
665 
667  const OUString& aPropertyName,
668  const uno::Reference< beans::XPropertyChangeListener >& xListener )
669 {
670  if( aPropertyName == "IsRowCountFinal" )
671  {
672  osl::MutexGuard aGuard( m_aMutex );
673  if ( ! m_pIsFinalListeners )
674  m_pIsFinalListeners.reset(
676 
677  m_pIsFinalListeners->addInterface( xListener );
678  }
679  else if ( aPropertyName == "RowCount" )
680  {
681  osl::MutexGuard aGuard( m_aMutex );
682  if ( ! m_pRowCountListeners )
683  m_pRowCountListeners.reset(
685  m_pRowCountListeners->addInterface( xListener );
686  }
687  else
688  throw beans::UnknownPropertyException( aPropertyName );
689 }
690 
691 
693  const OUString& aPropertyName,
694  const uno::Reference< beans::XPropertyChangeListener >& aListener )
695 {
696  if( aPropertyName == "IsRowCountFinal" &&
698  {
699  osl::MutexGuard aGuard( m_aMutex );
700  m_pIsFinalListeners->removeInterface( aListener );
701  }
702  else if ( aPropertyName == "RowCount" &&
704  {
705  osl::MutexGuard aGuard( m_aMutex );
706 
707  m_pRowCountListeners->removeInterface( aListener );
708  }
709  else
710  throw beans::UnknownPropertyException( aPropertyName );
711 }
712 
714  const OUString&,
715  const uno::Reference< beans::XVetoableChangeListener >& )
716 {
717 }
718 
719 
721  const OUString&,
722  const uno::Reference< beans::XVetoableChangeListener >& )
723 {
724 }
725 
726 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
const size_t count(pCandidateA->getBorderLines().size())
virtual OUString SAL_CALL queryContentIdentifierString() override
Definition: filrset.cxx:455
virtual sal_Bool SAL_CALL rowDeleted() override
Definition: filrset.cxx:426
virtual sal_Bool SAL_CALL first() override
Definition: filrset.cxx:332
#define THROW_WHERE
Definition: filrset.cxx:45
virtual void SAL_CALL setPropertyValue(const OUString &aPropertyName, const css::uno::Any &aValue) override
Definition: filrset.cxx:639
css::uno::Reference< css::ucb::XDynamicResultSetListener > m_xListener
Definition: filrset.hxx:417
virtual sal_Bool SAL_CALL rowUpdated() override
Definition: filrset.cxx:414
virtual void SAL_CALL addPropertyChangeListener(const OUString &aPropertyName, const css::uno::Reference< css::beans::XPropertyChangeListener > &xListener) override
Definition: filrset.cxx:666
Reference< XInterface > xTarget
virtual css::uno::Reference< css::sdbc::XResultSetMetaData > SAL_CALL getMetaData() override
Definition: filrset.cxx:591
sal_Int64 n
virtual void SAL_CALL close() override
Definition: filrset.cxx:442
virtual sal_Int32 SAL_CALL getRow() override
Definition: filrset.cxx:350
virtual css::uno::Reference< css::uno::XInterface > SAL_CALL getStatement() override
Definition: filrset.cxx:433
virtual css::uno::Reference< css::ucb::XContent > SAL_CALL queryContent() override
Definition: filrset.cxx:483
virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getStaticResultSet() override
Definition: filrset.cxx:497
virtual sal_Int16 SAL_CALL getCapabilities() override
Definition: filrset.cxx:582
virtual css::uno::Reference< css::ucb::XContentIdentifier > SAL_CALL queryContentIdentifier() override
Definition: filrset.cxx:468
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:274
osl::Directory m_aFolder
Definition: filrset.hxx:407
FileProvider * m_pProvider
Definition: filtask.hxx:484
virtual sal_Bool SAL_CALL isLast() override
Definition: filrset.cxx:306
std::unique_ptr< comphelper::OInterfaceContainerHelper2 > m_pIsFinalListeners
Definition: filrset.hxx:415
css::uno::Sequence< css::ucb::NumberedSortingInfo > m_sSortingInfo
Definition: filrset.hxx:409
virtual void SAL_CALL addEventListener(const css::uno::Reference< css::lang::XEventListener > &xListener) override
Definition: filrset.cxx:96
css::uno::Reference< css::uno::XComponentContext > m_xContext
Definition: filtask.hxx:485
virtual void SAL_CALL dispose() override
Definition: filrset.cxx:121
#define TASKHANDLING_OPEN_FOR_DIRECTORYLISTING
Definition: filerror.hxx:49
err
virtual void SAL_CALL setListener(const css::uno::Reference< css::ucb::XDynamicResultSetListener > &Listener) override
Definition: filrset.cxx:510
std::unique_ptr< comphelper::OInterfaceContainerHelper2 > m_pRowCountListeners
Definition: filrset.hxx:414
virtual void SAL_CALL beforeFirst() override
Definition: filrset.cxx:316
virtual sal_Bool SAL_CALL isBeforeFirst() override
Definition: filrset.cxx:285
unsigned char sal_Bool
TaskManager * m_pMyShell
Definition: filrset.hxx:392
virtual css::uno::Reference< css::ucb::XContent > SAL_CALL queryContent(const css::uno::Reference< css::ucb::XContentIdentifier > &Identifier) override
Definition: prov.cxx:162
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:720
virtual css::uno::Reference< css::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo() override
Definition: filrset.cxx:619
virtual ~XResultSet_impl() override
Definition: filrset.cxx:81
virtual sal_Bool SAL_CALL previous() override
Definition: filrset.cxx:396
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:548
virtual void SAL_CALL afterLast() override
Definition: filrset.cxx:323
const OUString m_aBaseDirectory
Definition: filrset.hxx:405
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:407
virtual sal_Bool SAL_CALL relative(sal_Int32 rows) override
Definition: filrset.cxx:382
virtual sal_Bool SAL_CALL isAfterLast() override
Definition: filrset.cxx:292
virtual void SAL_CALL removePropertyChangeListener(const OUString &aPropertyName, const css::uno::Reference< css::beans::XPropertyChangeListener > &aListener) override
Definition: filrset.cxx:692
virtual sal_Bool SAL_CALL last() override
Definition: filrset.cxx:340
void * p
std::vector< OUString > m_aUnqPath
Definition: filrset.hxx:404
#define SAL_WARN(area, stream)
css::uno::Sequence< css::beans::Property > m_sProperty
Definition: filrset.hxx:408
virtual void SAL_CALL addVetoableChangeListener(const OUString &PropertyName, const css::uno::Reference< css::beans::XVetoableChangeListener > &aListener) override
Definition: filrset.cxx:713
virtual css::uno::Any SAL_CALL getPropertyValue(const OUString &PropertyName) override
Definition: filrset.cxx:649
virtual sal_Bool SAL_CALL isFirst() override
Definition: filrset.cxx:299
#define TASKHANDLER_NO_ERROR
Definition: filerror.hxx:27
virtual sal_Bool SAL_CALL rowInserted() override
Definition: filrset.cxx:420
std::unique_ptr< comphelper::OInterfaceContainerHelper2 > m_pDisposeEventListeners
Definition: filrset.hxx:413
osl::Mutex m_aEventListenerMutex
Definition: filrset.hxx:412
virtual sal_Bool SAL_CALL absolute(sal_Int32 row) override
Definition: filrset.cxx:360