12f86921cSAndrew Rist /**************************************************************
2cdf0e10cSrcweir *
32f86921cSAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one
42f86921cSAndrew Rist * or more contributor license agreements. See the NOTICE file
52f86921cSAndrew Rist * distributed with this work for additional information
62f86921cSAndrew Rist * regarding copyright ownership. The ASF licenses this file
72f86921cSAndrew Rist * to you under the Apache License, Version 2.0 (the
82f86921cSAndrew Rist * "License"); you may not use this file except in compliance
92f86921cSAndrew Rist * with the License. You may obtain a copy of the License at
102f86921cSAndrew Rist *
112f86921cSAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0
122f86921cSAndrew Rist *
132f86921cSAndrew Rist * Unless required by applicable law or agreed to in writing,
142f86921cSAndrew Rist * software distributed under the License is distributed on an
152f86921cSAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
162f86921cSAndrew Rist * KIND, either express or implied. See the License for the
172f86921cSAndrew Rist * specific language governing permissions and limitations
182f86921cSAndrew Rist * under the License.
192f86921cSAndrew Rist *
202f86921cSAndrew Rist *************************************************************/
212f86921cSAndrew Rist
222f86921cSAndrew Rist
23cdf0e10cSrcweir
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25*421ed02eSdamjan #include "precompiled_file.hxx"
26cdf0e10cSrcweir #include <com/sun/star/ucb/WelcomeDynamicResultSetStruct.hpp>
27cdf0e10cSrcweir #include "filid.hxx"
28cdf0e10cSrcweir #include "shell.hxx"
29cdf0e10cSrcweir #include "filprp.hxx"
30cdf0e10cSrcweir #include "filrset.hxx"
31cdf0e10cSrcweir #include <com/sun/star/ucb/OpenMode.hpp>
32cdf0e10cSrcweir #include "prov.hxx"
33cdf0e10cSrcweir #include <com/sun/star/uno/Reference.h>
34cdf0e10cSrcweir
35cdf0e10cSrcweir #ifndef _COM_SUN_STAR_BEANS_PROPERTYATTRIBBUTE_HPP_
36cdf0e10cSrcweir #include <com/sun/star/beans/PropertyAttribute.hpp>
37cdf0e10cSrcweir #endif
38cdf0e10cSrcweir #include <com/sun/star/ucb/ListActionType.hpp>
39cdf0e10cSrcweir #include <com/sun/star/ucb/XSourceInitialization.hpp>
40cdf0e10cSrcweir #include <com/sun/star/ucb/XCachedDynamicResultSetStubFactory.hpp>
41cdf0e10cSrcweir #include <ucbhelper/resultsetmetadata.hxx>
42cdf0e10cSrcweir
43cdf0e10cSrcweir using namespace fileaccess;
44cdf0e10cSrcweir using namespace com::sun::star;
45cdf0e10cSrcweir
XResultSet_impl(shell * pMyShell,const rtl::OUString & aUnqPath,sal_Int32 OpenMode,const uno::Sequence<beans::Property> & seq,const uno::Sequence<ucb::NumberedSortingInfo> & seqSort)46cdf0e10cSrcweir XResultSet_impl::XResultSet_impl(
47cdf0e10cSrcweir shell* pMyShell,
48cdf0e10cSrcweir const rtl::OUString& aUnqPath,
49cdf0e10cSrcweir sal_Int32 OpenMode,
50cdf0e10cSrcweir const uno::Sequence< beans::Property >& seq,
51cdf0e10cSrcweir const uno::Sequence< ucb::NumberedSortingInfo >& seqSort )
52cdf0e10cSrcweir : m_pMyShell( pMyShell ),
53cdf0e10cSrcweir m_xProvider( pMyShell->m_pProvider ),
54cdf0e10cSrcweir m_nRow( -1 ),
55cdf0e10cSrcweir m_nOpenMode( OpenMode ),
56cdf0e10cSrcweir m_bRowCountFinal( false ),
57cdf0e10cSrcweir m_aBaseDirectory( aUnqPath ),
58cdf0e10cSrcweir m_aFolder( aUnqPath ),
59cdf0e10cSrcweir m_sProperty( seq ),
60cdf0e10cSrcweir m_sSortingInfo( seqSort ),
61cdf0e10cSrcweir m_pDisposeEventListeners( 0 ),
62cdf0e10cSrcweir m_pRowCountListeners( 0 ),
63cdf0e10cSrcweir m_pIsFinalListeners( 0 ),
64cdf0e10cSrcweir m_bStatic( false ),
65cdf0e10cSrcweir m_nErrorCode( TASKHANDLER_NO_ERROR ),
66cdf0e10cSrcweir m_nMinorErrorCode( TASKHANDLER_NO_ERROR )
67cdf0e10cSrcweir {
68cdf0e10cSrcweir osl::FileBase::RC err = m_aFolder.open();
69cdf0e10cSrcweir if( err != osl::FileBase::E_None )
70cdf0e10cSrcweir {
71cdf0e10cSrcweir m_nIsOpen = false;
72cdf0e10cSrcweir m_aFolder.close();
73cdf0e10cSrcweir
74cdf0e10cSrcweir m_nErrorCode = TASKHANDLING_OPEN_FOR_DIRECTORYLISTING;
75cdf0e10cSrcweir m_nMinorErrorCode = err;
76cdf0e10cSrcweir }
77cdf0e10cSrcweir else
78cdf0e10cSrcweir m_nIsOpen = true;
79cdf0e10cSrcweir
80cdf0e10cSrcweir m_pMyShell->registerNotifier( m_aBaseDirectory,this );
81cdf0e10cSrcweir }
82cdf0e10cSrcweir
83cdf0e10cSrcweir
~XResultSet_impl()84cdf0e10cSrcweir XResultSet_impl::~XResultSet_impl()
85cdf0e10cSrcweir {
86cdf0e10cSrcweir m_pMyShell->deregisterNotifier( m_aBaseDirectory,this );
87cdf0e10cSrcweir
88cdf0e10cSrcweir if( m_nIsOpen )
89cdf0e10cSrcweir m_aFolder.close();
90cdf0e10cSrcweir
91cdf0e10cSrcweir delete m_pDisposeEventListeners;
92cdf0e10cSrcweir delete m_pRowCountListeners;
93cdf0e10cSrcweir delete m_pIsFinalListeners;
94cdf0e10cSrcweir }
95cdf0e10cSrcweir
96cdf0e10cSrcweir
97cdf0e10cSrcweir
CtorSuccess()98cdf0e10cSrcweir sal_Int32 SAL_CALL XResultSet_impl::CtorSuccess()
99cdf0e10cSrcweir {
100cdf0e10cSrcweir return m_nErrorCode;
101cdf0e10cSrcweir }
102cdf0e10cSrcweir
103cdf0e10cSrcweir
104cdf0e10cSrcweir
getMinorError()105cdf0e10cSrcweir sal_Int32 SAL_CALL XResultSet_impl::getMinorError()
106cdf0e10cSrcweir {
107cdf0e10cSrcweir return m_nMinorErrorCode;
108cdf0e10cSrcweir }
109cdf0e10cSrcweir
110cdf0e10cSrcweir
111cdf0e10cSrcweir void SAL_CALL
acquire(void)112cdf0e10cSrcweir XResultSet_impl::acquire(
113cdf0e10cSrcweir void )
114cdf0e10cSrcweir throw()
115cdf0e10cSrcweir {
116cdf0e10cSrcweir OWeakObject::acquire();
117cdf0e10cSrcweir }
118cdf0e10cSrcweir
119cdf0e10cSrcweir
120cdf0e10cSrcweir void SAL_CALL
release(void)121cdf0e10cSrcweir XResultSet_impl::release(
122cdf0e10cSrcweir void )
123cdf0e10cSrcweir throw()
124cdf0e10cSrcweir {
125cdf0e10cSrcweir OWeakObject::release();
126cdf0e10cSrcweir }
127cdf0e10cSrcweir
128cdf0e10cSrcweir
129cdf0e10cSrcweir
130cdf0e10cSrcweir uno::Any SAL_CALL
queryInterface(const uno::Type & rType)131cdf0e10cSrcweir XResultSet_impl::queryInterface(
132cdf0e10cSrcweir const uno::Type& rType )
133cdf0e10cSrcweir throw( uno::RuntimeException )
134cdf0e10cSrcweir {
135cdf0e10cSrcweir uno::Any aRet = cppu::queryInterface(
136cdf0e10cSrcweir rType,
137cdf0e10cSrcweir SAL_STATIC_CAST( lang::XComponent*, this),
138cdf0e10cSrcweir SAL_STATIC_CAST( lang::XTypeProvider*, this),
139cdf0e10cSrcweir SAL_STATIC_CAST( lang::XEventListener*, this),
140cdf0e10cSrcweir SAL_STATIC_CAST( sdbc::XRow*, this),
141cdf0e10cSrcweir SAL_STATIC_CAST( sdbc::XResultSet*, this),
142cdf0e10cSrcweir SAL_STATIC_CAST( sdbc::XCloseable*, this),
143cdf0e10cSrcweir SAL_STATIC_CAST( sdbc::XResultSetMetaDataSupplier*, this),
144cdf0e10cSrcweir SAL_STATIC_CAST( beans::XPropertySet*, this ),
145cdf0e10cSrcweir SAL_STATIC_CAST( ucb::XContentAccess*, this),
146cdf0e10cSrcweir SAL_STATIC_CAST( ucb::XDynamicResultSet*,this) );
147cdf0e10cSrcweir return aRet.hasValue() ? aRet : OWeakObject::queryInterface( rType );
148cdf0e10cSrcweir }
149cdf0e10cSrcweir
150cdf0e10cSrcweir
151cdf0e10cSrcweir void SAL_CALL
disposing(const lang::EventObject &)152cdf0e10cSrcweir XResultSet_impl::disposing( const lang::EventObject& )
153cdf0e10cSrcweir throw( uno::RuntimeException )
154cdf0e10cSrcweir {
155cdf0e10cSrcweir // To do, but what
156cdf0e10cSrcweir }
157cdf0e10cSrcweir
158cdf0e10cSrcweir
XTYPEPROVIDER_IMPL_10(XResultSet_impl,lang::XTypeProvider,lang::XTypeProvider,lang::XEventListener,sdbc::XRow,sdbc::XResultSet,XDynamicResultSet,sdbc::XCloseable,sdbc::XResultSetMetaDataSupplier,beans::XPropertySet,ucb::XContentAccess)159cdf0e10cSrcweir XTYPEPROVIDER_IMPL_10( XResultSet_impl,
160cdf0e10cSrcweir lang::XTypeProvider,
161cdf0e10cSrcweir lang::XTypeProvider,
162cdf0e10cSrcweir lang::XEventListener,
163cdf0e10cSrcweir sdbc::XRow,
164cdf0e10cSrcweir sdbc::XResultSet,
165cdf0e10cSrcweir XDynamicResultSet,
166cdf0e10cSrcweir sdbc::XCloseable,
167cdf0e10cSrcweir sdbc::XResultSetMetaDataSupplier,
168cdf0e10cSrcweir beans::XPropertySet,
169cdf0e10cSrcweir ucb::XContentAccess )
170cdf0e10cSrcweir
171cdf0e10cSrcweir
172cdf0e10cSrcweir void SAL_CALL
173cdf0e10cSrcweir XResultSet_impl::addEventListener(
174cdf0e10cSrcweir const uno::Reference< lang::XEventListener >& Listener )
175cdf0e10cSrcweir throw( uno::RuntimeException )
176cdf0e10cSrcweir {
177cdf0e10cSrcweir osl::MutexGuard aGuard( m_aMutex );
178cdf0e10cSrcweir
179cdf0e10cSrcweir if ( ! m_pDisposeEventListeners )
180cdf0e10cSrcweir m_pDisposeEventListeners =
181cdf0e10cSrcweir new cppu::OInterfaceContainerHelper( m_aEventListenerMutex );
182cdf0e10cSrcweir
183cdf0e10cSrcweir m_pDisposeEventListeners->addInterface( Listener );
184cdf0e10cSrcweir }
185cdf0e10cSrcweir
186cdf0e10cSrcweir
187cdf0e10cSrcweir void SAL_CALL
removeEventListener(const uno::Reference<lang::XEventListener> & Listener)188cdf0e10cSrcweir XResultSet_impl::removeEventListener(
189cdf0e10cSrcweir const uno::Reference< lang::XEventListener >& Listener )
190cdf0e10cSrcweir throw( uno::RuntimeException )
191cdf0e10cSrcweir {
192cdf0e10cSrcweir osl::MutexGuard aGuard( m_aMutex );
193cdf0e10cSrcweir
194cdf0e10cSrcweir if ( m_pDisposeEventListeners )
195cdf0e10cSrcweir m_pDisposeEventListeners->removeInterface( Listener );
196cdf0e10cSrcweir }
197cdf0e10cSrcweir
198cdf0e10cSrcweir
199cdf0e10cSrcweir
200cdf0e10cSrcweir void SAL_CALL
dispose()201cdf0e10cSrcweir XResultSet_impl::dispose()
202cdf0e10cSrcweir throw( uno::RuntimeException )
203cdf0e10cSrcweir {
204cdf0e10cSrcweir osl::MutexGuard aGuard( m_aMutex );
205cdf0e10cSrcweir
206cdf0e10cSrcweir lang::EventObject aEvt;
207cdf0e10cSrcweir aEvt.Source = static_cast< lang::XComponent * >( this );
208cdf0e10cSrcweir
209cdf0e10cSrcweir if ( m_pDisposeEventListeners && m_pDisposeEventListeners->getLength() )
210cdf0e10cSrcweir {
211cdf0e10cSrcweir m_pDisposeEventListeners->disposeAndClear( aEvt );
212cdf0e10cSrcweir }
213cdf0e10cSrcweir if( m_pRowCountListeners && m_pRowCountListeners->getLength() )
214cdf0e10cSrcweir {
215cdf0e10cSrcweir m_pRowCountListeners->disposeAndClear( aEvt );
216cdf0e10cSrcweir }
217cdf0e10cSrcweir if( m_pIsFinalListeners && m_pIsFinalListeners->getLength() )
218cdf0e10cSrcweir {
219cdf0e10cSrcweir m_pIsFinalListeners->disposeAndClear( aEvt );
220cdf0e10cSrcweir }
221cdf0e10cSrcweir }
222cdf0e10cSrcweir
223cdf0e10cSrcweir
224cdf0e10cSrcweir
rowCountChanged()225cdf0e10cSrcweir void XResultSet_impl::rowCountChanged()
226cdf0e10cSrcweir {
227cdf0e10cSrcweir sal_Int32 aOldValue,aNewValue;
228cdf0e10cSrcweir uno::Sequence< uno::Reference< uno::XInterface > > seq;
229cdf0e10cSrcweir {
230cdf0e10cSrcweir osl::MutexGuard aGuard( m_aMutex );
231cdf0e10cSrcweir if( m_pRowCountListeners )
232cdf0e10cSrcweir seq = m_pRowCountListeners->getElements();
233cdf0e10cSrcweir aNewValue = m_aItems.size();
234cdf0e10cSrcweir aOldValue = aNewValue-1;
235cdf0e10cSrcweir }
236cdf0e10cSrcweir beans::PropertyChangeEvent aEv;
237cdf0e10cSrcweir aEv.PropertyName = rtl::OUString::createFromAscii( "RowCount" );
238cdf0e10cSrcweir aEv.Further = false;
239cdf0e10cSrcweir aEv.PropertyHandle = -1;
240cdf0e10cSrcweir aEv.OldValue <<= aOldValue;
241cdf0e10cSrcweir aEv.NewValue <<= aNewValue;
242cdf0e10cSrcweir for( sal_Int32 i = 0; i < seq.getLength(); ++i )
243cdf0e10cSrcweir {
244cdf0e10cSrcweir uno::Reference< beans::XPropertyChangeListener > listener(
245cdf0e10cSrcweir seq[i], uno::UNO_QUERY );
246cdf0e10cSrcweir if( listener.is() )
247cdf0e10cSrcweir listener->propertyChange( aEv );
248cdf0e10cSrcweir }
249cdf0e10cSrcweir }
250cdf0e10cSrcweir
251cdf0e10cSrcweir
isFinalChanged()252cdf0e10cSrcweir void XResultSet_impl::isFinalChanged()
253cdf0e10cSrcweir {
254cdf0e10cSrcweir uno::Sequence< uno::Reference< XInterface > > seq;
255cdf0e10cSrcweir {
256cdf0e10cSrcweir osl::MutexGuard aGuard( m_aMutex );
257cdf0e10cSrcweir if( m_pIsFinalListeners )
258cdf0e10cSrcweir seq = m_pIsFinalListeners->getElements();
259cdf0e10cSrcweir m_bRowCountFinal = true;
260cdf0e10cSrcweir }
261cdf0e10cSrcweir beans::PropertyChangeEvent aEv;
262cdf0e10cSrcweir aEv.PropertyName = rtl::OUString::createFromAscii( "IsRowCountFinal" );
263cdf0e10cSrcweir aEv.Further = false;
264cdf0e10cSrcweir aEv.PropertyHandle = -1;
265cdf0e10cSrcweir sal_Bool fval = false;
266cdf0e10cSrcweir sal_Bool tval = true;
267cdf0e10cSrcweir aEv.OldValue <<= fval;
268cdf0e10cSrcweir aEv.NewValue <<= tval;
269cdf0e10cSrcweir for( sal_Int32 i = 0; i < seq.getLength(); ++i )
270cdf0e10cSrcweir {
271cdf0e10cSrcweir uno::Reference< beans::XPropertyChangeListener > listener(
272cdf0e10cSrcweir seq[i], uno::UNO_QUERY );
273cdf0e10cSrcweir if( listener.is() )
274cdf0e10cSrcweir listener->propertyChange( aEv );
275cdf0e10cSrcweir }
276cdf0e10cSrcweir }
277cdf0e10cSrcweir
278cdf0e10cSrcweir
279cdf0e10cSrcweir sal_Bool SAL_CALL
OneMore(void)280cdf0e10cSrcweir XResultSet_impl::OneMore(
281cdf0e10cSrcweir void )
282cdf0e10cSrcweir throw( sdbc::SQLException,
283cdf0e10cSrcweir uno::RuntimeException )
284cdf0e10cSrcweir {
285cdf0e10cSrcweir if( ! m_nIsOpen )
286cdf0e10cSrcweir return false;
287cdf0e10cSrcweir
288cdf0e10cSrcweir osl::FileBase::RC err;
289cdf0e10cSrcweir sal_Bool IsRegular;
290cdf0e10cSrcweir rtl::OUString aUnqPath;
291cdf0e10cSrcweir osl::DirectoryItem m_aDirIte;
292cdf0e10cSrcweir uno::Reference< sdbc::XRow > aRow;
293cdf0e10cSrcweir
294cdf0e10cSrcweir while( true )
295cdf0e10cSrcweir {
296cdf0e10cSrcweir err = m_aFolder.getNextItem( m_aDirIte );
297cdf0e10cSrcweir
298cdf0e10cSrcweir if( err == osl::FileBase::E_NOENT || err == osl::FileBase::E_INVAL )
299cdf0e10cSrcweir {
300cdf0e10cSrcweir m_aFolder.close();
301cdf0e10cSrcweir isFinalChanged();
302cdf0e10cSrcweir return ( m_nIsOpen = false );
303cdf0e10cSrcweir }
304cdf0e10cSrcweir else if( err == osl::FileBase::E_None )
305cdf0e10cSrcweir {
306cdf0e10cSrcweir aRow = m_pMyShell->getv(
307cdf0e10cSrcweir this, m_sProperty, m_aDirIte, aUnqPath, IsRegular );
308cdf0e10cSrcweir
309cdf0e10cSrcweir if( m_nOpenMode == ucb::OpenMode::DOCUMENTS && IsRegular )
310cdf0e10cSrcweir {
311cdf0e10cSrcweir osl::MutexGuard aGuard( m_aMutex );
312cdf0e10cSrcweir m_aItems.push_back( aRow );
313cdf0e10cSrcweir m_aIdents.push_back(
314cdf0e10cSrcweir uno::Reference< ucb::XContentIdentifier >() );
315cdf0e10cSrcweir m_aUnqPath.push_back( aUnqPath );
316cdf0e10cSrcweir rowCountChanged();
317cdf0e10cSrcweir return true;
318cdf0e10cSrcweir
319cdf0e10cSrcweir }
320cdf0e10cSrcweir else if( m_nOpenMode == ucb::OpenMode::DOCUMENTS && ! IsRegular )
321cdf0e10cSrcweir {
322cdf0e10cSrcweir continue;
323cdf0e10cSrcweir }
324cdf0e10cSrcweir else if( m_nOpenMode == ucb::OpenMode::FOLDERS && ! IsRegular )
325cdf0e10cSrcweir {
326cdf0e10cSrcweir osl::MutexGuard aGuard( m_aMutex );
327cdf0e10cSrcweir m_aItems.push_back( aRow );
328cdf0e10cSrcweir m_aIdents.push_back(
329cdf0e10cSrcweir uno::Reference< ucb::XContentIdentifier >() );
330cdf0e10cSrcweir m_aUnqPath.push_back( aUnqPath );
331cdf0e10cSrcweir rowCountChanged();
332cdf0e10cSrcweir return true;
333cdf0e10cSrcweir }
334cdf0e10cSrcweir else if( m_nOpenMode == ucb::OpenMode::FOLDERS && IsRegular )
335cdf0e10cSrcweir {
336cdf0e10cSrcweir continue;
337cdf0e10cSrcweir }
338cdf0e10cSrcweir else
339cdf0e10cSrcweir {
340cdf0e10cSrcweir osl::MutexGuard aGuard( m_aMutex );
341cdf0e10cSrcweir m_aItems.push_back( aRow );
342cdf0e10cSrcweir m_aIdents.push_back(
343cdf0e10cSrcweir uno::Reference< ucb::XContentIdentifier >() );
344cdf0e10cSrcweir m_aUnqPath.push_back( aUnqPath );
345cdf0e10cSrcweir rowCountChanged();
346cdf0e10cSrcweir return true;
347cdf0e10cSrcweir }
348cdf0e10cSrcweir }
349cdf0e10cSrcweir else // error fetching anything
350cdf0e10cSrcweir {
351cdf0e10cSrcweir throw sdbc::SQLException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX ) ), uno::Reference< uno::XInterface >(), ::rtl::OUString(), 0, uno::Any() );
352cdf0e10cSrcweir }
353cdf0e10cSrcweir }
354cdf0e10cSrcweir }
355cdf0e10cSrcweir
356cdf0e10cSrcweir
357cdf0e10cSrcweir
358cdf0e10cSrcweir
359cdf0e10cSrcweir
360cdf0e10cSrcweir sal_Bool SAL_CALL
next(void)361cdf0e10cSrcweir XResultSet_impl::next(
362cdf0e10cSrcweir void )
363cdf0e10cSrcweir throw( sdbc::SQLException,
364cdf0e10cSrcweir uno::RuntimeException )
365cdf0e10cSrcweir {
366cdf0e10cSrcweir sal_Bool test;
367cdf0e10cSrcweir if( ++m_nRow < sal::static_int_cast<sal_Int32>(m_aItems.size()) ) test = true;
368cdf0e10cSrcweir else
369cdf0e10cSrcweir test = OneMore();
370cdf0e10cSrcweir return test;
371cdf0e10cSrcweir }
372cdf0e10cSrcweir
373cdf0e10cSrcweir
374cdf0e10cSrcweir sal_Bool SAL_CALL
isBeforeFirst(void)375cdf0e10cSrcweir XResultSet_impl::isBeforeFirst(
376cdf0e10cSrcweir void )
377cdf0e10cSrcweir throw( sdbc::SQLException,
378cdf0e10cSrcweir uno::RuntimeException )
379cdf0e10cSrcweir {
380cdf0e10cSrcweir return m_nRow == -1;
381cdf0e10cSrcweir }
382cdf0e10cSrcweir
383cdf0e10cSrcweir
384cdf0e10cSrcweir sal_Bool SAL_CALL
isAfterLast(void)385cdf0e10cSrcweir XResultSet_impl::isAfterLast(
386cdf0e10cSrcweir void )
387cdf0e10cSrcweir throw( sdbc::SQLException,
388cdf0e10cSrcweir uno::RuntimeException )
389cdf0e10cSrcweir {
390cdf0e10cSrcweir return m_nRow >= sal::static_int_cast<sal_Int32>(m_aItems.size()); // Cannot happen, if m_aFolder.isOpen()
391cdf0e10cSrcweir }
392cdf0e10cSrcweir
393cdf0e10cSrcweir
394cdf0e10cSrcweir sal_Bool SAL_CALL
isFirst(void)395cdf0e10cSrcweir XResultSet_impl::isFirst(
396cdf0e10cSrcweir void )
397cdf0e10cSrcweir throw( sdbc::SQLException,
398cdf0e10cSrcweir uno::RuntimeException )
399cdf0e10cSrcweir {
400cdf0e10cSrcweir return m_nRow == 0;
401cdf0e10cSrcweir }
402cdf0e10cSrcweir
403cdf0e10cSrcweir
404cdf0e10cSrcweir sal_Bool SAL_CALL
isLast(void)405cdf0e10cSrcweir XResultSet_impl::isLast(
406cdf0e10cSrcweir void )
407cdf0e10cSrcweir throw( sdbc::SQLException,
408cdf0e10cSrcweir uno::RuntimeException)
409cdf0e10cSrcweir {
410cdf0e10cSrcweir if( m_nRow == sal::static_int_cast<sal_Int32>(m_aItems.size()) - 1 )
411cdf0e10cSrcweir return ! OneMore();
412cdf0e10cSrcweir else
413cdf0e10cSrcweir return false;
414cdf0e10cSrcweir }
415cdf0e10cSrcweir
416cdf0e10cSrcweir
417cdf0e10cSrcweir void SAL_CALL
beforeFirst(void)418cdf0e10cSrcweir XResultSet_impl::beforeFirst(
419cdf0e10cSrcweir void )
420cdf0e10cSrcweir throw( sdbc::SQLException,
421cdf0e10cSrcweir uno::RuntimeException)
422cdf0e10cSrcweir {
423cdf0e10cSrcweir m_nRow = -1;
424cdf0e10cSrcweir }
425cdf0e10cSrcweir
426cdf0e10cSrcweir
427cdf0e10cSrcweir void SAL_CALL
afterLast(void)428cdf0e10cSrcweir XResultSet_impl::afterLast(
429cdf0e10cSrcweir void )
430cdf0e10cSrcweir throw( sdbc::SQLException,
431cdf0e10cSrcweir uno::RuntimeException )
432cdf0e10cSrcweir {
433cdf0e10cSrcweir m_nRow = sal::static_int_cast<sal_Int32>(m_aItems.size());
434cdf0e10cSrcweir while( OneMore() )
435cdf0e10cSrcweir ++m_nRow;
436cdf0e10cSrcweir }
437cdf0e10cSrcweir
438cdf0e10cSrcweir
439cdf0e10cSrcweir sal_Bool SAL_CALL
first(void)440cdf0e10cSrcweir XResultSet_impl::first(
441cdf0e10cSrcweir void )
442cdf0e10cSrcweir throw( sdbc::SQLException,
443cdf0e10cSrcweir uno::RuntimeException)
444cdf0e10cSrcweir {
445cdf0e10cSrcweir m_nRow = -1;
446cdf0e10cSrcweir return next();
447cdf0e10cSrcweir }
448cdf0e10cSrcweir
449cdf0e10cSrcweir
450cdf0e10cSrcweir sal_Bool SAL_CALL
last(void)451cdf0e10cSrcweir XResultSet_impl::last(
452cdf0e10cSrcweir void )
453cdf0e10cSrcweir throw( sdbc::SQLException,
454cdf0e10cSrcweir uno::RuntimeException )
455cdf0e10cSrcweir {
456cdf0e10cSrcweir m_nRow = sal::static_int_cast<sal_Int32>(m_aItems.size()) - 1;
457cdf0e10cSrcweir while( OneMore() )
458cdf0e10cSrcweir ++m_nRow;
459cdf0e10cSrcweir return true;
460cdf0e10cSrcweir }
461cdf0e10cSrcweir
462cdf0e10cSrcweir
463cdf0e10cSrcweir sal_Int32 SAL_CALL
getRow(void)464cdf0e10cSrcweir XResultSet_impl::getRow(
465cdf0e10cSrcweir void )
466cdf0e10cSrcweir throw( sdbc::SQLException,
467cdf0e10cSrcweir uno::RuntimeException)
468cdf0e10cSrcweir {
469cdf0e10cSrcweir // Test, whether behind last row
470cdf0e10cSrcweir if( -1 == m_nRow || m_nRow >= sal::static_int_cast<sal_Int32>(m_aItems.size()) )
471cdf0e10cSrcweir return 0;
472cdf0e10cSrcweir else
473cdf0e10cSrcweir return m_nRow+1;
474cdf0e10cSrcweir }
475cdf0e10cSrcweir
476cdf0e10cSrcweir
477cdf0e10cSrcweir
absolute(sal_Int32 row)478cdf0e10cSrcweir sal_Bool SAL_CALL XResultSet_impl::absolute( sal_Int32 row )
479cdf0e10cSrcweir throw( sdbc::SQLException, uno::RuntimeException)
480cdf0e10cSrcweir {
481cdf0e10cSrcweir if( row >= 0 )
482cdf0e10cSrcweir {
483cdf0e10cSrcweir m_nRow = row - 1;
484cdf0e10cSrcweir if( row >= sal::static_int_cast<sal_Int32>(m_aItems.size()) )
485cdf0e10cSrcweir while( row-- && OneMore() )
486cdf0e10cSrcweir ;
487cdf0e10cSrcweir }
488cdf0e10cSrcweir else
489cdf0e10cSrcweir {
490cdf0e10cSrcweir last();
491cdf0e10cSrcweir m_nRow += ( row + 1 );
492cdf0e10cSrcweir if( m_nRow < -1 )
493cdf0e10cSrcweir m_nRow = -1;
494cdf0e10cSrcweir }
495cdf0e10cSrcweir
496cdf0e10cSrcweir return 0<= m_nRow && m_nRow < sal::static_int_cast<sal_Int32>(m_aItems.size());
497cdf0e10cSrcweir }
498cdf0e10cSrcweir
499cdf0e10cSrcweir
500cdf0e10cSrcweir
501cdf0e10cSrcweir
502cdf0e10cSrcweir sal_Bool SAL_CALL
relative(sal_Int32 row)503cdf0e10cSrcweir XResultSet_impl::relative(
504cdf0e10cSrcweir sal_Int32 row )
505cdf0e10cSrcweir throw( sdbc::SQLException,
506cdf0e10cSrcweir uno::RuntimeException)
507cdf0e10cSrcweir {
508cdf0e10cSrcweir if( isAfterLast() || isBeforeFirst() )
509cdf0e10cSrcweir throw sdbc::SQLException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX ) ), uno::Reference< uno::XInterface >(), ::rtl::OUString(), 0, uno::Any() );
510cdf0e10cSrcweir if( row > 0 )
511cdf0e10cSrcweir while( row-- ) next();
512cdf0e10cSrcweir else if( row < 0 )
513cdf0e10cSrcweir while( row++ && m_nRow > - 1 ) previous();
514cdf0e10cSrcweir
515cdf0e10cSrcweir return 0 <= m_nRow && m_nRow < sal::static_int_cast<sal_Int32>(m_aItems.size());
516cdf0e10cSrcweir }
517cdf0e10cSrcweir
518cdf0e10cSrcweir
519cdf0e10cSrcweir
520cdf0e10cSrcweir sal_Bool SAL_CALL
previous(void)521cdf0e10cSrcweir XResultSet_impl::previous(
522cdf0e10cSrcweir void )
523cdf0e10cSrcweir throw( sdbc::SQLException,
524cdf0e10cSrcweir uno::RuntimeException)
525cdf0e10cSrcweir {
526cdf0e10cSrcweir if( m_nRow > sal::static_int_cast<sal_Int32>(m_aItems.size()) )
527cdf0e10cSrcweir m_nRow = sal::static_int_cast<sal_Int32>(m_aItems.size()); // Correct Handling of afterLast
528cdf0e10cSrcweir if( 0 <= m_nRow ) -- m_nRow;
529cdf0e10cSrcweir
530cdf0e10cSrcweir return 0 <= m_nRow && m_nRow < sal::static_int_cast<sal_Int32>(m_aItems.size());
531cdf0e10cSrcweir }
532cdf0e10cSrcweir
533cdf0e10cSrcweir
534cdf0e10cSrcweir void SAL_CALL
refreshRow(void)535cdf0e10cSrcweir XResultSet_impl::refreshRow(
536cdf0e10cSrcweir void )
537cdf0e10cSrcweir throw( sdbc::SQLException,
538cdf0e10cSrcweir uno::RuntimeException)
539cdf0e10cSrcweir {
540cdf0e10cSrcweir // get the row from the filesystem
541cdf0e10cSrcweir return;
542cdf0e10cSrcweir }
543cdf0e10cSrcweir
544cdf0e10cSrcweir
545cdf0e10cSrcweir sal_Bool SAL_CALL
rowUpdated(void)546cdf0e10cSrcweir XResultSet_impl::rowUpdated(
547cdf0e10cSrcweir void )
548cdf0e10cSrcweir throw( sdbc::SQLException,
549cdf0e10cSrcweir uno::RuntimeException )
550cdf0e10cSrcweir {
551cdf0e10cSrcweir return false;
552cdf0e10cSrcweir }
553cdf0e10cSrcweir
554cdf0e10cSrcweir sal_Bool SAL_CALL
rowInserted(void)555cdf0e10cSrcweir XResultSet_impl::rowInserted(
556cdf0e10cSrcweir void )
557cdf0e10cSrcweir throw( sdbc::SQLException,
558cdf0e10cSrcweir uno::RuntimeException )
559cdf0e10cSrcweir {
560cdf0e10cSrcweir return false;
561cdf0e10cSrcweir }
562cdf0e10cSrcweir
563cdf0e10cSrcweir sal_Bool SAL_CALL
rowDeleted(void)564cdf0e10cSrcweir XResultSet_impl::rowDeleted(
565cdf0e10cSrcweir void )
566cdf0e10cSrcweir throw( sdbc::SQLException,
567cdf0e10cSrcweir uno::RuntimeException )
568cdf0e10cSrcweir {
569cdf0e10cSrcweir return false;
570cdf0e10cSrcweir }
571cdf0e10cSrcweir
572cdf0e10cSrcweir
573cdf0e10cSrcweir uno::Reference< uno::XInterface > SAL_CALL
getStatement(void)574cdf0e10cSrcweir XResultSet_impl::getStatement(
575cdf0e10cSrcweir void )
576cdf0e10cSrcweir throw( sdbc::SQLException,
577cdf0e10cSrcweir uno::RuntimeException )
578cdf0e10cSrcweir {
579cdf0e10cSrcweir return uno::Reference< uno::XInterface >();
580cdf0e10cSrcweir }
581cdf0e10cSrcweir
582cdf0e10cSrcweir
583cdf0e10cSrcweir // XCloseable
584cdf0e10cSrcweir
585cdf0e10cSrcweir void SAL_CALL
close(void)586cdf0e10cSrcweir XResultSet_impl::close(
587cdf0e10cSrcweir void )
588cdf0e10cSrcweir throw( sdbc::SQLException,
589cdf0e10cSrcweir uno::RuntimeException)
590cdf0e10cSrcweir {
591cdf0e10cSrcweir if( m_nIsOpen )
592cdf0e10cSrcweir {
593cdf0e10cSrcweir m_aFolder.close();
594cdf0e10cSrcweir isFinalChanged();
595cdf0e10cSrcweir osl::MutexGuard aGuard( m_aMutex );
596cdf0e10cSrcweir m_nIsOpen = false;
597cdf0e10cSrcweir }
598cdf0e10cSrcweir }
599cdf0e10cSrcweir
600cdf0e10cSrcweir
601cdf0e10cSrcweir
602cdf0e10cSrcweir rtl::OUString SAL_CALL
queryContentIdentifierString(void)603cdf0e10cSrcweir XResultSet_impl::queryContentIdentifierString(
604cdf0e10cSrcweir void )
605cdf0e10cSrcweir throw( uno::RuntimeException )
606cdf0e10cSrcweir {
607cdf0e10cSrcweir uno::Reference< ucb::XContentIdentifier > xContentId
608cdf0e10cSrcweir = queryContentIdentifier();
609cdf0e10cSrcweir
610cdf0e10cSrcweir if( xContentId.is() )
611cdf0e10cSrcweir return xContentId->getContentIdentifier();
612cdf0e10cSrcweir else
613cdf0e10cSrcweir return rtl::OUString();
614cdf0e10cSrcweir }
615cdf0e10cSrcweir
616cdf0e10cSrcweir
617cdf0e10cSrcweir uno::Reference< ucb::XContentIdentifier > SAL_CALL
queryContentIdentifier(void)618cdf0e10cSrcweir XResultSet_impl::queryContentIdentifier(
619cdf0e10cSrcweir void )
620cdf0e10cSrcweir throw( uno::RuntimeException )
621cdf0e10cSrcweir {
622cdf0e10cSrcweir if( 0 <= m_nRow && m_nRow < sal::static_int_cast<sal_Int32>(m_aItems.size()) )
623cdf0e10cSrcweir {
624cdf0e10cSrcweir if( ! m_aIdents[m_nRow].is() )
625cdf0e10cSrcweir {
626cdf0e10cSrcweir FileContentIdentifier* p
627cdf0e10cSrcweir = new FileContentIdentifier( m_pMyShell,
628cdf0e10cSrcweir m_aUnqPath[ m_nRow ] );
629cdf0e10cSrcweir m_aIdents[m_nRow] = uno::Reference< ucb::XContentIdentifier >(p);
630cdf0e10cSrcweir }
631cdf0e10cSrcweir return m_aIdents[m_nRow];
632cdf0e10cSrcweir }
633cdf0e10cSrcweir return uno::Reference< ucb::XContentIdentifier >();
634cdf0e10cSrcweir }
635cdf0e10cSrcweir
636cdf0e10cSrcweir
637cdf0e10cSrcweir uno::Reference< ucb::XContent > SAL_CALL
queryContent(void)638cdf0e10cSrcweir XResultSet_impl::queryContent(
639cdf0e10cSrcweir void )
640cdf0e10cSrcweir throw( uno::RuntimeException )
641cdf0e10cSrcweir {
642cdf0e10cSrcweir if( 0 <= m_nRow && m_nRow < sal::static_int_cast<sal_Int32>(m_aItems.size()) )
643cdf0e10cSrcweir return m_pMyShell->m_pProvider->queryContent( queryContentIdentifier() );
644cdf0e10cSrcweir else
645cdf0e10cSrcweir return uno::Reference< ucb::XContent >();
646cdf0e10cSrcweir }
647cdf0e10cSrcweir
648cdf0e10cSrcweir
649cdf0e10cSrcweir // XDynamicResultSet
650cdf0e10cSrcweir
651cdf0e10cSrcweir
652cdf0e10cSrcweir // virtual
653cdf0e10cSrcweir uno::Reference< sdbc::XResultSet > SAL_CALL
getStaticResultSet()654cdf0e10cSrcweir XResultSet_impl::getStaticResultSet()
655cdf0e10cSrcweir throw( ucb::ListenerAlreadySetException,
656cdf0e10cSrcweir uno::RuntimeException )
657cdf0e10cSrcweir {
658cdf0e10cSrcweir osl::MutexGuard aGuard( m_aMutex );
659cdf0e10cSrcweir
660cdf0e10cSrcweir if ( m_xListener.is() )
661cdf0e10cSrcweir throw ucb::ListenerAlreadySetException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX ) ), uno::Reference< uno::XInterface >() );
662cdf0e10cSrcweir
663cdf0e10cSrcweir return uno::Reference< sdbc::XResultSet >( this );
664cdf0e10cSrcweir }
665cdf0e10cSrcweir
666cdf0e10cSrcweir //=========================================================================
667cdf0e10cSrcweir // virtual
668cdf0e10cSrcweir void SAL_CALL
setListener(const uno::Reference<ucb::XDynamicResultSetListener> & Listener)669cdf0e10cSrcweir XResultSet_impl::setListener(
670cdf0e10cSrcweir const uno::Reference< ucb::XDynamicResultSetListener >& Listener )
671cdf0e10cSrcweir throw( ucb::ListenerAlreadySetException,
672cdf0e10cSrcweir uno::RuntimeException )
673cdf0e10cSrcweir {
674cdf0e10cSrcweir osl::ClearableMutexGuard aGuard( m_aMutex );
675cdf0e10cSrcweir
676cdf0e10cSrcweir if ( m_xListener.is() )
677cdf0e10cSrcweir throw ucb::ListenerAlreadySetException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX ) ), uno::Reference< uno::XInterface >() );
678cdf0e10cSrcweir
679cdf0e10cSrcweir m_xListener = Listener;
680cdf0e10cSrcweir
681cdf0e10cSrcweir //////////////////////////////////////////////////////////////////////
682cdf0e10cSrcweir // Create "welcome event" and send it to listener.
683cdf0e10cSrcweir //////////////////////////////////////////////////////////////////////
684cdf0e10cSrcweir
685cdf0e10cSrcweir // Note: We only have the implementation for a static result set at the
686cdf0e10cSrcweir // moment (src590). The dynamic result sets passed to the listener
687cdf0e10cSrcweir // are a fake. This implementation will never call "notify" at the
688cdf0e10cSrcweir // listener to propagate any changes!!!
689cdf0e10cSrcweir
690cdf0e10cSrcweir uno::Any aInfo;
691cdf0e10cSrcweir aInfo <<= ucb::WelcomeDynamicResultSetStruct( this, /* "old" */
692cdf0e10cSrcweir this /* "new" */ );
693cdf0e10cSrcweir
694cdf0e10cSrcweir uno::Sequence< ucb::ListAction > aActions( 1 );
695cdf0e10cSrcweir aActions.getArray()[ 0 ] = ucb::ListAction( 0, // Position; not used
696cdf0e10cSrcweir 0, // Count; not used
697cdf0e10cSrcweir ucb::ListActionType::WELCOME,
698cdf0e10cSrcweir aInfo );
699cdf0e10cSrcweir aGuard.clear();
700cdf0e10cSrcweir
701cdf0e10cSrcweir Listener->notify(
702cdf0e10cSrcweir ucb::ListEvent(
703cdf0e10cSrcweir static_cast< cppu::OWeakObject * >( this ), aActions ) );
704cdf0e10cSrcweir }
705cdf0e10cSrcweir
706cdf0e10cSrcweir //=========================================================================
707cdf0e10cSrcweir // virtual
708cdf0e10cSrcweir void SAL_CALL
connectToCache(const uno::Reference<ucb::XDynamicResultSet> & xCache)709cdf0e10cSrcweir XResultSet_impl::connectToCache(
710cdf0e10cSrcweir const uno::Reference< ucb::XDynamicResultSet > & xCache )
711cdf0e10cSrcweir throw( ucb::ListenerAlreadySetException,
712cdf0e10cSrcweir ucb::AlreadyInitializedException,
713cdf0e10cSrcweir ucb::ServiceNotFoundException,
714cdf0e10cSrcweir uno::RuntimeException )
715cdf0e10cSrcweir {
716cdf0e10cSrcweir uno::Reference< lang::XMultiServiceFactory > mxSMgr
717cdf0e10cSrcweir = m_pMyShell->m_xMultiServiceFactory;
718cdf0e10cSrcweir
719cdf0e10cSrcweir if( m_xListener.is() )
720cdf0e10cSrcweir throw ucb::ListenerAlreadySetException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX ) ), uno::Reference< uno::XInterface >() );
721cdf0e10cSrcweir if( m_bStatic )
722cdf0e10cSrcweir throw ucb::ListenerAlreadySetException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX ) ), uno::Reference< uno::XInterface >() );
723cdf0e10cSrcweir
724cdf0e10cSrcweir uno::Reference< ucb::XSourceInitialization > xTarget(
725cdf0e10cSrcweir xCache, uno::UNO_QUERY );
726cdf0e10cSrcweir if( xTarget.is() && mxSMgr.is() )
727cdf0e10cSrcweir {
728cdf0e10cSrcweir uno::Reference< ucb::XCachedDynamicResultSetStubFactory > xStubFactory;
729cdf0e10cSrcweir try
730cdf0e10cSrcweir {
731cdf0e10cSrcweir xStubFactory
732cdf0e10cSrcweir = uno::Reference< ucb::XCachedDynamicResultSetStubFactory >(
733cdf0e10cSrcweir mxSMgr->createInstance(
734cdf0e10cSrcweir rtl::OUString::createFromAscii(
735cdf0e10cSrcweir "com.sun.star.ucb.CachedDynamicResultSetStubFactory" ) ),
736cdf0e10cSrcweir uno::UNO_QUERY );
737cdf0e10cSrcweir }
738cdf0e10cSrcweir catch ( uno::Exception const & )
739cdf0e10cSrcweir {
740cdf0e10cSrcweir }
741cdf0e10cSrcweir
742cdf0e10cSrcweir if( xStubFactory.is() )
743cdf0e10cSrcweir {
744cdf0e10cSrcweir xStubFactory->connectToCache(
745cdf0e10cSrcweir this, xCache,m_sSortingInfo, NULL );
746cdf0e10cSrcweir return;
747cdf0e10cSrcweir }
748cdf0e10cSrcweir }
749cdf0e10cSrcweir throw ucb::ServiceNotFoundException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX ) ), uno::Reference< uno::XInterface >() );
750cdf0e10cSrcweir }
751cdf0e10cSrcweir
752cdf0e10cSrcweir //=========================================================================
753cdf0e10cSrcweir // virtual
754cdf0e10cSrcweir sal_Int16 SAL_CALL
getCapabilities()755cdf0e10cSrcweir XResultSet_impl::getCapabilities()
756cdf0e10cSrcweir throw( uno::RuntimeException )
757cdf0e10cSrcweir {
758cdf0e10cSrcweir // Never set ucb::ContentResultSetCapability::SORTED
759cdf0e10cSrcweir // - Underlying content cannot provide sorted data...
760cdf0e10cSrcweir return 0;
761cdf0e10cSrcweir }
762cdf0e10cSrcweir
763cdf0e10cSrcweir // XResultSetMetaDataSupplier
764cdf0e10cSrcweir uno::Reference< sdbc::XResultSetMetaData > SAL_CALL
getMetaData(void)765cdf0e10cSrcweir XResultSet_impl::getMetaData(
766cdf0e10cSrcweir void )
767cdf0e10cSrcweir throw( sdbc::SQLException,
768cdf0e10cSrcweir uno::RuntimeException )
769cdf0e10cSrcweir {
770cdf0e10cSrcweir for ( sal_Int32 n = 0; n < m_sProperty.getLength(); ++n )
771cdf0e10cSrcweir {
772cdf0e10cSrcweir if ( m_sProperty.getConstArray()[ n ].Name.compareToAscii( "Title" )
773cdf0e10cSrcweir == 0 )
774cdf0e10cSrcweir {
775cdf0e10cSrcweir // @@@ #82177# - Determine correct value!
776cdf0e10cSrcweir sal_Bool bCaseSensitiveChildren = sal_False;
777cdf0e10cSrcweir
778cdf0e10cSrcweir std::vector< ::ucbhelper::ResultSetColumnData >
779cdf0e10cSrcweir aColumnData( m_sProperty.getLength() );
780cdf0e10cSrcweir aColumnData[ n ].isCaseSensitive = bCaseSensitiveChildren;
781cdf0e10cSrcweir
782cdf0e10cSrcweir ::ucbhelper::ResultSetMetaData* p =
783cdf0e10cSrcweir new ::ucbhelper::ResultSetMetaData(
784cdf0e10cSrcweir m_pMyShell->m_xMultiServiceFactory,
785cdf0e10cSrcweir m_sProperty,
786cdf0e10cSrcweir aColumnData );
787cdf0e10cSrcweir return uno::Reference< sdbc::XResultSetMetaData >( p );
788cdf0e10cSrcweir }
789cdf0e10cSrcweir }
790cdf0e10cSrcweir
791cdf0e10cSrcweir ::ucbhelper::ResultSetMetaData* p =
792cdf0e10cSrcweir new ::ucbhelper::ResultSetMetaData(
793cdf0e10cSrcweir m_pMyShell->m_xMultiServiceFactory, m_sProperty );
794cdf0e10cSrcweir return uno::Reference< sdbc::XResultSetMetaData >( p );
795cdf0e10cSrcweir }
796cdf0e10cSrcweir
797cdf0e10cSrcweir
798cdf0e10cSrcweir
799cdf0e10cSrcweir // XPropertySet
800cdf0e10cSrcweir uno::Reference< beans::XPropertySetInfo > SAL_CALL
getPropertySetInfo()801cdf0e10cSrcweir XResultSet_impl::getPropertySetInfo()
802cdf0e10cSrcweir throw( uno::RuntimeException)
803cdf0e10cSrcweir {
804cdf0e10cSrcweir
805cdf0e10cSrcweir uno::Sequence< beans::Property > seq(2);
806cdf0e10cSrcweir seq[0].Name = rtl::OUString::createFromAscii( "RowCount" );
807cdf0e10cSrcweir seq[0].Handle = -1;
808cdf0e10cSrcweir seq[0].Type = getCppuType( static_cast< sal_Int32* >(0) );
809cdf0e10cSrcweir seq[0].Attributes = beans::PropertyAttribute::READONLY;
810cdf0e10cSrcweir
811cdf0e10cSrcweir seq[0].Name = rtl::OUString::createFromAscii( "IsRowCountFinal" );
812cdf0e10cSrcweir seq[0].Handle = -1;
813cdf0e10cSrcweir seq[0].Type = getCppuType( static_cast< sal_Bool* >(0) );
814cdf0e10cSrcweir seq[0].Attributes = beans::PropertyAttribute::READONLY;
815cdf0e10cSrcweir
816cdf0e10cSrcweir XPropertySetInfo_impl* p = new XPropertySetInfo_impl( m_pMyShell,
817cdf0e10cSrcweir seq );
818cdf0e10cSrcweir return uno::Reference< beans::XPropertySetInfo > ( p );
819cdf0e10cSrcweir }
820cdf0e10cSrcweir
821cdf0e10cSrcweir
822cdf0e10cSrcweir
setPropertyValue(const rtl::OUString & aPropertyName,const uno::Any &)823cdf0e10cSrcweir void SAL_CALL XResultSet_impl::setPropertyValue(
824cdf0e10cSrcweir const rtl::OUString& aPropertyName, const uno::Any& )
825cdf0e10cSrcweir throw( beans::UnknownPropertyException,
826cdf0e10cSrcweir beans::PropertyVetoException,
827cdf0e10cSrcweir lang::IllegalArgumentException,
828cdf0e10cSrcweir lang::WrappedTargetException,
829cdf0e10cSrcweir uno::RuntimeException)
830cdf0e10cSrcweir {
831cdf0e10cSrcweir if( aPropertyName == rtl::OUString::createFromAscii( "IsRowCountFinal" ) ||
832cdf0e10cSrcweir aPropertyName == rtl::OUString::createFromAscii( "RowCount" ) )
833cdf0e10cSrcweir return;
834cdf0e10cSrcweir throw beans::UnknownPropertyException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX ) ), uno::Reference< uno::XInterface >() );
835cdf0e10cSrcweir }
836cdf0e10cSrcweir
837cdf0e10cSrcweir
getPropertyValue(const rtl::OUString & PropertyName)838cdf0e10cSrcweir uno::Any SAL_CALL XResultSet_impl::getPropertyValue(
839cdf0e10cSrcweir const rtl::OUString& PropertyName )
840cdf0e10cSrcweir throw( beans::UnknownPropertyException,
841cdf0e10cSrcweir lang::WrappedTargetException,
842cdf0e10cSrcweir uno::RuntimeException)
843cdf0e10cSrcweir {
844cdf0e10cSrcweir if( PropertyName == rtl::OUString::createFromAscii( "IsRowCountFinal" ) )
845cdf0e10cSrcweir {
846cdf0e10cSrcweir uno::Any aAny;
847cdf0e10cSrcweir aAny <<= m_bRowCountFinal;
848cdf0e10cSrcweir return aAny;
849cdf0e10cSrcweir }
850cdf0e10cSrcweir else if ( PropertyName == rtl::OUString::createFromAscii( "RowCount" ) )
851cdf0e10cSrcweir {
852cdf0e10cSrcweir uno::Any aAny;
853cdf0e10cSrcweir sal_Int32 count = sal::static_int_cast<sal_Int32>(m_aItems.size());
854cdf0e10cSrcweir aAny <<= count;
855cdf0e10cSrcweir return aAny;
856cdf0e10cSrcweir }
857cdf0e10cSrcweir else
858cdf0e10cSrcweir throw beans::UnknownPropertyException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX ) ), uno::Reference< uno::XInterface >() );
859cdf0e10cSrcweir }
860cdf0e10cSrcweir
861cdf0e10cSrcweir
addPropertyChangeListener(const rtl::OUString & aPropertyName,const uno::Reference<beans::XPropertyChangeListener> & xListener)862cdf0e10cSrcweir void SAL_CALL XResultSet_impl::addPropertyChangeListener(
863cdf0e10cSrcweir const rtl::OUString& aPropertyName,
864cdf0e10cSrcweir const uno::Reference< beans::XPropertyChangeListener >& xListener )
865cdf0e10cSrcweir throw( beans::UnknownPropertyException,
866cdf0e10cSrcweir lang::WrappedTargetException,
867cdf0e10cSrcweir uno::RuntimeException)
868cdf0e10cSrcweir {
869cdf0e10cSrcweir if( aPropertyName == rtl::OUString::createFromAscii( "IsRowCountFinal" ) )
870cdf0e10cSrcweir {
871cdf0e10cSrcweir osl::MutexGuard aGuard( m_aMutex );
872cdf0e10cSrcweir if ( ! m_pIsFinalListeners )
873cdf0e10cSrcweir m_pIsFinalListeners =
874cdf0e10cSrcweir new cppu::OInterfaceContainerHelper( m_aEventListenerMutex );
875cdf0e10cSrcweir
876cdf0e10cSrcweir m_pIsFinalListeners->addInterface( xListener );
877cdf0e10cSrcweir }
878cdf0e10cSrcweir else if ( aPropertyName == rtl::OUString::createFromAscii( "RowCount" ) )
879cdf0e10cSrcweir {
880cdf0e10cSrcweir osl::MutexGuard aGuard( m_aMutex );
881cdf0e10cSrcweir if ( ! m_pRowCountListeners )
882cdf0e10cSrcweir m_pRowCountListeners =
883cdf0e10cSrcweir new cppu::OInterfaceContainerHelper( m_aEventListenerMutex );
884cdf0e10cSrcweir m_pRowCountListeners->addInterface( xListener );
885cdf0e10cSrcweir }
886cdf0e10cSrcweir else
887cdf0e10cSrcweir throw beans::UnknownPropertyException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX ) ), uno::Reference< uno::XInterface >() );
888cdf0e10cSrcweir }
889cdf0e10cSrcweir
890cdf0e10cSrcweir
removePropertyChangeListener(const rtl::OUString & aPropertyName,const uno::Reference<beans::XPropertyChangeListener> & aListener)891cdf0e10cSrcweir void SAL_CALL XResultSet_impl::removePropertyChangeListener(
892cdf0e10cSrcweir const rtl::OUString& aPropertyName,
893cdf0e10cSrcweir const uno::Reference< beans::XPropertyChangeListener >& aListener )
894cdf0e10cSrcweir throw( beans::UnknownPropertyException,
895cdf0e10cSrcweir lang::WrappedTargetException,
896cdf0e10cSrcweir uno::RuntimeException)
897cdf0e10cSrcweir {
898cdf0e10cSrcweir if( aPropertyName == rtl::OUString::createFromAscii( "IsRowCountFinal" ) &&
899cdf0e10cSrcweir m_pIsFinalListeners )
900cdf0e10cSrcweir {
901cdf0e10cSrcweir osl::MutexGuard aGuard( m_aMutex );
902cdf0e10cSrcweir m_pIsFinalListeners->removeInterface( aListener );
903cdf0e10cSrcweir }
904cdf0e10cSrcweir else if ( aPropertyName == rtl::OUString::createFromAscii( "RowCount" ) &&
905cdf0e10cSrcweir m_pRowCountListeners )
906cdf0e10cSrcweir {
907cdf0e10cSrcweir osl::MutexGuard aGuard( m_aMutex );
908cdf0e10cSrcweir
909cdf0e10cSrcweir m_pRowCountListeners->removeInterface( aListener );
910cdf0e10cSrcweir }
911cdf0e10cSrcweir else
912cdf0e10cSrcweir throw beans::UnknownPropertyException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX ) ), uno::Reference< uno::XInterface >() );
913cdf0e10cSrcweir }
914cdf0e10cSrcweir
addVetoableChangeListener(const rtl::OUString &,const uno::Reference<beans::XVetoableChangeListener> &)915cdf0e10cSrcweir void SAL_CALL XResultSet_impl::addVetoableChangeListener(
916cdf0e10cSrcweir const rtl::OUString&,
917cdf0e10cSrcweir const uno::Reference< beans::XVetoableChangeListener >& )
918cdf0e10cSrcweir throw( beans::UnknownPropertyException,
919cdf0e10cSrcweir lang::WrappedTargetException,
920cdf0e10cSrcweir uno::RuntimeException)
921cdf0e10cSrcweir {
922cdf0e10cSrcweir }
923cdf0e10cSrcweir
924cdf0e10cSrcweir
removeVetoableChangeListener(const rtl::OUString &,const uno::Reference<beans::XVetoableChangeListener> &)925cdf0e10cSrcweir void SAL_CALL XResultSet_impl::removeVetoableChangeListener(
926cdf0e10cSrcweir const rtl::OUString&,
927cdf0e10cSrcweir const uno::Reference< beans::XVetoableChangeListener >& )
928cdf0e10cSrcweir throw( beans::UnknownPropertyException,
929cdf0e10cSrcweir lang::WrappedTargetException,
930cdf0e10cSrcweir uno::RuntimeException)
931cdf0e10cSrcweir {
932cdf0e10cSrcweir }
933