Tag: cws_src680_oj14 User: oj Date: 06/01/03 05:18:27 Modified: /dba/dbaccess/source/ui/app/ AppControllerDnD.cxx
Log: RESYNC: (1.12-1.13); FILE MERGED File Changes: Directory: /dba/dbaccess/source/ui/app/ ======================================= File [changed]: AppControllerDnD.cxx Url: http://dba.openoffice.org/source/browse/dba/dbaccess/source/ui/app/AppControllerDnD.cxx?r1=1.12.4.1&r2=1.12.4.2 Delta lines: +32 -66 --------------------- --- AppControllerDnD.cxx 3 Jan 2006 07:48:57 -0000 1.12.4.1 +++ AppControllerDnD.cxx 3 Jan 2006 13:18:24 -0000 1.12.4.2 @@ -231,8 +231,7 @@ // ----------------------------------------------------------------------------- void OApplicationController::deleteTables(const ::std::vector< ::rtl::OUString>& _rList) { - Reference<XConnection> xConnection; - ensureConnection(xConnection); + SharedConnection xConnection( ensureConnection() ); Reference<XTablesSupplier> xSup(xConnection,UNO_QUERY); OSL_ENSURE(xSup.is(),"OApplicationController::deleteTable: no XTablesSuppier!"); @@ -454,43 +453,26 @@ } } // ----------------------------------------------------------------------------- -Reference<XConnection> OApplicationController::getActiveConnection() const -{ - Reference<XConnection> xConnection; - if ( getContainer() ) - { - ::rtl::OUString sDataSourceName = getDatabaseName(); - TDataSourceConnections::const_iterator aFind = m_aDataSourceConnections.find(sDataSourceName); - if ( aFind != m_aDataSourceConnections.end() ) - xConnection = aFind->second; - } - - return xConnection; -} -// ----------------------------------------------------------------------------- -bool OApplicationController::ensureConnection(Reference<XConnection>& _xConnection,sal_Bool _bCreate) +const SharedConnection& OApplicationController::ensureConnection() { ::vos::OGuard aSolarGuard(Application::GetSolarMutex()); ::osl::MutexGuard aGuard(m_aMutex); - ::rtl::OUString sDataSourceName = getDatabaseName(); - TDataSourceConnections::iterator aFind = m_aDataSourceConnections.find(sDataSourceName); - if ( aFind == m_aDataSourceConnections.end() ) - aFind = m_aDataSourceConnections.insert(TDataSourceConnections::value_type(sDataSourceName,Reference<XConnection>())).first; - - if ( !aFind->second.is() && _bCreate ) + if ( !m_xDataSourceConnection.is() ) { WaitObject aWO(getView()); String sConnectingContext( ModuleRes( STR_COULDNOTCONNECT_DATASOURCE ) ); sConnectingContext.SearchAndReplaceAscii("$name$", getStrippedDatabaseName()); - aFind->second = connect(sDataSourceName, sConnectingContext, rtl::OUString(), sal_True); + m_xDataSourceConnection.reset( connect( getDatabaseName(), sConnectingContext, rtl::OUString(), sal_True ) ); + if ( m_xDataSourceConnection.is() ) + m_xMetaData = m_xDataSourceConnection->getMetaData(); + // otherwise we got a loop when connecting to db throws an error -// if ( !aFind->second.is() ) +// if ( !m_xDataSourceConnection.is() ) // getContainer()->clearSelection(); } - _xConnection = aFind->second; - return _xConnection.is(); + return m_xDataSourceConnection; } // ----------------------------------------------------------------------------- sal_Bool OApplicationController::isDataSourceReadOnly() const @@ -502,13 +484,11 @@ sal_Bool OApplicationController::isConnectionReadOnly() const { sal_Bool bIsConnectionReadOnly = sal_True; - Reference<XConnection> xConnection = getActiveConnection(); - - if ( xConnection.is() ) + if ( m_xMetaData.is() ) { try { - bIsConnectionReadOnly = xConnection->getMetaData()->isReadOnly(); + bIsConnectionReadOnly = m_xMetaData->isReadOnly(); } catch(SQLException&) { @@ -557,11 +537,9 @@ break; case E_TABLE: { - Reference<XConnection> xConnection; - ensureConnection(xConnection,sal_False); - if ( xConnection.is() ) + if ( m_xDataSourceConnection.is() ) { - Reference<XTablesSupplier> xSup(xConnection,UNO_QUERY); + Reference< XTablesSupplier > xSup( getConnection(), UNO_QUERY ); OSL_ENSURE(xSup.is(),"OApplicationController::getElements: no XTablesSuppier!"); if ( xSup.is() ) xElements = xSup->getTables(); @@ -623,10 +601,8 @@ Reference< XDatabaseMetaData> xMetaData; if ( getContainer()->getElementType() == E_TABLE ) { - Reference<XConnection> xConnection; - ensureConnection(xConnection,sal_False); - if ( xConnection.is() ) - xMetaData = xConnection->getMetaData(); + if ( m_xDataSourceConnection.is() ) + xMetaData = m_xDataSourceConnection->getMetaData(); } getContainer()->getSelectionElementNames(_rNames,xMetaData); @@ -669,16 +645,17 @@ } - Reference<XConnection> xConnection; + SharedConnection xConnection; try { - ensureConnection(xConnection); + xConnection = ensureConnection(); } catch(SQLContext& e) { showError(SQLExceptionInfo(e)); } catch(SQLWarning& e) { showError(SQLExceptionInfo(e)); } catch(SQLException& e) { showError(SQLExceptionInfo(e)); } OSL_ENSURE(xNameAccess.is(),"Data source doesn't return a name access -> GPF"); - return ::std::auto_ptr<OLinkedDocumentsAccess>( new OLinkedDocumentsAccess(getView(), getORB(), xNameAccess,xConnection,getDatabaseName())); + return ::std::auto_ptr<OLinkedDocumentsAccess>( + new OLinkedDocumentsAccess( getView(), getORB(), xNameAccess, xConnection, getDatabaseName() ) ); } // ----------------------------------------------------------------------------- TransferableHelper* OApplicationController::copyObject() @@ -695,11 +672,9 @@ case E_TABLE: case E_QUERY: { - Reference<XConnection> xConnection; - ensureConnection(xConnection,sal_False); Reference< XDatabaseMetaData> xMetaData; - if ( xConnection.is() ) - xMetaData = xConnection->getMetaData(); + if ( m_xDataSourceConnection.is() ) + xMetaData = m_xDataSourceConnection->getMetaData(); ::rtl::OUString sName = getContainer()->getQualifiedName(NULL,xMetaData); if ( sName.getLength() ) @@ -708,11 +683,11 @@ if ( eType == E_TABLE ) { - pData = new ODataClipboard(sDataSource, CommandType::TABLE, sName, xConnection, getNumberFormatter(xConnection,getORB()), getORB()); + pData = new ODataClipboard(sDataSource, CommandType::TABLE, sName, m_xDataSourceConnection, getNumberFormatter(m_xDataSourceConnection,getORB()), getORB()); } else { - pData = new ODataClipboard(sDataSource, CommandType::QUERY, sName, getNumberFormatter(xConnection,getORB()), getORB()); + pData = new ODataClipboard(sDataSource, CommandType::QUERY, sName, getNumberFormatter(m_xDataSourceConnection,getORB()), getORB()); } } } @@ -934,14 +909,10 @@ // first get the dest connection ::osl::MutexGuard aGuard(m_aMutex); - Reference<XConnection> xDestConnection; // supports the service sdb::connection - ensureConnection( xDestConnection); - if ( !xDestConnection.is() ) + SharedConnection xConnection( ensureConnection() ); + if ( !xConnection.is() ) return sal_False; - SharedConnection xConnection( xDestConnection, SharedConnection::NoTakeOwnership ); - // TODO: migrate ensureConnection to the SharedConnection-API - return m_aTableCopyHelper.copyTagTable( _rDesc, _bCheck, xConnection ); } // ----------------------------------------------------------------------------- @@ -954,13 +925,8 @@ if ( m_aAsyncDrop.nType == E_TABLE ) { - Reference<XConnection> xDestConnection; // supports the service sdb::connection - ensureConnection( xDestConnection); - - SharedConnection xConnection( xDestConnection, SharedConnection::NoTakeOwnership ); - // TODO: migrate ensureConnection to the SharedConnection-API - - if ( xDestConnection.is() ) + SharedConnection xConnection( ensureConnection() ); + if ( xConnection.is() ) m_aTableCopyHelper.asyncCopyTagTable( m_aAsyncDrop, getDatabaseName(), xConnection ); } else --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
