xref: /trunk/main/forms/source/component/DatabaseForm.hxx (revision 91144cd0085a7583d2099b982122deb2184ab956)
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 #ifndef _FRM_DATABASEFORM_HXX_
25 #define _FRM_DATABASEFORM_HXX_
26 
27 #include "propertybaghelper.hxx"
28 #include <com/sun/star/sdbc/XDataSource.hpp>
29 #include <com/sun/star/sdb/XSQLErrorListener.hpp>
30 #include <com/sun/star/io/XPersistObject.hpp>
31 #include <com/sun/star/sdb/XSQLErrorBroadcaster.hpp>
32 #include <com/sun/star/form/FormSubmitMethod.hpp>
33 #include <com/sun/star/form/FormSubmitEncoding.hpp>
34 #include <com/sun/star/form/XSubmit.hpp>
35 #include <com/sun/star/form/XReset.hpp>
36 #include <com/sun/star/form/XDatabaseParameterBroadcaster2.hpp>
37 #include <com/sun/star/sdb/XCompletedExecution.hpp>
38 #include <com/sun/star/sdbc/XRowSet.hpp>
39 #include <com/sun/star/sdbcx/XDeleteRows.hpp>
40 #include <com/sun/star/sdbc/XResultSetUpdate.hpp>
41 #include <com/sun/star/sdb/XRowSetApproveListener.hpp>
42 #include <com/sun/star/sdb/XRowSetApproveBroadcaster.hpp>
43 #include <com/sun/star/form/NavigationBarMode.hpp>
44 #include <com/sun/star/form/XLoadable.hpp>
45 #include <com/sun/star/form/XLoadListener.hpp>
46 #include <com/sun/star/form/XForm.hpp>
47 #include <com/sun/star/awt/XTabControllerModel.hpp>
48 #include <com/sun/star/script/XEventAttacherManager.hpp>
49 #include <com/sun/star/sdbc/XRowSetListener.hpp>
50 #include <com/sun/star/sdb/XResultSetAccess.hpp>
51 #include <com/sun/star/sdbc/XCloseable.hpp>
52 #include <com/sun/star/container/XNamed.hpp>
53 #include <com/sun/star/lang/XServiceInfo.hpp>
54 #include <com/sun/star/sdbc/XParameters.hpp>
55 #include <com/sun/star/sdbc/XConnection.hpp>
56 #include <com/sun/star/task/XInteractionHandler.hpp>
57 #include <com/sun/star/beans/XPropertyContainer.hpp>
58 #include <com/sun/star/beans/XPropertyAccess.hpp>
59 #include <com/sun/star/sdbc/XWarningsSupplier.hpp>
60 
61 
62 #include <tools/link.hxx>
63 #include "InterfaceContainer.hxx"
64 
65 #include <connectivity/parameters.hxx>
66 #include <connectivity/filtermanager.hxx>
67 #include <connectivity/warningscontainer.hxx>
68 
69 #ifndef FORMS_SOURCE_MISC_LISTENERCONTAINERS_HXX
70 #include "listenercontainers.hxx"
71 #endif
72 #include "ids.hxx"
73 #include <comphelper/propmultiplex.hxx>
74 #include <comphelper/uno3.hxx>
75 #include <comphelper/proparrhlp.hxx>
76 #include <cppuhelper/implbase12.hxx>
77 #include <cppuhelper/implbase4.hxx>
78 #include <cppuhelper/implbase7.hxx>
79 
80 namespace com { namespace sun { namespace star { namespace sdbc {
81     class SQLException;
82 } } } }
83 
84 class Timer;
85 class INetMIMEMessage;
86 
87 //.........................................................................
88 namespace frm
89 {
90 //.........................................................................
91 
92 //========================================================================
93 //= HTML tools
94 //========================================================================
95 
96 const sal_uInt16 SUCCESSFUL_REPRESENT_TEXT          = 0x0001;
97 const sal_uInt16 SUCCESSFUL_REPRESENT_FILE          = 0x0002;
98 
99 //------------------------------------------------------------------------------
100 class HtmlSuccessfulObj
101 {
102 public:
103     ::rtl::OUString     aName;
104     ::rtl::OUString     aValue;
105     sal_uInt16          nRepresentation;
106 
HtmlSuccessfulObj(const::rtl::OUString & _rName,const::rtl::OUString & _rValue,sal_uInt16 _nRepresent=SUCCESSFUL_REPRESENT_TEXT)107     HtmlSuccessfulObj( const ::rtl::OUString& _rName, const ::rtl::OUString& _rValue,
108         sal_uInt16 _nRepresent = SUCCESSFUL_REPRESENT_TEXT )
109         :aName( _rName )
110         ,aValue( _rValue )
111         ,nRepresentation( _nRepresent )
112     {
113     }
114 
HtmlSuccessfulObj()115     HtmlSuccessfulObj()
116     {
117     }
118 };
119 
120 
121 DECLARE_STL_VECTOR(HtmlSuccessfulObj, HtmlSuccessfulObjList);
122 
123 //========================================================================
124 class OGroupManager;
125 class OFormSubmitResetThread;
126 typedef ::cppu::ImplHelper12    <   ::com::sun::star::form::XForm
127                                 ,   ::com::sun::star::awt::XTabControllerModel
128                                 ,   ::com::sun::star::form::XLoadListener
129                                 ,   ::com::sun::star::sdbc::XRowSetListener
130                                 ,   ::com::sun::star::sdb::XRowSetApproveListener
131                                 ,   ::com::sun::star::form::XDatabaseParameterBroadcaster2
132                                 ,   ::com::sun::star::sdb::XSQLErrorListener
133                                 ,   ::com::sun::star::sdb::XSQLErrorBroadcaster
134                                 ,   ::com::sun::star::form::XReset
135                                 ,   ::com::sun::star::form::XSubmit
136                                 ,   ::com::sun::star::form::XLoadable
137                                 ,   ::com::sun::star::container::XNamed
138                                 >   ODatabaseForm_BASE1;
139 
140 
141 typedef ::cppu::ImplHelper4 <   ::com::sun::star::lang::XServiceInfo
142                             ,   ::com::sun::star::beans::XPropertyContainer
143                             ,   ::com::sun::star::beans::XPropertyAccess
144                             ,   ::com::sun::star::sdbc::XWarningsSupplier
145                             >   ODatabaseForm_BASE2;
146 
147 typedef ::cppu::ImplHelper7<    ::com::sun::star::sdbc::XCloseable,
148                                 ::com::sun::star::sdbc::XRowSet,
149                                 ::com::sun::star::sdb::XCompletedExecution,
150                                 ::com::sun::star::sdb::XRowSetApproveBroadcaster,
151                                 ::com::sun::star::sdbc::XResultSetUpdate,
152                                 ::com::sun::star::sdbcx::XDeleteRows,
153                                 ::com::sun::star::sdbc::XParameters > ODatabaseForm_BASE3;
154 
155 
156 class ODatabaseForm :public OFormComponents
157                     ,public OPropertySetAggregationHelper
158                     ,public OPropertyChangeListener
159                     ,public ODatabaseForm_BASE1
160                     ,public ODatabaseForm_BASE2
161                     ,public ODatabaseForm_BASE3
162                     ,public IPropertyBagHelperContext
163 {
164     friend class OFormSubmitResetThread;
165 
166     OImplementationIdsRef               m_aHoldIdHelper;
167 
168         // listener administration
169     ::cppu::OInterfaceContainerHelper   m_aLoadListeners;
170     ::cppu::OInterfaceContainerHelper   m_aRowSetApproveListeners;
171     ::cppu::OInterfaceContainerHelper   m_aRowSetListeners;
172     ::cppu::OInterfaceContainerHelper   m_aSubmitListeners;
173     ::cppu::OInterfaceContainerHelper   m_aErrorListeners;
174     ResetListeners                      m_aResetListeners;
175     ::osl::Mutex                        m_aResetSafety;
176     ::com::sun::star::uno::Any          m_aCycle;
177     ::com::sun::star::uno::Any          m_aIgnoreResult; // set when we are a subform and our master form positioned on a new row
178     ::com::sun::star::uno::Sequence< ::rtl::OUString >                      m_aMasterFields;
179     ::com::sun::star::uno::Sequence< ::rtl::OUString >                      m_aDetailFields;
180 
181     // the object doin' most of the work - an SDB-rowset
182     ::com::sun::star::uno::Reference< ::com::sun::star::uno::XAggregation>      m_xAggregate;
183     // same object, interface as member because of performance reasons
184     ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XRowSet>          m_xAggregateAsRowSet;
185 
186     PropertyBagHelper           m_aPropertyBagHelper;
187     ::dbtools::WarningsContainer    m_aWarnings;
188     OPropertyChangeMultiplexer* m_pAggregatePropertyMultiplexer;
189     // Verwaltung der ControlGruppen
190     OGroupManager*              m_pGroupManager;
191     ::dbtools::ParameterManager m_aParameterManager;
192     ::dbtools::FilterManager    m_aFilterManager;
193     Timer*                      m_pLoadTimer;
194 
195     OFormSubmitResetThread*     m_pThread;
196     ::rtl::OUString             m_sCurrentErrorContext;
197                 // will be used as additional context information
198                 // when an exception is catched and forwarded to the listeners
199 
200     sal_Int32                       m_nResetsPending;
201 //  <overwritten_properties>
202     sal_Int32                   m_nPrivileges;
203     sal_Bool                    m_bInsertOnly;
204 //  </overwritten_properties>
205 
206 //  <properties>
207     ::com::sun::star::uno::Any  m_aControlBorderColorFocus;
208     ::com::sun::star::uno::Any  m_aControlBorderColorMouse;
209     ::com::sun::star::uno::Any  m_aControlBorderColorInvalid;
210     ::com::sun::star::uno::Any  m_aDynamicControlBorder;
211     ::rtl::OUString             m_sName;
212     ::rtl::OUString             m_aTargetURL;
213     ::rtl::OUString             m_aTargetFrame;
214     ::com::sun::star::form::FormSubmitMethod    m_eSubmitMethod;
215     ::com::sun::star::form::FormSubmitEncoding  m_eSubmitEncoding;
216     ::com::sun::star::form::NavigationBarMode   m_eNavigation;
217     sal_Bool                    m_bAllowInsert : 1;
218     sal_Bool                    m_bAllowUpdate : 1;
219     sal_Bool                    m_bAllowDelete : 1;
220 //  </properties>
221     sal_Bool                    m_bLoaded : 1;
222     sal_Bool                    m_bSubForm : 1;
223     sal_Bool                    m_bForwardingConnection : 1;    // sal_True if we're setting the ActiveConnection on the aggregate
224     sal_Bool                    m_bSharingConnection : 1;       // sal_True if the connection we're using is shared with out parent
225 
226 public:
227     ODatabaseForm(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory>& _rxFactory);
228     ODatabaseForm( const ODatabaseForm& _cloneSource );
229     ~ODatabaseForm();
230 
231     // UNO binding
232     DECLARE_UNO3_AGG_DEFAULTS(ODatabaseForm, OFormComponents);
233     virtual ::com::sun::star::uno::Any SAL_CALL queryAggregation(const ::com::sun::star::uno::Type& _rType);
234 
235     // XTypeProvider
236     virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type> SAL_CALL getTypes(  );
237     virtual ::com::sun::star::uno::Sequence<sal_Int8> SAL_CALL getImplementationId(  );
238 
239     // ::com::sun::star::lang::XComponent
240     virtual void SAL_CALL disposing();
241 
242     // property handling
243     virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo(  );
244     virtual ::cppu::IPropertyArrayHelper& SAL_CALL getInfoHelper();
245     virtual void SAL_CALL getFastPropertyValue(::com::sun::star::uno::Any& rValue, sal_Int32 nHandle ) const;
246     virtual sal_Bool SAL_CALL convertFastPropertyValue(::com::sun::star::uno::Any& rConvertedValue, ::com::sun::star::uno::Any& rOldValue, sal_Int32 nHandle, const ::com::sun::star::uno::Any& rValue );
247     virtual void SAL_CALL setFastPropertyValue_NoBroadcast(sal_Int32 nHandle, const ::com::sun::star::uno::Any& rValue);
248 
249     ::com::sun::star::uno::Any  SAL_CALL getFastPropertyValue( sal_Int32 nHandle );
250     void fire( sal_Int32 * pnHandles, const ::com::sun::star::uno::Any * pNewValues, const ::com::sun::star::uno::Any * pOldValues, sal_Int32 nCount, sal_Bool bVetoable );
251 
252     // IPropertyBagHelperContext
253     virtual ::osl::Mutex&   getMutex();
254     virtual void            describeFixedAndAggregateProperties(
255         ::com::sun::star::uno::Sequence< ::com::sun::star::beans::Property >& _out_rFixedProperties,
256         ::com::sun::star::uno::Sequence< ::com::sun::star::beans::Property >& _out_rAggregateProperties
257     ) const;
258     virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XMultiPropertySet >
259                             getPropertiesInterface();
260 
261     // com::sun::star::beans::XPropertyState
262     virtual ::com::sun::star::beans::PropertyState getPropertyStateByHandle(sal_Int32 nHandle);
263     virtual void setPropertyToDefaultByHandle(sal_Int32 nHandle);
264     virtual ::com::sun::star::uno::Any getPropertyDefaultByHandle(sal_Int32 nHandle) const;
265 
266     // com::sun::star::sdbc::XSQLErrorBroadcaster
267     virtual void SAL_CALL addSQLErrorListener(const ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XSQLErrorListener>& _rxListener);
268     virtual void SAL_CALL removeSQLErrorListener(const ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XSQLErrorListener>& _rxListener);
269 
270     // com::sun::star::form::XForm
271     // nothing to implement
272 
273     // com::sun::star::form::XReset
274     virtual void SAL_CALL reset();
275     virtual void SAL_CALL addResetListener(const ::com::sun::star::uno::Reference< ::com::sun::star::form::XResetListener>& _rxListener);
276     virtual void SAL_CALL removeResetListener(const ::com::sun::star::uno::Reference< ::com::sun::star::form::XResetListener>& _rxListener);
277 
278     // com::sun::star::form::XSubmit
279     virtual void SAL_CALL submit(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl>& aControl, const ::com::sun::star::awt::MouseEvent& aMouseEvt);
280     virtual void SAL_CALL addSubmitListener(const ::com::sun::star::uno::Reference< ::com::sun::star::form::XSubmitListener>& _rxListener);
281     virtual void SAL_CALL removeSubmitListener(const ::com::sun::star::uno::Reference< ::com::sun::star::form::XSubmitListener>& _rxListener);
282 
283     // com::sun::star::container::XChild
getParent()284     virtual InterfaceRef SAL_CALL getParent() { return OFormComponents::getParent(); }
285     virtual void SAL_CALL setParent(const InterfaceRef& Parent);
286 
287     // com::sun::star::container::XNamed
288     virtual ::rtl::OUString SAL_CALL getName();
289     virtual void SAL_CALL setName(const ::rtl::OUString& aName);
290 
291     // com::sun::star::awt::XTabControllerModel
292     virtual sal_Bool SAL_CALL getGroupControl();
setGroupControl(sal_Bool)293     virtual void SAL_CALL setGroupControl(sal_Bool /*_bGroupControl*/) { }
294     virtual void SAL_CALL setControlModels(const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlModel > >& _rControls);
295     virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlModel > > SAL_CALL getControlModels();
296     virtual void SAL_CALL setGroup(const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlModel > >& _rGroup, const ::rtl::OUString& _rGroupName);
297     virtual sal_Int32 SAL_CALL getGroupCount();
298     virtual void SAL_CALL getGroup(sal_Int32 _nGroup, ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlModel > >& _rxGroup, ::rtl::OUString& _rName);
299     virtual void SAL_CALL getGroupByName(const ::rtl::OUString& _rName, ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlModel > >& _rxGroup);
300 
301     // com::sun::star::lang::XEventListener
302     virtual void SAL_CALL disposing(const ::com::sun::star::lang::EventObject& _rSource);
303 
304     // com::sun::star::form::XLoadListener
305     virtual void SAL_CALL loaded(const ::com::sun::star::lang::EventObject& aEvent);
306     virtual void SAL_CALL unloading(const ::com::sun::star::lang::EventObject& aEvent);
307     virtual void SAL_CALL unloaded(const ::com::sun::star::lang::EventObject& aEvent);
308     virtual void SAL_CALL reloading(const ::com::sun::star::lang::EventObject& aEvent);
309     virtual void SAL_CALL reloaded(const ::com::sun::star::lang::EventObject& aEvent);
310 
311     // com::sun::star::form::XLoadable
312     virtual void SAL_CALL load();
313     virtual void SAL_CALL unload();
314     virtual void SAL_CALL reload();
315     virtual sal_Bool SAL_CALL isLoaded();
316     virtual void SAL_CALL addLoadListener(const ::com::sun::star::uno::Reference< ::com::sun::star::form::XLoadListener>& _rxListener);
317     virtual void SAL_CALL removeLoadListener(const ::com::sun::star::uno::Reference< ::com::sun::star::form::XLoadListener>& _rxListener);
318 
319     // com::sun::star::sdbc::XCloseable
320     virtual void SAL_CALL close();
321 
322     // com::sun::star::sdbc::XRowSetListener
323     virtual void SAL_CALL cursorMoved(const ::com::sun::star::lang::EventObject& event);
324     virtual void SAL_CALL rowChanged(const ::com::sun::star::lang::EventObject& event);
325     virtual void SAL_CALL rowSetChanged(const ::com::sun::star::lang::EventObject& event);
326 
327     // com::sun::star::sdb::XRowSetApproveListener
328     virtual sal_Bool SAL_CALL approveCursorMove(const ::com::sun::star::lang::EventObject& event);
329     virtual sal_Bool SAL_CALL approveRowChange(const ::com::sun::star::sdb::RowChangeEvent& event);
330     virtual sal_Bool SAL_CALL approveRowSetChange(const ::com::sun::star::lang::EventObject& event);
331 
332     // com::sun::star::sdb::XRowSetApproveBroadcaster
333     virtual void SAL_CALL addRowSetApproveListener(const ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XRowSetApproveListener>& _rxListener);
334     virtual void SAL_CALL removeRowSetApproveListener(const ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XRowSetApproveListener>& _rxListener);
335 
336     // com::sun:star::form::XDatabaseParameterBroadcaster2
337     virtual void SAL_CALL addDatabaseParameterListener(const ::com::sun::star::uno::Reference< ::com::sun::star::form::XDatabaseParameterListener>& _rxListener);
338     virtual void SAL_CALL removeDatabaseParameterListener(const ::com::sun::star::uno::Reference< ::com::sun::star::form::XDatabaseParameterListener>& _rxListener);
339 
340     // com::sun:star::form::XDatabaseParameterBroadcaster
341     virtual void SAL_CALL addParameterListener(const ::com::sun::star::uno::Reference< ::com::sun::star::form::XDatabaseParameterListener>& _rxListener);
342     virtual void SAL_CALL removeParameterListener(const ::com::sun::star::uno::Reference< ::com::sun::star::form::XDatabaseParameterListener>& _rxListener);
343 
344     // com::sun::star::sdbc::XRowSet
345     virtual void SAL_CALL execute();
346     virtual void SAL_CALL addRowSetListener(const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XRowSetListener>& _rxListener);
347     virtual void SAL_CALL removeRowSetListener(const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XRowSetListener>& _rxListener);
348 
349     // com::sun::star::sdb::XCompletedExecution
350     virtual void SAL_CALL executeWithCompletion( const ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionHandler >& handler );
351 
352     // com::sun::star::sdbc::XResultSet
353     virtual sal_Bool SAL_CALL next();
354     virtual sal_Bool SAL_CALL isBeforeFirst();
355     virtual sal_Bool SAL_CALL isAfterLast();
356     virtual sal_Bool SAL_CALL isFirst();
357     virtual sal_Bool SAL_CALL isLast();
358     virtual void SAL_CALL beforeFirst();
359     virtual void SAL_CALL afterLast();
360     virtual sal_Bool SAL_CALL first();
361     virtual sal_Bool SAL_CALL last();
362     virtual sal_Int32 SAL_CALL getRow();
363     virtual sal_Bool SAL_CALL absolute(sal_Int32 row);
364     virtual sal_Bool SAL_CALL relative(sal_Int32 rows);
365     virtual sal_Bool SAL_CALL previous();
366     virtual void SAL_CALL refreshRow();
367     virtual sal_Bool SAL_CALL rowUpdated();
368     virtual sal_Bool SAL_CALL rowInserted();
369     virtual sal_Bool SAL_CALL rowDeleted();
370     virtual InterfaceRef SAL_CALL getStatement();
371 
372     // com::sun::star::sdbc::XResultSetUpdate
373     virtual void SAL_CALL insertRow();
374     virtual void SAL_CALL updateRow();
375     virtual void SAL_CALL deleteRow();
376     virtual void SAL_CALL cancelRowUpdates();
377     virtual void SAL_CALL moveToInsertRow();
378     virtual void SAL_CALL moveToCurrentRow();
379 
380     // com::sun::star::sdbcx::XDeleteRows
381     virtual ::com::sun::star::uno::Sequence< sal_Int32 > SAL_CALL deleteRows(const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any>& rows);
382 
383     // com::sun::star::lang::XServiceInfo
384     virtual sal_Bool SAL_CALL supportsService(const ::rtl::OUString& ServiceName);
385     virtual ::rtl::OUString SAL_CALL getImplementationName();
386     virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames();
387 
388     // com::sun::star::lang::XServiceInfo - static version
389     static  ::rtl::OUString SAL_CALL getImplementationName_Static();
390     static  ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames_Static();
391     static  ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getCurrentServiceNames_Static();
392     static  ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getCompatibleServiceNames_Static();
393     static  ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL Create( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rxFactory );
394 
395     // com::sun::star::io::XPersistObject
396     virtual ::rtl::OUString SAL_CALL getServiceName();
397     virtual void SAL_CALL write(const ::com::sun::star::uno::Reference< ::com::sun::star::io::XObjectOutputStream>& _rxOutStream);
398     virtual void SAL_CALL read(const ::com::sun::star::uno::Reference< ::com::sun::star::io::XObjectInputStream>& _rxInStream);
399 
400     // com::sun::star::sdbc::XSQLErrorListener
401     virtual void SAL_CALL errorOccured(const ::com::sun::star::sdb::SQLErrorEvent& aEvent);
402 
403     // com::sun::star::sdbc::XParameters
404     virtual void SAL_CALL setNull(sal_Int32 parameterIndex, sal_Int32 sqlType);
405     virtual void SAL_CALL setObjectNull(sal_Int32 parameterIndex, sal_Int32 sqlType, const ::rtl::OUString& typeName);
406     virtual void SAL_CALL setBoolean(sal_Int32 parameterIndex, sal_Bool x);
407     virtual void SAL_CALL setByte(sal_Int32 parameterIndex, sal_Int8 x);
408     virtual void SAL_CALL setShort(sal_Int32 parameterIndex, sal_Int16 x);
409     virtual void SAL_CALL setInt(sal_Int32 parameterIndex, sal_Int32 x);
410     virtual void SAL_CALL setLong(sal_Int32 parameterIndex, sal_Int64 x);
411     virtual void SAL_CALL setFloat(sal_Int32 parameterIndex, float x);
412     virtual void SAL_CALL setDouble(sal_Int32 parameterIndex, double x);
413     virtual void SAL_CALL setString(sal_Int32 parameterIndex, const ::rtl::OUString& x);
414     virtual void SAL_CALL setBytes(sal_Int32 parameterIndex, const ::com::sun::star::uno::Sequence< sal_Int8 >& x);
415     virtual void SAL_CALL setDate(sal_Int32 parameterIndex, const ::com::sun::star::util::Date& x);
416     virtual void SAL_CALL setTime(sal_Int32 parameterIndex, const ::com::sun::star::util::Time& x);
417     virtual void SAL_CALL setTimestamp(sal_Int32 parameterIndex, const ::com::sun::star::util::DateTime& x);
418     virtual void SAL_CALL setBinaryStream(sal_Int32 parameterIndex, const ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream>& x, sal_Int32 length);
419     virtual void SAL_CALL setCharacterStream(sal_Int32 parameterIndex, const ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream>& x, sal_Int32 length);
420     virtual void SAL_CALL setObject(sal_Int32 parameterIndex, const ::com::sun::star::uno::Any& x);
421     virtual void SAL_CALL setObjectWithInfo(sal_Int32 parameterIndex, const ::com::sun::star::uno::Any& x, sal_Int32 targetSqlType, sal_Int32 scale);
422     virtual void SAL_CALL setRef(sal_Int32 parameterIndex, const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XRef>& x);
423     virtual void SAL_CALL setBlob(sal_Int32 parameterIndex, const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XBlob>& x);
424     virtual void SAL_CALL setClob(sal_Int32 parameterIndex, const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XClob>& x);
425     virtual void SAL_CALL setArray(sal_Int32 parameterIndex, const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XArray>& x);
426     virtual void SAL_CALL clearParameters();
427 
428     // XPropertyChangeListener
429     virtual void SAL_CALL propertyChange( const ::com::sun::star::beans::PropertyChangeEvent& evt );
430 
431     // XPropertyContainer
432     virtual void SAL_CALL addProperty( const ::rtl::OUString& Name, ::sal_Int16 Attributes, const ::com::sun::star::uno::Any& DefaultValue );
433     virtual void SAL_CALL removeProperty( const ::rtl::OUString& Name );
434 
435     // XPropertyAccess
436     virtual ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue > SAL_CALL getPropertyValues(  );
437     virtual void SAL_CALL setPropertyValues( const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& aProps );
438     using OPropertySetAggregationHelper::setPropertyValues;
439 
440     // XWarningsSupplier
441     virtual ::com::sun::star::uno::Any SAL_CALL getWarnings(  );
442     virtual void SAL_CALL clearWarnings(  );
443 
444     // XCloneable
445     virtual ::com::sun::star::uno::Reference< ::com::sun::star::util::XCloneable > SAL_CALL createClone(  );
446 
447     inline void submitNBC( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl>& Control, const ::com::sun::star::awt::MouseEvent& MouseEvt );
448 
449 protected:
450     // OPropertySetAggregationHelper overridables
451     virtual void SAL_CALL forwardingPropertyValue( sal_Int32 _nHandle );
452     virtual void SAL_CALL forwardedPropertyValue( sal_Int32 _nHandle, bool _bSuccess );
453 
454     // OInterfaceContainer overridables
455     virtual void implInserted( const ElementDescription* _pElement );
456     virtual void implRemoved(const InterfaceRef& _rxObject);
457 
458     // OPropertyChangeListener
459     virtual void _propertyChanged( const ::com::sun::star::beans::PropertyChangeEvent& );
460 
461 private:
462     sal_Bool executeRowSet(::osl::ResettableMutexGuard& _rClearForNotifies, sal_Bool bMoveToFirst = sal_True,
463                     const ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionHandler >& _rxCompletionHandler = ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionHandler >());
464     bool    fillParameters(::osl::ResettableMutexGuard& _rClearForNotifies,
465                     const ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionHandler >& _rxCompletionHandler = ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionHandler >());
466     void    updateParameterInfo();
467     bool    hasValidParent() const;
468 
469     // impl methods
470     void    load_impl(sal_Bool bCausedByParentForm, sal_Bool bMoveToFirst = sal_True,
471         const ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionHandler >& _rxCompletionHandler = ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionHandler >());
472     void    reload_impl(sal_Bool bMoveToFirst,
473         const ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionHandler >& _rxCompletionHandler = ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionHandler >());
474     void    submit_impl(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl>& Control, const ::com::sun::star::awt::MouseEvent& MouseEvt, bool _bAproveByListeners);
475     void    reset_impl(bool _bAproveByListeners);
476 
477     sal_Bool    implEnsureConnection();
478 
479     // connection sharing
480 
481     /// checks if we can re-use (aka share) the connection of the given parent
482     sal_Bool    canShareConnection( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& _rxParentProps );
483 
484     /// starts sharing the connection with the parent
485     void        doShareConnection( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& _rxParentProps );
486 
487     /// stops sharing the connection with the parent
488     void        stopSharingConnection( );
489 
490     /// called when the connection which we share with our parent is being disposed
491     void        disposingSharedConnection( const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection >& _rxConn );
492 
493     /// checks if we currently share our connection with our parent
isSharingConnection() const494     sal_Bool    isSharingConnection( ) const { return m_bSharingConnection; }
495 
496     /** calls our row set approval listeners
497 
498         @param _rEvent
499             the event to notify
500         @param _bAllowSQLException
501             <TRUE/> if SQLExceptions are allowed to leave the method
502         @param _rGuard
503             the guard to be cleared before actually calling into the listeners, but after making
504             a copy of the listeners array to operate on.
505         @return
506             <TRUE/> if and only if the execution has been approved
507     */
508     bool    impl_approveRowChange_throw(
509         const ::com::sun::star::lang::EventObject& _rEvent,
510         const bool _bAllowSQLException,
511         ::osl::ClearableMutexGuard& _rGuard
512     );
513 
514     /// invalidate all our parameter-related stuff
515     void        invlidateParameters();
516 
517     void        saveInsertOnlyState( );
518     void        restoreInsertOnlyState( );
519 
520     // error handling
521     void    onError(const ::com::sun::star::sdb::SQLErrorEvent& _rEvent);
522     void    onError(const ::com::sun::star::sdbc::SQLException&, const ::rtl::OUString& _rContextDescription);
523 
524     // HTML tools
525     ::rtl::OUString         GetDataEncoded(bool _bURLEncoded,const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl>& SubmitButton, const ::com::sun::star::awt::MouseEvent& MouseEvt);
526     ::rtl::OUString         GetDataURLEncoded(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl>& SubmitButton, const ::com::sun::star::awt::MouseEvent& MouseEvt);
527     ::rtl::OUString         GetDataTextEncoded(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl>& SubmitButton, const ::com::sun::star::awt::MouseEvent& MouseEvt);
528     ::com::sun::star::uno::Sequence<sal_Int8>   GetDataMultiPartEncoded(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl>& SubmitButton, const ::com::sun::star::awt::MouseEvent& MouseEvt,
529                                              ::rtl::OUString& rContentType);
530 
531     void AppendComponent(HtmlSuccessfulObjList& rList, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet>& xComponentSet, const ::rtl::OUString& rNamePrefix,
532                      const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl>& rxSubmitButton, const ::com::sun::star::awt::MouseEvent& MouseEvt);
533 
534     void FillSuccessfulList(HtmlSuccessfulObjList& rList, const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl>& rxSubmitButton, const ::com::sun::star::awt::MouseEvent& MouseEvt);
535 
536     void InsertTextPart(INetMIMEMessage& rParent, const ::rtl::OUString& rName, const ::rtl::OUString& rData);
537     sal_Bool InsertFilePart(INetMIMEMessage& rParent, const ::rtl::OUString& rName, const ::rtl::OUString& rFileName);
538     void Encode(::rtl::OUString& rString) const;
539 
540     ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection > getConnection();
541 
542     void    impl_createLoadTimer();
543 
544     void    impl_construct();
545 
546     DECL_LINK( OnTimeout, void* );
547 protected:
548     using OPropertySetHelper::getPropertyValues;
549 };
550 
submitNBC(const::com::sun::star::uno::Reference<::com::sun::star::awt::XControl> & Control,const::com::sun::star::awt::MouseEvent & MouseEvt)551 inline void ODatabaseForm::submitNBC(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl>& Control, const ::com::sun::star::awt::MouseEvent& MouseEvt)
552 {
553     submit_impl(Control, MouseEvt, sal_False);
554 }
555 
556 //.........................................................................
557 }   // namespace frm
558 //.........................................................................
559 
560 #endif // _FRM_DATABASEFORM_HXX_
561