LCOV - code coverage report
Current view: top level - libreoffice/dbaccess/source/core/dataaccess - databasedocument.hxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 0 46 0.0 %
Date: 2012-12-27 Functions: 0 16 0.0 %
Legend: Lines: hit not hit

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

Generated by: LCOV version 1.10