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