/************************************************************** * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * *************************************************************/ #ifndef _DBA_CORE_CONNECTION_HXX_ #define _DBA_CORE_CONNECTION_HXX_ #include "apitools.hxx" #include "querycontainer.hxx" #include "tablecontainer.hxx" #include "viewcontainer.hxx" #include "RefreshListener.hxx" /** === begin UNO includes === **/ #include #include #include #include #include #include #include #include #include #include #include #include /** === end UNO includes === **/ #if ! defined(INCLUDED_COMPHELPER_IMPLBASE_VAR_HXX_14) #define INCLUDED_COMPHELPER_IMPLBASE_VAR_HXX_14 #define COMPHELPER_IMPLBASE_INTERFACE_NUMBER 14 #include #endif #include #include #include #include //........................................................................ namespace dbaccess { //........................................................................ //========================================================================== //========================================================================== typedef ::comphelper::ImplHelper14 < ::com::sun::star::container::XChild , ::com::sun::star::sdbcx::XTablesSupplier , ::com::sun::star::sdbcx::XViewsSupplier , ::com::sun::star::sdbc::XConnection , ::com::sun::star::sdbc::XWarningsSupplier , ::com::sun::star::sdb::XQueriesSupplier , ::com::sun::star::sdb::XSQLQueryComposerFactory , ::com::sun::star::sdb::XCommandPreparation , ::com::sun::star::lang::XServiceInfo , ::com::sun::star::lang::XMultiServiceFactory , ::com::sun::star::sdbcx::XUsersSupplier , ::com::sun::star::sdbcx::XGroupsSupplier , ::com::sun::star::sdb::tools::XConnectionTools , ::com::sun::star::sdb::application::XTableUIProvider > OConnection_Base; class ODatabaseSource; //========================================================================== //= OConnection //========================================================================== class OConnection :public ::comphelper::OBaseMutex ,public OSubComponent ,public ::connectivity::OConnectionWrapper ,public OConnection_Base ,public IRefreshListener { protected: ::com::sun::star::uno::Reference< ::com::sun::star::sdbcx::XTablesSupplier > m_xMasterTables; // just to avoid the recreation of the catalog OWeakRefArray m_aStatements; ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess > m_xQueries; OWeakRefArray m_aComposers; // the filter as set on the parent data link at construction of the connection ::com::sun::star::uno::Sequence< ::rtl::OUString > m_aTableFilter; ::com::sun::star::uno::Sequence< ::rtl::OUString > m_aTableTypeFilter; ::comphelper::ComponentContext m_aContext; ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection > m_xMasterConnection; ::com::sun::star::uno::Reference< ::com::sun::star::sdb::tools::XConnectionTools > m_xConnectionTools; ::com::sun::star::uno::Reference< ::com::sun::star::sdb::application::XTableUIProvider > m_xTableUIProvider; // defines the helper services for example to query the command of a view // @ see com.sun.star.sdb.tools.XViewAccess DECLARE_STL_USTRINGACCESS_MAP( ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface>, TSupportServices); TSupportServices m_aSupportServices; OTableContainer* m_pTables; OViewContainer* m_pViews; ::dbtools::WarningsContainer m_aWarnings; oslInterlockedCount m_nInAppend; sal_Bool m_bSupportsViews; // true when the getTableTypes return "VIEW" as type sal_Bool m_bSupportsUsers; sal_Bool m_bSupportsGroups; protected: virtual ~OConnection(); public: OConnection(ODatabaseSource& _rDB ,::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection >& _rxMaster ,const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rxORB); // com::sun::star::lang::XTypeProvider virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL getTypes(); virtual ::com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId(); // com::sun::star::uno::XInterface virtual ::com::sun::star::uno::Any SAL_CALL queryInterface( const ::com::sun::star::uno::Type & rType ); virtual void SAL_CALL acquire() throw( ); virtual void SAL_CALL release() throw( ); // OComponentHelper virtual void SAL_CALL disposing(void); // ::com::sun::star::container::XChild virtual ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL getParent( ); virtual void SAL_CALL setParent( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& Parent ); // ::com::sun::star::sdbcx::XTablesSupplier virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess > SAL_CALL getTables( ); // ::com::sun::star::sdbcx::XViewsSupplier virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess > SAL_CALL getViews( ); // ::com::sun::star::sdb::XQueriesSupplier virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess > SAL_CALL getQueries( ); // ::com::sun::star::sdb::XSQLQueryComposerFactory virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XSQLQueryComposer > SAL_CALL createQueryComposer( ); // ::com::sun::star::sdb::XCommandPreparation virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XPreparedStatement > SAL_CALL prepareCommand( const ::rtl::OUString& command, sal_Int32 commandType ); // ::com::sun::star::sdbc::XWarningsSupplier virtual ::com::sun::star::uno::Any SAL_CALL getWarnings( ); virtual void SAL_CALL clearWarnings( ); // ::com::sun::star::lang::XServiceInfo virtual ::rtl::OUString SAL_CALL getImplementationName( ); virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ); virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames( ); // XConnection virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XStatement > SAL_CALL createStatement( ); virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XPreparedStatement > SAL_CALL prepareStatement( const ::rtl::OUString& sql ); virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XPreparedStatement > SAL_CALL prepareCall( const ::rtl::OUString& sql ); virtual ::rtl::OUString SAL_CALL nativeSQL( const ::rtl::OUString& sql ); virtual void SAL_CALL setAutoCommit( sal_Bool autoCommit ); virtual sal_Bool SAL_CALL getAutoCommit( ); virtual void SAL_CALL commit( ); virtual void SAL_CALL rollback( ); virtual sal_Bool SAL_CALL isClosed( ); virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XDatabaseMetaData > SAL_CALL getMetaData( ); virtual void SAL_CALL setReadOnly( sal_Bool readOnly ); virtual sal_Bool SAL_CALL isReadOnly( ); virtual void SAL_CALL setCatalog( const ::rtl::OUString& catalog ); virtual ::rtl::OUString SAL_CALL getCatalog( ); virtual void SAL_CALL setTransactionIsolation( sal_Int32 level ); virtual sal_Int32 SAL_CALL getTransactionIsolation( ); virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess > SAL_CALL getTypeMap( ); virtual void SAL_CALL setTypeMap( const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess >& typeMap ); // ::com::sun::star::sdbc::XCloseable virtual void SAL_CALL close( ); // XMultiServiceFactory virtual ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL createInstance( const ::rtl::OUString& aServiceSpecifier ); virtual ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL createInstanceWithArguments( const ::rtl::OUString& ServiceSpecifier, const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >& Arguments ); virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getAvailableServiceNames( ); // XUsersSupplier virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess > SAL_CALL getUsers( ); // XGroupsSupplier virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess > SAL_CALL getGroups( ); // XConnectionTools virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdb::tools::XTableName > SAL_CALL createTableName( ); virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdb::tools::XObjectNames > SAL_CALL getObjectNames( ); virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdb::tools::XDataSourceMetaData > SAL_CALL getDataSourceMetaData( ); virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess > SAL_CALL getFieldsByCommandDescriptor( ::sal_Int32 commandType, const ::rtl::OUString& command, ::com::sun::star::uno::Reference< ::com::sun::star::lang::XComponent >& keepFieldsAlive ); virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XSingleSelectQueryComposer > SAL_CALL getComposer( ::sal_Int32 commandType, const ::rtl::OUString& command ); // XTableUIProvider virtual ::com::sun::star::uno::Reference< ::com::sun::star::graphic::XGraphic > SAL_CALL getTableIcon( const ::rtl::OUString& TableName, ::sal_Int32 ColorMode ); virtual ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL getTableEditor( const ::com::sun::star::uno::Reference< ::com::sun::star::sdb::application::XDatabaseDocumentUI >& DocumentUI, const ::rtl::OUString& TableName ); // IRefreshListener virtual void refresh(const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess >& _rToBeRefreshed); protected: inline void checkDisposed() { if ( rBHelper.bDisposed || !m_xConnection.is() ) throw ::com::sun::star::lang::DisposedException(); } ::com::sun::star::uno::Reference< ::com::sun::star::sdbcx::XTablesSupplier > getMasterTables(); private: /** checks whether or not there are naming conflicts between tables and queries */ void impl_checkTableQueryNames_nothrow(); /** loads the XConnectionTools implementation which we forward the respective functionality to @throws ::com::sun::star::uno::RuntimeException if the implementation cannot be loaded @postcond m_xConnectionTools is nol */ void impl_loadConnectionTools_throw(); /** reads the table filter and table type filter from the datasourfce */ void impl_fillTableFilter(); }; //........................................................................ } // namespace dbaccess //........................................................................ #endif // _DBA_CORE_CONNECTION_HXX_