1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski #ifndef _DBA_COREDATAACCESS_DATABASEDOCUMENT_HXX_
24*b1cdbd2cSJim Jagielski #define _DBA_COREDATAACCESS_DATABASEDOCUMENT_HXX_
25*b1cdbd2cSJim Jagielski 
26*b1cdbd2cSJim Jagielski #include "ModelImpl.hxx"
27*b1cdbd2cSJim Jagielski #include "documenteventnotifier.hxx"
28*b1cdbd2cSJim Jagielski 
29*b1cdbd2cSJim Jagielski /** === begin UNO includes === **/
30*b1cdbd2cSJim Jagielski #include <com/sun/star/ui/XUIConfigurationManagerSupplier.hpp>
31*b1cdbd2cSJim Jagielski #include <com/sun/star/document/XDocumentSubStorageSupplier.hpp>
32*b1cdbd2cSJim Jagielski #include <com/sun/star/frame/XModel2.hpp>
33*b1cdbd2cSJim Jagielski #include <com/sun/star/frame/XTitle.hpp>
34*b1cdbd2cSJim Jagielski #include <com/sun/star/frame/XTitleChangeBroadcaster.hpp>
35*b1cdbd2cSJim Jagielski #include <com/sun/star/frame/XUntitledNumbers.hpp>
36*b1cdbd2cSJim Jagielski #include <com/sun/star/util/XModifiable.hpp>
37*b1cdbd2cSJim Jagielski #include <com/sun/star/frame/XStorable.hpp>
38*b1cdbd2cSJim Jagielski #include <com/sun/star/sdb/XReportDocumentsSupplier.hpp>
39*b1cdbd2cSJim Jagielski #include <com/sun/star/sdb/XFormDocumentsSupplier.hpp>
40*b1cdbd2cSJim Jagielski #include <com/sun/star/util/XCloseable.hpp>
41*b1cdbd2cSJim Jagielski #include <com/sun/star/view/XPrintable.hpp>
42*b1cdbd2cSJim Jagielski #include <com/sun/star/frame/XModuleManager.hpp>
43*b1cdbd2cSJim Jagielski #include <com/sun/star/lang/XMultiServiceFactory.hpp>
44*b1cdbd2cSJim Jagielski #include <com/sun/star/lang/XServiceInfo.hpp>
45*b1cdbd2cSJim Jagielski #include <com/sun/star/sdb/XOfficeDatabaseDocument.hpp>
46*b1cdbd2cSJim Jagielski #include <com/sun/star/embed/XTransactionListener.hpp>
47*b1cdbd2cSJim Jagielski #include <com/sun/star/document/XStorageBasedDocument.hpp>
48*b1cdbd2cSJim Jagielski #include <com/sun/star/document/XEmbeddedScripts.hpp>
49*b1cdbd2cSJim Jagielski #include <com/sun/star/document/XEventsSupplier.hpp>
50*b1cdbd2cSJim Jagielski #include <com/sun/star/document/XScriptInvocationContext.hpp>
51*b1cdbd2cSJim Jagielski #include <com/sun/star/script/XStorageBasedLibraryContainer.hpp>
52*b1cdbd2cSJim Jagielski #include <com/sun/star/script/provider/XScriptProviderSupplier.hpp>
53*b1cdbd2cSJim Jagielski #include <com/sun/star/frame/XLoadable.hpp>
54*b1cdbd2cSJim Jagielski #include <com/sun/star/document/XEventBroadcaster.hpp>
55*b1cdbd2cSJim Jagielski #include <com/sun/star/document/XDocumentEventBroadcaster.hpp>
56*b1cdbd2cSJim Jagielski #include <com/sun/star/document/XDocumentRecovery.hpp>
57*b1cdbd2cSJim Jagielski /** === end UNO includes === **/
58*b1cdbd2cSJim Jagielski 
59*b1cdbd2cSJim Jagielski #if ! defined(INCLUDED_COMPHELPER_IMPLBASE_VAR_HXX_17)
60*b1cdbd2cSJim Jagielski #define INCLUDED_COMPHELPER_IMPLBASE_VAR_HXX_17
61*b1cdbd2cSJim Jagielski #define COMPHELPER_IMPLBASE_INTERFACE_NUMBER 17
62*b1cdbd2cSJim Jagielski #include <comphelper/implbase_var.hxx>
63*b1cdbd2cSJim Jagielski #endif
64*b1cdbd2cSJim Jagielski 
65*b1cdbd2cSJim Jagielski #include <cppuhelper/compbase10.hxx>
66*b1cdbd2cSJim Jagielski #include <cppuhelper/implbase3.hxx>
67*b1cdbd2cSJim Jagielski #include <rtl/ref.hxx>
68*b1cdbd2cSJim Jagielski 
69*b1cdbd2cSJim Jagielski #include <boost/shared_ptr.hpp>
70*b1cdbd2cSJim Jagielski #include <boost/noncopyable.hpp>
71*b1cdbd2cSJim Jagielski 
72*b1cdbd2cSJim Jagielski namespace comphelper {
73*b1cdbd2cSJim Jagielski     class NamedValueCollection;
74*b1cdbd2cSJim Jagielski }
75*b1cdbd2cSJim Jagielski 
76*b1cdbd2cSJim Jagielski //........................................................................
77*b1cdbd2cSJim Jagielski namespace dbaccess
78*b1cdbd2cSJim Jagielski {
79*b1cdbd2cSJim Jagielski //........................................................................
80*b1cdbd2cSJim Jagielski 
81*b1cdbd2cSJim Jagielski class DocumentEvents;
82*b1cdbd2cSJim Jagielski class DocumentEventExecutor;
83*b1cdbd2cSJim Jagielski class DocumentGuard;
84*b1cdbd2cSJim Jagielski 
85*b1cdbd2cSJim Jagielski typedef ::std::vector< ::com::sun::star::uno::Reference< ::com::sun::star::frame::XController > >   Controllers;
86*b1cdbd2cSJim Jagielski 
87*b1cdbd2cSJim Jagielski //============================================================
88*b1cdbd2cSJim Jagielski //= ViewMonitor
89*b1cdbd2cSJim Jagielski //============================================================
90*b1cdbd2cSJim Jagielski /** helper class monitoring the views of a document, and firing appropriate events
91*b1cdbd2cSJim Jagielski     when views are attached / detached
92*b1cdbd2cSJim Jagielski */
93*b1cdbd2cSJim Jagielski class ViewMonitor : public boost::noncopyable
94*b1cdbd2cSJim Jagielski {
95*b1cdbd2cSJim Jagielski public:
ViewMonitor(DocumentEventNotifier & _rEventNotifier)96*b1cdbd2cSJim Jagielski     ViewMonitor( DocumentEventNotifier& _rEventNotifier )
97*b1cdbd2cSJim Jagielski         :m_rEventNotifier( _rEventNotifier )
98*b1cdbd2cSJim Jagielski         ,m_bIsNewDocument( true )
99*b1cdbd2cSJim Jagielski         ,m_bEverHadController( false )
100*b1cdbd2cSJim Jagielski         ,m_bLastIsFirstEverController( false )
101*b1cdbd2cSJim Jagielski         ,m_xLastConnectedController()
102*b1cdbd2cSJim Jagielski     {
103*b1cdbd2cSJim Jagielski     }
104*b1cdbd2cSJim Jagielski 
reset()105*b1cdbd2cSJim Jagielski     void    reset()
106*b1cdbd2cSJim Jagielski     {
107*b1cdbd2cSJim Jagielski         m_bEverHadController = false;
108*b1cdbd2cSJim Jagielski         m_bLastIsFirstEverController = false;
109*b1cdbd2cSJim Jagielski         m_xLastConnectedController.clear();
110*b1cdbd2cSJim Jagielski     }
111*b1cdbd2cSJim Jagielski 
112*b1cdbd2cSJim Jagielski     /** to be called when a view (aka controller) has been connected to the document
113*b1cdbd2cSJim Jagielski         @return
114*b1cdbd2cSJim Jagielski             <TRUE/> if and only if this was the first-ever controller connected to the document
115*b1cdbd2cSJim Jagielski     */
116*b1cdbd2cSJim Jagielski     bool    onControllerConnected(
117*b1cdbd2cSJim Jagielski                 const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XController >& _rxController
118*b1cdbd2cSJim Jagielski              );
119*b1cdbd2cSJim Jagielski 
120*b1cdbd2cSJim Jagielski     /**  to be called when a controller is set as current controller
121*b1cdbd2cSJim Jagielski         @return <TRUE/>
122*b1cdbd2cSJim Jagielski             if and only if the controller connection indicates that loading the document is finished. This
123*b1cdbd2cSJim Jagielski             is the case if the given controller has previously been connected, and it was the first controller
124*b1cdbd2cSJim Jagielski             ever for which this happened.
125*b1cdbd2cSJim Jagielski     */
126*b1cdbd2cSJim Jagielski     bool    onSetCurrentController(
127*b1cdbd2cSJim Jagielski                 const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XController >& _rxController
128*b1cdbd2cSJim Jagielski              );
129*b1cdbd2cSJim Jagielski 
onLoadedDocument()130*b1cdbd2cSJim Jagielski     void    onLoadedDocument() { m_bIsNewDocument = false; }
131*b1cdbd2cSJim Jagielski 
132*b1cdbd2cSJim Jagielski private:
133*b1cdbd2cSJim Jagielski     DocumentEventNotifier&  m_rEventNotifier;
134*b1cdbd2cSJim Jagielski     bool                    m_bIsNewDocument;
135*b1cdbd2cSJim Jagielski     bool                    m_bEverHadController;
136*b1cdbd2cSJim Jagielski     bool                    m_bLastIsFirstEverController;
137*b1cdbd2cSJim Jagielski     ::com::sun::star::uno::Reference< ::com::sun::star::frame::XController >
138*b1cdbd2cSJim Jagielski                             m_xLastConnectedController;
139*b1cdbd2cSJim Jagielski };
140*b1cdbd2cSJim Jagielski 
141*b1cdbd2cSJim Jagielski //============================================================
142*b1cdbd2cSJim Jagielski //= ODatabaseDocument
143*b1cdbd2cSJim Jagielski //============================================================
144*b1cdbd2cSJim Jagielski typedef ::comphelper::WeakComponentImplHelper17 <   ::com::sun::star::frame::XModel2
145*b1cdbd2cSJim Jagielski                                                 ,   ::com::sun::star::util::XModifiable
146*b1cdbd2cSJim Jagielski                                                 ,   ::com::sun::star::frame::XStorable
147*b1cdbd2cSJim Jagielski                                                 ,   ::com::sun::star::document::XEventBroadcaster
148*b1cdbd2cSJim Jagielski                                                 ,   ::com::sun::star::document::XDocumentEventBroadcaster
149*b1cdbd2cSJim Jagielski                                                 ,   ::com::sun::star::view::XPrintable
150*b1cdbd2cSJim Jagielski                                                 ,   ::com::sun::star::util::XCloseable
151*b1cdbd2cSJim Jagielski                                                 ,   ::com::sun::star::lang::XServiceInfo
152*b1cdbd2cSJim Jagielski                                                 ,   ::com::sun::star::sdb::XOfficeDatabaseDocument
153*b1cdbd2cSJim Jagielski                                                 ,   ::com::sun::star::ui::XUIConfigurationManagerSupplier
154*b1cdbd2cSJim Jagielski                                                 ,   ::com::sun::star::document::XStorageBasedDocument
155*b1cdbd2cSJim Jagielski                                                 ,   ::com::sun::star::document::XEmbeddedScripts
156*b1cdbd2cSJim Jagielski                                                 ,   ::com::sun::star::document::XScriptInvocationContext
157*b1cdbd2cSJim Jagielski                                                 ,   ::com::sun::star::script::provider::XScriptProviderSupplier
158*b1cdbd2cSJim Jagielski                                                 ,   ::com::sun::star::document::XEventsSupplier
159*b1cdbd2cSJim Jagielski                                                 ,   ::com::sun::star::frame::XLoadable
160*b1cdbd2cSJim Jagielski                                                 ,   ::com::sun::star::document::XDocumentRecovery
161*b1cdbd2cSJim Jagielski                                                 >   ODatabaseDocument_OfficeDocument;
162*b1cdbd2cSJim Jagielski 
163*b1cdbd2cSJim Jagielski typedef ::cppu::ImplHelper3<    ::com::sun::star::frame::XTitle
164*b1cdbd2cSJim Jagielski                             ,	::com::sun::star::frame::XTitleChangeBroadcaster
165*b1cdbd2cSJim Jagielski                             ,	::com::sun::star::frame::XUntitledNumbers
166*b1cdbd2cSJim Jagielski                             >   ODatabaseDocument_Title;
167*b1cdbd2cSJim Jagielski 
168*b1cdbd2cSJim Jagielski class ODatabaseDocument	:public ModelDependentComponent             // ModelDependentComponent must be first!
169*b1cdbd2cSJim Jagielski                         ,public ODatabaseDocument_OfficeDocument
170*b1cdbd2cSJim Jagielski                         ,public ODatabaseDocument_Title
171*b1cdbd2cSJim Jagielski {
172*b1cdbd2cSJim Jagielski     enum InitState
173*b1cdbd2cSJim Jagielski     {
174*b1cdbd2cSJim Jagielski         NotInitialized,
175*b1cdbd2cSJim Jagielski         Initializing,
176*b1cdbd2cSJim Jagielski         Initialized
177*b1cdbd2cSJim Jagielski     };
178*b1cdbd2cSJim Jagielski 
179*b1cdbd2cSJim Jagielski     DECLARE_STL_USTRINGACCESS_MAP(::com::sun::star::uno::Reference< ::com::sun::star::frame::XUntitledNumbers >,TNumberedController);
180*b1cdbd2cSJim Jagielski     ::com::sun::star::uno::Reference< ::com::sun::star::ui::XUIConfigurationManager>			m_xUIConfigurationManager;
181*b1cdbd2cSJim Jagielski 
182*b1cdbd2cSJim Jagielski     ::cppu::OInterfaceContainerHelper					                                        m_aModifyListeners;
183*b1cdbd2cSJim Jagielski 	::cppu::OInterfaceContainerHelper					                                        m_aCloseListener;
184*b1cdbd2cSJim Jagielski     ::cppu::OInterfaceContainerHelper					                                        m_aStorageListeners;
185*b1cdbd2cSJim Jagielski 
186*b1cdbd2cSJim Jagielski     DocumentEvents*                                                                             m_pEventContainer;
187*b1cdbd2cSJim Jagielski     ::rtl::Reference< DocumentEventExecutor >                                                   m_pEventExecutor;
188*b1cdbd2cSJim Jagielski     DocumentEventNotifier                                                                       m_aEventNotifier;
189*b1cdbd2cSJim Jagielski 
190*b1cdbd2cSJim Jagielski     ::com::sun::star::uno::Reference< ::com::sun::star::frame::XController >                    m_xCurrentController;
191*b1cdbd2cSJim Jagielski     Controllers                                                                                 m_aControllers;
192*b1cdbd2cSJim Jagielski     ViewMonitor                                                                                 m_aViewMonitor;
193*b1cdbd2cSJim Jagielski 
194*b1cdbd2cSJim Jagielski 	::com::sun::star::uno::WeakReference< ::com::sun::star::container::XNameAccess >	        m_xForms;
195*b1cdbd2cSJim Jagielski 	::com::sun::star::uno::WeakReference< ::com::sun::star::container::XNameAccess >	        m_xReports;
196*b1cdbd2cSJim Jagielski     ::com::sun::star::uno::WeakReference< ::com::sun::star::script::provider::XScriptProvider > m_xScriptProvider;
197*b1cdbd2cSJim Jagielski 
198*b1cdbd2cSJim Jagielski     /** @short  such module manager is used to classify new opened documents. */
199*b1cdbd2cSJim Jagielski     ::com::sun::star::uno::Reference< ::com::sun::star::frame::XModuleManager >                 m_xModuleManager;
200*b1cdbd2cSJim Jagielski     ::com::sun::star::uno::Reference< ::com::sun::star::frame::XTitle >                         m_xTitleHelper;
201*b1cdbd2cSJim Jagielski     TNumberedController                                                                         m_aNumberedControllers;
202*b1cdbd2cSJim Jagielski 
203*b1cdbd2cSJim Jagielski     /** true if and only if the DatabaseDocument's "initNew" or "load" have been called (or, well,
204*b1cdbd2cSJim Jagielski         the document has be initialized implicitly - see storeAsURL
205*b1cdbd2cSJim Jagielski     */
206*b1cdbd2cSJim Jagielski     InitState                                                                                   m_eInitState;
207*b1cdbd2cSJim Jagielski     bool                                                                                        m_bClosing;
208*b1cdbd2cSJim Jagielski     bool                                                                                        m_bAllowDocumentScripting;
209*b1cdbd2cSJim Jagielski     bool                                                                                        m_bHasBeenRecovered;
210*b1cdbd2cSJim Jagielski 
211*b1cdbd2cSJim Jagielski     enum StoreType { SAVE, SAVE_AS };
212*b1cdbd2cSJim Jagielski     /** stores the document to the given URL, rebases it to the respective new storage, if necessary, resets
213*b1cdbd2cSJim Jagielski         the modified flag, and notifies any listeners as required
214*b1cdbd2cSJim Jagielski 
215*b1cdbd2cSJim Jagielski         @param _rURL
216*b1cdbd2cSJim Jagielski             the URL to store the document to
217*b1cdbd2cSJim Jagielski         @param _rArguments
218*b1cdbd2cSJim Jagielski             arguments for storing the document (MediaDescriptor)
219*b1cdbd2cSJim Jagielski         @param _eType
220*b1cdbd2cSJim Jagielski             the type of the store process (Save or SaveAs). The method will automatically
221*b1cdbd2cSJim Jagielski             notify the proper events for this type.
222*b1cdbd2cSJim Jagielski         @param _rGuard
223*b1cdbd2cSJim Jagielski             the instance lock to be released before doing synchronous notifications
224*b1cdbd2cSJim Jagielski     */
225*b1cdbd2cSJim Jagielski     void impl_storeAs_throw(
226*b1cdbd2cSJim Jagielski             const ::rtl::OUString& _rURL,
227*b1cdbd2cSJim Jagielski             const ::comphelper::NamedValueCollection& _rArguments,
228*b1cdbd2cSJim Jagielski             const StoreType _eType,
229*b1cdbd2cSJim Jagielski             DocumentGuard& _rGuard
230*b1cdbd2cSJim Jagielski          )
231*b1cdbd2cSJim Jagielski          throw  (   ::com::sun::star::io::IOException
232*b1cdbd2cSJim Jagielski                 ,   ::com::sun::star::uno::RuntimeException );
233*b1cdbd2cSJim Jagielski 
234*b1cdbd2cSJim Jagielski     /** notifies our storage change listeners that our underlying storage changed
235*b1cdbd2cSJim Jagielski 
236*b1cdbd2cSJim Jagielski         @param _rxNewRootStorage
237*b1cdbd2cSJim Jagielski             the new root storage to be notified. If <NULL/>, it is assumed that no storage change actually
238*b1cdbd2cSJim Jagielski             happened, and the listeners are not notified.
239*b1cdbd2cSJim Jagielski     */
240*b1cdbd2cSJim Jagielski     void    impl_notifyStorageChange_nolck_nothrow(
241*b1cdbd2cSJim Jagielski                 const ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage >& _rxNewRootStorage
242*b1cdbd2cSJim Jagielski             );
243*b1cdbd2cSJim Jagielski 
244*b1cdbd2cSJim Jagielski     /// write a single XML stream into the package
245*b1cdbd2cSJim Jagielski 	void WriteThroughComponent(
246*b1cdbd2cSJim Jagielski 		const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XComponent > & xComponent,  /// the component we export
247*b1cdbd2cSJim Jagielski 		const sal_Char* pStreamName,		                                                        /// the stream name
248*b1cdbd2cSJim Jagielski 		const sal_Char* pServiceName,		                                                        /// service name of the component
249*b1cdbd2cSJim Jagielski 		const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any> & rArguments,            /// the argument (XInitialization)
250*b1cdbd2cSJim Jagielski 		const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue> & rMediaDesc,/// output descriptor
251*b1cdbd2cSJim Jagielski 		const ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage >& _xStorageToSaveTo
252*b1cdbd2cSJim Jagielski     ) const;
253*b1cdbd2cSJim Jagielski 
254*b1cdbd2cSJim Jagielski 
255*b1cdbd2cSJim Jagielski 	/// write a single output stream
256*b1cdbd2cSJim Jagielski 	/// (to be called either directly or by WriteThroughComponent(...))
257*b1cdbd2cSJim Jagielski 	void WriteThroughComponent(
258*b1cdbd2cSJim Jagielski 		const ::com::sun::star::uno::Reference< ::com::sun::star::io::XOutputStream >& xOutputStream,
259*b1cdbd2cSJim Jagielski 		const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XComponent >& xComponent,
260*b1cdbd2cSJim Jagielski 		const sal_Char* pServiceName,
261*b1cdbd2cSJim Jagielski 		const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >& rArguments,
262*b1cdbd2cSJim Jagielski 		const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue> & rMediaDesc
263*b1cdbd2cSJim Jagielski     ) const;
264*b1cdbd2cSJim Jagielski 
265*b1cdbd2cSJim Jagielski 	/** writes the content and settings
266*b1cdbd2cSJim Jagielski 		@param	sURL
267*b1cdbd2cSJim Jagielski 			The URL
268*b1cdbd2cSJim Jagielski 		@param	lArguments
269*b1cdbd2cSJim Jagielski 			The media descriptor
270*b1cdbd2cSJim Jagielski 		@param	_xStorageToSaveTo
271*b1cdbd2cSJim Jagielski 			The storage which should be used for saving
272*b1cdbd2cSJim Jagielski 	*/
273*b1cdbd2cSJim Jagielski 	void impl_writeStorage_throw(
274*b1cdbd2cSJim Jagielski         const ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage >& _rxTargetStorage,
275*b1cdbd2cSJim Jagielski         const ::comphelper::NamedValueCollection& _rMediaDescriptor
276*b1cdbd2cSJim Jagielski     ) const;
277*b1cdbd2cSJim Jagielski 
278*b1cdbd2cSJim Jagielski     // ModelDependentComponent overridables
279*b1cdbd2cSJim Jagielski     virtual ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > getThis() const;
280*b1cdbd2cSJim Jagielski 
281*b1cdbd2cSJim Jagielski     ::com::sun::star::uno::Reference< ::com::sun::star::frame::XTitle >             impl_getTitleHelper_throw();
282*b1cdbd2cSJim Jagielski     ::com::sun::star::uno::Reference< ::com::sun::star::frame::XUntitledNumbers >   impl_getUntitledHelper_throw(
283*b1cdbd2cSJim Jagielski         const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _xComponent = ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >());
284*b1cdbd2cSJim Jagielski 
285*b1cdbd2cSJim Jagielski private:
286*b1cdbd2cSJim Jagielski 	ODatabaseDocument(const ::rtl::Reference<ODatabaseModelImpl>& _pImpl);
287*b1cdbd2cSJim Jagielski     // Do NOT create those documents directly, always use ODatabaseModelImpl::getModel. Reason is that
288*b1cdbd2cSJim Jagielski     // ODatabaseDocument requires clear ownership, and in turn lifetime synchronisation with the ModelImpl.
289*b1cdbd2cSJim Jagielski     // If you create a ODatabaseDocument directly, you might easily create a leak.
290*b1cdbd2cSJim Jagielski     // #i50905# / 2005-06-20 / frank.schonheit@sun.com
291*b1cdbd2cSJim Jagielski 
292*b1cdbd2cSJim Jagielski protected:
293*b1cdbd2cSJim Jagielski     virtual void SAL_CALL disposing();
294*b1cdbd2cSJim Jagielski 
295*b1cdbd2cSJim Jagielski 	virtual ~ODatabaseDocument();
296*b1cdbd2cSJim Jagielski 
297*b1cdbd2cSJim Jagielski public:
FactoryAccessdbaccess::ODatabaseDocument::FactoryAccess298*b1cdbd2cSJim Jagielski     struct FactoryAccess { friend class ODatabaseModelImpl; private: FactoryAccess() { } };
createDatabaseDocument(const::rtl::Reference<ODatabaseModelImpl> & _pImpl,FactoryAccess)299*b1cdbd2cSJim Jagielski     static ODatabaseDocument* createDatabaseDocument( const ::rtl::Reference<ODatabaseModelImpl>& _pImpl, FactoryAccess /*accessControl*/ )
300*b1cdbd2cSJim Jagielski     {
301*b1cdbd2cSJim Jagielski         return new ODatabaseDocument( _pImpl );
302*b1cdbd2cSJim Jagielski     }
303*b1cdbd2cSJim Jagielski 
304*b1cdbd2cSJim Jagielski     // XServiceInfo
305*b1cdbd2cSJim Jagielski     virtual ::rtl::OUString SAL_CALL getImplementationName(  ) throw(::com::sun::star::uno::RuntimeException);
306*b1cdbd2cSJim Jagielski     virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) throw(::com::sun::star::uno::RuntimeException);
307*b1cdbd2cSJim Jagielski     virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames(  ) throw(::com::sun::star::uno::RuntimeException);
308*b1cdbd2cSJim Jagielski 
309*b1cdbd2cSJim Jagielski     // ::com::sun::star::lang::XServiceInfo - static methods
310*b1cdbd2cSJim Jagielski     static ::com::sun::star::uno::Sequence< ::rtl::OUString > getSupportedServiceNames_static(void) throw( ::com::sun::star::uno::RuntimeException );
311*b1cdbd2cSJim Jagielski     static ::rtl::OUString getImplementationName_static(void) throw( ::com::sun::star::uno::RuntimeException );
312*b1cdbd2cSJim Jagielski 	static ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >
313*b1cdbd2cSJim Jagielski 		SAL_CALL Create(const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >&);
314*b1cdbd2cSJim Jagielski 
315*b1cdbd2cSJim Jagielski     // XInterface
316*b1cdbd2cSJim Jagielski 	virtual ::com::sun::star::uno::Any	SAL_CALL queryInterface(const ::com::sun::star::uno::Type& _rType) throw (::com::sun::star::uno::RuntimeException);
317*b1cdbd2cSJim Jagielski 	virtual void SAL_CALL acquire(  ) throw ();
318*b1cdbd2cSJim Jagielski 	virtual void SAL_CALL release(  ) throw ();
319*b1cdbd2cSJim Jagielski 
320*b1cdbd2cSJim Jagielski     // XTypeProvider
321*b1cdbd2cSJim Jagielski 	virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL getTypes(  ) throw (::com::sun::star::uno::RuntimeException);
322*b1cdbd2cSJim Jagielski 	virtual ::com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId(  ) throw (::com::sun::star::uno::RuntimeException);
323*b1cdbd2cSJim Jagielski 
324*b1cdbd2cSJim Jagielski 	// XEventListener
325*b1cdbd2cSJim Jagielski 	virtual void SAL_CALL disposing( const ::com::sun::star::lang::EventObject& Source ) throw(::com::sun::star::uno::RuntimeException);
326*b1cdbd2cSJim Jagielski 
327*b1cdbd2cSJim Jagielski     // XComponent
328*b1cdbd2cSJim Jagielski 	virtual void SAL_CALL dispose(  ) throw (::com::sun::star::uno::RuntimeException);
329*b1cdbd2cSJim Jagielski     virtual void SAL_CALL addEventListener( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XEventListener >& xListener ) throw (::com::sun::star::uno::RuntimeException);
330*b1cdbd2cSJim Jagielski     virtual void SAL_CALL removeEventListener( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XEventListener >& aListener ) throw (::com::sun::star::uno::RuntimeException);
331*b1cdbd2cSJim Jagielski 
332*b1cdbd2cSJim Jagielski     // XModel
333*b1cdbd2cSJim Jagielski 	virtual sal_Bool SAL_CALL attachResource( const ::rtl::OUString& URL, const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& Arguments ) throw (::com::sun::star::uno::RuntimeException) ;
334*b1cdbd2cSJim Jagielski     virtual ::rtl::OUString SAL_CALL getURL(  ) throw (::com::sun::star::uno::RuntimeException) ;
335*b1cdbd2cSJim Jagielski     virtual ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue > SAL_CALL getArgs(  ) throw (::com::sun::star::uno::RuntimeException) ;
336*b1cdbd2cSJim Jagielski     virtual void SAL_CALL connectController( const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XController >& Controller ) throw (::com::sun::star::uno::RuntimeException) ;
337*b1cdbd2cSJim Jagielski     virtual void SAL_CALL disconnectController( const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XController >& Controller ) throw (::com::sun::star::uno::RuntimeException) ;
338*b1cdbd2cSJim Jagielski     virtual void SAL_CALL lockControllers(  ) throw (::com::sun::star::uno::RuntimeException) ;
339*b1cdbd2cSJim Jagielski     virtual void SAL_CALL unlockControllers(  ) throw (::com::sun::star::uno::RuntimeException) ;
340*b1cdbd2cSJim Jagielski     virtual sal_Bool SAL_CALL hasControllersLocked(  ) throw (::com::sun::star::uno::RuntimeException) ;
341*b1cdbd2cSJim Jagielski     virtual ::com::sun::star::uno::Reference< ::com::sun::star::frame::XController > SAL_CALL getCurrentController(  ) throw (::com::sun::star::uno::RuntimeException) ;
342*b1cdbd2cSJim Jagielski     virtual void SAL_CALL setCurrentController( const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XController >& Controller ) throw (::com::sun::star::container::NoSuchElementException, ::com::sun::star::uno::RuntimeException) ;
343*b1cdbd2cSJim Jagielski     virtual ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL getCurrentSelection(  ) throw (::com::sun::star::uno::RuntimeException) ;
344*b1cdbd2cSJim Jagielski 
345*b1cdbd2cSJim Jagielski     // XModel2
346*b1cdbd2cSJim Jagielski     virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XEnumeration > SAL_CALL getControllers(  ) throw (::com::sun::star::uno::RuntimeException) ;
347*b1cdbd2cSJim Jagielski     virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getAvailableViewControllerNames(  ) throw (::com::sun::star::uno::RuntimeException) ;
348*b1cdbd2cSJim Jagielski     virtual ::com::sun::star::uno::Reference< ::com::sun::star::frame::XController2 > SAL_CALL createDefaultViewController( const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame >& Frame ) throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::Exception, ::com::sun::star::uno::RuntimeException) ;
349*b1cdbd2cSJim Jagielski     virtual ::com::sun::star::uno::Reference< ::com::sun::star::frame::XController2 > SAL_CALL createViewController( const ::rtl::OUString& ViewName, const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& Arguments, const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame >& Frame ) throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::Exception, ::com::sun::star::uno::RuntimeException) ;
350*b1cdbd2cSJim Jagielski 
351*b1cdbd2cSJim Jagielski     // XStorable
352*b1cdbd2cSJim Jagielski 	virtual sal_Bool SAL_CALL hasLocation(  ) throw (::com::sun::star::uno::RuntimeException) ;
353*b1cdbd2cSJim Jagielski     virtual ::rtl::OUString SAL_CALL getLocation(  ) throw (::com::sun::star::uno::RuntimeException) ;
354*b1cdbd2cSJim Jagielski     virtual sal_Bool SAL_CALL isReadonly(  ) throw (::com::sun::star::uno::RuntimeException) ;
355*b1cdbd2cSJim Jagielski     virtual void SAL_CALL store(  ) throw (::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException) ;
356*b1cdbd2cSJim Jagielski     virtual void SAL_CALL storeAsURL( const ::rtl::OUString& sURL, const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& lArguments ) throw (::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException) ;
357*b1cdbd2cSJim Jagielski     virtual void SAL_CALL storeToURL( const ::rtl::OUString& sURL, const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& lArguments ) throw (::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException) ;
358*b1cdbd2cSJim Jagielski 
359*b1cdbd2cSJim Jagielski     // XModifyBroadcaster
360*b1cdbd2cSJim Jagielski 	virtual void SAL_CALL addModifyListener( const ::com::sun::star::uno::Reference< ::com::sun::star::util::XModifyListener >& aListener ) throw (::com::sun::star::uno::RuntimeException);
361*b1cdbd2cSJim Jagielski     virtual void SAL_CALL removeModifyListener( const ::com::sun::star::uno::Reference< ::com::sun::star::util::XModifyListener >& aListener ) throw (::com::sun::star::uno::RuntimeException);
362*b1cdbd2cSJim Jagielski 
363*b1cdbd2cSJim Jagielski     // ::com::sun::star::util::XModifiable
364*b1cdbd2cSJim Jagielski 	virtual sal_Bool SAL_CALL isModified(  ) throw (::com::sun::star::uno::RuntimeException) ;
365*b1cdbd2cSJim Jagielski     virtual void SAL_CALL setModified( sal_Bool bModified ) throw (::com::sun::star::beans::PropertyVetoException, ::com::sun::star::uno::RuntimeException) ;
366*b1cdbd2cSJim Jagielski 
367*b1cdbd2cSJim Jagielski     // XEventBroadcaster
368*b1cdbd2cSJim Jagielski     virtual void SAL_CALL addEventListener( const ::com::sun::star::uno::Reference< ::com::sun::star::document::XEventListener >& aListener ) throw (::com::sun::star::uno::RuntimeException);
369*b1cdbd2cSJim Jagielski     virtual void SAL_CALL removeEventListener( const ::com::sun::star::uno::Reference< ::com::sun::star::document::XEventListener >& aListener ) throw (::com::sun::star::uno::RuntimeException);
370*b1cdbd2cSJim Jagielski 
371*b1cdbd2cSJim Jagielski     // XDocumentEventBroadcaster
372*b1cdbd2cSJim Jagielski     virtual void SAL_CALL addDocumentEventListener( const ::com::sun::star::uno::Reference< ::com::sun::star::document::XDocumentEventListener >& _Listener ) throw (::com::sun::star::uno::RuntimeException);
373*b1cdbd2cSJim Jagielski     virtual void SAL_CALL removeDocumentEventListener( const ::com::sun::star::uno::Reference< ::com::sun::star::document::XDocumentEventListener >& _Listener ) throw (::com::sun::star::uno::RuntimeException);
374*b1cdbd2cSJim Jagielski     virtual void SAL_CALL notifyDocumentEvent( const ::rtl::OUString& _EventName, const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XController2 >& _ViewController, const ::com::sun::star::uno::Any& _Supplement ) throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::NoSupportException, ::com::sun::star::uno::RuntimeException);
375*b1cdbd2cSJim Jagielski 
376*b1cdbd2cSJim Jagielski     // XPrintable
377*b1cdbd2cSJim Jagielski 	virtual ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue > SAL_CALL getPrinter(  ) throw (::com::sun::star::uno::RuntimeException) ;
378*b1cdbd2cSJim Jagielski     virtual void SAL_CALL setPrinter( const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& aPrinter ) throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException) ;
379*b1cdbd2cSJim Jagielski     virtual void SAL_CALL print( const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& xOptions ) throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException) ;
380*b1cdbd2cSJim Jagielski 
381*b1cdbd2cSJim Jagielski     // XFormDocumentsSupplier
382*b1cdbd2cSJim Jagielski 	virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess > SAL_CALL getFormDocuments(  ) throw (::com::sun::star::uno::RuntimeException);
383*b1cdbd2cSJim Jagielski 
384*b1cdbd2cSJim Jagielski     // XReportDocumentsSupplier
385*b1cdbd2cSJim Jagielski 	virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess > SAL_CALL getReportDocuments(  ) throw (::com::sun::star::uno::RuntimeException);
386*b1cdbd2cSJim Jagielski 
387*b1cdbd2cSJim Jagielski     // XCloseable
388*b1cdbd2cSJim Jagielski 	virtual void SAL_CALL close( sal_Bool DeliverOwnership ) throw (::com::sun::star::util::CloseVetoException, ::com::sun::star::uno::RuntimeException);
389*b1cdbd2cSJim Jagielski 	virtual void SAL_CALL addCloseListener( const ::com::sun::star::uno::Reference< ::com::sun::star::util::XCloseListener >& Listener ) throw (::com::sun::star::uno::RuntimeException);
390*b1cdbd2cSJim Jagielski     virtual void SAL_CALL removeCloseListener( const ::com::sun::star::uno::Reference< ::com::sun::star::util::XCloseListener >& Listener ) throw (::com::sun::star::uno::RuntimeException);
391*b1cdbd2cSJim Jagielski 
392*b1cdbd2cSJim Jagielski     // XUIConfigurationManagerSupplier
393*b1cdbd2cSJim Jagielski 	virtual ::com::sun::star::uno::Reference< ::com::sun::star::ui::XUIConfigurationManager > SAL_CALL getUIConfigurationManager(  ) throw (::com::sun::star::uno::RuntimeException);
394*b1cdbd2cSJim Jagielski 
395*b1cdbd2cSJim Jagielski     // XDocumentSubStorageSupplier
396*b1cdbd2cSJim Jagielski 	virtual ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage > SAL_CALL getDocumentSubStorage( const ::rtl::OUString& aStorageName, sal_Int32 nMode ) throw (::com::sun::star::uno::RuntimeException);
397*b1cdbd2cSJim Jagielski 	virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getDocumentSubStoragesNames(  ) throw (::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException);
398*b1cdbd2cSJim Jagielski 
399*b1cdbd2cSJim Jagielski     // XOfficeDatabaseDocument
400*b1cdbd2cSJim Jagielski     virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XDataSource > SAL_CALL getDataSource() throw (::com::sun::star::uno::RuntimeException);
401*b1cdbd2cSJim Jagielski 
402*b1cdbd2cSJim Jagielski     // XStorageBasedDocument
403*b1cdbd2cSJim Jagielski     virtual void SAL_CALL loadFromStorage( const ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage >& xStorage, const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& aMediaDescriptor ) throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::frame::DoubleInitializationException, ::com::sun::star::io::IOException, ::com::sun::star::uno::Exception, ::com::sun::star::uno::RuntimeException);
404*b1cdbd2cSJim Jagielski     virtual void SAL_CALL storeToStorage( const ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage >& xStorage, const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& aMediaDescriptor ) throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::io::IOException, ::com::sun::star::uno::Exception, ::com::sun::star::uno::RuntimeException);
405*b1cdbd2cSJim Jagielski     virtual void SAL_CALL switchToStorage( const ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage >& xStorage ) throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::io::IOException, ::com::sun::star::uno::Exception, ::com::sun::star::uno::RuntimeException);
406*b1cdbd2cSJim Jagielski     virtual ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage > SAL_CALL getDocumentStorage(  ) throw (::com::sun::star::io::IOException, ::com::sun::star::uno::Exception, ::com::sun::star::uno::RuntimeException);
407*b1cdbd2cSJim Jagielski     virtual void SAL_CALL addStorageChangeListener( const ::com::sun::star::uno::Reference< ::com::sun::star::document::XStorageChangeListener >& xListener ) throw (::com::sun::star::uno::RuntimeException);
408*b1cdbd2cSJim Jagielski     virtual void SAL_CALL removeStorageChangeListener( const ::com::sun::star::uno::Reference< ::com::sun::star::document::XStorageChangeListener >& xListener ) throw (::com::sun::star::uno::RuntimeException);
409*b1cdbd2cSJim Jagielski 
410*b1cdbd2cSJim Jagielski     // XEmbeddedScripts
411*b1cdbd2cSJim Jagielski     virtual ::com::sun::star::uno::Reference< ::com::sun::star::script::XStorageBasedLibraryContainer > SAL_CALL getBasicLibraries() throw (::com::sun::star::uno::RuntimeException);
412*b1cdbd2cSJim Jagielski     virtual ::com::sun::star::uno::Reference< ::com::sun::star::script::XStorageBasedLibraryContainer > SAL_CALL getDialogLibraries() throw (::com::sun::star::uno::RuntimeException);
413*b1cdbd2cSJim Jagielski     virtual ::sal_Bool SAL_CALL getAllowMacroExecution() throw (::com::sun::star::uno::RuntimeException);
414*b1cdbd2cSJim Jagielski 
415*b1cdbd2cSJim Jagielski     // XScriptInvocationContext
416*b1cdbd2cSJim Jagielski     virtual ::com::sun::star::uno::Reference< ::com::sun::star::document::XEmbeddedScripts > SAL_CALL getScriptContainer() throw (::com::sun::star::uno::RuntimeException);
417*b1cdbd2cSJim Jagielski 
418*b1cdbd2cSJim Jagielski     // XScriptProviderSupplier
419*b1cdbd2cSJim Jagielski     virtual ::com::sun::star::uno::Reference< ::com::sun::star::script::provider::XScriptProvider > SAL_CALL getScriptProvider(  ) throw (::com::sun::star::uno::RuntimeException);
420*b1cdbd2cSJim Jagielski 
421*b1cdbd2cSJim Jagielski     // XEventsSupplier
422*b1cdbd2cSJim Jagielski     virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameReplace > SAL_CALL getEvents(  ) throw (::com::sun::star::uno::RuntimeException);
423*b1cdbd2cSJim Jagielski 
424*b1cdbd2cSJim Jagielski     // XLoadable
425*b1cdbd2cSJim Jagielski     virtual void SAL_CALL initNew(  ) throw (::com::sun::star::frame::DoubleInitializationException, ::com::sun::star::io::IOException, ::com::sun::star::uno::Exception, ::com::sun::star::uno::RuntimeException);
426*b1cdbd2cSJim Jagielski     virtual void SAL_CALL load( const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& lArguments ) throw (::com::sun::star::frame::DoubleInitializationException, ::com::sun::star::io::IOException, ::com::sun::star::uno::Exception, ::com::sun::star::uno::RuntimeException);
427*b1cdbd2cSJim Jagielski 
428*b1cdbd2cSJim Jagielski     // css.document.XDocumentRecovery
429*b1cdbd2cSJim Jagielski     virtual ::sal_Bool SAL_CALL wasModifiedSinceLastSave() throw ( ::com::sun::star::uno::RuntimeException );
430*b1cdbd2cSJim Jagielski     virtual void SAL_CALL storeToRecoveryFile( const ::rtl::OUString& i_TargetLocation, const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& i_MediaDescriptor ) throw ( ::com::sun::star::uno::RuntimeException, ::com::sun::star::io::IOException, ::com::sun::star::lang::WrappedTargetException );
431*b1cdbd2cSJim Jagielski     virtual void SAL_CALL recoverFromFile( const ::rtl::OUString& i_SourceLocation, const ::rtl::OUString& i_SalvagedFile, const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& i_MediaDescriptor ) throw ( ::com::sun::star::uno::RuntimeException, ::com::sun::star::io::IOException, ::com::sun::star::lang::WrappedTargetException );
432*b1cdbd2cSJim Jagielski 
433*b1cdbd2cSJim Jagielski     // XTitle
434*b1cdbd2cSJim Jagielski     virtual ::rtl::OUString SAL_CALL getTitle(  ) throw (::com::sun::star::uno::RuntimeException);
435*b1cdbd2cSJim Jagielski     virtual void SAL_CALL setTitle( const ::rtl::OUString& sTitle ) throw (::com::sun::star::uno::RuntimeException);
436*b1cdbd2cSJim Jagielski 
437*b1cdbd2cSJim Jagielski     // XTitleChangeBroadcaster
438*b1cdbd2cSJim Jagielski     virtual void SAL_CALL addTitleChangeListener( const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XTitleChangeListener >& xListener ) throw (::com::sun::star::uno::RuntimeException);
439*b1cdbd2cSJim Jagielski     virtual void SAL_CALL removeTitleChangeListener( const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XTitleChangeListener >& xListener ) throw (::com::sun::star::uno::RuntimeException);
440*b1cdbd2cSJim Jagielski 
441*b1cdbd2cSJim Jagielski     // XUntitledNumbers
442*b1cdbd2cSJim Jagielski     virtual ::sal_Int32 SAL_CALL leaseNumber( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& xComponent ) throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException);
443*b1cdbd2cSJim Jagielski     virtual void SAL_CALL releaseNumber( ::sal_Int32 nNumber ) throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException);
444*b1cdbd2cSJim Jagielski     virtual void SAL_CALL releaseNumberForComponent( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& xComponent ) throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException);
445*b1cdbd2cSJim Jagielski     virtual ::rtl::OUString SAL_CALL getUntitledPrefix(  ) throw (::com::sun::star::uno::RuntimeException);
446*b1cdbd2cSJim Jagielski 
447*b1cdbd2cSJim Jagielski     /** clears the given object container
448*b1cdbd2cSJim Jagielski 
449*b1cdbd2cSJim Jagielski         Clearing is done via disposal - the method calls XComponent::dispose at the given object,
450*b1cdbd2cSJim Jagielski         which must be one of our impl's or our object containers (m_xForms, m_xReports,
451*b1cdbd2cSJim Jagielski         m_xTableDefinitions, m_xCommandDefinitions)
452*b1cdbd2cSJim Jagielski 
453*b1cdbd2cSJim Jagielski         @param _rxContainer
454*b1cdbd2cSJim Jagielski             the container to clear
455*b1cdbd2cSJim Jagielski     */
456*b1cdbd2cSJim Jagielski     static void clearObjectContainer(
457*b1cdbd2cSJim Jagielski                 ::com::sun::star::uno::WeakReference< ::com::sun::star::container::XNameAccess >& _rxContainer);
458*b1cdbd2cSJim Jagielski 
459*b1cdbd2cSJim Jagielski     /** checks whether the component is already initialized, throws a NotInitializedException if not
460*b1cdbd2cSJim Jagielski     */
checkInitialized() const461*b1cdbd2cSJim Jagielski     inline void checkInitialized() const
462*b1cdbd2cSJim Jagielski     {
463*b1cdbd2cSJim Jagielski         if ( !impl_isInitialized() )
464*b1cdbd2cSJim Jagielski             throw ::com::sun::star::lang::NotInitializedException( ::rtl::OUString(), getThis() );
465*b1cdbd2cSJim Jagielski     }
466*b1cdbd2cSJim Jagielski 
467*b1cdbd2cSJim Jagielski     /** checks the document is currently in the initialization phase, or already initialized.
468*b1cdbd2cSJim Jagielski         Throws NotInitializedException if not so.
469*b1cdbd2cSJim Jagielski     */
checkNotUninitilized() const470*b1cdbd2cSJim Jagielski     inline void checkNotUninitilized() const
471*b1cdbd2cSJim Jagielski     {
472*b1cdbd2cSJim Jagielski         if ( impl_isInitialized() || impl_isInitializing() )
473*b1cdbd2cSJim Jagielski             // fine
474*b1cdbd2cSJim Jagielski             return;
475*b1cdbd2cSJim Jagielski 
476*b1cdbd2cSJim Jagielski         throw ::com::sun::star::lang::NotInitializedException( ::rtl::OUString(), getThis() );
477*b1cdbd2cSJim Jagielski     }
478*b1cdbd2cSJim Jagielski 
479*b1cdbd2cSJim Jagielski     /** checks whether the document is currently being initialized, or already initialized,
480*b1cdbd2cSJim Jagielski         throws a DoubleInitializationException if so
481*b1cdbd2cSJim Jagielski     */
checkNotInitialized() const482*b1cdbd2cSJim Jagielski     inline void checkNotInitialized() const
483*b1cdbd2cSJim Jagielski     {
484*b1cdbd2cSJim Jagielski         if ( impl_isInitializing() || impl_isInitialized() )
485*b1cdbd2cSJim Jagielski             throw ::com::sun::star::frame::DoubleInitializationException( ::rtl::OUString(), getThis() );
486*b1cdbd2cSJim Jagielski     }
487*b1cdbd2cSJim Jagielski 
488*b1cdbd2cSJim Jagielski private:
489*b1cdbd2cSJim Jagielski     /** returns whether the model is currently being initialized
490*b1cdbd2cSJim Jagielski     */
impl_isInitializing() const491*b1cdbd2cSJim Jagielski     bool    impl_isInitializing() const { return m_eInitState == Initializing; }
492*b1cdbd2cSJim Jagielski 
493*b1cdbd2cSJim Jagielski     /** returns whether the model is already initialized, i.e. the XModel's "initNew" or "load" methods have been called
494*b1cdbd2cSJim Jagielski     */
impl_isInitialized() const495*b1cdbd2cSJim Jagielski     bool    impl_isInitialized() const { return m_eInitState == Initialized; }
496*b1cdbd2cSJim Jagielski 
497*b1cdbd2cSJim Jagielski     /// tells the model it is being initialized now
impl_setInitializing()498*b1cdbd2cSJim Jagielski     void    impl_setInitializing() { m_eInitState = Initializing; }
499*b1cdbd2cSJim Jagielski 
500*b1cdbd2cSJim Jagielski     /// tells the model its initialization is done
501*b1cdbd2cSJim Jagielski     void    impl_setInitialized();
502*b1cdbd2cSJim Jagielski 
503*b1cdbd2cSJim Jagielski     /** closes the frames of all connected controllers
504*b1cdbd2cSJim Jagielski 
505*b1cdbd2cSJim Jagielski     @param _bDeliverOwnership
506*b1cdbd2cSJim Jagielski         determines if the ownership should be transfered to the component which
507*b1cdbd2cSJim Jagielski         possibly vetos the closing
508*b1cdbd2cSJim Jagielski 
509*b1cdbd2cSJim Jagielski     @raises ::com::sun::star::util::CloseVetoException
510*b1cdbd2cSJim Jagielski         if the closing was vetoed by any instance
511*b1cdbd2cSJim Jagielski     */
512*b1cdbd2cSJim Jagielski     void    impl_closeControllerFrames_nolck_throw( sal_Bool _bDeliverOwnership );
513*b1cdbd2cSJim Jagielski 
514*b1cdbd2cSJim Jagielski     /** disposes the frames of all controllers which are still left in m_aControllers.
515*b1cdbd2cSJim Jagielski     */
516*b1cdbd2cSJim Jagielski     void    impl_disposeControllerFrames_nothrow();
517*b1cdbd2cSJim Jagielski 
518*b1cdbd2cSJim Jagielski     /** does a reparenting at the given object container to ourself
519*b1cdbd2cSJim Jagielski 
520*b1cdbd2cSJim Jagielski         Calls XChild::setParent at the given object, which must be one of our impl's or our
521*b1cdbd2cSJim Jagielski         object containers (m_xForms, m_xReports, m_xTableDefinitions, m_xCommandDefinitions)
522*b1cdbd2cSJim Jagielski     */
523*b1cdbd2cSJim Jagielski     void    impl_reparent_nothrow( const ::com::sun::star::uno::WeakReference< ::com::sun::star::container::XNameAccess >& _rxContainer );
524*b1cdbd2cSJim Jagielski 
525*b1cdbd2cSJim Jagielski     /** retrieves the forms or reports contained, creates and initializes it, if necessary
526*b1cdbd2cSJim Jagielski 
527*b1cdbd2cSJim Jagielski         @raises DisposedException
528*b1cdbd2cSJim Jagielski             if the instance is already disposed
529*b1cdbd2cSJim Jagielski         @raises IllegalArgumentException
530*b1cdbd2cSJim Jagielski             if <arg>_eType</arg> is not ODatabaseModelImpl::E_FORM and not ODatabaseModelImpl::E_REPORT
531*b1cdbd2cSJim Jagielski     */
532*b1cdbd2cSJim Jagielski     ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess >
533*b1cdbd2cSJim Jagielski             impl_getDocumentContainer_throw( ODatabaseModelImpl::ObjectType _eType );
534*b1cdbd2cSJim Jagielski 
535*b1cdbd2cSJim Jagielski     /** resets everything
536*b1cdbd2cSJim Jagielski 
537*b1cdbd2cSJim Jagielski         @precond
538*b1cdbd2cSJim Jagielski             m_pImpl is not <NULLL/>
539*b1cdbd2cSJim Jagielski     */
540*b1cdbd2cSJim Jagielski     void
541*b1cdbd2cSJim Jagielski             impl_reset_nothrow();
542*b1cdbd2cSJim Jagielski 
543*b1cdbd2cSJim Jagielski     /** imports the document from the given resource.
544*b1cdbd2cSJim Jagielski     */
545*b1cdbd2cSJim Jagielski     static void
546*b1cdbd2cSJim Jagielski             impl_import_nolck_throw(
547*b1cdbd2cSJim Jagielski                 const ::comphelper::ComponentContext _rContext,
548*b1cdbd2cSJim Jagielski                 const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _rxTargetComponent,
549*b1cdbd2cSJim Jagielski                 const ::comphelper::NamedValueCollection& _rResource
550*b1cdbd2cSJim Jagielski             );
551*b1cdbd2cSJim Jagielski 
552*b1cdbd2cSJim Jagielski     /** creates a storage for the given URL, truncating it if a file with this name already exists
553*b1cdbd2cSJim Jagielski 
554*b1cdbd2cSJim Jagielski         @throws Exception
555*b1cdbd2cSJim Jagielski             if creating the storage failed
556*b1cdbd2cSJim Jagielski 
557*b1cdbd2cSJim Jagielski         @return
558*b1cdbd2cSJim Jagielski             the newly created storage for the file at the given URL
559*b1cdbd2cSJim Jagielski     */
560*b1cdbd2cSJim Jagielski     ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage >
561*b1cdbd2cSJim Jagielski             impl_createStorageFor_throw(
562*b1cdbd2cSJim Jagielski                 const ::rtl::OUString& _rURL
563*b1cdbd2cSJim Jagielski             ) const;
564*b1cdbd2cSJim Jagielski 
565*b1cdbd2cSJim Jagielski     /** sets our "modified" flag
566*b1cdbd2cSJim Jagielski 
567*b1cdbd2cSJim Jagielski         will notify all our respective listeners, if the "modified" state actually changed
568*b1cdbd2cSJim Jagielski 
569*b1cdbd2cSJim Jagielski         @param _bModified
570*b1cdbd2cSJim Jagielski             the (new) flag indicating whether the document is currently modified or not
571*b1cdbd2cSJim Jagielski         @param _rGuard
572*b1cdbd2cSJim Jagielski             the guard for our instance. At method entry, the guard must hold the lock. At the moment
573*b1cdbd2cSJim Jagielski             of method leave, the lock will be released.
574*b1cdbd2cSJim Jagielski         @precond
575*b1cdbd2cSJim Jagielski             our mutex is locked
576*b1cdbd2cSJim Jagielski         @postcond
577*b1cdbd2cSJim Jagielski             our mutex is not locked
578*b1cdbd2cSJim Jagielski     */
579*b1cdbd2cSJim Jagielski     void    impl_setModified_nothrow( sal_Bool _bModified, DocumentGuard& _rGuard );
580*b1cdbd2cSJim Jagielski 
581*b1cdbd2cSJim Jagielski     /** stores the document to the given storage
582*b1cdbd2cSJim Jagielski 
583*b1cdbd2cSJim Jagielski         Note that the document is actually not rebased to this storage, it just stores a copy of itself
584*b1cdbd2cSJim Jagielski         to the given target storage.
585*b1cdbd2cSJim Jagielski 
586*b1cdbd2cSJim Jagielski         @param _rxTargetStorage
587*b1cdbd2cSJim Jagielski             denotes the storage to store the document into
588*b1cdbd2cSJim Jagielski         @param _rMediaDescriptor
589*b1cdbd2cSJim Jagielski             contains additional parameters for storing the document
590*b1cdbd2cSJim Jagielski         @param _rDocGuard
591*b1cdbd2cSJim Jagielski             a guard which holds the (only) lock to the document, and which will be temporarily
592*b1cdbd2cSJim Jagielski             released where necessary (e.g. for notifications, or calling into other components)
593*b1cdbd2cSJim Jagielski 
594*b1cdbd2cSJim Jagielski         @throws ::com::sun::star::uno::IllegalArgumentException
595*b1cdbd2cSJim Jagielski             if the given storage is <NULL/>.
596*b1cdbd2cSJim Jagielski 
597*b1cdbd2cSJim Jagielski         @throws ::com::sun::star::uno::RuntimeException
598*b1cdbd2cSJim Jagielski             when any of the used operations throws it
599*b1cdbd2cSJim Jagielski 
600*b1cdbd2cSJim Jagielski         @throws ::com::sun::star::io::IOException
601*b1cdbd2cSJim Jagielski             when any of the used operations throws it, or any other exception occurs which is no
602*b1cdbd2cSJim Jagielski             RuntimeException and no IOException
603*b1cdbd2cSJim Jagielski     */
604*b1cdbd2cSJim Jagielski     void    impl_storeToStorage_throw(
605*b1cdbd2cSJim Jagielski                 const ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage >& _rxTargetStorage,
606*b1cdbd2cSJim Jagielski                 const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& _rMediaDescriptor,
607*b1cdbd2cSJim Jagielski                 DocumentGuard& _rDocGuard
608*b1cdbd2cSJim Jagielski             ) const;
609*b1cdbd2cSJim Jagielski 
610*b1cdbd2cSJim Jagielski 
611*b1cdbd2cSJim Jagielski     /** impl-version of attachResource
612*b1cdbd2cSJim Jagielski 
613*b1cdbd2cSJim Jagielski         @param  i_rLogicalDocumentURL
614*b1cdbd2cSJim Jagielski             denotes the logical URL of the document, to be reported by getURL/getLocation
615*b1cdbd2cSJim Jagielski         @param  i_rMediaDescriptor
616*b1cdbd2cSJim Jagielski             denotes additional document parameters
617*b1cdbd2cSJim Jagielski         @param  _rDocGuard
618*b1cdbd2cSJim Jagielski             is the guard which currently protects the document instance
619*b1cdbd2cSJim Jagielski 
620*b1cdbd2cSJim Jagielski     */
621*b1cdbd2cSJim Jagielski     sal_Bool    impl_attachResource(
622*b1cdbd2cSJim Jagielski                     const ::rtl::OUString& i_rLogicalDocumentURL,
623*b1cdbd2cSJim Jagielski                     const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& i_rMediaDescriptor,
624*b1cdbd2cSJim Jagielski                     DocumentGuard& _rDocGuard
625*b1cdbd2cSJim Jagielski                 );
626*b1cdbd2cSJim Jagielski 
627*b1cdbd2cSJim Jagielski     /** throws an IOException with the message as defined in the RID_STR_ERROR_WHILE_SAVING resource, wrapping
628*b1cdbd2cSJim Jagielski         the given caught non-IOException error
629*b1cdbd2cSJim Jagielski     */
630*b1cdbd2cSJim Jagielski     void        impl_throwIOExceptionCausedBySave_throw(
631*b1cdbd2cSJim Jagielski                     const ::com::sun::star::uno::Any& i_rError,
632*b1cdbd2cSJim Jagielski                     const ::rtl::OUString& i_rTargetURL
633*b1cdbd2cSJim Jagielski                 ) const;
634*b1cdbd2cSJim Jagielski };
635*b1cdbd2cSJim Jagielski 
636*b1cdbd2cSJim Jagielski /** an extended version of the ModelMethodGuard, which also cares for the initialization state
637*b1cdbd2cSJim Jagielski     of the document
638*b1cdbd2cSJim Jagielski */
639*b1cdbd2cSJim Jagielski class DocumentGuard : private ModelMethodGuard
640*b1cdbd2cSJim Jagielski {
641*b1cdbd2cSJim Jagielski public:
642*b1cdbd2cSJim Jagielski     enum MethodType
643*b1cdbd2cSJim Jagielski     {
644*b1cdbd2cSJim Jagielski         // a method which is to initialize the document
645*b1cdbd2cSJim Jagielski         InitMethod,
646*b1cdbd2cSJim Jagielski         // a default method
647*b1cdbd2cSJim Jagielski         DefaultMethod,
648*b1cdbd2cSJim Jagielski         // a method which is used (externally) during the initialization phase
649*b1cdbd2cSJim Jagielski         MethodUsedDuringInit,
650*b1cdbd2cSJim Jagielski         // a method which does not need initialization - use with care!
651*b1cdbd2cSJim Jagielski         MethodWithoutInit
652*b1cdbd2cSJim Jagielski     };
653*b1cdbd2cSJim Jagielski 
654*b1cdbd2cSJim Jagielski     /** constructs the guard
655*b1cdbd2cSJim Jagielski 
656*b1cdbd2cSJim Jagielski         @param _document
657*b1cdbd2cSJim Jagielski             the ODatabaseDocument instance
658*b1cdbd2cSJim Jagielski 
659*b1cdbd2cSJim Jagielski         @throws ::com::sun::star::lang::DisposedException
660*b1cdbd2cSJim Jagielski             If the given component is already disposed
661*b1cdbd2cSJim Jagielski 
662*b1cdbd2cSJim Jagielski         @throws ::com::sun::star::frame::DoubleInitializationException
663*b1cdbd2cSJim Jagielski             if _eType is InitMethod, and the given component is already initialized, or currently being initialized.
664*b1cdbd2cSJim Jagielski 
665*b1cdbd2cSJim Jagielski         @throws ::com::sun::star::lang::NotInitializedException
666*b1cdbd2cSJim Jagielski             if _eType is DefaultMethod, and the given component is not yet initialized; or if _eType
667*b1cdbd2cSJim Jagielski             is MethodUsedDuringInit, and the component is still uninitialized, and not in the initialization
668*b1cdbd2cSJim Jagielski             phase currently.
669*b1cdbd2cSJim Jagielski     */
DocumentGuard(const ODatabaseDocument & _document,MethodType _eType=DefaultMethod)670*b1cdbd2cSJim Jagielski     DocumentGuard( const ODatabaseDocument& _document, MethodType _eType = DefaultMethod )
671*b1cdbd2cSJim Jagielski         :ModelMethodGuard( _document )
672*b1cdbd2cSJim Jagielski         ,m_document( _document )
673*b1cdbd2cSJim Jagielski     {
674*b1cdbd2cSJim Jagielski         switch ( _eType )
675*b1cdbd2cSJim Jagielski         {
676*b1cdbd2cSJim Jagielski             case InitMethod:            m_document.checkNotInitialized();    break;
677*b1cdbd2cSJim Jagielski             case DefaultMethod:         m_document.checkInitialized();       break;
678*b1cdbd2cSJim Jagielski             case MethodUsedDuringInit:  m_document.checkNotUninitilized();   break;
679*b1cdbd2cSJim Jagielski             case MethodWithoutInit:                                         break;
680*b1cdbd2cSJim Jagielski         }
681*b1cdbd2cSJim Jagielski     }
682*b1cdbd2cSJim Jagielski 
~DocumentGuard()683*b1cdbd2cSJim Jagielski     ~DocumentGuard()
684*b1cdbd2cSJim Jagielski     {
685*b1cdbd2cSJim Jagielski     }
686*b1cdbd2cSJim Jagielski 
clear()687*b1cdbd2cSJim Jagielski     void clear()
688*b1cdbd2cSJim Jagielski     {
689*b1cdbd2cSJim Jagielski         ModelMethodGuard::clear();
690*b1cdbd2cSJim Jagielski     }
reset()691*b1cdbd2cSJim Jagielski     void reset()
692*b1cdbd2cSJim Jagielski     {
693*b1cdbd2cSJim Jagielski         ModelMethodGuard::reset();
694*b1cdbd2cSJim Jagielski         m_document.checkDisposed();
695*b1cdbd2cSJim Jagielski     }
696*b1cdbd2cSJim Jagielski 
697*b1cdbd2cSJim Jagielski private:
698*b1cdbd2cSJim Jagielski 
699*b1cdbd2cSJim Jagielski     const ODatabaseDocument& m_document;
700*b1cdbd2cSJim Jagielski };
701*b1cdbd2cSJim Jagielski 
702*b1cdbd2cSJim Jagielski //........................................................................
703*b1cdbd2cSJim Jagielski }	// namespace dbaccess
704*b1cdbd2cSJim Jagielski //........................................................................
705*b1cdbd2cSJim Jagielski #endif // _DBA_COREDATAACCESS_DATABASEDOCUMENT_HXX_
706