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