Line data Source code
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 :
21 : #include "formadapter.hxx"
22 : #include <tools/debug.hxx>
23 : #include <osl/diagnose.h>
24 : #include <comphelper/types.hxx>
25 : #include <comphelper/enumhelper.hxx>
26 : #include <com/sun/star/lang/XMultiServiceFactory.hpp>
27 : #include "dbu_brw.hrc"
28 : #include "dbustrings.hrc"
29 : #include <cppuhelper/typeprovider.hxx>
30 : #include <comphelper/sequence.hxx>
31 :
32 : using namespace dbaui;
33 : using namespace ::com::sun::star::uno;
34 : using namespace ::com::sun::star::sdb;
35 : using namespace ::com::sun::star::sdbcx;
36 : using namespace ::com::sun::star::beans;
37 : using namespace ::com::sun::star::container;
38 :
39 : //==================================================================
40 : // SbaXFormAdapter
41 : //==================================================================
42 :
43 : DBG_NAME(SbaXFormAdapter)
44 : // -------------------------------------------------------------------------
45 0 : SbaXFormAdapter::SbaXFormAdapter()
46 : :m_aLoadListeners(*this, m_aMutex)
47 : ,m_aRowSetListeners(*this, m_aMutex)
48 : ,m_aRowSetApproveListeners(*this, m_aMutex)
49 : ,m_aErrorListeners(*this, m_aMutex)
50 : ,m_aParameterListeners(*this, m_aMutex)
51 : ,m_aSubmitListeners(*this, m_aMutex)
52 : ,m_aResetListeners(*this, m_aMutex)
53 : ,m_aPropertyChangeListeners(*this, m_aMutex)
54 : ,m_aVetoablePropertyChangeListeners(*this, m_aMutex)
55 : ,m_aPropertiesChangeListeners(*this, m_aMutex)
56 : ,m_aDisposeListeners(m_aMutex)
57 : ,m_aContainerListeners(m_aMutex)
58 0 : ,m_nNamePropHandle(-1)
59 : {
60 : DBG_CTOR(SbaXFormAdapter,NULL);
61 :
62 0 : }
63 :
64 : // -------------------------------------------------------------------------
65 0 : SbaXFormAdapter::~SbaXFormAdapter()
66 : {
67 :
68 : DBG_DTOR(SbaXFormAdapter,NULL);
69 0 : }
70 :
71 : // -------------------------------------------------------------------------
72 0 : Sequence< Type > SAL_CALL SbaXFormAdapter::getTypes( ) throw (RuntimeException)
73 : {
74 : return ::comphelper::concatSequences(
75 : SbaXFormAdapter_BASE1::getTypes(),
76 : SbaXFormAdapter_BASE2::getTypes(),
77 : SbaXFormAdapter_BASE3::getTypes()
78 0 : );
79 : }
80 :
81 : // -------------------------------------------------------------------------
82 0 : Sequence< sal_Int8 > SAL_CALL SbaXFormAdapter::getImplementationId( ) throw (RuntimeException)
83 : {
84 : static ::cppu::OImplementationId * pId = 0;
85 0 : if (! pId)
86 : {
87 0 : ::osl::MutexGuard aGuard( ::osl::Mutex::getGlobalMutex() );
88 0 : if (! pId)
89 : {
90 0 : static ::cppu::OImplementationId aId;
91 0 : pId = &aId;
92 0 : }
93 : }
94 0 : return pId->getImplementationId();
95 : }
96 :
97 : // -------------------------------------------------------------------------
98 0 : Any SAL_CALL SbaXFormAdapter::queryInterface(const Type& _rType) throw (RuntimeException)
99 : {
100 0 : Any aReturn = SbaXFormAdapter_BASE1::queryInterface( _rType );
101 :
102 0 : if (!aReturn.hasValue())
103 0 : aReturn = SbaXFormAdapter_BASE2::queryInterface( _rType );
104 :
105 0 : if (!aReturn.hasValue())
106 0 : aReturn = SbaXFormAdapter_BASE3::queryInterface( _rType );
107 :
108 0 : return aReturn;
109 : }
110 :
111 : // -------------------------------------------------------------------------
112 0 : void SbaXFormAdapter::StopListening()
113 : {
114 : // log off all our multiplexers
115 0 : STOP_MULTIPLEXER_LISTENING(LoadListener, m_aLoadListeners, ::com::sun::star::form::XLoadable, m_xMainForm);
116 0 : STOP_MULTIPLEXER_LISTENING(RowSetListener, m_aRowSetListeners, ::com::sun::star::sdbc::XRowSet, m_xMainForm);
117 0 : STOP_MULTIPLEXER_LISTENING(RowSetApproveListener, m_aRowSetApproveListeners, ::com::sun::star::sdb::XRowSetApproveBroadcaster, m_xMainForm);
118 0 : STOP_MULTIPLEXER_LISTENING(SQLErrorListener, m_aErrorListeners, ::com::sun::star::sdb::XSQLErrorBroadcaster, m_xMainForm);
119 0 : STOP_MULTIPLEXER_LISTENING(SubmitListener, m_aSubmitListeners, ::com::sun::star::form::XSubmit, m_xMainForm);
120 0 : STOP_MULTIPLEXER_LISTENING(ResetListener, m_aResetListeners, ::com::sun::star::form::XReset, m_xMainForm);
121 :
122 0 : if (m_aParameterListeners.getLength())
123 : {
124 0 : Reference< ::com::sun::star::form::XDatabaseParameterBroadcaster > xBroadcaster(m_xMainForm, UNO_QUERY);
125 0 : if (xBroadcaster.is())
126 0 : xBroadcaster->removeParameterListener(&m_aParameterListeners);
127 : }
128 :
129 0 : STOP_PROPERTY_MULTIPLEXER_LISTENING(PropertyChangeListener, m_aPropertyChangeListeners, ::com::sun::star::beans::XPropertySet, m_xMainForm);
130 0 : STOP_PROPERTY_MULTIPLEXER_LISTENING(VetoableChangeListener, m_aVetoablePropertyChangeListeners, ::com::sun::star::beans::XPropertySet, m_xMainForm);
131 0 : if (m_aPropertiesChangeListeners.getLength())
132 : {
133 0 : Reference< ::com::sun::star::beans::XMultiPropertySet > xBroadcaster(m_xMainForm, UNO_QUERY);
134 0 : if (xBroadcaster.is())
135 0 : xBroadcaster->removePropertiesChangeListener(&m_aPropertiesChangeListeners);
136 : }
137 :
138 : // log off ourself
139 0 : Reference< ::com::sun::star::lang::XComponent > xComp(m_xMainForm, UNO_QUERY);
140 0 : if (xComp.is())
141 0 : xComp->removeEventListener((::com::sun::star::lang::XEventListener*)(::com::sun::star::beans::XPropertyChangeListener*)this);
142 0 : }
143 :
144 : // -------------------------------------------------------------------------
145 0 : void SbaXFormAdapter::StartListening()
146 : {
147 : // log off all our multiplexers
148 0 : START_MULTIPLEXER_LISTENING(LoadListener, m_aLoadListeners, ::com::sun::star::form::XLoadable, m_xMainForm);
149 0 : START_MULTIPLEXER_LISTENING(RowSetListener, m_aRowSetListeners, ::com::sun::star::sdbc::XRowSet, m_xMainForm);
150 0 : START_MULTIPLEXER_LISTENING(RowSetApproveListener, m_aRowSetApproveListeners, ::com::sun::star::sdb::XRowSetApproveBroadcaster, m_xMainForm);
151 0 : START_MULTIPLEXER_LISTENING(SQLErrorListener, m_aErrorListeners, ::com::sun::star::sdb::XSQLErrorBroadcaster, m_xMainForm);
152 0 : START_MULTIPLEXER_LISTENING(SubmitListener, m_aSubmitListeners, ::com::sun::star::form::XSubmit, m_xMainForm);
153 0 : START_MULTIPLEXER_LISTENING(ResetListener, m_aResetListeners, ::com::sun::star::form::XReset, m_xMainForm);
154 :
155 0 : if (m_aParameterListeners.getLength())
156 : {
157 0 : Reference< ::com::sun::star::form::XDatabaseParameterBroadcaster > xBroadcaster(m_xMainForm, UNO_QUERY);
158 0 : if (xBroadcaster.is())
159 0 : xBroadcaster->addParameterListener(&m_aParameterListeners);
160 : }
161 :
162 0 : START_PROPERTY_MULTIPLEXER_LISTENING(PropertyChangeListener, m_aPropertyChangeListeners, ::com::sun::star::beans::XPropertySet, m_xMainForm);
163 0 : START_PROPERTY_MULTIPLEXER_LISTENING(VetoableChangeListener, m_aVetoablePropertyChangeListeners, ::com::sun::star::beans::XPropertySet, m_xMainForm);
164 0 : if (m_aPropertiesChangeListeners.getLength())
165 : {
166 0 : Reference< ::com::sun::star::beans::XMultiPropertySet > xBroadcaster(m_xMainForm, UNO_QUERY);
167 0 : ::rtl::OUString sEmpty;
168 0 : if (xBroadcaster.is())
169 0 : xBroadcaster->addPropertiesChangeListener(::comphelper::StringSequence(&sEmpty, 1), &m_aPropertiesChangeListeners);
170 : }
171 :
172 : // log off ourself
173 0 : Reference< ::com::sun::star::lang::XComponent > xComp(m_xMainForm, UNO_QUERY);
174 0 : if (xComp.is())
175 0 : xComp->addEventListener((::com::sun::star::lang::XEventListener*)(::com::sun::star::beans::XPropertyChangeListener*)this);
176 0 : }
177 :
178 : // -------------------------------------------------------------------------
179 0 : void SbaXFormAdapter::AttachForm(const Reference< ::com::sun::star::sdbc::XRowSet >& xNewMaster)
180 : {
181 0 : if (xNewMaster == m_xMainForm)
182 0 : return;
183 :
184 : OSL_ENSURE(xNewMaster.get() != static_cast< ::com::sun::star::sdbc::XRowSet* >(this), "SbaXFormAdapter::AttachForm : invalid argument !");
185 :
186 0 : if (m_xMainForm.is())
187 : {
188 0 : StopListening();
189 :
190 : // if our old master is loaded we have to send an 'unloaded' event
191 0 : Reference< ::com::sun::star::form::XLoadable > xLoadable(m_xMainForm, UNO_QUERY);
192 0 : if (xLoadable->isLoaded())
193 : {
194 0 : ::com::sun::star::lang::EventObject aEvt(*this);
195 0 : ::cppu::OInterfaceIteratorHelper aIt(m_aLoadListeners);
196 0 : while (aIt.hasMoreElements())
197 0 : ((::com::sun::star::form::XLoadListener*)aIt.next())->unloaded(aEvt);
198 0 : }
199 : }
200 :
201 0 : m_xMainForm = xNewMaster;
202 :
203 0 : if (m_xMainForm.is())
204 : {
205 0 : StartListening();
206 :
207 : // if our new master is loaded we have to send an 'loaded' event
208 0 : Reference< ::com::sun::star::form::XLoadable > xLoadable(m_xMainForm, UNO_QUERY);
209 0 : if (xLoadable->isLoaded())
210 : {
211 0 : ::com::sun::star::lang::EventObject aEvt(*this);
212 0 : ::cppu::OInterfaceIteratorHelper aIt(m_aLoadListeners);
213 0 : while (aIt.hasMoreElements())
214 0 : ((::com::sun::star::form::XLoadListener*)aIt.next())->loaded(aEvt);
215 0 : }
216 : }
217 :
218 : // TODO : perhaps _all_ of our listeners should be notified about our new state
219 : // (nearly every aspect of us may have changed with new master form)
220 : }
221 :
222 : // ::com::sun::star::sdbc::XCloseable
223 : // -------------------------------------------------------------------------
224 0 : void SAL_CALL SbaXFormAdapter::close() throw( ::com::sun::star::sdbc::SQLException, RuntimeException )
225 : {
226 0 : Reference< ::com::sun::star::sdbc::XCloseable > xIface(m_xMainForm, UNO_QUERY);
227 0 : if (xIface.is())
228 0 : xIface->close();
229 0 : }
230 :
231 : // ::com::sun::star::sdbc::XResultSetMetaDataSupplier
232 : // -------------------------------------------------------------------------
233 0 : Reference< ::com::sun::star::sdbc::XResultSetMetaData > SAL_CALL SbaXFormAdapter::getMetaData() throw( ::com::sun::star::sdbc::SQLException, RuntimeException )
234 : {
235 0 : Reference< ::com::sun::star::sdbc::XResultSetMetaDataSupplier > xIface(m_xMainForm, UNO_QUERY);
236 0 : if (xIface.is())
237 0 : return xIface->getMetaData();
238 0 : return Reference< ::com::sun::star::sdbc::XResultSetMetaData > ();
239 : }
240 :
241 : // ::com::sun::star::sdbc::XColumnLocate
242 : // -------------------------------------------------------------------------
243 0 : sal_Int32 SAL_CALL SbaXFormAdapter::findColumn(const ::rtl::OUString& columnName) throw( ::com::sun::star::sdbc::SQLException, RuntimeException )
244 : {
245 0 : Reference< ::com::sun::star::sdbc::XColumnLocate > xIface(m_xMainForm, UNO_QUERY);
246 0 : if (xIface.is())
247 0 : return xIface->findColumn(columnName);
248 0 : return 0;
249 : }
250 :
251 : // ::com::sun::star::sdbcx::XColumnsSupplier
252 : // -------------------------------------------------------------------------
253 0 : Reference< ::com::sun::star::container::XNameAccess > SAL_CALL SbaXFormAdapter::getColumns() throw( RuntimeException )
254 : {
255 0 : Reference< ::com::sun::star::sdbcx::XColumnsSupplier > xIface(m_xMainForm, UNO_QUERY);
256 0 : if (xIface.is())
257 0 : return xIface->getColumns();
258 0 : return Reference< ::com::sun::star::container::XNameAccess > ();
259 : }
260 :
261 : // ::com::sun::star::sdbc::XRow
262 : // -------------------------------------------------------------------------
263 0 : sal_Bool SAL_CALL SbaXFormAdapter::wasNull() throw( ::com::sun::star::sdbc::SQLException, RuntimeException )
264 : {
265 0 : Reference< ::com::sun::star::sdbc::XRow > xIface(m_xMainForm, UNO_QUERY);
266 0 : if (xIface.is())
267 0 : return xIface->wasNull();
268 0 : return sal_True;
269 : }
270 : // -------------------------------------------------------------------------
271 0 : ::rtl::OUString SAL_CALL SbaXFormAdapter::getString(sal_Int32 columnIndex) throw( ::com::sun::star::sdbc::SQLException, RuntimeException )
272 : {
273 0 : Reference< ::com::sun::star::sdbc::XRow > xIface(m_xMainForm, UNO_QUERY);
274 0 : if (xIface.is())
275 0 : return xIface->getString(columnIndex);
276 0 : return ::rtl::OUString();
277 : }
278 : // -------------------------------------------------------------------------
279 0 : sal_Bool SAL_CALL SbaXFormAdapter::getBoolean(sal_Int32 columnIndex) throw( ::com::sun::star::sdbc::SQLException, RuntimeException )
280 : {
281 0 : Reference< ::com::sun::star::sdbc::XRow > xIface(m_xMainForm, UNO_QUERY);
282 0 : if (xIface.is())
283 0 : return xIface->getBoolean(columnIndex);
284 0 : return sal_False;
285 : }
286 : // -------------------------------------------------------------------------
287 0 : sal_Int8 SAL_CALL SbaXFormAdapter::getByte(sal_Int32 columnIndex) throw( ::com::sun::star::sdbc::SQLException, RuntimeException )
288 : {
289 0 : Reference< ::com::sun::star::sdbc::XRow > xIface(m_xMainForm, UNO_QUERY);
290 0 : if (xIface.is())
291 0 : return xIface->getByte(columnIndex);
292 0 : return 0;
293 : }
294 : // -------------------------------------------------------------------------
295 0 : sal_Int16 SAL_CALL SbaXFormAdapter::getShort(sal_Int32 columnIndex) throw( ::com::sun::star::sdbc::SQLException, RuntimeException )
296 : {
297 0 : Reference< ::com::sun::star::sdbc::XRow > xIface(m_xMainForm, UNO_QUERY);
298 0 : if (xIface.is())
299 0 : return xIface->getShort(columnIndex);
300 0 : return 0;
301 : }
302 : // -------------------------------------------------------------------------
303 0 : sal_Int32 SAL_CALL SbaXFormAdapter::getInt(sal_Int32 columnIndex) throw( ::com::sun::star::sdbc::SQLException, RuntimeException )
304 : {
305 0 : Reference< ::com::sun::star::sdbc::XRow > xIface(m_xMainForm, UNO_QUERY);
306 0 : if (xIface.is())
307 0 : return xIface->getInt(columnIndex);
308 0 : return 0;
309 : }
310 : // -------------------------------------------------------------------------
311 0 : sal_Int64 SAL_CALL SbaXFormAdapter::getLong(sal_Int32 columnIndex) throw( ::com::sun::star::sdbc::SQLException, RuntimeException )
312 : {
313 0 : Reference< ::com::sun::star::sdbc::XRow > xIface(m_xMainForm, UNO_QUERY);
314 0 : if (xIface.is())
315 0 : return xIface->getLong(columnIndex);
316 0 : return 0;
317 : }
318 : // -------------------------------------------------------------------------
319 0 : float SAL_CALL SbaXFormAdapter::getFloat(sal_Int32 columnIndex) throw( ::com::sun::star::sdbc::SQLException, RuntimeException )
320 : {
321 0 : Reference< ::com::sun::star::sdbc::XRow > xIface(m_xMainForm, UNO_QUERY);
322 0 : if (xIface.is())
323 0 : return xIface->getFloat(columnIndex);
324 0 : return 0.0;
325 : }
326 : // -------------------------------------------------------------------------
327 0 : double SAL_CALL SbaXFormAdapter::getDouble(sal_Int32 columnIndex) throw( ::com::sun::star::sdbc::SQLException, RuntimeException )
328 : {
329 0 : Reference< ::com::sun::star::sdbc::XRow > xIface(m_xMainForm, UNO_QUERY);
330 0 : if (xIface.is())
331 0 : return xIface->getDouble(columnIndex);
332 0 : return 0.0;
333 : }
334 : // -------------------------------------------------------------------------
335 0 : Sequence< sal_Int8 > SAL_CALL SbaXFormAdapter::getBytes(sal_Int32 columnIndex) throw( ::com::sun::star::sdbc::SQLException, RuntimeException )
336 : {
337 0 : Reference< ::com::sun::star::sdbc::XRow > xIface(m_xMainForm, UNO_QUERY);
338 0 : if (xIface.is())
339 0 : return xIface->getBytes(columnIndex);
340 0 : return Sequence <sal_Int8> ();
341 : }
342 : // -------------------------------------------------------------------------
343 0 : ::com::sun::star::util::Date SAL_CALL SbaXFormAdapter::getDate(sal_Int32 columnIndex) throw( ::com::sun::star::sdbc::SQLException, RuntimeException )
344 : {
345 0 : Reference< ::com::sun::star::sdbc::XRow > xIface(m_xMainForm, UNO_QUERY);
346 0 : if (xIface.is())
347 0 : return xIface->getDate(columnIndex);
348 0 : return ::com::sun::star::util::Date();
349 : }
350 : // -------------------------------------------------------------------------
351 0 : ::com::sun::star::util::Time SAL_CALL SbaXFormAdapter::getTime(sal_Int32 columnIndex) throw( ::com::sun::star::sdbc::SQLException, RuntimeException )
352 : {
353 0 : Reference< ::com::sun::star::sdbc::XRow > xIface(m_xMainForm, UNO_QUERY);
354 0 : if (xIface.is())
355 0 : return xIface->getTime(columnIndex);
356 0 : return ::com::sun::star::util::Time();
357 : }
358 : // -------------------------------------------------------------------------
359 0 : ::com::sun::star::util::DateTime SAL_CALL SbaXFormAdapter::getTimestamp(sal_Int32 columnIndex) throw( ::com::sun::star::sdbc::SQLException, RuntimeException )
360 : {
361 0 : Reference< ::com::sun::star::sdbc::XRow > xIface(m_xMainForm, UNO_QUERY);
362 0 : if (xIface.is())
363 0 : return xIface->getTimestamp(columnIndex);
364 0 : return ::com::sun::star::util::DateTime();
365 : }
366 : // -------------------------------------------------------------------------
367 0 : Reference< ::com::sun::star::io::XInputStream > SAL_CALL SbaXFormAdapter::getBinaryStream(sal_Int32 columnIndex) throw( ::com::sun::star::sdbc::SQLException, RuntimeException )
368 : {
369 0 : Reference< ::com::sun::star::sdbc::XRow > xIface(m_xMainForm, UNO_QUERY);
370 0 : if (xIface.is())
371 0 : return xIface->getBinaryStream(columnIndex);
372 0 : return Reference< ::com::sun::star::io::XInputStream > ();
373 : }
374 : // -------------------------------------------------------------------------
375 0 : Reference< ::com::sun::star::io::XInputStream > SAL_CALL SbaXFormAdapter::getCharacterStream(sal_Int32 columnIndex) throw( ::com::sun::star::sdbc::SQLException, RuntimeException )
376 : {
377 0 : Reference< ::com::sun::star::sdbc::XRow > xIface(m_xMainForm, UNO_QUERY);
378 0 : if (xIface.is())
379 0 : return xIface->getCharacterStream(columnIndex);
380 0 : return Reference< ::com::sun::star::io::XInputStream > ();
381 : }
382 : // -------------------------------------------------------------------------
383 0 : Any SAL_CALL SbaXFormAdapter::getObject(sal_Int32 columnIndex, const Reference< ::com::sun::star::container::XNameAccess >& typeMap) throw( ::com::sun::star::sdbc::SQLException, RuntimeException )
384 : {
385 0 : Reference< ::com::sun::star::sdbc::XRow > xIface(m_xMainForm, UNO_QUERY);
386 0 : if (xIface.is())
387 0 : return xIface->getObject(columnIndex, typeMap);
388 0 : return Any();
389 : }
390 : // -------------------------------------------------------------------------
391 0 : Reference< ::com::sun::star::sdbc::XRef > SAL_CALL SbaXFormAdapter::getRef(sal_Int32 columnIndex) throw( ::com::sun::star::sdbc::SQLException, RuntimeException )
392 : {
393 0 : Reference< ::com::sun::star::sdbc::XRow > xIface(m_xMainForm, UNO_QUERY);
394 0 : if (xIface.is())
395 0 : return xIface->getRef(columnIndex);
396 0 : return Reference< ::com::sun::star::sdbc::XRef > ();
397 : }
398 : // -------------------------------------------------------------------------
399 0 : Reference< ::com::sun::star::sdbc::XBlob > SAL_CALL SbaXFormAdapter::getBlob(sal_Int32 columnIndex) throw( ::com::sun::star::sdbc::SQLException, RuntimeException )
400 : {
401 0 : Reference< ::com::sun::star::sdbc::XRow > xIface(m_xMainForm, UNO_QUERY);
402 0 : if (xIface.is())
403 0 : return xIface->getBlob(columnIndex);
404 0 : return Reference< ::com::sun::star::sdbc::XBlob > ();
405 : }
406 : // -------------------------------------------------------------------------
407 0 : Reference< ::com::sun::star::sdbc::XClob > SAL_CALL SbaXFormAdapter::getClob(sal_Int32 columnIndex) throw( ::com::sun::star::sdbc::SQLException, RuntimeException )
408 : {
409 0 : Reference< ::com::sun::star::sdbc::XRow > xIface(m_xMainForm, UNO_QUERY);
410 0 : if (xIface.is())
411 0 : return xIface->getClob(columnIndex);
412 0 : return Reference< ::com::sun::star::sdbc::XClob > ();
413 : }
414 : // -------------------------------------------------------------------------
415 0 : Reference< ::com::sun::star::sdbc::XArray > SAL_CALL SbaXFormAdapter::getArray(sal_Int32 columnIndex) throw( ::com::sun::star::sdbc::SQLException, RuntimeException )
416 : {
417 0 : Reference< ::com::sun::star::sdbc::XRow > xIface(m_xMainForm, UNO_QUERY);
418 0 : if (xIface.is())
419 0 : return xIface->getArray(columnIndex);
420 0 : return Reference< ::com::sun::star::sdbc::XArray > ();
421 : }
422 :
423 : // ::com::sun::star::sdbcx::XRowLocate
424 : // -------------------------------------------------------------------------
425 0 : Any SAL_CALL SbaXFormAdapter::getBookmark() throw( ::com::sun::star::sdbc::SQLException, RuntimeException )
426 : {
427 0 : Reference< ::com::sun::star::sdbcx::XRowLocate > xIface(m_xMainForm, UNO_QUERY);
428 0 : if (xIface.is())
429 0 : return xIface->getBookmark();
430 0 : return Any();
431 : }
432 : // -------------------------------------------------------------------------
433 0 : sal_Bool SAL_CALL SbaXFormAdapter::moveToBookmark(const Any& bookmark) throw( ::com::sun::star::sdbc::SQLException, RuntimeException )
434 : {
435 0 : Reference< ::com::sun::star::sdbcx::XRowLocate > xIface(m_xMainForm, UNO_QUERY);
436 0 : if (xIface.is())
437 0 : return xIface->moveToBookmark(bookmark);
438 0 : return sal_False;
439 : }
440 : // -------------------------------------------------------------------------
441 0 : sal_Bool SAL_CALL SbaXFormAdapter::moveRelativeToBookmark(const Any& bookmark, sal_Int32 rows) throw( ::com::sun::star::sdbc::SQLException, RuntimeException )
442 : {
443 0 : Reference< ::com::sun::star::sdbcx::XRowLocate > xIface(m_xMainForm, UNO_QUERY);
444 0 : if (xIface.is())
445 0 : return xIface->moveRelativeToBookmark(bookmark,rows);
446 0 : return sal_False;
447 : }
448 : // -------------------------------------------------------------------------
449 0 : sal_Int32 SAL_CALL SbaXFormAdapter::compareBookmarks(const Any& _first, const Any& _second) throw( ::com::sun::star::sdbc::SQLException, RuntimeException )
450 : {
451 0 : Reference< ::com::sun::star::sdbcx::XRowLocate > xIface(m_xMainForm, UNO_QUERY);
452 0 : if (xIface.is())
453 0 : return xIface->compareBookmarks(_first, _second);
454 0 : return 0;
455 : }
456 :
457 : // -------------------------------------------------------------------------
458 0 : sal_Bool SAL_CALL SbaXFormAdapter::hasOrderedBookmarks() throw( ::com::sun::star::sdbc::SQLException, RuntimeException )
459 : {
460 0 : Reference< ::com::sun::star::sdbcx::XRowLocate > xIface(m_xMainForm, UNO_QUERY);
461 0 : if (xIface.is())
462 0 : return xIface->hasOrderedBookmarks();
463 0 : return sal_False;
464 : }
465 :
466 : // -------------------------------------------------------------------------
467 0 : sal_Int32 SAL_CALL SbaXFormAdapter::hashBookmark(const Any& bookmark) throw( ::com::sun::star::sdbc::SQLException, RuntimeException )
468 : {
469 0 : Reference< ::com::sun::star::sdbcx::XRowLocate > xIface(m_xMainForm, UNO_QUERY);
470 0 : if (xIface.is())
471 0 : return xIface->hashBookmark(bookmark);
472 0 : return 0;
473 : }
474 :
475 : // ::com::sun::star::sdbc::XRowUpdate
476 : // -------------------------------------------------------------------------
477 0 : void SAL_CALL SbaXFormAdapter::updateNull(sal_Int32 columnIndex) throw( ::com::sun::star::sdbc::SQLException, RuntimeException )
478 : {
479 0 : Reference< ::com::sun::star::sdbc::XRowUpdate > xIface(m_xMainForm, UNO_QUERY);
480 0 : if (xIface.is())
481 0 : xIface->updateNull(columnIndex);
482 0 : }
483 : // -------------------------------------------------------------------------
484 0 : void SAL_CALL SbaXFormAdapter::updateBoolean(sal_Int32 columnIndex, sal_Bool x) throw( ::com::sun::star::sdbc::SQLException, RuntimeException )
485 : {
486 0 : Reference< ::com::sun::star::sdbc::XRowUpdate > xIface(m_xMainForm, UNO_QUERY);
487 0 : if (xIface.is())
488 0 : xIface->updateBoolean(columnIndex, x);
489 0 : }
490 : // -------------------------------------------------------------------------
491 0 : void SAL_CALL SbaXFormAdapter::updateByte(sal_Int32 columnIndex, sal_Int8 x) throw( ::com::sun::star::sdbc::SQLException, RuntimeException )
492 : {
493 0 : Reference< ::com::sun::star::sdbc::XRowUpdate > xIface(m_xMainForm, UNO_QUERY);
494 0 : if (xIface.is())
495 0 : xIface->updateByte(columnIndex, x);
496 0 : }
497 : // -------------------------------------------------------------------------
498 0 : void SAL_CALL SbaXFormAdapter::updateShort(sal_Int32 columnIndex, sal_Int16 x) throw( ::com::sun::star::sdbc::SQLException, RuntimeException )
499 : {
500 0 : Reference< ::com::sun::star::sdbc::XRowUpdate > xIface(m_xMainForm, UNO_QUERY);
501 0 : if (xIface.is())
502 0 : xIface->updateShort(columnIndex, x);
503 0 : }
504 : // -------------------------------------------------------------------------
505 0 : void SAL_CALL SbaXFormAdapter::updateInt(sal_Int32 columnIndex, sal_Int32 x) throw( ::com::sun::star::sdbc::SQLException, RuntimeException )
506 : {
507 0 : Reference< ::com::sun::star::sdbc::XRowUpdate > xIface(m_xMainForm, UNO_QUERY);
508 0 : if (xIface.is())
509 0 : xIface->updateInt(columnIndex, x);
510 0 : }
511 : // -------------------------------------------------------------------------
512 0 : void SAL_CALL SbaXFormAdapter::updateLong(sal_Int32 columnIndex, sal_Int64 x) throw( ::com::sun::star::sdbc::SQLException, RuntimeException )
513 : {
514 0 : Reference< ::com::sun::star::sdbc::XRowUpdate > xIface(m_xMainForm, UNO_QUERY);
515 0 : if (xIface.is())
516 0 : xIface->updateLong(columnIndex, x);
517 0 : }
518 : // -------------------------------------------------------------------------
519 0 : void SAL_CALL SbaXFormAdapter::updateFloat(sal_Int32 columnIndex, float x) throw( ::com::sun::star::sdbc::SQLException, RuntimeException )
520 : {
521 0 : Reference< ::com::sun::star::sdbc::XRowUpdate > xIface(m_xMainForm, UNO_QUERY);
522 0 : if (xIface.is())
523 0 : xIface->updateFloat(columnIndex, x);
524 0 : }
525 : // -------------------------------------------------------------------------
526 0 : void SAL_CALL SbaXFormAdapter::updateDouble(sal_Int32 columnIndex, double x) throw( ::com::sun::star::sdbc::SQLException, RuntimeException )
527 : {
528 0 : Reference< ::com::sun::star::sdbc::XRowUpdate > xIface(m_xMainForm, UNO_QUERY);
529 0 : if (xIface.is())
530 0 : xIface->updateDouble(columnIndex, x);
531 0 : }
532 : // -------------------------------------------------------------------------
533 0 : void SAL_CALL SbaXFormAdapter::updateString(sal_Int32 columnIndex, const ::rtl::OUString& x) throw( ::com::sun::star::sdbc::SQLException, RuntimeException )
534 : {
535 0 : Reference< ::com::sun::star::sdbc::XRowUpdate > xIface(m_xMainForm, UNO_QUERY);
536 0 : if (xIface.is())
537 0 : xIface->updateString(columnIndex, x);
538 0 : }
539 : // -------------------------------------------------------------------------
540 0 : void SAL_CALL SbaXFormAdapter::updateBytes(sal_Int32 columnIndex, const Sequence< sal_Int8 >& x) throw( ::com::sun::star::sdbc::SQLException, RuntimeException )
541 : {
542 0 : Reference< ::com::sun::star::sdbc::XRowUpdate > xIface(m_xMainForm, UNO_QUERY);
543 0 : if (xIface.is())
544 0 : xIface->updateBytes(columnIndex, x);
545 0 : }
546 : // -------------------------------------------------------------------------
547 0 : void SAL_CALL SbaXFormAdapter::updateDate(sal_Int32 columnIndex, const ::com::sun::star::util::Date& x) throw( ::com::sun::star::sdbc::SQLException, RuntimeException )
548 : {
549 0 : Reference< ::com::sun::star::sdbc::XRowUpdate > xIface(m_xMainForm, UNO_QUERY);
550 0 : if (xIface.is())
551 0 : xIface->updateDate(columnIndex, x);
552 0 : }
553 : // -------------------------------------------------------------------------
554 0 : void SAL_CALL SbaXFormAdapter::updateTime(sal_Int32 columnIndex, const ::com::sun::star::util::Time& x) throw( ::com::sun::star::sdbc::SQLException, RuntimeException )
555 : {
556 0 : Reference< ::com::sun::star::sdbc::XRowUpdate > xIface(m_xMainForm, UNO_QUERY);
557 0 : if (xIface.is())
558 0 : xIface->updateTime(columnIndex, x);
559 0 : }
560 : // -------------------------------------------------------------------------
561 0 : void SAL_CALL SbaXFormAdapter::updateTimestamp(sal_Int32 columnIndex, const ::com::sun::star::util::DateTime& x) throw( ::com::sun::star::sdbc::SQLException, RuntimeException )
562 : {
563 0 : Reference< ::com::sun::star::sdbc::XRowUpdate > xIface(m_xMainForm, UNO_QUERY);
564 0 : if (xIface.is())
565 0 : xIface->updateTimestamp(columnIndex, x);
566 0 : }
567 : // -------------------------------------------------------------------------
568 0 : void SAL_CALL SbaXFormAdapter::updateBinaryStream(sal_Int32 columnIndex, const Reference< ::com::sun::star::io::XInputStream >& x, sal_Int32 length) throw( ::com::sun::star::sdbc::SQLException, RuntimeException )
569 : {
570 0 : Reference< ::com::sun::star::sdbc::XRowUpdate > xIface(m_xMainForm, UNO_QUERY);
571 0 : if (xIface.is())
572 0 : xIface->updateBinaryStream(columnIndex, x, length);
573 0 : }
574 : // -------------------------------------------------------------------------
575 0 : void SAL_CALL SbaXFormAdapter::updateCharacterStream(sal_Int32 columnIndex, const Reference< ::com::sun::star::io::XInputStream >& x, sal_Int32 length) throw( ::com::sun::star::sdbc::SQLException, RuntimeException )
576 : {
577 0 : Reference< ::com::sun::star::sdbc::XRowUpdate > xIface(m_xMainForm, UNO_QUERY);
578 0 : if (xIface.is())
579 0 : xIface->updateCharacterStream(columnIndex, x, length);
580 0 : }
581 : // -------------------------------------------------------------------------
582 0 : void SAL_CALL SbaXFormAdapter::updateObject(sal_Int32 columnIndex, const Any& x) throw( ::com::sun::star::sdbc::SQLException, RuntimeException )
583 : {
584 0 : Reference< ::com::sun::star::sdbc::XRowUpdate > xIface(m_xMainForm, UNO_QUERY);
585 0 : if (xIface.is())
586 0 : xIface->updateObject(columnIndex, x);
587 0 : }
588 : // -------------------------------------------------------------------------
589 0 : void SAL_CALL SbaXFormAdapter::updateNumericObject(sal_Int32 columnIndex, const Any& x, sal_Int32 scale) throw( ::com::sun::star::sdbc::SQLException, RuntimeException )
590 : {
591 0 : Reference< ::com::sun::star::sdbc::XRowUpdate > xIface(m_xMainForm, UNO_QUERY);
592 0 : if (xIface.is())
593 0 : xIface->updateNumericObject(columnIndex, x, scale);
594 0 : }
595 :
596 : // ::com::sun::star::sdbc::XResultSet
597 : // -------------------------------------------------------------------------
598 0 : sal_Bool SAL_CALL SbaXFormAdapter::next() throw( ::com::sun::star::sdbc::SQLException, RuntimeException )
599 : {
600 0 : if (m_xMainForm.is())
601 0 : return m_xMainForm->next();
602 0 : return sal_False;
603 : }
604 : // -------------------------------------------------------------------------
605 0 : sal_Bool SAL_CALL SbaXFormAdapter::isBeforeFirst() throw( ::com::sun::star::sdbc::SQLException, RuntimeException )
606 : {
607 0 : if (m_xMainForm.is())
608 0 : return m_xMainForm->isBeforeFirst();
609 0 : return sal_False;
610 : }
611 : // -------------------------------------------------------------------------
612 0 : sal_Bool SAL_CALL SbaXFormAdapter::isAfterLast() throw( ::com::sun::star::sdbc::SQLException, RuntimeException )
613 : {
614 0 : if (m_xMainForm.is())
615 0 : return m_xMainForm->isAfterLast();
616 0 : return sal_False;
617 : }
618 : // -------------------------------------------------------------------------
619 0 : sal_Bool SAL_CALL SbaXFormAdapter::isFirst() throw( ::com::sun::star::sdbc::SQLException, RuntimeException )
620 : {
621 0 : if (m_xMainForm.is())
622 0 : return m_xMainForm->isFirst();
623 0 : return sal_False;
624 : }
625 : // -------------------------------------------------------------------------
626 0 : sal_Bool SAL_CALL SbaXFormAdapter::isLast() throw( ::com::sun::star::sdbc::SQLException, RuntimeException )
627 : {
628 0 : if (m_xMainForm.is())
629 0 : return m_xMainForm->isLast();
630 0 : return sal_False;
631 : }
632 : // -------------------------------------------------------------------------
633 0 : void SAL_CALL SbaXFormAdapter::beforeFirst() throw( ::com::sun::star::sdbc::SQLException, RuntimeException )
634 : {
635 0 : if (m_xMainForm.is())
636 0 : m_xMainForm->beforeFirst();
637 0 : }
638 : // -------------------------------------------------------------------------
639 0 : void SAL_CALL SbaXFormAdapter::afterLast() throw( ::com::sun::star::sdbc::SQLException, RuntimeException )
640 : {
641 0 : if (m_xMainForm.is())
642 0 : m_xMainForm->afterLast();
643 0 : }
644 : // -------------------------------------------------------------------------
645 0 : sal_Bool SAL_CALL SbaXFormAdapter::first() throw( ::com::sun::star::sdbc::SQLException, RuntimeException )
646 : {
647 0 : if (m_xMainForm.is())
648 0 : return m_xMainForm->first();
649 0 : return sal_False;
650 : }
651 : // -------------------------------------------------------------------------
652 0 : sal_Bool SAL_CALL SbaXFormAdapter::last() throw( ::com::sun::star::sdbc::SQLException, RuntimeException )
653 : {
654 0 : if (m_xMainForm.is())
655 0 : return m_xMainForm->last();
656 0 : return sal_False;
657 : }
658 : // -------------------------------------------------------------------------
659 0 : sal_Int32 SAL_CALL SbaXFormAdapter::getRow() throw( ::com::sun::star::sdbc::SQLException, RuntimeException )
660 : {
661 0 : if (m_xMainForm.is())
662 0 : return m_xMainForm->getRow();
663 0 : return sal_False;
664 : }
665 : // -------------------------------------------------------------------------
666 0 : sal_Bool SAL_CALL SbaXFormAdapter::absolute(sal_Int32 row) throw( ::com::sun::star::sdbc::SQLException, RuntimeException )
667 : {
668 0 : if (m_xMainForm.is())
669 0 : return m_xMainForm->absolute(row);
670 0 : return sal_False;
671 : }
672 : // -------------------------------------------------------------------------
673 0 : sal_Bool SAL_CALL SbaXFormAdapter::relative(sal_Int32 rows) throw( ::com::sun::star::sdbc::SQLException, RuntimeException )
674 : {
675 0 : if (m_xMainForm.is())
676 0 : return m_xMainForm->relative(rows);
677 0 : return sal_False;
678 : }
679 : // -------------------------------------------------------------------------
680 0 : sal_Bool SAL_CALL SbaXFormAdapter::previous() throw( ::com::sun::star::sdbc::SQLException, RuntimeException )
681 : {
682 0 : if (m_xMainForm.is())
683 0 : return m_xMainForm->previous();
684 0 : return sal_False;
685 : }
686 : // -------------------------------------------------------------------------
687 0 : void SAL_CALL SbaXFormAdapter::refreshRow() throw( ::com::sun::star::sdbc::SQLException, RuntimeException )
688 : {
689 0 : if (m_xMainForm.is())
690 0 : m_xMainForm->refreshRow();
691 0 : }
692 :
693 : // -------------------------------------------------------------------------
694 0 : sal_Bool SAL_CALL SbaXFormAdapter::rowUpdated() throw( ::com::sun::star::sdbc::SQLException, RuntimeException )
695 : {
696 0 : if (m_xMainForm.is())
697 0 : return m_xMainForm->rowUpdated();
698 0 : return sal_False;
699 : }
700 : // -------------------------------------------------------------------------
701 0 : sal_Bool SAL_CALL SbaXFormAdapter::rowInserted() throw( ::com::sun::star::sdbc::SQLException, RuntimeException )
702 : {
703 0 : if (m_xMainForm.is())
704 0 : return m_xMainForm->rowInserted();
705 0 : return sal_False;
706 : }
707 : // -------------------------------------------------------------------------
708 0 : sal_Bool SAL_CALL SbaXFormAdapter::rowDeleted() throw( ::com::sun::star::sdbc::SQLException, RuntimeException )
709 : {
710 0 : if (m_xMainForm.is())
711 0 : return m_xMainForm->rowDeleted();
712 0 : return sal_False;
713 : }
714 : // -------------------------------------------------------------------------
715 0 : Reference< XInterface > SAL_CALL SbaXFormAdapter::getStatement() throw( ::com::sun::star::sdbc::SQLException, RuntimeException )
716 : {
717 0 : if (m_xMainForm.is())
718 0 : return m_xMainForm->getStatement();
719 0 : return NULL;
720 : }
721 :
722 : // ::com::sun::star::sdbc::XResultSetUpdate
723 : // -------------------------------------------------------------------------
724 0 : void SAL_CALL SbaXFormAdapter::insertRow() throw( ::com::sun::star::sdbc::SQLException, RuntimeException )
725 : {
726 0 : Reference< ::com::sun::star::sdbc::XResultSetUpdate > xIface(m_xMainForm, UNO_QUERY);
727 0 : if (xIface.is())
728 0 : xIface->insertRow();
729 0 : }
730 : // -------------------------------------------------------------------------
731 0 : void SAL_CALL SbaXFormAdapter::updateRow() throw( ::com::sun::star::sdbc::SQLException, RuntimeException )
732 : {
733 0 : Reference< ::com::sun::star::sdbc::XResultSetUpdate > xIface(m_xMainForm, UNO_QUERY);
734 0 : if (xIface.is())
735 0 : xIface->updateRow();
736 0 : }
737 : // -------------------------------------------------------------------------
738 0 : void SAL_CALL SbaXFormAdapter::deleteRow() throw( ::com::sun::star::sdbc::SQLException, RuntimeException )
739 : {
740 0 : Reference< ::com::sun::star::sdbc::XResultSetUpdate > xIface(m_xMainForm, UNO_QUERY);
741 0 : if (xIface.is())
742 0 : xIface->deleteRow();
743 0 : }
744 : // -------------------------------------------------------------------------
745 0 : void SAL_CALL SbaXFormAdapter::cancelRowUpdates() throw( ::com::sun::star::sdbc::SQLException, RuntimeException )
746 : {
747 0 : Reference< ::com::sun::star::sdbc::XResultSetUpdate > xIface(m_xMainForm, UNO_QUERY);
748 0 : if (xIface.is())
749 0 : xIface->cancelRowUpdates();
750 0 : }
751 : // -------------------------------------------------------------------------
752 0 : void SAL_CALL SbaXFormAdapter::moveToInsertRow() throw( ::com::sun::star::sdbc::SQLException, RuntimeException )
753 : {
754 0 : Reference< ::com::sun::star::sdbc::XResultSetUpdate > xIface(m_xMainForm, UNO_QUERY);
755 0 : if (xIface.is())
756 0 : xIface->moveToInsertRow();
757 0 : }
758 : // -------------------------------------------------------------------------
759 0 : void SAL_CALL SbaXFormAdapter::moveToCurrentRow() throw( ::com::sun::star::sdbc::SQLException, RuntimeException )
760 : {
761 0 : Reference< ::com::sun::star::sdbc::XResultSetUpdate > xIface(m_xMainForm, UNO_QUERY);
762 0 : if (xIface.is())
763 0 : xIface->moveToCurrentRow();
764 0 : }
765 :
766 : // ::com::sun::star::sdbc::XRowSet
767 : // -------------------------------------------------------------------------
768 0 : void SAL_CALL SbaXFormAdapter::execute() throw( ::com::sun::star::sdbc::SQLException, RuntimeException )
769 : {
770 0 : if (m_xMainForm.is())
771 0 : m_xMainForm->execute();
772 0 : }
773 : // -------------------------------------------------------------------------
774 0 : IMPLEMENT_LISTENER_ADMINISTRATION(SbaXFormAdapter, sdbc, RowSetListener, m_aRowSetListeners, ::com::sun::star::sdbc::XRowSet, m_xMainForm)
775 :
776 : // ::com::sun::star::sdbcx::XDeleteRows
777 : // -------------------------------------------------------------------------
778 0 : Sequence<sal_Int32> SAL_CALL SbaXFormAdapter::deleteRows(const Sequence< Any >& rows) throw( ::com::sun::star::sdbc::SQLException, RuntimeException )
779 : {
780 0 : Reference< ::com::sun::star::sdbcx::XDeleteRows > xIface(m_xMainForm, UNO_QUERY);
781 0 : if (xIface.is())
782 0 : return xIface->deleteRows(rows);
783 0 : return Sequence<sal_Int32>();
784 : }
785 :
786 : // ::com::sun::star::sdbc::XWarningsSupplier
787 : // -------------------------------------------------------------------------
788 0 : Any SAL_CALL SbaXFormAdapter::getWarnings() throw( ::com::sun::star::sdbc::SQLException, RuntimeException )
789 : {
790 0 : Reference< ::com::sun::star::sdbc::XWarningsSupplier > xIface(m_xMainForm, UNO_QUERY);
791 0 : if (xIface.is())
792 0 : return xIface->getWarnings();
793 0 : return Any();
794 : }
795 : // -------------------------------------------------------------------------
796 0 : void SAL_CALL SbaXFormAdapter::clearWarnings() throw( ::com::sun::star::sdbc::SQLException, RuntimeException )
797 : {
798 0 : Reference< ::com::sun::star::sdbc::XWarningsSupplier > xIface(m_xMainForm, UNO_QUERY);
799 0 : if (xIface.is())
800 0 : xIface->clearWarnings();
801 0 : }
802 :
803 : // ::com::sun::star::sdb::XRowSetApproveBroadcaster
804 : // -------------------------------------------------------------------------
805 0 : IMPLEMENT_LISTENER_ADMINISTRATION(SbaXFormAdapter, sdb, RowSetApproveListener, m_aRowSetApproveListeners, ::com::sun::star::sdb::XRowSetApproveBroadcaster, m_xMainForm)
806 :
807 : // com::sun::star::sdbc::XSQLErrorBroadcaster
808 : // -------------------------------------------------------------------------
809 0 : IMPLEMENT_LISTENER_ADMINISTRATION(SbaXFormAdapter, sdb, SQLErrorListener, m_aErrorListeners, ::com::sun::star::sdb::XSQLErrorBroadcaster, m_xMainForm)
810 :
811 : // ::com::sun::star::sdb::XResultSetAccess
812 : // -------------------------------------------------------------------------
813 0 : Reference< ::com::sun::star::sdbc::XResultSet > SAL_CALL SbaXFormAdapter::createResultSet() throw( ::com::sun::star::sdbc::SQLException, RuntimeException )
814 : {
815 0 : Reference< ::com::sun::star::sdb::XResultSetAccess > xIface(m_xMainForm, UNO_QUERY);
816 0 : if (xIface.is())
817 0 : return xIface->createResultSet();
818 0 : return Reference< ::com::sun::star::sdbc::XResultSet > ();
819 : }
820 :
821 : // com::sun::star::form::XLoadable
822 : // -------------------------------------------------------------------------
823 0 : void SAL_CALL SbaXFormAdapter::load() throw( RuntimeException )
824 : {
825 0 : Reference< ::com::sun::star::form::XLoadable > xIface(m_xMainForm, UNO_QUERY);
826 0 : if (xIface.is())
827 0 : xIface->load();
828 0 : }
829 : // -------------------------------------------------------------------------
830 0 : void SAL_CALL SbaXFormAdapter::unload() throw( RuntimeException )
831 : {
832 0 : Reference< ::com::sun::star::form::XLoadable > xIface(m_xMainForm, UNO_QUERY);
833 0 : if (xIface.is())
834 0 : xIface->unload();
835 0 : }
836 : // -------------------------------------------------------------------------
837 0 : void SAL_CALL SbaXFormAdapter::reload() throw( RuntimeException )
838 : {
839 0 : Reference< ::com::sun::star::form::XLoadable > xIface(m_xMainForm, UNO_QUERY);
840 0 : if (xIface.is())
841 0 : xIface->reload();
842 0 : }
843 : // -------------------------------------------------------------------------
844 0 : sal_Bool SAL_CALL SbaXFormAdapter::isLoaded() throw( RuntimeException )
845 : {
846 0 : Reference< ::com::sun::star::form::XLoadable > xIface(m_xMainForm, UNO_QUERY);
847 0 : if (xIface.is())
848 0 : return xIface->isLoaded();
849 0 : return sal_False;
850 : }
851 : // -------------------------------------------------------------------------
852 0 : IMPLEMENT_LISTENER_ADMINISTRATION(SbaXFormAdapter, form, LoadListener, m_aLoadListeners, ::com::sun::star::form::XLoadable, m_xMainForm)
853 :
854 : // ::com::sun::star::sdbc::XParameters
855 : // -------------------------------------------------------------------------
856 0 : void SAL_CALL SbaXFormAdapter::setNull(sal_Int32 parameterIndex, sal_Int32 sqlType) throw( ::com::sun::star::sdbc::SQLException, RuntimeException )
857 : {
858 0 : Reference< ::com::sun::star::sdbc::XParameters > xIface(m_xMainForm, UNO_QUERY);
859 0 : if (xIface.is())
860 0 : xIface->setNull(parameterIndex, sqlType);
861 0 : }
862 : // -------------------------------------------------------------------------
863 0 : void SAL_CALL SbaXFormAdapter::setObjectNull(sal_Int32 parameterIndex, sal_Int32 sqlType, const ::rtl::OUString& typeName) throw( ::com::sun::star::sdbc::SQLException, RuntimeException )
864 : {
865 0 : Reference< ::com::sun::star::sdbc::XParameters > xIface(m_xMainForm, UNO_QUERY);
866 0 : if (xIface.is())
867 0 : xIface->setObjectNull(parameterIndex, sqlType, typeName);
868 0 : }
869 : // -------------------------------------------------------------------------
870 0 : void SAL_CALL SbaXFormAdapter::setBoolean(sal_Int32 parameterIndex, sal_Bool x) throw( ::com::sun::star::sdbc::SQLException, RuntimeException )
871 : {
872 0 : Reference< ::com::sun::star::sdbc::XParameters > xIface(m_xMainForm, UNO_QUERY);
873 0 : if (xIface.is())
874 0 : xIface->setBoolean(parameterIndex, x);
875 0 : }
876 : // -------------------------------------------------------------------------
877 0 : void SAL_CALL SbaXFormAdapter::setByte(sal_Int32 parameterIndex, sal_Int8 x) throw( ::com::sun::star::sdbc::SQLException, RuntimeException )
878 : {
879 0 : Reference< ::com::sun::star::sdbc::XParameters > xIface(m_xMainForm, UNO_QUERY);
880 0 : if (xIface.is())
881 0 : xIface->setByte(parameterIndex, x);
882 0 : }
883 : // -------------------------------------------------------------------------
884 0 : void SAL_CALL SbaXFormAdapter::setShort(sal_Int32 parameterIndex, sal_Int16 x) throw( ::com::sun::star::sdbc::SQLException, RuntimeException )
885 : {
886 0 : Reference< ::com::sun::star::sdbc::XParameters > xIface(m_xMainForm, UNO_QUERY);
887 0 : if (xIface.is())
888 0 : xIface->setShort(parameterIndex, x);
889 0 : }
890 : // -------------------------------------------------------------------------
891 0 : void SAL_CALL SbaXFormAdapter::setInt(sal_Int32 parameterIndex, sal_Int32 x) throw( ::com::sun::star::sdbc::SQLException, RuntimeException )
892 : {
893 0 : Reference< ::com::sun::star::sdbc::XParameters > xIface(m_xMainForm, UNO_QUERY);
894 0 : if (xIface.is())
895 0 : xIface->setInt(parameterIndex, x);
896 0 : }
897 : // -------------------------------------------------------------------------
898 0 : void SAL_CALL SbaXFormAdapter::setLong(sal_Int32 parameterIndex, sal_Int64 x) throw( ::com::sun::star::sdbc::SQLException, RuntimeException )
899 : {
900 0 : Reference< ::com::sun::star::sdbc::XParameters > xIface(m_xMainForm, UNO_QUERY);
901 0 : if (xIface.is())
902 0 : xIface->setLong(parameterIndex, x);
903 0 : }
904 : // -------------------------------------------------------------------------
905 0 : void SAL_CALL SbaXFormAdapter::setFloat(sal_Int32 parameterIndex, float x) throw( ::com::sun::star::sdbc::SQLException, RuntimeException )
906 : {
907 0 : Reference< ::com::sun::star::sdbc::XParameters > xIface(m_xMainForm, UNO_QUERY);
908 0 : if (xIface.is())
909 0 : xIface->setFloat(parameterIndex, x);
910 0 : }
911 : // -------------------------------------------------------------------------
912 0 : void SAL_CALL SbaXFormAdapter::setDouble(sal_Int32 parameterIndex, double x) throw( ::com::sun::star::sdbc::SQLException, RuntimeException )
913 : {
914 0 : Reference< ::com::sun::star::sdbc::XParameters > xIface(m_xMainForm, UNO_QUERY);
915 0 : if (xIface.is())
916 0 : xIface->setDouble(parameterIndex, x);
917 0 : }
918 : // -------------------------------------------------------------------------
919 0 : void SAL_CALL SbaXFormAdapter::setString(sal_Int32 parameterIndex, const ::rtl::OUString& x) throw( ::com::sun::star::sdbc::SQLException, RuntimeException )
920 : {
921 0 : Reference< ::com::sun::star::sdbc::XParameters > xIface(m_xMainForm, UNO_QUERY);
922 0 : if (xIface.is())
923 0 : xIface->setString(parameterIndex, x);
924 0 : }
925 : // -------------------------------------------------------------------------
926 0 : void SAL_CALL SbaXFormAdapter::setBytes(sal_Int32 parameterIndex, const Sequence< sal_Int8 >& x) throw( ::com::sun::star::sdbc::SQLException, RuntimeException )
927 : {
928 0 : Reference< ::com::sun::star::sdbc::XParameters > xIface(m_xMainForm, UNO_QUERY);
929 0 : if (xIface.is())
930 0 : xIface->setBytes(parameterIndex, x);
931 0 : }
932 : // -------------------------------------------------------------------------
933 0 : void SAL_CALL SbaXFormAdapter::setDate(sal_Int32 parameterIndex, const ::com::sun::star::util::Date& x) throw( ::com::sun::star::sdbc::SQLException, RuntimeException )
934 : {
935 0 : Reference< ::com::sun::star::sdbc::XParameters > xIface(m_xMainForm, UNO_QUERY);
936 0 : if (xIface.is())
937 0 : xIface->setDate(parameterIndex, x);
938 0 : }
939 : // -------------------------------------------------------------------------
940 0 : void SAL_CALL SbaXFormAdapter::setTime(sal_Int32 parameterIndex, const ::com::sun::star::util::Time& x) throw( ::com::sun::star::sdbc::SQLException, RuntimeException )
941 : {
942 0 : Reference< ::com::sun::star::sdbc::XParameters > xIface(m_xMainForm, UNO_QUERY);
943 0 : if (xIface.is())
944 0 : xIface->setTime(parameterIndex, x);
945 0 : }
946 : // -------------------------------------------------------------------------
947 0 : void SAL_CALL SbaXFormAdapter::setTimestamp(sal_Int32 parameterIndex, const ::com::sun::star::util::DateTime& x) throw( ::com::sun::star::sdbc::SQLException, RuntimeException )
948 : {
949 0 : Reference< ::com::sun::star::sdbc::XParameters > xIface(m_xMainForm, UNO_QUERY);
950 0 : if (xIface.is())
951 0 : xIface->setTimestamp(parameterIndex, x);
952 0 : }
953 : // -------------------------------------------------------------------------
954 0 : void SAL_CALL SbaXFormAdapter::setBinaryStream(sal_Int32 parameterIndex, const Reference< ::com::sun::star::io::XInputStream >& x, sal_Int32 length) throw( ::com::sun::star::sdbc::SQLException, RuntimeException )
955 : {
956 0 : Reference< ::com::sun::star::sdbc::XParameters > xIface(m_xMainForm, UNO_QUERY);
957 0 : if (xIface.is())
958 0 : xIface->setBinaryStream(parameterIndex, x, length);
959 0 : }
960 : // -------------------------------------------------------------------------
961 0 : void SAL_CALL SbaXFormAdapter::setCharacterStream(sal_Int32 parameterIndex, const Reference< ::com::sun::star::io::XInputStream >& x, sal_Int32 length) throw( ::com::sun::star::sdbc::SQLException, RuntimeException )
962 : {
963 0 : Reference< ::com::sun::star::sdbc::XParameters > xIface(m_xMainForm, UNO_QUERY);
964 0 : if (xIface.is())
965 0 : xIface->setCharacterStream(parameterIndex, x, length);
966 0 : }
967 : // -------------------------------------------------------------------------
968 0 : void SAL_CALL SbaXFormAdapter::setObject(sal_Int32 parameterIndex, const Any& x) throw( ::com::sun::star::sdbc::SQLException, RuntimeException )
969 : {
970 0 : Reference< ::com::sun::star::sdbc::XParameters > xIface(m_xMainForm, UNO_QUERY);
971 0 : if (xIface.is())
972 0 : xIface->setObject(parameterIndex, x);
973 0 : }
974 : // -------------------------------------------------------------------------
975 0 : void SAL_CALL SbaXFormAdapter::setObjectWithInfo(sal_Int32 parameterIndex, const Any& x, sal_Int32 targetSqlType, sal_Int32 scale) throw( ::com::sun::star::sdbc::SQLException, RuntimeException )
976 : {
977 0 : Reference< ::com::sun::star::sdbc::XParameters > xIface(m_xMainForm, UNO_QUERY);
978 0 : if (xIface.is())
979 0 : xIface->setObjectWithInfo(parameterIndex, x, targetSqlType, scale);
980 0 : }
981 : // -------------------------------------------------------------------------
982 0 : void SAL_CALL SbaXFormAdapter::setRef(sal_Int32 parameterIndex, const Reference< ::com::sun::star::sdbc::XRef >& x) throw( ::com::sun::star::sdbc::SQLException, RuntimeException )
983 : {
984 0 : Reference< ::com::sun::star::sdbc::XParameters > xIface(m_xMainForm, UNO_QUERY);
985 0 : if (xIface.is())
986 0 : xIface->setRef(parameterIndex, x);
987 0 : }
988 : // -------------------------------------------------------------------------
989 0 : void SAL_CALL SbaXFormAdapter::setBlob(sal_Int32 parameterIndex, const Reference< ::com::sun::star::sdbc::XBlob >& x) throw( ::com::sun::star::sdbc::SQLException, RuntimeException )
990 : {
991 0 : Reference< ::com::sun::star::sdbc::XParameters > xIface(m_xMainForm, UNO_QUERY);
992 0 : if (xIface.is())
993 0 : xIface->setBlob(parameterIndex, x);
994 0 : }
995 : // -------------------------------------------------------------------------
996 0 : void SAL_CALL SbaXFormAdapter::setClob(sal_Int32 parameterIndex, const Reference< ::com::sun::star::sdbc::XClob >& x) throw( ::com::sun::star::sdbc::SQLException, RuntimeException )
997 : {
998 0 : Reference< ::com::sun::star::sdbc::XParameters > xIface(m_xMainForm, UNO_QUERY);
999 0 : if (xIface.is())
1000 0 : xIface->setClob(parameterIndex, x);
1001 0 : }
1002 : // -------------------------------------------------------------------------
1003 0 : void SAL_CALL SbaXFormAdapter::setArray(sal_Int32 parameterIndex, const Reference< ::com::sun::star::sdbc::XArray >& x) throw( ::com::sun::star::sdbc::SQLException, RuntimeException )
1004 : {
1005 0 : Reference< ::com::sun::star::sdbc::XParameters > xIface(m_xMainForm, UNO_QUERY);
1006 0 : if (xIface.is())
1007 0 : xIface->setArray(parameterIndex, x);
1008 0 : }
1009 : // -------------------------------------------------------------------------
1010 0 : void SAL_CALL SbaXFormAdapter::clearParameters() throw( ::com::sun::star::sdbc::SQLException, RuntimeException )
1011 : {
1012 0 : Reference< ::com::sun::star::sdbc::XParameters > xIface(m_xMainForm, UNO_QUERY);
1013 0 : if (xIface.is())
1014 0 : xIface->clearParameters();
1015 0 : }
1016 :
1017 : // ::com::sun::star::form::XDatabaseParameterBroadcaster
1018 : // -------------------------------------------------------------------------
1019 0 : void SAL_CALL SbaXFormAdapter::addParameterListener(const Reference< ::com::sun::star::form::XDatabaseParameterListener >& aListener) throw( RuntimeException )
1020 : {
1021 0 : m_aParameterListeners.addInterface(aListener);
1022 0 : if (m_aParameterListeners.getLength() == 1)
1023 : {
1024 0 : Reference< ::com::sun::star::form::XDatabaseParameterBroadcaster > xBroadcaster(m_xMainForm, UNO_QUERY);
1025 0 : if (xBroadcaster.is())
1026 0 : xBroadcaster->addParameterListener(&m_aParameterListeners);
1027 : }
1028 0 : }
1029 :
1030 : // -------------------------------------------------------------------------
1031 0 : void SAL_CALL SbaXFormAdapter::removeParameterListener(const Reference< ::com::sun::star::form::XDatabaseParameterListener >& aListener) throw( RuntimeException )
1032 : {
1033 0 : if (m_aParameterListeners.getLength() == 1)
1034 : {
1035 0 : Reference< ::com::sun::star::form::XDatabaseParameterBroadcaster > xBroadcaster(m_xMainForm, UNO_QUERY);
1036 0 : if (xBroadcaster.is())
1037 0 : xBroadcaster->removeParameterListener(&m_aParameterListeners);
1038 : }
1039 0 : m_aParameterListeners.removeInterface(aListener);
1040 0 : }
1041 :
1042 : // ::com::sun::star::container::XChild
1043 : // -------------------------------------------------------------------------
1044 0 : Reference< XInterface > SAL_CALL SbaXFormAdapter::getParent() throw( RuntimeException )
1045 : {
1046 0 : return m_xParent;
1047 : }
1048 :
1049 : // -------------------------------------------------------------------------
1050 0 : void SAL_CALL SbaXFormAdapter::setParent(const Reference< XInterface >& Parent) throw( ::com::sun::star::lang::NoSupportException, RuntimeException )
1051 : {
1052 0 : m_xParent = Parent;
1053 0 : }
1054 :
1055 : // ::com::sun::star::form::XSubmit
1056 : // -------------------------------------------------------------------------
1057 0 : void SAL_CALL SbaXFormAdapter::submit(const Reference< ::com::sun::star::awt::XControl >& aControl, const ::com::sun::star::awt::MouseEvent& aMouseEvt) throw( RuntimeException )
1058 : {
1059 0 : Reference< ::com::sun::star::form::XSubmit > xSubmit(m_xMainForm, UNO_QUERY);
1060 0 : if (xSubmit.is())
1061 0 : xSubmit->submit(aControl, aMouseEvt);
1062 0 : }
1063 :
1064 0 : IMPLEMENT_LISTENER_ADMINISTRATION(SbaXFormAdapter, form, SubmitListener, m_aSubmitListeners, ::com::sun::star::form::XSubmit, m_xMainForm)
1065 :
1066 : // ::com::sun::star::awt::XTabControllerModel
1067 : // -------------------------------------------------------------------------
1068 0 : sal_Bool SAL_CALL SbaXFormAdapter::getGroupControl() throw( RuntimeException )
1069 : {
1070 : OSL_FAIL("SAL_CALL SbaXFormAdapter::getGroupControl : not supported !");
1071 0 : return sal_False;
1072 : }
1073 :
1074 : // -------------------------------------------------------------------------
1075 0 : void SAL_CALL SbaXFormAdapter::setGroupControl(sal_Bool /*GroupControl*/) throw( RuntimeException )
1076 : {
1077 : OSL_FAIL("SAL_CALL SbaXFormAdapter::setGroupControl : not supported !");
1078 0 : }
1079 :
1080 : // -------------------------------------------------------------------------
1081 0 : void SAL_CALL SbaXFormAdapter::setControlModels(const Sequence< Reference< ::com::sun::star::awt::XControlModel > >& /*Controls*/) throw( RuntimeException )
1082 : {
1083 : OSL_FAIL("SAL_CALL SbaXFormAdapter::setControlModels : not supported !");
1084 0 : }
1085 :
1086 : // -------------------------------------------------------------------------
1087 0 : Sequence< Reference< ::com::sun::star::awt::XControlModel > > SAL_CALL SbaXFormAdapter::getControlModels() throw( RuntimeException )
1088 : {
1089 : OSL_FAIL("SAL_CALL SbaXFormAdapter::getControlModels : not supported !");
1090 0 : return Sequence< Reference< ::com::sun::star::awt::XControlModel > >();
1091 : }
1092 :
1093 : // -------------------------------------------------------------------------
1094 0 : void SAL_CALL SbaXFormAdapter::setGroup(const Sequence< Reference< ::com::sun::star::awt::XControlModel > >& /*_rGroup*/, const ::rtl::OUString& /*GroupName*/) throw( RuntimeException )
1095 : {
1096 : OSL_FAIL("SAL_CALL SbaXFormAdapter::setGroup : not supported !");
1097 0 : }
1098 :
1099 : // -------------------------------------------------------------------------
1100 0 : sal_Int32 SAL_CALL SbaXFormAdapter::getGroupCount() throw( RuntimeException )
1101 : {
1102 : OSL_FAIL("SAL_CALL SbaXFormAdapter::getGroupCount : not supported !");
1103 0 : return 0;
1104 : }
1105 :
1106 : // -------------------------------------------------------------------------
1107 0 : void SAL_CALL SbaXFormAdapter::getGroup(sal_Int32 /*nGroup*/, Sequence< Reference< ::com::sun::star::awt::XControlModel > >& /*_rGroup*/, ::rtl::OUString& /*Name*/) throw( RuntimeException )
1108 : {
1109 : OSL_FAIL("SAL_CALL SbaXFormAdapter::getGroup : not supported !");
1110 0 : }
1111 :
1112 : // -------------------------------------------------------------------------
1113 0 : void SAL_CALL SbaXFormAdapter::getGroupByName(const ::rtl::OUString& /*Name*/, Sequence< Reference< ::com::sun::star::awt::XControlModel > >& /*_rGroup*/) throw( RuntimeException )
1114 : {
1115 : OSL_FAIL("SAL_CALL SbaXFormAdapter::getGroupByName : not supported !");
1116 0 : }
1117 :
1118 : // ::com::sun::star::lang::XComponent
1119 : // -------------------------------------------------------------------------
1120 0 : void SAL_CALL SbaXFormAdapter::dispose() throw( RuntimeException )
1121 : {
1122 : // log off all multiplexers
1123 0 : if (m_xMainForm.is())
1124 0 : StopListening();
1125 :
1126 0 : ::com::sun::star::lang::EventObject aEvt(*this);
1127 0 : m_aLoadListeners.disposeAndClear(aEvt);
1128 0 : m_aRowSetListeners.disposeAndClear(aEvt);
1129 0 : m_aRowSetApproveListeners.disposeAndClear(aEvt);
1130 0 : m_aErrorListeners.disposeAndClear(aEvt);
1131 0 : m_aParameterListeners.disposeAndClear(aEvt);
1132 0 : m_aSubmitListeners.disposeAndClear(aEvt);
1133 0 : m_aResetListeners.disposeAndClear(aEvt);
1134 :
1135 0 : m_aVetoablePropertyChangeListeners.disposeAndClear();
1136 0 : m_aPropertyChangeListeners.disposeAndClear();
1137 0 : m_aPropertiesChangeListeners.disposeAndClear(aEvt);
1138 :
1139 0 : m_aDisposeListeners.disposeAndClear(aEvt);
1140 0 : m_aContainerListeners.disposeAndClear(aEvt);
1141 :
1142 : // dispose all children
1143 0 : for ( ::std::vector< Reference< ::com::sun::star::form::XFormComponent > >::iterator aIter = m_aChildren.begin();
1144 0 : aIter != m_aChildren.end();
1145 : ++aIter
1146 : )
1147 : {
1148 0 : Reference< ::com::sun::star::beans::XPropertySet > xSet(*aIter, UNO_QUERY);
1149 0 : if (xSet.is())
1150 0 : xSet->removePropertyChangeListener(PROPERTY_NAME, (::com::sun::star::beans::XPropertyChangeListener*)this);
1151 :
1152 0 : Reference< ::com::sun::star::container::XChild > xChild(*aIter, UNO_QUERY);
1153 0 : if (xChild.is())
1154 0 : xChild->setParent(Reference< XInterface > ());
1155 :
1156 0 : Reference< ::com::sun::star::lang::XComponent > xComp(*aIter, UNO_QUERY);
1157 0 : if (xComp.is())
1158 0 : xComp->dispose();
1159 0 : }
1160 0 : m_aChildren.clear();
1161 0 : }
1162 :
1163 : // -------------------------------------------------------------------------
1164 0 : void SAL_CALL SbaXFormAdapter::addEventListener(const Reference< ::com::sun::star::lang::XEventListener >& xListener) throw( RuntimeException )
1165 : {
1166 0 : m_aDisposeListeners.addInterface(xListener);
1167 0 : }
1168 :
1169 : // -------------------------------------------------------------------------
1170 0 : void SAL_CALL SbaXFormAdapter::removeEventListener(const Reference< ::com::sun::star::lang::XEventListener >& aListener) throw( RuntimeException )
1171 : {
1172 0 : m_aDisposeListeners.removeInterface(aListener);
1173 0 : }
1174 :
1175 : // ::com::sun::star::beans::XFastPropertySet
1176 : // -------------------------------------------------------------------------
1177 0 : void SAL_CALL SbaXFormAdapter::setFastPropertyValue(sal_Int32 nHandle, const Any& aValue) throw( ::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::beans::PropertyVetoException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::WrappedTargetException, RuntimeException )
1178 : {
1179 0 : Reference< ::com::sun::star::beans::XFastPropertySet > xSet(m_xMainForm, UNO_QUERY);
1180 : OSL_ENSURE(xSet.is(), "SAL_CALL SbaXFormAdapter::setFastPropertyValue : have no master form !");
1181 :
1182 0 : if (m_nNamePropHandle == nHandle)
1183 : {
1184 0 : if (aValue.getValueType().getTypeClass() != TypeClass_STRING)
1185 : {
1186 0 : throw ::com::sun::star::lang::IllegalArgumentException();
1187 : }
1188 :
1189 : // for notifying property listeners
1190 0 : ::com::sun::star::beans::PropertyChangeEvent aEvt;
1191 0 : aEvt.Source = *this;
1192 0 : aEvt.PropertyName = PROPERTY_NAME;
1193 0 : aEvt.PropertyHandle = m_nNamePropHandle;
1194 0 : aEvt.OldValue <<= m_sName;
1195 0 : aEvt.NewValue = aValue;
1196 :
1197 0 : aValue >>= m_sName;
1198 :
1199 0 : ::cppu::OInterfaceIteratorHelper aIt(*m_aPropertyChangeListeners.getContainer(PROPERTY_NAME));
1200 0 : while (aIt.hasMoreElements())
1201 0 : ((::com::sun::star::beans::XPropertyChangeListener*)aIt.next())->propertyChange(aEvt);
1202 :
1203 0 : return;
1204 : }
1205 :
1206 0 : xSet->setFastPropertyValue(nHandle, aValue);
1207 : }
1208 :
1209 : // -------------------------------------------------------------------------
1210 0 : Any SAL_CALL SbaXFormAdapter::getFastPropertyValue(sal_Int32 nHandle) throw( ::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, RuntimeException )
1211 : {
1212 0 : Reference< ::com::sun::star::beans::XFastPropertySet > xSet(m_xMainForm, UNO_QUERY);
1213 : OSL_ENSURE(xSet.is(), "SAL_CALL SbaXFormAdapter::getFastPropertyValue : have no master form !");
1214 :
1215 0 : if (m_nNamePropHandle == nHandle)
1216 0 : return makeAny(m_sName);
1217 :
1218 0 : return xSet->getFastPropertyValue(nHandle);
1219 : }
1220 :
1221 : // ::com::sun::star::container::XNamed
1222 : // -------------------------------------------------------------------------
1223 0 : ::rtl::OUString SAL_CALL SbaXFormAdapter::getName() throw( RuntimeException )
1224 : {
1225 0 : return ::comphelper::getString(getPropertyValue(PROPERTY_NAME));
1226 : }
1227 :
1228 : // -------------------------------------------------------------------------
1229 0 : void SAL_CALL SbaXFormAdapter::setName(const ::rtl::OUString& aName) throw( RuntimeException )
1230 : {
1231 0 : setPropertyValue(PROPERTY_NAME, makeAny(aName));
1232 0 : }
1233 :
1234 : // ::com::sun::star::io::XPersistObject
1235 : // -------------------------------------------------------------------------
1236 0 : ::rtl::OUString SAL_CALL SbaXFormAdapter::getServiceName() throw( RuntimeException )
1237 : {
1238 0 : Reference< ::com::sun::star::io::XPersistObject > xPersist(m_xMainForm, UNO_QUERY);
1239 0 : if (xPersist.is())
1240 0 : return xPersist->getServiceName();
1241 0 : return ::rtl::OUString();
1242 : }
1243 :
1244 : // -------------------------------------------------------------------------
1245 0 : void SAL_CALL SbaXFormAdapter::write(const Reference< ::com::sun::star::io::XObjectOutputStream >& _rxOutStream) throw( ::com::sun::star::io::IOException, RuntimeException )
1246 : {
1247 0 : Reference< ::com::sun::star::io::XPersistObject > xPersist(m_xMainForm, UNO_QUERY);
1248 0 : if (xPersist.is())
1249 0 : xPersist->write(_rxOutStream);
1250 0 : }
1251 :
1252 : // -------------------------------------------------------------------------
1253 0 : void SAL_CALL SbaXFormAdapter::read(const Reference< ::com::sun::star::io::XObjectInputStream >& _rxInStream) throw( ::com::sun::star::io::IOException, RuntimeException )
1254 : {
1255 0 : Reference< ::com::sun::star::io::XPersistObject > xPersist(m_xMainForm, UNO_QUERY);
1256 0 : if (xPersist.is())
1257 0 : xPersist->read(_rxInStream);
1258 0 : }
1259 :
1260 : // ::com::sun::star::beans::XMultiPropertySet
1261 : // -------------------------------------------------------------------------
1262 0 : Reference< ::com::sun::star::beans::XPropertySetInfo > SAL_CALL SbaXFormAdapter::getPropertySetInfo() throw( RuntimeException )
1263 : {
1264 0 : Reference< ::com::sun::star::beans::XMultiPropertySet > xSet(m_xMainForm, UNO_QUERY);
1265 0 : if (!xSet.is())
1266 0 : return Reference< ::com::sun::star::beans::XPropertySetInfo > ();
1267 :
1268 0 : Reference< ::com::sun::star::beans::XPropertySetInfo > xReturn = xSet->getPropertySetInfo();
1269 0 : if (-1 == m_nNamePropHandle)
1270 : {
1271 : // we need to determine the handle for the NAME property
1272 0 : Sequence< ::com::sun::star::beans::Property> aProps = xReturn->getProperties();
1273 0 : const ::com::sun::star::beans::Property* pProps = aProps.getConstArray();
1274 :
1275 0 : for (sal_Int32 i=0; i<aProps.getLength(); ++i, ++pProps)
1276 : {
1277 0 : if (pProps->Name.equals(PROPERTY_NAME))
1278 : {
1279 0 : ((SbaXFormAdapter*)this)->m_nNamePropHandle = pProps->Handle;
1280 0 : break;
1281 : }
1282 0 : }
1283 : }
1284 0 : return xReturn;
1285 : }
1286 :
1287 : // -------------------------------------------------------------------------
1288 0 : void SAL_CALL SbaXFormAdapter::setPropertyValues(const Sequence< ::rtl::OUString >& PropertyNames, const Sequence< Any >& Values) throw( ::com::sun::star::beans::PropertyVetoException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::WrappedTargetException, RuntimeException )
1289 : {
1290 0 : Reference< ::com::sun::star::beans::XMultiPropertySet > xSet(m_xMainForm, UNO_QUERY);
1291 0 : if (xSet.is())
1292 0 : xSet->setPropertyValues(PropertyNames, Values);
1293 0 : }
1294 :
1295 : // -------------------------------------------------------------------------
1296 0 : Sequence< Any > SAL_CALL SbaXFormAdapter::getPropertyValues(const Sequence< ::rtl::OUString >& aPropertyNames) throw( RuntimeException )
1297 : {
1298 0 : Reference< ::com::sun::star::beans::XMultiPropertySet > xSet(m_xMainForm, UNO_QUERY);
1299 0 : if (!xSet.is())
1300 0 : return Sequence< Any>(aPropertyNames.getLength());
1301 :
1302 0 : Sequence< Any> aReturn = xSet->getPropertyValues(aPropertyNames);
1303 :
1304 : // search for (and fake) the NAME property
1305 0 : const ::rtl::OUString* pNames = aPropertyNames.getConstArray();
1306 0 : Any* pValues = aReturn.getArray();
1307 : OSL_ENSURE(aReturn.getLength() == aPropertyNames.getLength(), "SAL_CALL SbaXFormAdapter::getPropertyValues : the main form returned an invalid-length sequence !");
1308 0 : for (sal_Int32 i=0; i<aPropertyNames.getLength(); ++i, ++pNames, ++pValues)
1309 0 : if (pNames->equals(PROPERTY_NAME))
1310 : {
1311 0 : (*pValues) <<= m_sName;
1312 0 : break;
1313 : }
1314 :
1315 0 : return aReturn;
1316 : }
1317 :
1318 : // -------------------------------------------------------------------------
1319 0 : void SAL_CALL SbaXFormAdapter::addPropertiesChangeListener(const Sequence< ::rtl::OUString>& /*aPropertyNames*/, const Reference< ::com::sun::star::beans::XPropertiesChangeListener >& xListener) throw( RuntimeException )
1320 : {
1321 : // we completely ignore the property names, _all_ changes of _all_ properties will be forwarded to _all_ listeners
1322 0 : m_aPropertiesChangeListeners.addInterface(xListener);
1323 0 : if (m_aPropertiesChangeListeners.getLength() == 1)
1324 : {
1325 0 : Reference< ::com::sun::star::beans::XMultiPropertySet > xBroadcaster(m_xMainForm, UNO_QUERY);
1326 0 : ::rtl::OUString sEmpty;
1327 0 : if (xBroadcaster.is())
1328 0 : xBroadcaster->addPropertiesChangeListener(Sequence< ::rtl::OUString>(&sEmpty, 1), &m_aPropertiesChangeListeners);
1329 : }
1330 0 : }
1331 :
1332 : // -------------------------------------------------------------------------
1333 0 : void SAL_CALL SbaXFormAdapter::removePropertiesChangeListener(const Reference< ::com::sun::star::beans::XPropertiesChangeListener >& Listener) throw( RuntimeException )
1334 : {
1335 0 : if (m_aPropertiesChangeListeners.getLength() == 1)
1336 : {
1337 0 : Reference< ::com::sun::star::beans::XMultiPropertySet > xBroadcaster(m_xMainForm, UNO_QUERY);
1338 0 : if (xBroadcaster.is())
1339 0 : xBroadcaster->removePropertiesChangeListener(&m_aPropertiesChangeListeners);
1340 : }
1341 0 : m_aPropertiesChangeListeners.removeInterface(Listener);
1342 0 : }
1343 :
1344 : // -------------------------------------------------------------------------
1345 0 : void SAL_CALL SbaXFormAdapter::firePropertiesChangeEvent(const Sequence< ::rtl::OUString >& aPropertyNames, const Reference< ::com::sun::star::beans::XPropertiesChangeListener >& xListener) throw( RuntimeException )
1346 : {
1347 0 : Reference< ::com::sun::star::beans::XMultiPropertySet > xSet(m_xMainForm, UNO_QUERY);
1348 0 : if (xSet.is())
1349 0 : xSet->firePropertiesChangeEvent(aPropertyNames, xListener);
1350 0 : }
1351 :
1352 :
1353 : // ::com::sun::star::beans::XPropertySet
1354 : // -------------------------------------------------------------------------
1355 0 : void SAL_CALL SbaXFormAdapter::setPropertyValue(const ::rtl::OUString& aPropertyName, const Any& aValue) throw( ::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::beans::PropertyVetoException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::WrappedTargetException, RuntimeException )
1356 : {
1357 0 : Reference< ::com::sun::star::beans::XPropertySet > xSet(m_xMainForm, UNO_QUERY);
1358 0 : if (!xSet.is())
1359 0 : return;
1360 :
1361 : // special handling for the "name" property
1362 0 : if (aPropertyName.equals(PROPERTY_NAME))
1363 0 : setFastPropertyValue(m_nNamePropHandle, aValue);
1364 :
1365 0 : xSet->setPropertyValue(aPropertyName, aValue);
1366 : }
1367 :
1368 : // -------------------------------------------------------------------------
1369 0 : Any SAL_CALL SbaXFormAdapter::getPropertyValue(const ::rtl::OUString& PropertyName) throw( ::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, RuntimeException )
1370 : {
1371 0 : Reference< ::com::sun::star::beans::XPropertySet > xSet(m_xMainForm, UNO_QUERY);
1372 0 : if (!xSet.is())
1373 0 : return Any();
1374 :
1375 : // special handling for the "name" property
1376 0 : if (PropertyName.equals(PROPERTY_NAME))
1377 0 : return getFastPropertyValue(m_nNamePropHandle);
1378 :
1379 0 : return xSet->getPropertyValue(PropertyName);
1380 : }
1381 :
1382 0 : IMPLEMENT_PROPERTY_LISTENER_ADMINISTRATION(SbaXFormAdapter, PropertyChangeListener, m_aPropertyChangeListeners, ::com::sun::star::beans::XPropertySet, m_xMainForm);
1383 0 : IMPLEMENT_PROPERTY_LISTENER_ADMINISTRATION(SbaXFormAdapter, VetoableChangeListener, m_aVetoablePropertyChangeListeners, ::com::sun::star::beans::XPropertySet, m_xMainForm);
1384 :
1385 : // ::com::sun::star::util::XCancellable
1386 : // -------------------------------------------------------------------------
1387 0 : void SAL_CALL SbaXFormAdapter::cancel() throw( RuntimeException )
1388 : {
1389 0 : Reference< ::com::sun::star::util::XCancellable > xCancel(m_xMainForm, UNO_QUERY);
1390 0 : if (xCancel.is())
1391 0 : return;
1392 0 : xCancel->cancel();
1393 : }
1394 :
1395 : // ::com::sun::star::beans::XPropertyState
1396 : // -------------------------------------------------------------------------
1397 0 : ::com::sun::star::beans::PropertyState SAL_CALL SbaXFormAdapter::getPropertyState(const ::rtl::OUString& PropertyName) throw( ::com::sun::star::beans::UnknownPropertyException, RuntimeException )
1398 : {
1399 0 : Reference< ::com::sun::star::beans::XPropertyState > xState(m_xMainForm, UNO_QUERY);
1400 0 : if (xState.is())
1401 0 : return xState->getPropertyState(PropertyName);
1402 0 : return ::com::sun::star::beans::PropertyState_DEFAULT_VALUE;
1403 : }
1404 :
1405 : // -------------------------------------------------------------------------
1406 0 : Sequence< ::com::sun::star::beans::PropertyState> SAL_CALL SbaXFormAdapter::getPropertyStates(const Sequence< ::rtl::OUString >& aPropertyName) throw( ::com::sun::star::beans::UnknownPropertyException, RuntimeException )
1407 : {
1408 0 : Reference< ::com::sun::star::beans::XPropertyState > xState(m_xMainForm, UNO_QUERY);
1409 0 : if (xState.is())
1410 0 : return xState->getPropertyStates(aPropertyName);
1411 :
1412 : // set them all to DEFAULT
1413 0 : Sequence< ::com::sun::star::beans::PropertyState> aReturn(aPropertyName.getLength());
1414 0 : ::com::sun::star::beans::PropertyState* pStates = aReturn.getArray();
1415 0 : for (sal_uInt16 i=0; i<aPropertyName.getLength(); ++i, ++pStates)
1416 0 : *pStates = ::com::sun::star::beans::PropertyState_DEFAULT_VALUE;
1417 0 : return aReturn;
1418 : }
1419 :
1420 : // -------------------------------------------------------------------------
1421 0 : void SAL_CALL SbaXFormAdapter::setPropertyToDefault(const ::rtl::OUString& PropertyName) throw( ::com::sun::star::beans::UnknownPropertyException, RuntimeException )
1422 : {
1423 0 : Reference< ::com::sun::star::beans::XPropertyState > xState(m_xMainForm, UNO_QUERY);
1424 0 : if (xState.is())
1425 0 : xState->setPropertyToDefault(PropertyName);
1426 0 : }
1427 :
1428 : // -------------------------------------------------------------------------
1429 0 : Any SAL_CALL SbaXFormAdapter::getPropertyDefault(const ::rtl::OUString& aPropertyName) throw( ::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, RuntimeException )
1430 : {
1431 0 : Reference< ::com::sun::star::beans::XPropertyState > xState(m_xMainForm, UNO_QUERY);
1432 0 : if (xState.is())
1433 0 : return xState->getPropertyDefault(aPropertyName);
1434 0 : return Any();
1435 : }
1436 :
1437 : // ::com::sun::star::form::XReset
1438 : // -------------------------------------------------------------------------
1439 0 : void SAL_CALL SbaXFormAdapter::reset() throw( RuntimeException )
1440 : {
1441 0 : Reference< ::com::sun::star::form::XReset > xReset(m_xMainForm, UNO_QUERY);
1442 0 : if (xReset.is())
1443 0 : xReset->reset();
1444 0 : }
1445 :
1446 0 : IMPLEMENT_LISTENER_ADMINISTRATION(SbaXFormAdapter, form, ResetListener, m_aResetListeners, ::com::sun::star::form::XReset, m_xMainForm)
1447 :
1448 : // ::com::sun::star::container::XNameContainer
1449 : // -------------------------------------------------------------------------
1450 0 : void SbaXFormAdapter::implInsert(const Any& aElement, sal_Int32 nIndex, const ::rtl::OUString* pNewElName) throw( ::com::sun::star::lang::IllegalArgumentException )
1451 : {
1452 : // extract the form component
1453 0 : if (aElement.getValueType().getTypeClass() != TypeClass_INTERFACE)
1454 : {
1455 0 : throw ::com::sun::star::lang::IllegalArgumentException();
1456 : }
1457 :
1458 0 : Reference< ::com::sun::star::form::XFormComponent > xElement(*(Reference< XInterface > *)aElement.getValue(), UNO_QUERY);
1459 0 : if (!xElement.is())
1460 : {
1461 0 : throw ::com::sun::star::lang::IllegalArgumentException();
1462 : }
1463 :
1464 : // for the name we need the propset
1465 0 : Reference< ::com::sun::star::beans::XPropertySet > xElementSet(xElement, UNO_QUERY);
1466 0 : if (!xElementSet.is())
1467 : {
1468 0 : throw ::com::sun::star::lang::IllegalArgumentException();
1469 : }
1470 0 : ::rtl::OUString sName;
1471 : try
1472 : {
1473 0 : if (pNewElName)
1474 0 : xElementSet->setPropertyValue(PROPERTY_NAME, makeAny(*pNewElName));
1475 :
1476 0 : xElementSet->getPropertyValue(PROPERTY_NAME) >>= sName;
1477 : }
1478 0 : catch(Exception&)
1479 : {
1480 : // the set didn't support the name prop
1481 0 : throw ::com::sun::star::lang::IllegalArgumentException();
1482 : }
1483 :
1484 : // check the index
1485 : OSL_ASSERT(nIndex >= 0);
1486 0 : if (sal::static_int_cast< sal_uInt32 >(nIndex) > m_aChildren.size())
1487 0 : nIndex = m_aChildren.size();
1488 :
1489 : OSL_ENSURE(m_aChildren.size() == m_aChildNames.size(), "SAL_CALL SbaXFormAdapter::implInsert : inconsistent container state !");
1490 0 : m_aChildren.insert(m_aChildren.begin() + nIndex, xElement);
1491 0 : m_aChildNames.insert(m_aChildNames.begin() + nIndex, sName);
1492 :
1493 : // listen for a changes of the name
1494 0 : xElementSet->addPropertyChangeListener(PROPERTY_NAME, (::com::sun::star::beans::XPropertyChangeListener*)this);
1495 :
1496 : // we are now the parent of the new element
1497 0 : xElement->setParent((::com::sun::star::container::XContainer*)this);
1498 :
1499 : // notify the container listeners
1500 0 : ::com::sun::star::container::ContainerEvent aEvt;
1501 0 : aEvt.Source = *this;
1502 0 : aEvt.Accessor <<= nIndex;
1503 0 : aEvt.Element <<= xElement;
1504 0 : ::cppu::OInterfaceIteratorHelper aIt(m_aContainerListeners);
1505 0 : while (aIt.hasMoreElements())
1506 0 : ((::com::sun::star::container::XContainerListener*)aIt.next())->elementInserted(aEvt);
1507 0 : }
1508 :
1509 : // -------------------------------------------------------------------------
1510 0 : sal_Int32 SbaXFormAdapter::implGetPos(const ::rtl::OUString& rName)
1511 : {
1512 : ::std::vector< ::rtl::OUString>::iterator aIter = ::std::find_if( m_aChildNames.begin(),
1513 : m_aChildNames.end(),
1514 0 : ::std::bind2nd(::std::equal_to< rtl::OUString>(),rName));
1515 :
1516 0 : if(aIter != m_aChildNames.end())
1517 0 : return aIter - m_aChildNames.begin();
1518 :
1519 0 : return -1;
1520 : }
1521 :
1522 : // -------------------------------------------------------------------------
1523 0 : void SAL_CALL SbaXFormAdapter::insertByName(const ::rtl::OUString& aName, const Any& aElement) throw( ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::container::ElementExistException, ::com::sun::star::lang::WrappedTargetException, RuntimeException )
1524 : {
1525 0 : implInsert(aElement, m_aChildren.size(), &aName);
1526 0 : }
1527 :
1528 : // -------------------------------------------------------------------------
1529 0 : void SAL_CALL SbaXFormAdapter::removeByName(const ::rtl::OUString& Name) throw( ::com::sun::star::container::NoSuchElementException, ::com::sun::star::lang::WrappedTargetException, RuntimeException )
1530 : {
1531 0 : sal_Int32 nPos = implGetPos(Name);
1532 0 : if (-1 == nPos)
1533 : {
1534 0 : throw ::com::sun::star::container::NoSuchElementException();
1535 : }
1536 0 : removeByIndex(nPos);
1537 0 : }
1538 :
1539 : // ::com::sun::star::container::XNameReplace
1540 : // -------------------------------------------------------------------------
1541 0 : void SAL_CALL SbaXFormAdapter::replaceByName(const ::rtl::OUString& aName, const Any& aElement) throw( ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::container::NoSuchElementException, ::com::sun::star::lang::WrappedTargetException, RuntimeException )
1542 : {
1543 0 : sal_Int32 nPos = implGetPos(aName);
1544 0 : if (-1 == nPos)
1545 : {
1546 0 : throw ::com::sun::star::container::NoSuchElementException();
1547 : }
1548 0 : replaceByIndex(nPos, aElement);
1549 0 : }
1550 :
1551 : // ::com::sun::star::container::XNameAccess
1552 : // -------------------------------------------------------------------------
1553 0 : Any SAL_CALL SbaXFormAdapter::getByName(const ::rtl::OUString& aName) throw( ::com::sun::star::container::NoSuchElementException, ::com::sun::star::lang::WrappedTargetException, RuntimeException )
1554 : {
1555 0 : sal_Int32 nPos = implGetPos(aName);
1556 0 : if (-1 == nPos)
1557 : {
1558 0 : throw ::com::sun::star::container::NoSuchElementException();
1559 : }
1560 0 : return makeAny(m_aChildren[nPos]);
1561 : }
1562 :
1563 : // -------------------------------------------------------------------------
1564 0 : Sequence< ::rtl::OUString > SAL_CALL SbaXFormAdapter::getElementNames() throw( RuntimeException )
1565 : {
1566 0 : ::rtl::OUString *pChildNames = m_aChildNames.empty() ? 0 : &m_aChildNames[0];
1567 0 : return Sequence< ::rtl::OUString >(pChildNames, m_aChildNames.size());
1568 : }
1569 :
1570 : // -------------------------------------------------------------------------
1571 0 : sal_Bool SAL_CALL SbaXFormAdapter::hasByName(const ::rtl::OUString& aName) throw( RuntimeException )
1572 : {
1573 0 : return (-1 != implGetPos(aName));
1574 : }
1575 :
1576 : // ::com::sun::star::container::XElementAccess
1577 : // -------------------------------------------------------------------------
1578 0 : Type SAL_CALL SbaXFormAdapter::getElementType() throw(RuntimeException)
1579 : {
1580 : return ::getCppuType(
1581 0 : static_cast< Reference< ::com::sun::star::form::XFormComponent >* >(NULL));
1582 : }
1583 :
1584 : // -------------------------------------------------------------------------
1585 0 : sal_Bool SAL_CALL SbaXFormAdapter::hasElements() throw(RuntimeException)
1586 : {
1587 0 : return m_aChildren.size() > 0;
1588 : }
1589 :
1590 :
1591 : // ::com::sun::star::container::XIndexContainer
1592 : // -------------------------------------------------------------------------
1593 0 : void SAL_CALL SbaXFormAdapter::insertByIndex(sal_Int32 _rIndex, const Any& Element) throw( ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::lang::WrappedTargetException, RuntimeException )
1594 : {
1595 0 : if ( ( _rIndex < 0 ) || ( (size_t)_rIndex >= m_aChildren.size() ) )
1596 0 : throw ::com::sun::star::lang::IndexOutOfBoundsException();
1597 0 : implInsert(Element, _rIndex);
1598 0 : }
1599 :
1600 : // -------------------------------------------------------------------------
1601 0 : void SAL_CALL SbaXFormAdapter::removeByIndex(sal_Int32 _rIndex) throw( ::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::lang::WrappedTargetException, RuntimeException )
1602 : {
1603 0 : if ( ( _rIndex < 0 ) || ( (size_t)_rIndex >= m_aChildren.size() ) )
1604 0 : throw ::com::sun::star::lang::IndexOutOfBoundsException();
1605 :
1606 0 : Reference< ::com::sun::star::form::XFormComponent > xAffected = *(m_aChildren.begin() + _rIndex);
1607 :
1608 : OSL_ENSURE(m_aChildren.size() == m_aChildNames.size(), "SAL_CALL SbaXFormAdapter::removeByIndex : inconsistent container state !");
1609 0 : m_aChildren.erase(m_aChildren.begin() + _rIndex);
1610 0 : m_aChildNames.erase(m_aChildNames.begin() + _rIndex);
1611 :
1612 : // no need to listen anymore
1613 0 : Reference< ::com::sun::star::beans::XPropertySet > xAffectedSet(xAffected, UNO_QUERY);
1614 0 : xAffectedSet->removePropertyChangeListener(PROPERTY_NAME, (::com::sun::star::beans::XPropertyChangeListener*)this);
1615 :
1616 : // we are no longer the parent
1617 0 : xAffected->setParent(Reference< XInterface > ());
1618 :
1619 : // notify container listeners
1620 0 : ::com::sun::star::container::ContainerEvent aEvt;
1621 0 : aEvt.Source = *this;
1622 0 : aEvt.Element <<= xAffected;
1623 0 : ::cppu::OInterfaceIteratorHelper aIt(m_aContainerListeners);
1624 0 : while (aIt.hasMoreElements())
1625 0 : ((::com::sun::star::container::XContainerListener*)aIt.next())->elementRemoved(aEvt);
1626 :
1627 0 : }
1628 :
1629 : // ::com::sun::star::container::XIndexReplace
1630 : // -------------------------------------------------------------------------
1631 0 : void SAL_CALL SbaXFormAdapter::replaceByIndex(sal_Int32 _rIndex, const Any& Element) throw( ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::lang::WrappedTargetException, RuntimeException )
1632 : {
1633 0 : if ( ( _rIndex < 0 ) || ( (size_t)_rIndex >= m_aChildren.size() ) )
1634 0 : throw ::com::sun::star::lang::IndexOutOfBoundsException();
1635 :
1636 : // extract the form component
1637 0 : if (Element.getValueType().getTypeClass() != TypeClass_INTERFACE)
1638 : {
1639 0 : throw ::com::sun::star::lang::IllegalArgumentException();
1640 : }
1641 :
1642 0 : Reference< ::com::sun::star::form::XFormComponent > xElement(*(Reference< XInterface > *)Element.getValue(), UNO_QUERY);
1643 0 : if (!xElement.is())
1644 : {
1645 0 : throw ::com::sun::star::lang::IllegalArgumentException();
1646 : }
1647 :
1648 : // for the name we need the propset
1649 0 : Reference< ::com::sun::star::beans::XPropertySet > xElementSet(xElement, UNO_QUERY);
1650 0 : if (!xElementSet.is())
1651 : {
1652 0 : throw ::com::sun::star::lang::IllegalArgumentException();
1653 : }
1654 0 : ::rtl::OUString sName;
1655 : try
1656 : {
1657 0 : xElementSet->getPropertyValue(PROPERTY_NAME) >>= sName;
1658 : }
1659 0 : catch(Exception&)
1660 : {
1661 : // the set didn't support the name prop
1662 0 : throw ::com::sun::star::lang::IllegalArgumentException();
1663 : }
1664 :
1665 0 : Reference< ::com::sun::star::form::XFormComponent > xOld = *(m_aChildren.begin() + _rIndex);
1666 :
1667 : OSL_ENSURE(m_aChildren.size() == m_aChildNames.size(), "SAL_CALL SbaXFormAdapter::replaceByIndex : inconsistent container state !");
1668 0 : *(m_aChildren.begin() + _rIndex) = xElement;
1669 0 : *(m_aChildNames.begin() + _rIndex) = sName;
1670 :
1671 : // correct property change listening
1672 0 : Reference< ::com::sun::star::beans::XPropertySet > xOldSet(xOld, UNO_QUERY);
1673 0 : xOldSet->removePropertyChangeListener(PROPERTY_NAME, (::com::sun::star::beans::XPropertyChangeListener*)this);
1674 0 : xElementSet->addPropertyChangeListener(PROPERTY_NAME, (::com::sun::star::beans::XPropertyChangeListener*)this);
1675 :
1676 : // parent reset
1677 0 : xOld->setParent(Reference< XInterface > ());
1678 0 : xElement->setParent((::com::sun::star::container::XContainer*)this);
1679 :
1680 : // notify container listeners
1681 0 : ::com::sun::star::container::ContainerEvent aEvt;
1682 0 : aEvt.Source = *this;
1683 0 : aEvt.Accessor <<= (sal_Int32)_rIndex;
1684 0 : aEvt.Element <<= xElement;
1685 0 : aEvt.ReplacedElement <<= xOld;
1686 :
1687 0 : ::cppu::OInterfaceIteratorHelper aIt(m_aContainerListeners);
1688 0 : while (aIt.hasMoreElements())
1689 0 : ((::com::sun::star::container::XContainerListener*)aIt.next())->elementReplaced(aEvt);
1690 0 : }
1691 :
1692 : // ::com::sun::star::container::XIndexAccess
1693 : // -------------------------------------------------------------------------
1694 0 : sal_Int32 SAL_CALL SbaXFormAdapter::getCount() throw( RuntimeException )
1695 : {
1696 0 : return m_aChildren.size();
1697 : }
1698 :
1699 : // -------------------------------------------------------------------------
1700 0 : Any SAL_CALL SbaXFormAdapter::getByIndex(sal_Int32 _rIndex) throw( ::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::lang::WrappedTargetException, RuntimeException )
1701 : {
1702 0 : if ( ( _rIndex < 0 ) || ( (size_t)_rIndex >= m_aChildren.size() ) )
1703 0 : throw ::com::sun::star::lang::IndexOutOfBoundsException();
1704 :
1705 0 : Reference< ::com::sun::star::form::XFormComponent > xElement = *(m_aChildren.begin() + _rIndex);
1706 0 : return makeAny(xElement);
1707 : }
1708 :
1709 : // ::com::sun::star::container::XContainer
1710 : // -------------------------------------------------------------------------
1711 0 : void SAL_CALL SbaXFormAdapter::addContainerListener(const Reference< ::com::sun::star::container::XContainerListener >& xListener) throw( RuntimeException )
1712 : {
1713 0 : m_aContainerListeners.addInterface(xListener);
1714 0 : }
1715 :
1716 : // -------------------------------------------------------------------------
1717 0 : void SAL_CALL SbaXFormAdapter::removeContainerListener(const Reference< ::com::sun::star::container::XContainerListener >& xListener) throw( RuntimeException )
1718 : {
1719 0 : m_aContainerListeners.removeInterface(xListener);
1720 0 : }
1721 :
1722 : // ::com::sun::star::container::XEnumerationAccess
1723 : // -------------------------------------------------------------------------
1724 0 : Reference< ::com::sun::star::container::XEnumeration > SAL_CALL SbaXFormAdapter::createEnumeration() throw( RuntimeException )
1725 : {
1726 0 : return new ::comphelper::OEnumerationByName(this);
1727 : }
1728 :
1729 : // ::com::sun::star::beans::XPropertyChangeListener
1730 : // -------------------------------------------------------------------------
1731 0 : void SAL_CALL SbaXFormAdapter::propertyChange(const ::com::sun::star::beans::PropertyChangeEvent& evt) throw( RuntimeException )
1732 : {
1733 0 : if (evt.PropertyName.equals(PROPERTY_NAME))
1734 : {
1735 : ::std::vector< ::com::sun::star::uno::Reference< ::com::sun::star::form::XFormComponent > >::iterator aIter = ::std::find_if( m_aChildren.begin(),
1736 : m_aChildren.end(),
1737 0 : ::std::bind2nd(::std::equal_to< ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > >(),evt.Source));
1738 :
1739 0 : if(aIter != m_aChildren.end())
1740 : {
1741 0 : sal_Int32 nPos = aIter - m_aChildren.begin();
1742 : OSL_ENSURE(*(m_aChildNames.begin() + nPos) == ::comphelper::getString(evt.OldValue), "SAL_CALL SbaXFormAdapter::propertyChange : object has a wrong name !");
1743 0 : *(m_aChildNames.begin() + nPos) = ::comphelper::getString(evt.NewValue);
1744 : }
1745 : }
1746 0 : }
1747 :
1748 : // ::com::sun::star::lang::XEventListener
1749 : // -------------------------------------------------------------------------
1750 0 : void SAL_CALL SbaXFormAdapter::disposing(const ::com::sun::star::lang::EventObject& Source) throw( RuntimeException )
1751 : {
1752 : // was it our main form ?
1753 0 : if (Source.Source == m_xMainForm)
1754 0 : dispose();
1755 :
1756 : ::std::vector< ::com::sun::star::uno::Reference< ::com::sun::star::form::XFormComponent > >::iterator aIter = ::std::find_if( m_aChildren.begin(),
1757 : m_aChildren.end(),
1758 0 : ::std::bind2nd(::std::equal_to< ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > >(),Source.Source));
1759 0 : if(aIter != m_aChildren.end())
1760 0 : removeByIndex(aIter - m_aChildren.begin());
1761 0 : }
1762 : // -----------------------------------------------------------------------------
1763 :
1764 :
1765 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|