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