diff options
Diffstat (limited to 'binfilter/bf_sw/source/ui/dbui/sw_dbmgr.cxx')
-rw-r--r-- | binfilter/bf_sw/source/ui/dbui/sw_dbmgr.cxx | 661 |
1 files changed, 661 insertions, 0 deletions
diff --git a/binfilter/bf_sw/source/ui/dbui/sw_dbmgr.cxx b/binfilter/bf_sw/source/ui/dbui/sw_dbmgr.cxx new file mode 100644 index 000000000000..e626e7e3355d --- /dev/null +++ b/binfilter/bf_sw/source/ui/dbui/sw_dbmgr.cxx @@ -0,0 +1,661 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +#include <cstdarg> + +#include <stdio.h> + +#include <com/sun/star/text/NotePrintMode.hpp> + +#include <com/sun/star/sdb/CommandType.hpp> +#include <com/sun/star/frame/XComponentLoader.hpp> +#include <com/sun/star/util/XNumberFormatter.hpp> +#include <com/sun/star/sdb/XCompletedConnection.hpp> +#include <com/sun/star/sdb/XCompletedExecution.hpp> +#include <com/sun/star/container/XChild.hpp> +#ifndef _COM_SUN_STAR_TEXT_MAILMERGEEVENT_ +#include <com/sun/star/text/MailMergeEvent.hpp> +#endif +#include <dbconfig.hxx> +#include <vcl/lstbox.hxx> +#include <unotools/tempfile.hxx> +#include <bf_svtools/urihelper.hxx> +#ifndef _SVSTDARR_HXX +#define _SVSTDARR_STRINGSDTOR +#include <bf_svtools/svstdarr.hxx> +#endif +#include <bf_svtools/zforlist.hxx> +#include <bf_svtools/zformat.hxx> +#include <bf_svtools/stritem.hxx> +#include <bf_svtools/eitem.hxx> +#include <bf_sfx2/printer.hxx> +#include <bf_sfx2/docfile.hxx> +#include <bf_sfx2/progress.hxx> +#include <bf_sfx2/docfilt.hxx> +#include <bf_offmgr/app.hxx> +#include <cmdid.h> +#include <swtypes.hxx> +#include <swmodule.hxx> +#include <docsh.hxx> + +#include <horiornt.hxx> + +#include <wrtsh.hxx> +#include <fldbas.hxx> +#include <flddat.hxx> +#include <swmodule.hxx> +#include <modcfg.hxx> +#include <swprtopt.hxx> +#include <shellio.hxx> +#include <dbmgr.hxx> +#include <doc.hxx> +#include <swwait.hxx> +#include <swunohelper.hxx> + +#include <globals.hrc> +#include <statstr.hrc> + +#include <bf_sfx2/request.hxx> +#include <hintids.hxx> +#include <com/sun/star/lang/XMultiServiceFactory.hpp> +#include <com/sun/star/container/XNameAccess.hpp> +#include <com/sun/star/sdbc/XDataSource.hpp> +#include <com/sun/star/sdbc/XRowSet.hpp> +#include <com/sun/star/sdbcx/XTablesSupplier.hpp> +#include <com/sun/star/sdbcx/XColumnsSupplier.hpp> +#include <com/sun/star/sdb/XQueriesSupplier.hpp> +#include <com/sun/star/sdb/XColumn.hpp> +#include <com/sun/star/sdbc/DataType.hpp> +#include <com/sun/star/sdbc/XStatement.hpp> +#include <com/sun/star/sdbc/ResultSetType.hpp> +#include <com/sun/star/beans/XPropertySet.hpp> +#include <com/sun/star/beans/PropertyValue.hpp> +#include <comphelper/processfactory.hxx> +#include <com/sun/star/util/XNumberFormatTypes.hpp> +#include <bf_svx/langitem.hxx> +#include <bf_svx/unomid.hxx> +#include <bf_svtools/numuno.hxx> + +#include <unomailmerge.hxx> + +#include <bf_sfx2/event.hxx> +#include <vcl/msgbox.hxx> +#include <bf_svx/dataaccessdescriptor.hxx> +#include <cppuhelper/implbase1.hxx> +#include <osl/mutex.hxx> +#include <legacysmgr/legacy_binfilters_smgr.hxx> +#include "bf_so3/staticbaseurl.hxx" + +namespace binfilter { +using namespace svx; +using namespace ::com::sun::star; +using namespace ::com::sun::star::text; +using namespace ::com::sun::star::uno; +using namespace ::com::sun::star::container; +using namespace ::com::sun::star::frame; +using namespace ::com::sun::star::lang; +using namespace ::com::sun::star::sdb; +using namespace ::com::sun::star::sdbc; +using namespace ::com::sun::star::sdbcx; +using namespace ::com::sun::star::beans; +using namespace ::com::sun::star::util; +using namespace ::com::sun::star::task; + +#define C2S(cChar) String::CreateFromAscii(cChar) +#define C2U(cChar) ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(cChar)) + +#define DB_SEP_SPACE 0 +#define DB_SEP_TAB 1 +#define DB_SEP_RETURN 2 +#define DB_SEP_NEWLINE 3 + +/*N*/ SV_IMPL_PTRARR(SwDSParamArr, SwDSParamPtr); +const sal_Char cCursor[] = "Cursor"; +const sal_Char cCommand[] = "Command"; +const sal_Char cCommandType[] = "CommandType"; +const sal_Char cDataSourceName[] = "DataSourceName"; +const sal_Char cSelection[] = "Selection"; +const sal_Char cActiveConnection[] = "ActiveConnection"; + +/* -----------------09.12.2002 12:35----------------- + * + * --------------------------------------------------*/ + +/*N*/ class SwConnectionDisposedListener_Impl : public cppu::WeakImplHelper1 +/*N*/ < ::com::sun::star::lang::XEventListener > +/*N*/ { +/*N*/ SwNewDBMgr& rDBMgr; +/*N*/ +/*N*/ virtual void SAL_CALL disposing( const EventObject& Source ) throw (RuntimeException); +/*N*/ public: +/*N*/ SwConnectionDisposedListener_Impl(SwNewDBMgr& rMgr); +/*N*/ ~SwConnectionDisposedListener_Impl(); +/*N*/ +/*N*/ }; +// ----------------------------------------------------------------------------- +/*N*/ struct SwNewDBMgr_Impl +/*N*/ { +/*N*/ SwDSParam* pMergeData; +/*N*/ SwMailMergeDlg* pMergeDialog; +/*N*/ Reference<XEventListener> xDisposeListener; +/*N*/ +/*N*/ SwNewDBMgr_Impl(SwNewDBMgr& rDBMgr) +/*N*/ :pMergeData(0) +/*N*/ ,pMergeDialog(0) +/*N*/ ,xDisposeListener(new SwConnectionDisposedListener_Impl(rDBMgr)) +/*N*/ {} +/*N*/ }; + +/*-------------------------------------------------------------------- + Beschreibung: CTOR + --------------------------------------------------------------------*/ + +/*N*/ SwNewDBMgr::SwNewDBMgr() : +/*N*/ pImpl(new SwNewDBMgr_Impl(*this)), +/*N*/ pMergeEvtSrc(NULL), +/*N*/ bInMerge(FALSE), +/*N*/ bMergeLock(FALSE), +/*N*/ bMergeSilent(FALSE), +/*N*/ nMergeType(DBMGR_INSERT), +/*N*/ bInitDBFields(FALSE) +/*N*/ { +/*N*/ } +/* -----------------------------18.07.00 08:56-------------------------------- + + ---------------------------------------------------------------------------*/ +/*M*/ SwNewDBMgr::~SwNewDBMgr() +/*M*/ { +/*M*/ for(USHORT nPos = 0; nPos < aDataSourceParams.Count(); nPos++) +/*M*/ { +/*M*/ SwDSParam* pParam = aDataSourceParams[nPos]; +/*M*/ if(pParam->xConnection.is()) +/*M*/ { +/*M*/ try +/*M*/ { +/*M*/ Reference<XComponent> xComp(pParam->xConnection, UNO_QUERY); +/*M*/ if(xComp.is()) +/*M*/ xComp->dispose(); +/*M*/ } +/*M*/ catch(const RuntimeException& ) +/*M*/ { +/*M*/ //may be disposed already since multiple entries may have used the same connection +/*M*/ } +/*M*/ } +/*M*/ } +/*M*/ delete pImpl; +/*M*/ } +/* -----------------------------03.07.00 17:12-------------------------------- + + ---------------------------------------------------------------------------*/ +/*?*/ Reference< sdbc::XConnection> SwNewDBMgr::GetConnection(const String& rDataSource, +/*?*/ Reference<XDataSource>& rxSource) +/*?*/ { +/*?*/ Reference< sdbc::XConnection> xConnection; +/*?*/ Reference<XNameAccess> xDBContext; +/*?*/ Reference< XMultiServiceFactory > xMgr( ::legacy_binfilters::getLegacyProcessServiceFactory() ); +/*?*/ if( xMgr.is() ) +/*?*/ { +/*?*/ Reference<XInterface> xInstance = xMgr->createInstance( C2U( "com.sun.star.sdb.DatabaseContext" )); +/*?*/ xDBContext = Reference<XNameAccess>(xInstance, UNO_QUERY) ; +/*?*/ } +/*?*/ DBG_ASSERT(xDBContext.is(), "com.sun.star.sdb.DataBaseContext: service not available"); +/*?*/ if(xDBContext.is()) +/*?*/ { +/*?*/ try +/*?*/ { +/*?*/ if(xDBContext->hasByName(rDataSource)) +/*?*/ { +/*?*/ Reference<XCompletedConnection> xComplConnection; +/*?*/ xDBContext->getByName(rDataSource) >>= xComplConnection; +/*?*/ rxSource = Reference<XDataSource>(xComplConnection, UNO_QUERY); +/*?*/ +/*?*/ Reference< XInteractionHandler > xHandler( +/*?*/ xMgr->createInstance( C2U( "com.sun.star.sdb.InteractionHandler" )), UNO_QUERY); +/*?*/ xConnection = xComplConnection->connectWithCompletion( xHandler ); +/*?*/ } +/*?*/ } +/*?*/ catch(Exception&) {} +/*?*/ } +/*?*/ return xConnection; +/*?*/ } +/* -----------------------------06.07.00 14:28-------------------------------- + checks if a desired data source table or query is open + ---------------------------------------------------------------------------*/ +/*N*/ BOOL SwNewDBMgr::IsDataSourceOpen(const String& rDataSource, +/*N*/ const String& rTableOrQuery, sal_Bool bMergeOnly) +/*N*/ { +/*N*/ if(pImpl->pMergeData) +/*N*/ { +/*N*/ return !bMergeLock && +/*N*/ rDataSource == (String)pImpl->pMergeData->sDataSource && +/*N*/ rTableOrQuery == (String)pImpl->pMergeData->sCommand && +/*N*/ pImpl->pMergeData->xResultSet.is(); +/*N*/ } +/*N*/ else if(!bMergeOnly) +/*N*/ { +/*N*/ SwDBData aData; +/*N*/ aData.sDataSource = rDataSource; +/*N*/ aData.sCommand = rTableOrQuery; +/*N*/ aData.nCommandType = -1; +/*N*/ SwDSParam* pFound = FindDSData(aData, FALSE); +/*N*/ return (pFound && pFound->xResultSet.is()); +/*N*/ } +/*N*/ return sal_False; +/*N*/ } +/* -----------------------------10.07.01 14:28-------------------------------- + + ---------------------------------------------------------------------------*/ +/*N*/ BOOL SwNewDBMgr::ToNextRecord( +/*N*/ const String& rDataSource, const String& rCommand, sal_Int32 nCommandType) +/*N*/ { +/*N*/ SwDSParam* pFound = 0; +/*N*/ BOOL bRet = TRUE; +/*N*/ if(pImpl->pMergeData && +/*N*/ rDataSource == (String)pImpl->pMergeData->sDataSource && +/*N*/ rCommand == (String)pImpl->pMergeData->sCommand) +/*N*/ pFound = pImpl->pMergeData; +/*N*/ else +/*N*/ { +/*N*/ SwDBData aData; +/*N*/ aData.sDataSource = rDataSource; +/*N*/ aData.sCommand = rCommand; +/*N*/ aData.nCommandType = -1; +/*N*/ pFound = FindDSData(aData, FALSE); +/*N*/ } +/*N*/ return ToNextRecord(pFound); +/*N*/ } +/* -----------------------------10.07.01 14:38-------------------------------- + + ---------------------------------------------------------------------------*/ +/*N*/ BOOL SwNewDBMgr::ToNextRecord(SwDSParam* pParam) +/*N*/ { +/*N*/ BOOL bRet = TRUE; +/*N*/ if(!pParam || !pParam->xResultSet.is() || pParam->bEndOfDB || +/*N*/ (pParam->aSelection.getLength() && pParam->aSelection.getLength() <= pParam->nSelectionIndex)) +/*N*/ { +/*N*/ if(pParam) +/*N*/ pParam->CheckEndOfDB(); +/*N*/ return FALSE; +/*N*/ } +/*N*/ try +/*N*/ { +/*N*/ if(pParam->aSelection.getLength()) +/*N*/ { +/*N*/ sal_Int32 nPos = 0; +/*N*/ pParam->aSelection.getConstArray()[ pParam->nSelectionIndex++ ] >>= nPos; +/*N*/ pParam->bEndOfDB = !pParam->xResultSet->absolute( nPos ); +/*N*/ pParam->CheckEndOfDB(); +/*N*/ bRet = !pParam->bEndOfDB; +/*N*/ if(pParam->nSelectionIndex >= pParam->aSelection.getLength()) +/*N*/ pParam->bEndOfDB = TRUE; +/*N*/ } +/*N*/ else +/*N*/ { +/*N*/ pParam->bEndOfDB = !pParam->xResultSet->next(); +/*N*/ pParam->CheckEndOfDB(); +/*N*/ bRet = !pParam->bEndOfDB; +/*N*/ ++pParam->nSelectionIndex; +/*N*/ } +/*N*/ } +/*N*/ catch(Exception&) +/*N*/ { +/*N*/ } +/*N*/ return bRet; +/*N*/ } + +/* -----------------------------13.07.00 10:41-------------------------------- + + ---------------------------------------------------------------------------*/ +/*N*/ sal_uInt32 SwNewDBMgr::GetSelectedRecordId() +/*N*/ { +/*N*/ sal_uInt32 nRet = 0; +/*N*/ DBG_ASSERT(pImpl->pMergeData && pImpl->pMergeData->xResultSet.is(), "no data source in merge"); +/*N*/ if(!pImpl->pMergeData || !pImpl->pMergeData->xResultSet.is()) +/*N*/ return FALSE; +/*N*/ try +/*N*/ { +/*N*/ nRet = pImpl->pMergeData->xResultSet->getRow(); +/*N*/ } +/*N*/ catch(Exception& ) +/*N*/ { +/*N*/ } +/*N*/ return nRet; +/*N*/ } +/* -----------------------------13.07.00 10:58-------------------------------- + + ---------------------------------------------------------------------------*/ +/*N*/ sal_Bool SwNewDBMgr::ToRecordId(sal_Int32 nSet) +/*N*/ {DBG_BF_ASSERT(0, "STRIP"); return FALSE;//STRIP001 +/*N*/ } +/* -----------------------------17.07.00 14:17-------------------------------- + + ---------------------------------------------------------------------------*/ +/*N*/ BOOL SwNewDBMgr::OpenDataSource(const String& rDataSource, const String& rTableOrQuery, sal_Int32 nCommandType) +/*N*/ { +/*?*/ SwDBData aData; +/*?*/ aData.sDataSource = rDataSource; +/*?*/ aData.sCommand = rTableOrQuery; +/*?*/ aData.nCommandType = nCommandType; +/*?*/ +/*?*/ SwDSParam* pFound = FindDSData(aData, TRUE); +/*?*/ Reference< XDataSource> xSource; +/*?*/ if(pFound->xResultSet.is()) +/*?*/ return TRUE; +/*?*/ SwDSParam* pParam = FindDSConnection(rDataSource, FALSE); +/*?*/ Reference< XConnection> xConnection; +/*?*/ if(pParam && pParam->xConnection.is()) +/*?*/ pFound->xConnection = pParam->xConnection; +/*?*/ else +/*?*/ { +/*?*/ ::rtl::OUString sDataSource(rDataSource); +/*?*/ pFound->xConnection = RegisterConnection( sDataSource ); +/*?*/ } +/*?*/ if(pFound->xConnection.is()) +/*?*/ { +/*?*/ try +/*?*/ { +/*?*/ Reference< sdbc::XDatabaseMetaData > xMetaData = pFound->xConnection->getMetaData(); +/*?*/ try +/*?*/ { +/*?*/ pFound->bScrollable = xMetaData +/*?*/ ->supportsResultSetType((sal_Int32)ResultSetType::SCROLL_INSENSITIVE); +/*?*/ } +/*?*/ catch(Exception&) +/*?*/ { +/*?*/ //#98373# DB driver may not be ODBC 3.0 compliant +/*?*/ pFound->bScrollable = TRUE; +/*?*/ } +/*?*/ pFound->xStatement = pFound->xConnection->createStatement(); +/*?*/ ::rtl::OUString aQuoteChar = xMetaData->getIdentifierQuoteString(); +/*?*/ ::rtl::OUString sStatement(C2U("SELECT * FROM ")); +/*?*/ sStatement = C2U("SELECT * FROM "); +/*?*/ sStatement += aQuoteChar; +/*?*/ sStatement += rTableOrQuery; +/*?*/ sStatement += aQuoteChar; +/*?*/ pFound->xResultSet = pFound->xStatement->executeQuery( sStatement ); +/*?*/ +/*?*/ //after executeQuery the cursor must be positioned +/*?*/ pFound->bEndOfDB = !pFound->xResultSet->next(); +/*?*/ pFound->bAfterSelection = sal_False; +/*?*/ pFound->CheckEndOfDB(); +/*?*/ ++pFound->nSelectionIndex; +/*?*/ } +/*?*/ catch (Exception&) +/*?*/ { +/*?*/ pFound->xResultSet = 0; +/*?*/ pFound->xStatement = 0; +/*?*/ pFound->xConnection = 0; +/*?*/ } +/*?*/ } +/*?*/ return pFound->xResultSet.is(); +/*N*/ } +/* -----------------------------14.08.2001 10:26------------------------------ + + ---------------------------------------------------------------------------*/ +/*?*/ Reference< XConnection> SwNewDBMgr::RegisterConnection(::rtl::OUString& rDataSource) +/*?*/ { +/*?*/ SwDSParam* pFound = SwNewDBMgr::FindDSConnection(rDataSource, TRUE); +/*?*/ Reference< XDataSource> xSource; +/*?*/ if(!pFound->xConnection.is()) +/*?*/ { +/*?*/ pFound->xConnection = SwNewDBMgr::GetConnection(rDataSource, xSource ); +/*?*/ try +/*?*/ { +/*?*/ Reference<XComponent> xComponent(pFound->xConnection, UNO_QUERY); +/*?*/ if(xComponent.is()) +/*?*/ xComponent->addEventListener(pImpl->xDisposeListener); +/*?*/ } +/*?*/ catch(Exception&) +/*?*/ { +/*?*/ } +/*?*/ } +/*?*/ return pFound->xConnection; +/*?*/ } +/* -----------------------------17.07.00 15:55-------------------------------- + + ---------------------------------------------------------------------------*/ +/*N*/ sal_uInt32 SwNewDBMgr::GetSelectedRecordId( +/*N*/ const String& rDataSource, const String& rTableOrQuery, sal_Int32 nCommandType) +/*N*/ { +/*N*/ sal_uInt32 nRet = -1; +/*N*/ //check for merge data source first +/*N*/ if(pImpl->pMergeData && rDataSource == (String)pImpl->pMergeData->sDataSource && +/*N*/ rTableOrQuery == (String)pImpl->pMergeData->sCommand && +/*N*/ (nCommandType == -1 || nCommandType == pImpl->pMergeData->nCommandType) && +/*N*/ pImpl->pMergeData->xResultSet.is()) +/*N*/ nRet = GetSelectedRecordId(); +/*N*/ else +/*N*/ { +/*N*/ SwDBData aData; +/*N*/ aData.sDataSource = rDataSource; +/*N*/ aData.sCommand = rTableOrQuery; +/*N*/ aData.nCommandType = nCommandType; +/*N*/ SwDSParam* pFound = FindDSData(aData, FALSE); +/*N*/ if(pFound && pFound->xResultSet.is()) +/*N*/ { +/*N*/ try +/*N*/ { //if a selection array is set the current row at the result set may not be set yet +/*N*/ if(pFound->aSelection.getLength()) +/*N*/ { +/*N*/ sal_Int32 nSelIndex = pFound->nSelectionIndex; +/*N*/ if(nSelIndex >= pFound->aSelection.getLength()) +/*N*/ nSelIndex = pFound->aSelection.getLength() -1; +/*N*/ pFound->aSelection.getConstArray()[nSelIndex] >>= nRet; +/*N*/ +/*N*/ } +/*N*/ else +/*N*/ nRet = pFound->xResultSet->getRow(); +/*N*/ } +/*N*/ catch(Exception&){} +/*N*/ } +/*N*/ } +/*N*/ return nRet; +/*N*/ } + +/* -----------------------------17.07.00 14:18-------------------------------- + close all data sources - after fields were updated + ---------------------------------------------------------------------------*/ +/*N*/ void SwNewDBMgr::CloseAll(BOOL bIncludingMerge) +/*N*/ { +/*N*/ //the only thing done here is to reset the selection index +/*N*/ //all connections stay open +/*N*/ for(USHORT nPos = 0; nPos < aDataSourceParams.Count(); nPos++) +/*N*/ { +/*N*/ SwDSParam* pParam = aDataSourceParams[nPos]; +/*N*/ if(bIncludingMerge || pParam != pImpl->pMergeData) +/*N*/ { +/*N*/ pParam->nSelectionIndex = 0; +/*N*/ pParam->bAfterSelection = sal_False; +/*N*/ try +/*N*/ { +/*N*/ if(!bInMerge && pParam->xResultSet.is()) +/*N*/ pParam->xResultSet->first(); +/*N*/ } +/*N*/ catch(Exception& ) +/*N*/ {} +/*N*/ } +/*N*/ } +/*N*/ } +/* -----------------------------17.07.00 14:54-------------------------------- + + ---------------------------------------------------------------------------*/ +/*N*/ SwDSParam* SwNewDBMgr::FindDSData(const SwDBData& rData, BOOL bCreate) +/*N*/ { +/*N*/ SwDSParam* pFound = 0; +/*N*/ for(USHORT nPos = aDataSourceParams.Count(); nPos; nPos--) +/*N*/ { +/*N*/ SwDSParam* pParam = aDataSourceParams[nPos - 1]; +/*N*/ if(rData.sDataSource == pParam->sDataSource && +/*N*/ rData.sCommand == pParam->sCommand && +/*N*/ (rData.nCommandType == -1 || rData.nCommandType == pParam->nCommandType || +/*N*/ (bCreate && pParam->nCommandType == -1))) +/*N*/ { +/*N*/ //#94779# calls from the calculator may add a connection with an invalid commandtype +/*N*/ //later added "real" data base connections have to re-use the already available +/*N*/ //DSData and set the correct CommandType +/*N*/ if(bCreate && pParam->nCommandType == -1) +/*N*/ pParam->nCommandType = rData.nCommandType; +/*N*/ pFound = pParam; +/*N*/ break; +/*N*/ } +/*N*/ } +/*N*/ if(bCreate) +/*N*/ { +/*N*/ if(!pFound) +/*N*/ { +/*N*/ pFound = new SwDSParam(rData); +/*N*/ aDataSourceParams.Insert(pFound, aDataSourceParams.Count()); +/*N*/ try +/*N*/ { +/*N*/ Reference<XComponent> xComponent(pFound->xConnection, UNO_QUERY); +/*N*/ if(xComponent.is()) +/*N*/ xComponent->addEventListener(pImpl->xDisposeListener); +/*N*/ } +/*N*/ catch(Exception&) +/*N*/ { +/*N*/ } +/*N*/ } +/*N*/ } +/*N*/ return pFound; +/*N*/ } +/* -----------------------------14.08.2001 10:27------------------------------ + + ---------------------------------------------------------------------------*/ +/*N*/ SwDSParam* SwNewDBMgr::FindDSConnection(const ::rtl::OUString& rDataSource, BOOL bCreate) +/*N*/ { +/*N*/ SwDSParam* pFound = 0; +/*N*/ for(USHORT nPos = 0; nPos < aDataSourceParams.Count(); nPos++) +/*N*/ { +/*N*/ SwDSParam* pParam = aDataSourceParams[nPos]; +/*N*/ if(rDataSource == pParam->sDataSource) +/*N*/ { +/*N*/ pFound = pParam; +/*N*/ break; +/*N*/ } +/*N*/ } +/*N*/ if(bCreate && !pFound) +/*N*/ { +/*?*/ SwDBData aData; +/*?*/ aData.sDataSource = rDataSource; +/*?*/ pFound = new SwDSParam(aData); +/*?*/ aDataSourceParams.Insert(pFound, aDataSourceParams.Count()); +/*?*/ try +/*?*/ { +/*?*/ Reference<XComponent> xComponent(pFound->xConnection, UNO_QUERY); +/*?*/ if(xComponent.is()) +/*?*/ xComponent->addEventListener(pImpl->xDisposeListener); +/*?*/ } +/*?*/ catch(Exception&) +/*?*/ { +/*?*/ } +/*N*/ } +/*N*/ return pFound; +/*N*/ } + +/* -----------------------------17.07.00 14:31-------------------------------- + rDBName: <Source> + DB_DELIM + <Table>; + <Statement> + ---------------------------------------------------------------------------*/ +/*M*/ void SwNewDBMgr::AddDSData(const SwDBData& rData, long nSelStart, long nSelEnd) +/*M*/ { +/*M*/ SwDSParam* pFound = FindDSData(rData, TRUE); +/*M*/ if(nSelStart > 0) +/*M*/ { +/*M*/ if(nSelEnd < nSelStart) +/*M*/ { +/*M*/ sal_uInt32 nZw = nSelEnd; +/*M*/ nSelEnd = nSelStart; +/*M*/ nSelStart = nZw; +/*M*/ } +/*M*/ +/*M*/ pFound->aSelection.realloc(nSelEnd - nSelStart + 1); +/*M*/ Any* pSelection = pFound->aSelection.getArray(); +/*M*/ for (long i = nSelStart; i <= nSelEnd; i++, ++pSelection) +/*M*/ *pSelection <<= i; +/*M*/ } +/*M*/ else +/*M*/ pFound->aSelection.realloc(0); +/*M*/ } +/* -----------------------------17.07.00 14:31-------------------------------- + + ---------------------------------------------------------------------------*/ +/*M*/ void SwNewDBMgr::GetDSSelection(const SwDBData& rData, long& rSelStart, long& rSelEnd) +/*M*/ { +/*M*/ SwDSParam* pFound = FindDSData(rData, FALSE); +/*M*/ if(!pFound || !pFound->aSelection.getLength()) +/*M*/ rSelStart = -1L; +/*M*/ else +/*M*/ { +/*M*/ pFound->aSelection.getConstArray()[0] >>= rSelStart; +/*M*/ pFound->aSelection.getConstArray()[pFound->aSelection.getLength() - 1] >>= rSelEnd; +/*M*/ } +/*M*/ } +/* -----------------------------17.07.00 14:34-------------------------------- + + ---------------------------------------------------------------------------*/ +/*N*/ const SwDBData& SwNewDBMgr::GetAddressDBName() +/*N*/ { +/*N*/ return SW_MOD()->GetDBConfig()->GetAddressSource(); +/*N*/ } +/* -----------------------------30.08.2001 12:00------------------------------ + + ---------------------------------------------------------------------------*/ +SwDbtoolsClient* SwNewDBMgr::pDbtoolsClient = NULL; + +/* -----------------09.12.2002 12:38----------------- + * + * --------------------------------------------------*/ +/*N*/ SwConnectionDisposedListener_Impl::SwConnectionDisposedListener_Impl(SwNewDBMgr& rMgr) : +/*N*/ rDBMgr(rMgr) +/*N*/ {}; +/* -----------------09.12.2002 12:39----------------- + * + * --------------------------------------------------*/ +/*N*/ SwConnectionDisposedListener_Impl::~SwConnectionDisposedListener_Impl() +/*N*/ {}; +/* -----------------09.12.2002 12:39----------------- + * + * --------------------------------------------------*/ +/*N*/ void SwConnectionDisposedListener_Impl::disposing( const EventObject& rSource ) +/*N*/ throw (RuntimeException) +/*N*/ { +/*N*/ SolarMutexGuard aGuard; +/*N*/ Reference<XConnection> xSource(rSource.Source, UNO_QUERY); +/*N*/ for(USHORT nPos = rDBMgr.aDataSourceParams.Count(); nPos; nPos--) +/*N*/ { +/*N*/ SwDSParam* pParam = rDBMgr.aDataSourceParams[nPos - 1]; +/*N*/ if(pParam->xConnection.is() && +/*N*/ (xSource == pParam->xConnection)) +/*N*/ { +/*N*/ rDBMgr.aDataSourceParams.DeleteAndDestroy(nPos - 1); +/*N*/ } +/*N*/ } +/*N*/ } + +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |