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