User: obo     
Date: 06/01/19 07:31:14

Modified:
 /dba/connectivity/source/drivers/kab/
  KDriver.hxx

Log:
 INTEGRATION: CWS dba202e (1.2.14); FILE MERGED
 2006/01/10 14:23:20 fs 1.2.14.1: copying fixes for #i59673# and #i60062# to 
this (earlier) CWS

File Changes:

Directory: /dba/connectivity/source/drivers/kab/
================================================

File [changed]: KDriver.hxx
Url: 
http://dba.openoffice.org/source/browse/dba/connectivity/source/drivers/kab/KDriver.hxx?r1=1.2&r2=1.3
Delta lines:  +164 -22
----------------------
--- KDriver.hxx 19 Dec 2005 16:49:58 -0000      1.2
+++ KDriver.hxx 19 Jan 2006 15:31:11 -0000      1.3
@@ -36,49 +36,178 @@
 #ifndef _CONNECTIVITY_KAB_DRIVER_HXX_
 #define _CONNECTIVITY_KAB_DRIVER_HXX_
 
-#ifndef _CONNECTIVITY_KAB_CONNECTION_HXX_
-#include "KConnection.hxx"
-#endif
-
-#include <kapplication.h>
-
+/** === begin UNO includes === **/
 #ifndef _COM_SUN_STAR_SDBC_XDRIVER_HPP_
 #include <com/sun/star/sdbc/XDriver.hpp>
 #endif
-#ifndef _CPPUHELPER_COMPBASE2_HXX_
-#include <cppuhelper/compbase2.hxx>
+#ifndef _COM_SUN_STAR_LANG_XSERVICEINFO_HPP_
+#include <com/sun/star/lang/XServiceInfo.hpp>
+#endif
+#ifndef _COM_SUN_STAR_FRAME_XTERMINATELISTENER_HPP_
+#include <com/sun/star/frame/XTerminateListener.hpp>
+#endif
+/** === end UNO includes === **/
+
+#ifndef _CPPUHELPER_COMPBASE3_HXX_
+#include <cppuhelper/compbase3.hxx>
+#endif
+
+#ifndef _OSL_MODULE_H_
+#include <osl/module.h>
 #endif
 
 namespace connectivity
 {
        namespace kab
        {
-               ::com::sun::star::uno::Reference< 
::com::sun::star::uno::XInterface > SAL_CALL KabDriver_CreateInstance(const 
::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory 
>& _rxFactory) throw( ::com::sun::star::uno::Exception );
+        class KabConnection;
+        class KabDriver;
 
-               typedef ::cppu::WeakComponentImplHelper2<       
::com::sun::star::sdbc::XDriver, 
-                                                                               
                        ::com::sun::star::lang::XServiceInfo > KDriver_BASE;
+        typedef void*   (SAL_CALL * ConnectionFactoryFunction)( void* _pDriver 
);
+        typedef void    (SAL_CALL * ApplicationInitFunction)( void );
+        typedef void    (SAL_CALL * ApplicationShutdownFunction)( void );
+        typedef int     (SAL_CALL * KDEVersionCheckFunction)( void );
+
+        typedef std::vector< ::com::sun::star::uno::WeakReferenceHelper > 
OWeakRefArray;
+
+        // ===============================================================
+        // = KabImplModule
+        // ===============================================================
+        class KabImplModule
+        {
+        private:
+                       ::com::sun::star::uno::Reference< 
::com::sun::star::lang::XMultiServiceFactory >
+                                                                               
m_xORB;
+
+            /// Did we already attempt to load the module and to retrieve the 
symbols?
+            bool    m_bAttemptedLoadModule;
+            /// Did we already check the KDE version and initialize the impl 
module (or at least attempted to)?
+            bool    m_bAttemptedInitialize;
+
+            oslModule                   m_hConnectorModule;
+            ConnectionFactoryFunction   m_pConnectionFactoryFunc;
+            ApplicationInitFunction     m_pApplicationInitFunc;
+            ApplicationShutdownFunction m_pApplicationShutdownFunc;
+            KDEVersionCheckFunction     m_pKDEVersionCheckFunc;
+
+        public:
+            KabImplModule( const ::com::sun::star::uno::Reference< 
::com::sun::star::lang::XMultiServiceFactory >& _rxFactory );
+
+            /** determines whether there is a KDE present in the environment
+            */
+            bool isKDEPresent();
 
+            enum KDEVersionType
+            {
+                eTooOld,
+                eSupported,
+                eToNew
+            };
+            /** checks whether the KDE version we're running against is 
supported
+                @precond
+                    the module is loaded, i.e impl_loadModule has successfully 
been called
+            */
+            KDEVersionType matchKDEVersion();
+
+            /** initializes the implementation module.
+
+                @raises ::com::sun::star::uno::RuntimeException
+                    if the module could be loaded, but required symbols are 
missing
+                @raises ::com::sun::star::sdbc::SQLException
+                    if the KDE version we're running against is not supported, 
or no KDE was found at all
+            */
+            void init();
+
+            /** shuts down the impl module (and the KDE application, if we own 
it)
+            */
+            void shutdown();
+
+            /** creates a new connection
+                @precond
+                    <member>init</member> has been called before
+                @raises ::com::sun::star::uno::RuntimeException
+                    if no connection object could be created (which is a 
severe error, normally impossible)
+            */
+            KabConnection*  createConnection( KabDriver* _pDriver ) const;
+
+        private:
+            /** loads the implementation module and retrieves the needed 
symbols
+
+                Save against being called multiple times.
+
+                @return <TRUE/> if the module could be loaded successfully.
+
+                @raises ::com::sun::star::uno::RuntimeException
+                    if the module could be loaded, but required symbols are 
missing
+            */
+            bool    impl_loadModule();
+
+            /** unloads the implementation module, and resets all function 
pointers to <NULL/>
+                @precond m_hConnectorModule is not <NULL/>
+            */
+            void    impl_unloadModule();
+
+            /** throws an SQLException saying than no KDE installation was 
found
+            */
+            void    impl_throwNoKdeException();
+
+            /** throws an SQLException saying that the found KDE version is 
too old
+            */
+            void    impl_throwKdeTooOldException();
+
+            /** throws an SQLException saying that the found KDE version is 
too new
+            */
+            void    impl_throwKdeTooNewException();
+
+            /** throws a generic SQL exception with SQLState S1000 and error 
code 0
+            */
+            void    impl_throwGenericSQLException( const ::rtl::OUString& 
_rMessage );
+
+            /** determines whether it's allowed to run on a too-new (not 
confirmed to work) version
+            */
+            bool    impl_doAllowNewKDEVersion();
+        };
+
+        // ===============================================================
+        // = KabDriver
+        // ===============================================================
+               typedef ::cppu::WeakComponentImplHelper3<   
::com::sun::star::sdbc::XDriver,
+                                                                               
                        ::com::sun::star::lang::XServiceInfo,
+                                                    
::com::sun::star::frame::XTerminateListener > KDriver_BASE;
                class KabDriver : public KDriver_BASE
                {
                protected:
-                       KApplication*                           
m_pKApplication;        // KDE application if we own it
                        ::osl::Mutex                            m_aMutex;       
                // mutex is need to control member access
                        OWeakRefArray                           m_xConnections; 
        // vector containing a list of all the
                                                                                
                                        //  KabConnection objects for this 
Driver
                        ::com::sun::star::uno::Reference< 
::com::sun::star::lang::XMultiServiceFactory >
                                                                                
m_xMSFactory;           // the multi-service factory
+            KabImplModule               m_aImplModule;
 
                public:
+            static ::com::sun::star::uno::Reference< 
::com::sun::star::uno::XInterface > SAL_CALL Create(const 
::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory 
>& _rxFactory) throw( ::com::sun::star::uno::Exception );
+
+            // XServiceInfo - static versions
+            static ::rtl::OUString getImplementationName_Static(  ) 
throw(::com::sun::star::uno::RuntimeException);
+            static ::com::sun::star::uno::Sequence< ::rtl::OUString > 
getSupportedServiceNames_Static(  ) throw 
(::com::sun::star::uno::RuntimeException);
+
+            const ::com::sun::star::uno::Reference< 
::com::sun::star::lang::XMultiServiceFactory >&
+                    getMSFactory() const { return m_xMSFactory; }
+
+            /** returns the driver's implementation name (being pure ASCII) 
for reference in various places
+            */
+            static const sal_Char*  impl_getAsciiImplementationName();
+
+            /** returns the path of our configuration settings
+            */
+            static ::rtl::OUString  impl_getConfigurationSettingsPath();
 
+        protected:
                        KabDriver(const ::com::sun::star::uno::Reference< 
::com::sun::star::lang::XMultiServiceFactory >& _rxFactory);
 
                        // OComponentHelper
                        virtual void SAL_CALL disposing(void);
 
-                       // XInterface
-                       static ::rtl::OUString getImplementationName_Static(  ) 
throw(::com::sun::star::uno::RuntimeException);
-                       static ::com::sun::star::uno::Sequence< ::rtl::OUString 
> getSupportedServiceNames_Static(  ) throw 
(::com::sun::star::uno::RuntimeException);
-
                        // XServiceInfo
                        virtual ::rtl::OUString SAL_CALL getImplementationName( 
 ) throw(::com::sun::star::uno::RuntimeException);
                        virtual sal_Bool SAL_CALL supportsService( const 
::rtl::OUString& ServiceName ) throw(::com::sun::star::uno::RuntimeException);
@@ -91,8 +220,21 @@
                        virtual sal_Int32 SAL_CALL getMajorVersion() 
throw(::com::sun::star::uno::RuntimeException);
                        virtual sal_Int32 SAL_CALL getMinorVersion() 
throw(::com::sun::star::uno::RuntimeException);
 
-                       const ::com::sun::star::uno::Reference< 
::com::sun::star::lang::XMultiServiceFactory >&
-                                       getMSFactory() const { return 
m_xMSFactory; }
+            // XTerminateListener
+            virtual void SAL_CALL queryTermination( const 
::com::sun::star::lang::EventObject& Event ) throw 
(::com::sun::star::frame::TerminationVetoException, 
::com::sun::star::uno::RuntimeException);
+            virtual void SAL_CALL notifyTermination( const 
::com::sun::star::lang::EventObject& Event ) throw 
(::com::sun::star::uno::RuntimeException);
+
+            // XEventListener
+            virtual void SAL_CALL disposing( const 
::com::sun::star::lang::EventObject& Source ) throw 
(::com::sun::star::uno::RuntimeException);
+
+        private:
+            /** shuts down the library which contains the real implementations
+
+                This method is safe against being called multiple times
+
+                @precond our mutex is locked
+            */
+            void impl_shutdownImplementationModule();
                };
        }
 




---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to