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