blob: c6ce0ff53ef47a3472da347aa306026645d120d4 [file] [log] [blame]
/**************************************************************
*
* 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.
*
*************************************************************/
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_sw.hxx"
#include <mmconfigitem.hxx>
#include <swtypes.hxx>
#include <tools/debug.hxx>
#include <com/sun/star/uno/Any.hxx>
#include <com/sun/star/beans/PropertyValue.hpp>
#include <com/sun/star/sdb/XCompletedConnection.hpp>
#include <com/sun/star/sdbc/XDataSource.hpp>
#include <com/sun/star/sdbcx/XColumnsSupplier.hpp>
#include "com/sun/star/mail/MailServiceType.hpp"
#include "com/sun/star/mail/XMailService.hpp"
#include "com/sun/star/mail/MailServiceProvider.hpp"
#include <com/sun/star/lang/XMultiServiceFactory.hpp>
#include <com/sun/star/beans/XPropertySet.hpp>
#include <com/sun/star/sdbc/XRowSet.hpp>
#include <comphelper/processfactory.hxx>
#include <comphelper/types.hxx>
#include <com/sun/star/sdb/CommandType.hpp>
#include <unotools/configitem.hxx>
#include <mailmergehelper.hxx>
#include <swunohelper.hxx>
#ifndef _DBMGR_HXX
#include <dbmgr.hxx>
#endif
#ifndef _VIEW_HXX
#include <view.hxx>
#endif
#include <wrtsh.hxx>
#include <dbui.hrc>
#include <vector>
#include <unomid.h>
#define _SVSTDARR_STRINGSDTOR
#include <svl/svstdarr.hxx>
using namespace utl;
using ::rtl::OUString;
using namespace ::com::sun::star;
using namespace ::com::sun::star::uno;
using namespace ::com::sun::star::lang;
using namespace ::com::sun::star::beans;
using namespace ::com::sun::star::sdb;
using namespace ::com::sun::star::sdbc;
using namespace ::com::sun::star::sdbcx;
const char* cAddressDataAssignments = "AddressDataAssignments";
const char* cDBColumnAssignments = "DBColumnAssignments";
const char* cDataSourceName = "DataSource/DataSourceName";
const char* cDataTableName = "DataSource/DataTableName" ;
const char* cDataCommandType = "DataSource/DataCommandType";
#define SECURE_PORT 465
#define DEFAULT_PORT 25
#define POP_PORT 110
/*-- 16.04.2004 09:41:36---------------------------------------------------
-----------------------------------------------------------------------*/
struct DBAddressDataAssignment
{
SwDBData aDBData;
Sequence< ::rtl::OUString> aDBColumnAssignments;
//if loaded the name of the node has to be saved
::rtl::OUString sConfigNodeName;
//all created or changed assignments need to be stored
bool bColumnAssignmentsChanged;
DBAddressDataAssignment() :
bColumnAssignmentsChanged(false)
{}
};
/*-- 16.04.2004 09:43:29---------------------------------------------------
-----------------------------------------------------------------------*/
class SwMailMergeConfigItem_Impl : public utl::ConfigItem
{
friend class SwMailMergeConfigItem;
Reference< XDataSource> xSource;
SharedConnection xConnection;
Reference< XColumnsSupplier> xColumnsSupplier;
Reference< XStatement> xStatement;
Reference< XResultSet> xResultSet;
SwDBData aDBData;
::rtl::OUString sFilter;
sal_Int32 nResultSetCursorPos;
::std::vector<DBAddressDataAssignment> aAddressDataAssignments;
::std::vector< ::rtl::OUString> aAddressBlocks;
sal_Int32 nCurrentAddressBlock;
sal_Bool bIsAddressBlock;
sal_Bool bIsHideEmptyParagraphs;
sal_Bool bIsOutputToLetter;
sal_Bool bIncludeCountry;
::rtl::OUString sExcludeCountry;
sal_Bool bIsGreetingLine;
sal_Bool bIsIndividualGreetingLine;
::std::vector< ::rtl::OUString> aFemaleGreetingLines;
sal_Int32 nCurrentFemaleGreeting;
::std::vector< ::rtl::OUString> aMaleGreetingLines;
sal_Int32 nCurrentMaleGreeting;
::std::vector< ::rtl::OUString> aNeutralGreetingLines;
sal_Int32 nCurrentNeutralGreeting;
::rtl::OUString sFemaleGenderValue;
uno::Sequence< ::rtl::OUString> aSavedDocuments;
sal_Bool bIsGreetingLineInMail;
sal_Bool bIsIndividualGreetingLineInMail;
//mail settings
::rtl::OUString sMailDisplayName;
::rtl::OUString sMailAddress;
::rtl::OUString sMailReplyTo;
::rtl::OUString sMailServer;
::rtl::OUString sMailUserName;
::rtl::OUString sMailPassword;
sal_Bool bIsSMPTAfterPOP;
::rtl::OUString sInServerName;
sal_Int16 nInServerPort;
sal_Bool bInServerPOP;
::rtl::OUString sInServerUserName;
::rtl::OUString sInServerPassword;
sal_Int16 nMailPort;
sal_Bool bIsMailReplyTo;
sal_Bool bIsDefaultPort;
sal_Bool bIsSecureConnection;
sal_Bool bIsAuthentication;
sal_Bool bIsEMailSupported;
ResStringArray m_AddressHeaderSA;
//these addresses are not stored in the configuration
::std::vector< SwDocMergeInfo > aMergeInfos;
//we do overwrite the usersettings in a special case
//than we do remind the usersettings here
sal_Bool bUserSettingWereOverwritten;
sal_Bool bIsAddressBlock_LastUserSetting;
sal_Bool bIsGreetingLineInMail_LastUserSetting;
sal_Bool bIsGreetingLine_LastUserSetting;
const Sequence< ::rtl::OUString>& GetPropertyNames();
public:
SwMailMergeConfigItem_Impl();
~SwMailMergeConfigItem_Impl();
virtual void Commit();
virtual void Notify( const ::com::sun::star::uno::Sequence< rtl::OUString >& aPropertyNames );
const Sequence< ::rtl::OUString>
GetAddressBlocks(sal_Bool bConvertToConfig = sal_False) const;
void SetAddressBlocks(
const Sequence< ::rtl::OUString>& rBlocks,
sal_Bool bConvertFromConfig = sal_False);
const uno::Sequence< ::rtl::OUString>
GetGreetings(SwMailMergeConfigItem::Gender eType,
sal_Bool bConvertToConfig = sal_False) const;
void SetGreetings(SwMailMergeConfigItem::Gender eType,
const uno::Sequence< ::rtl::OUString>& rBlocks,
sal_Bool bConvertFromConfig = sal_False);
void SetCurrentAddressBlockIndex( sal_Int32 nSet );
sal_Int32 GetCurrentAddressBlockIndex() const
{ return nCurrentAddressBlock; }
sal_Int32 GetCurrentGreeting(SwMailMergeConfigItem::Gender eType) const;
void SetCurrentGreeting(SwMailMergeConfigItem::Gender eType, sal_Int32 nIndex);
};
/*-- 06.05.2004 12:51:54---------------------------------------------------
-----------------------------------------------------------------------*/
SwMailMergeConfigItem_Impl::SwMailMergeConfigItem_Impl() :
ConfigItem(C2U("Office.Writer/MailMergeWizard"), 0),
nResultSetCursorPos(-1),
nCurrentAddressBlock(0),
bIsAddressBlock(sal_True),
bIsHideEmptyParagraphs(sal_False),
bIsOutputToLetter(sal_True),
bIncludeCountry(sal_False),
bIsGreetingLine(sal_True),
nCurrentFemaleGreeting(0),
nCurrentMaleGreeting(0),
nCurrentNeutralGreeting(0),
bIsSMPTAfterPOP(sal_False),
nInServerPort( POP_PORT ),
bInServerPOP( sal_True ),
nMailPort(0),
bIsMailReplyTo(sal_False),
bIsDefaultPort(sal_False),
bIsSecureConnection(sal_False),
bIsAuthentication(sal_False),
bIsEMailSupported(sal_False),
m_AddressHeaderSA( SW_RES( SA_ADDRESS_HEADER )),
bUserSettingWereOverwritten(sal_False),
bIsAddressBlock_LastUserSetting(sal_False),
bIsGreetingLineInMail_LastUserSetting(sal_False),
bIsGreetingLine_LastUserSetting(sal_False)
{
const Sequence<OUString>& rNames = GetPropertyNames();
Sequence<Any> aValues = GetProperties(rNames);
const Any* pValues = aValues.getConstArray();
DBG_ASSERT(aValues.getLength() == rNames.getLength(), "GetProperties failed");
if(aValues.getLength() == rNames.getLength())
{
for(int nProp = 0; nProp < rNames.getLength(); nProp++)
{
switch(nProp)
{
case 0: pValues[nProp] >>= bIsOutputToLetter; break;
case 1: pValues[nProp] >>= bIncludeCountry; break;
case 2: pValues[nProp] >>= sExcludeCountry; break;
case 3:
{
Sequence< ::rtl::OUString> aBlocks;
pValues[nProp] >>= aBlocks;
SetAddressBlocks(aBlocks, sal_True);
}
break;
case 4: pValues[nProp] >>= bIsAddressBlock; break;
case 5: pValues[nProp] >>= bIsGreetingLine; break;
case 6: pValues[nProp] >>= bIsIndividualGreetingLine; break;
case 7 :
case 8 :
case 9 :
{
Sequence< ::rtl::OUString> aGreetings;
pValues[nProp] >>= aGreetings;
SetGreetings(SwMailMergeConfigItem::Gender(
SwMailMergeConfigItem::FEMALE + nProp - 7), aGreetings, sal_True);
}
break;
case 10: pValues[nProp] >>= nCurrentFemaleGreeting; break;
case 11: pValues[nProp] >>= nCurrentMaleGreeting; break;
case 12: pValues[nProp] >>= nCurrentNeutralGreeting; break;
case 13: pValues[nProp] >>= sFemaleGenderValue; break;
case 14: pValues[nProp] >>= sMailDisplayName; break;
case 15: pValues[nProp] >>= sMailAddress; break;
case 16: pValues[nProp] >>= bIsMailReplyTo; break;
case 17: pValues[nProp] >>= sMailReplyTo; break;
case 18: pValues[nProp] >>= sMailServer; break;
case 19:
bIsDefaultPort =
(pValues[nProp] >>= nMailPort) ?
sal_False : sal_True;
break;
case 20: pValues[nProp] >>= bIsSecureConnection; break;
case 21: pValues[nProp] >>= bIsAuthentication; break;
case 22: pValues[nProp] >>= sMailUserName; break;
case 23: pValues[nProp] >>= sMailPassword; break;
case 24 :pValues[nProp] >>= aDBData.sDataSource; break;
case 25 :pValues[nProp] >>= aDBData.sCommand; break;
case 26 :
{
short nTemp = 0;
if(pValues[nProp] >>= nTemp)
aDBData.nCommandType = nTemp;
}
break;
case 27: pValues[nProp] >>= sFilter; break;
case 28: pValues[nProp] >>= aSavedDocuments; break;
case 29:
pValues[nProp] >>= bIsEMailSupported;
break;
case 30: pValues[nProp] >>= bIsGreetingLineInMail; break;
case 31: pValues[nProp] >>= bIsIndividualGreetingLineInMail; break;
case 32: pValues[nProp] >>= bIsSMPTAfterPOP; break;
case 33: pValues[nProp] >>= sInServerName; break;
case 34: pValues[nProp] >>= nInServerPort; break;
case 35: pValues[nProp] >>= bInServerPOP; break;
case 36: pValues[nProp] >>= sInServerUserName; break;
case 37: pValues[nProp] >>= sInServerPassword; break;
case 38: pValues[nProp] >>= bIsHideEmptyParagraphs; break;
case 39: pValues[nProp] >>= nCurrentAddressBlock; break;
}
}
}
//read the list of data base assignments
Sequence<OUString> aAssignments = GetNodeNames(C2U(cAddressDataAssignments));
if(aAssignments.getLength())
{
//create a list of property names to load the URLs of all data bases
const OUString* pAssignments = aAssignments.getConstArray();
Sequence< ::rtl::OUString > aAssignProperties(4 * aAssignments.getLength());
::rtl::OUString* pAssignProperties = aAssignProperties.getArray();
sal_Int32 nAssign;
OUString sSlash = C2U("/");
for(nAssign = 0; nAssign < aAssignProperties.getLength(); nAssign += 4)
{
String sAssignPath = C2U(cAddressDataAssignments);
sAssignPath += '/';
sAssignPath += String(pAssignments[nAssign / 4]);
sAssignPath += '/';
pAssignProperties[nAssign] = sAssignPath;
pAssignProperties[nAssign] += C2U(cDataSourceName);
pAssignProperties[nAssign + 1] = sAssignPath;
pAssignProperties[nAssign + 1] += C2U(cDataTableName);
pAssignProperties[nAssign + 2] = sAssignPath;
pAssignProperties[nAssign + 2] += C2U(cDataCommandType);
pAssignProperties[nAssign + 3] = sAssignPath;
pAssignProperties[nAssign + 3] += C2U(cDBColumnAssignments);
}
Sequence<Any> aAssignValues = GetProperties(aAssignProperties);
const Any* pAssignValues = aAssignValues.getConstArray();
for(nAssign = 0; nAssign < aAssignValues.getLength(); nAssign += 4 )
{
DBAddressDataAssignment aAssignment;
pAssignValues[nAssign] >>= aAssignment.aDBData.sDataSource;
pAssignValues[nAssign + 1] >>= aAssignment.aDBData.sCommand;
pAssignValues[nAssign + 2] >>= aAssignment.aDBData.nCommandType;
pAssignValues[nAssign + 3] >>= aAssignment.aDBColumnAssignments;
aAssignment.sConfigNodeName = pAssignments[nAssign / 4];
aAddressDataAssignments.push_back(aAssignment);
}
}
//check if the saved documents still exist
if(aSavedDocuments.getLength())
{
uno::Sequence< ::rtl::OUString > aTempDocuments(aSavedDocuments.getLength());
::rtl::OUString* pTempDocuments = aTempDocuments.getArray();
sal_Int32 nIndex = 0;
for(sal_Int32 i = 0; i < aSavedDocuments.getLength(); ++i)
{
if(SWUnoHelper::UCB_IsFile( aSavedDocuments[i] ))
{
pTempDocuments[nIndex++] = aSavedDocuments[i];
}
}
if(nIndex < aSavedDocuments.getLength())
{
aSavedDocuments = aTempDocuments;
aSavedDocuments.realloc(nIndex);
}
}
}
/*-- 06.05.2004 12:51:54---------------------------------------------------
-----------------------------------------------------------------------*/
SwMailMergeConfigItem_Impl::~SwMailMergeConfigItem_Impl()
{
}
/*-- 13.03.2006 12:12:59---------------------------------------------------
-----------------------------------------------------------------------*/
void SwMailMergeConfigItem_Impl::SetCurrentAddressBlockIndex( sal_Int32 nSet )
{
if(aAddressBlocks.size() >= sal::static_int_cast<sal_uInt32, sal_Int32>(nSet))
{
nCurrentAddressBlock = nSet;
SetModified();
}
}
/*-- 16.04.2004 13:06:07---------------------------------------------------
-----------------------------------------------------------------------*/
OUString lcl_CreateNodeName(Sequence<OUString>& rAssignments )
{
const OUString* pNames = rAssignments.getConstArray();
sal_Int32 nStart = rAssignments.getLength();
OUString sNewName;
bool bFound;
do
{
bFound = false;
sNewName = C2U("_");
sNewName += OUString::valueOf(nStart);
//search if the name exists
for(sal_Int32 nAssign = 0; nAssign < rAssignments.getLength(); ++nAssign)
{
if(pNames[nAssign] == sNewName)
{
bFound = true;
++nStart;
break;
}
}
}
while(bFound);
// add the new name to the array of existing names
rAssignments.realloc(rAssignments.getLength() + 1);
rAssignments.getArray()[rAssignments.getLength() - 1] = sNewName;
return sNewName;
}
// --------------------------------------------------------------------------------
void lcl_ConvertToNumbers(OUString& rBlock, const ResStringArray& rHeaders )
{
//convert the strings used for UI to numbers used for the configuration
String sBlock(rBlock);
sBlock.SearchAndReplaceAllAscii("\n", String::CreateFromAscii("\\n"));
for(sal_uInt16 i = 0; i < rHeaders.Count(); ++i)
{
String sHeader = rHeaders.GetString( i );
sHeader.Insert('<', 0);
sHeader += '>';
String sReplace(C2U("<>"));
sReplace.Insert('0' + i, 1);
sBlock.SearchAndReplaceAll(sHeader, sReplace);
}
rBlock = sBlock;
}
// --------------------------------------------------------------------------------
void lcl_ConvertFromNumbers(OUString& rBlock, const ResStringArray& rHeaders)
{
//convert the numbers used for the configuration to strings used for UI to numbers
//doesn't use ReplaceAll to prevent expansion of numbers inside of the headers
String sBlock(rBlock);
sBlock.SearchAndReplaceAllAscii("\\n", '\n');
SwAddressIterator aGreetingIter(sBlock);
sBlock.Erase();
while(aGreetingIter.HasMore())
{
SwMergeAddressItem aNext = aGreetingIter.Next();
if(aNext.bIsColumn)
{
//the text should be 1 characters long
sal_Unicode cChar = aNext.sText.GetChar(0);
if(cChar >= '0' && cChar <= 'c')
{
sBlock += '<';
sal_uInt16 nHeader = cChar - '0';
if(nHeader < rHeaders.Count())
sBlock += rHeaders.GetString( nHeader );
sBlock += '>';
}
else
{
DBG_ERROR("parse error in address block or greeting line");
}
}
else
sBlock += aNext.sText;
}
rBlock = sBlock;
}
/*--------------------------------------------------------------------
--------------------------------------------------------------------*/
const Sequence<OUString>& SwMailMergeConfigItem_Impl::GetPropertyNames()
{
static Sequence<OUString> aNames;
if(!aNames.getLength())
{
static const char* aPropNames[] =
{
"OutputToLetter", // 0
"IncludeCountry", // 1
"ExcludeCountry", // 2
"AddressBlockSettings", // 3
"IsAddressBlock", // 4
"IsGreetingLine", // 5
"IsIndividualGreetingLine", // 6
"FemaleGreetingLines", // 7
"MaleGreetingLines", // 8
"NeutralGreetingLines", // 9
"CurrentFemaleGreeting", // 10
"CurrentMaleGreeting", // 11
"CurrentNeutralGreeting", // 12
"FemaleGenderValue", // 13
"MailDisplayName", // 14
"MailAddress", // 15
"IsMailReplyTo", // 16
"MailReplyTo", // 17
"MailServer", // 18
"MailPort", // 19
"IsSecureConnection", // 20
"IsAuthentication", // 21
"MailUserName", // 22
"MailPassword", // 23
"DataSource/DataSourceName",// 24
"DataSource/DataTableName", // 25
"DataSource/DataCommandType",// 26
"Filter", // 27
"SavedDocuments", // 28
"EMailSupported", // 29
"IsEMailGreetingLine", //30
"IsEMailIndividualGreetingLine", //31
"IsSMPTAfterPOP", //32
"InServerName", //33
"InServerPort", //34
"InServerIsPOP", //35
"InServerUserName", //36
"InServerPassword", //37
"IsHideEmptyParagraphs", //38
"CurrentAddressBlock" //39
};
const int nCount = sizeof(aPropNames)/sizeof(const char*);
aNames.realloc(nCount);
OUString* pNames = aNames.getArray();
for(int i = 0; i < nCount; i++)
pNames[i] = OUString::createFromAscii(aPropNames[i]);
}
return aNames;
}
/*-- 15.04.2004 08:48:39---------------------------------------------------
-----------------------------------------------------------------------*/
void SwMailMergeConfigItem_Impl::Notify( const ::com::sun::star::uno::Sequence< rtl::OUString >& ) {}
void SwMailMergeConfigItem_Impl::Commit()
{
Sequence<OUString> aNames = GetPropertyNames();
Sequence<Any> aValues(aNames.getLength());
Any* pValues = aValues.getArray();
for(int nProp = 0; nProp < aNames.getLength(); nProp++)
{
switch(nProp)
{
case 0: pValues[nProp] <<= bIsOutputToLetter; break;//
case 1: pValues[nProp] <<= bIncludeCountry; break;
case 2: pValues[nProp] <<= sExcludeCountry; break;
case 3: pValues[nProp] <<= GetAddressBlocks(sal_True); break;
case 4:
{
if( bUserSettingWereOverwritten == sal_True )
pValues[nProp] <<= bIsAddressBlock_LastUserSetting;
else
pValues[nProp] <<= bIsAddressBlock;
break;
}
case 5:
{
if( bUserSettingWereOverwritten == sal_True )
pValues[nProp] <<= bIsGreetingLine_LastUserSetting;
else
pValues[nProp] <<= bIsGreetingLine;
break;
}
case 6: pValues[nProp] <<= bIsIndividualGreetingLine; break;
case 7:
case 8:
case 9:
pValues[nProp] <<= GetGreetings(
SwMailMergeConfigItem::Gender(
SwMailMergeConfigItem::FEMALE + nProp - 7), sal_True);
break;
case 10: pValues[nProp] <<= nCurrentFemaleGreeting; break;
case 11: pValues[nProp] <<= nCurrentMaleGreeting; break;
case 12: pValues[nProp] <<= nCurrentNeutralGreeting; break;
case 13: pValues[nProp] <<= sFemaleGenderValue; break;
case 14: pValues[nProp] <<= sMailDisplayName; break;
case 15: pValues[nProp] <<= sMailAddress; break;
case 16: pValues[nProp] <<= bIsMailReplyTo; break;
case 17: pValues[nProp] <<= sMailReplyTo; break;
case 18: pValues[nProp] <<= sMailServer; break;
case 19: if(!bIsDefaultPort)
pValues[nProp] <<= nMailPort;
break;
case 20: pValues[nProp] <<= bIsSecureConnection; break;
case 21: pValues[nProp] <<= bIsAuthentication; break;
case 22: pValues[nProp] <<= sMailUserName; break;
case 23: pValues[nProp] <<= sMailPassword; break;
case 24 :pValues[nProp] <<= aDBData.sDataSource; break;
case 25 :pValues[nProp] <<= aDBData.sCommand; break;
case 26 :pValues[nProp] <<= (short)aDBData.nCommandType; break;
case 27 :pValues[nProp] <<= sFilter; break;
case 28 :pValues[nProp] <<= aSavedDocuments; break;
case 29: pValues[nProp] <<= bIsEMailSupported; break;
case 30:
{
if( bUserSettingWereOverwritten == sal_True )
pValues[nProp] <<= bIsGreetingLineInMail_LastUserSetting;
else
pValues[nProp] <<= bIsGreetingLineInMail;
break;
}
case 31: pValues[nProp] <<= bIsIndividualGreetingLineInMail; break;
case 32: pValues[nProp] <<= bIsSMPTAfterPOP; break;
case 33: pValues[nProp] <<= sInServerName; break;
case 34: pValues[nProp] <<= nInServerPort; break;
case 35: pValues[nProp] <<= bInServerPOP; break;
case 36: pValues[nProp] <<= sInServerUserName; break;
case 37: pValues[nProp] <<= sInServerPassword; break;
case 38: pValues[nProp] <<= bIsHideEmptyParagraphs; break;
case 39: pValues[nProp] <<= nCurrentAddressBlock; break;
}
}
PutProperties(aNames, aValues);
//store the changed / new assignments
//load the existing node names to find new names
Sequence<OUString> aAssignments = GetNodeNames(C2U(cAddressDataAssignments));
::std::vector<DBAddressDataAssignment>::iterator aAssignIter;
for(aAssignIter = aAddressDataAssignments.begin();
aAssignIter != aAddressDataAssignments.end(); aAssignIter++)
{
if(aAssignIter->bColumnAssignmentsChanged)
{
//create a new node name
OUString sNewNode = aAssignIter->sConfigNodeName.getLength() ?
aAssignIter->sConfigNodeName :
lcl_CreateNodeName(aAssignments);
OUString sSlash = C2U("/");
OUString sNodePath = C2U(cAddressDataAssignments);
sNodePath += sSlash;
sNodePath += sNewNode;
sNodePath += sSlash;
//only one new entry is written
Sequence< PropertyValue > aNewValues(4);
PropertyValue* pNewValues = aNewValues.getArray();
pNewValues[0].Name = sNodePath;
pNewValues[0].Name += C2U(cDataSourceName);
pNewValues[0].Value <<= aAssignIter->aDBData.sDataSource;
pNewValues[1].Name = sNodePath;
pNewValues[1].Name += C2U(cDataTableName);
pNewValues[1].Value <<= aAssignIter->aDBData.sCommand;
pNewValues[2].Name = sNodePath;
pNewValues[2].Name += C2U(cDataCommandType);
pNewValues[2].Value <<= aAssignIter->aDBData.nCommandType;
pNewValues[3].Name = sNodePath;
pNewValues[3].Name += C2U(cDBColumnAssignments);
pNewValues[3].Value <<= aAssignIter->aDBColumnAssignments;
SetSetProperties(C2U(cAddressDataAssignments), aNewValues);
}
}
bUserSettingWereOverwritten = sal_False;
}
/*-- 06.05.2004 13:04:36---------------------------------------------------
-----------------------------------------------------------------------*/
const Sequence< ::rtl::OUString> SwMailMergeConfigItem_Impl::GetAddressBlocks(
sal_Bool bConvertToConfig) const
{
Sequence< ::rtl::OUString> aRet(aAddressBlocks.size());
::rtl::OUString* pRet = aRet.getArray();
for(sal_uInt32 nBlock = 0; nBlock < aAddressBlocks.size(); nBlock++)
{
pRet[nBlock] = aAddressBlocks[nBlock];
if(bConvertToConfig)
lcl_ConvertToNumbers(pRet[nBlock], m_AddressHeaderSA);
}
return aRet;
}
/*-- 06.05.2004 13:04:36---------------------------------------------------
-----------------------------------------------------------------------*/
void SwMailMergeConfigItem_Impl::SetAddressBlocks(
const Sequence< ::rtl::OUString>& rBlocks,
sal_Bool bConvertFromConfig)
{
aAddressBlocks.clear();
for(sal_Int32 nBlock = 0; nBlock < rBlocks.getLength(); nBlock++)
{
OUString sBlock = rBlocks[nBlock];
if(bConvertFromConfig)
lcl_ConvertFromNumbers(sBlock, m_AddressHeaderSA);
aAddressBlocks.push_back(sBlock);
}
nCurrentAddressBlock = 0;
SetModified();
}
/*-- 30.04.2004 11:04:52---------------------------------------------------
-----------------------------------------------------------------------*/
const Sequence< ::rtl::OUString> SwMailMergeConfigItem_Impl::GetGreetings(
SwMailMergeConfigItem::Gender eType, sal_Bool bConvertToConfig) const
{
const ::std::vector< ::rtl::OUString>& rGreetings =
eType == SwMailMergeConfigItem::FEMALE ? aFemaleGreetingLines :
eType == SwMailMergeConfigItem::MALE ? aMaleGreetingLines :
aNeutralGreetingLines;
Sequence< ::rtl::OUString> aRet(rGreetings.size());
::rtl::OUString* pRet = aRet.getArray();
for(sal_uInt32 nGreeting = 0; nGreeting < rGreetings.size(); nGreeting++)
{
pRet[nGreeting] = rGreetings[nGreeting];
if(bConvertToConfig)
lcl_ConvertToNumbers(pRet[nGreeting], m_AddressHeaderSA);
}
return aRet;
}
/*-- 30.04.2004 11:04:52---------------------------------------------------
-----------------------------------------------------------------------*/
void SwMailMergeConfigItem_Impl::SetGreetings(
SwMailMergeConfigItem::Gender eType,
const Sequence< ::rtl::OUString>& rSetGreetings,
sal_Bool bConvertFromConfig)
{
::std::vector< ::rtl::OUString>& rGreetings =
eType == SwMailMergeConfigItem::FEMALE ? aFemaleGreetingLines :
eType == SwMailMergeConfigItem::MALE ? aMaleGreetingLines :
aNeutralGreetingLines;
rGreetings.clear();
for(sal_Int32 nGreeting = 0; nGreeting < rSetGreetings.getLength(); nGreeting++)
{
OUString sGreeting = rSetGreetings[nGreeting];
if(bConvertFromConfig)
lcl_ConvertFromNumbers(sGreeting, m_AddressHeaderSA);
rGreetings.push_back(sGreeting);
}
SetModified();
}
/*-- 11.05.2004 13:13:54---------------------------------------------------
-----------------------------------------------------------------------*/
sal_Int32 SwMailMergeConfigItem_Impl::GetCurrentGreeting(
SwMailMergeConfigItem::Gender eType) const
{
sal_Int32 nRet;
switch(eType)
{
case SwMailMergeConfigItem::FEMALE: nRet = nCurrentFemaleGreeting ; break;
case SwMailMergeConfigItem::MALE: nRet = nCurrentMaleGreeting ; break;
default: nRet = nCurrentNeutralGreeting; break;
}
return nRet;
}
/*-- 11.05.2004 13:13:54---------------------------------------------------
-----------------------------------------------------------------------*/
void SwMailMergeConfigItem_Impl::SetCurrentGreeting(
SwMailMergeConfigItem::Gender eType, sal_Int32 nIndex)
{
bool bChanged = false;
switch(eType)
{
case SwMailMergeConfigItem::FEMALE:
bChanged = nCurrentFemaleGreeting != nIndex;
nCurrentFemaleGreeting = nIndex;
break;
case SwMailMergeConfigItem::MALE:
bChanged = nCurrentMaleGreeting != nIndex;
nCurrentMaleGreeting = nIndex;
break;
default:
bChanged = nCurrentNeutralGreeting != nIndex;
nCurrentNeutralGreeting = nIndex;
}
if(bChanged)
SetModified();
}
static SwMailMergeConfigItem_Impl* pOptions = NULL;
static sal_Int32 nRefCount = 0;
static ::osl::Mutex aMutex;
/*-- 15.04.2004 08:42:43---------------------------------------------------
-----------------------------------------------------------------------*/
SwMailMergeConfigItem::SwMailMergeConfigItem() :
m_bAddressInserted(false),
m_bMergeDone(false),
m_bGreetingInserted(false),
m_nGreetingMoves(0),
m_nStartPrint(0),
m_nEndPrint(0),
m_pSourceView(0),
m_pTargetView(0)
{
// Global access, must be guarded (multithreading)
::osl::MutexGuard aGuard( aMutex );
if ( !pOptions )
pOptions = new SwMailMergeConfigItem_Impl;
++nRefCount;
m_pImpl = pOptions;
}
/*-- 15.04.2004 08:43:36---------------------------------------------------
-----------------------------------------------------------------------*/
SwMailMergeConfigItem::~SwMailMergeConfigItem()
{
// Global access, must be guarded (multithreading)
::osl::MutexGuard aGuard( aMutex );
if ( !--nRefCount )
{
DELETEZ( pOptions );
}
}
/*-- 06.05.2004 14:18:10---------------------------------------------------
-----------------------------------------------------------------------*/
void SwMailMergeConfigItem::Commit()
{
if(m_pImpl->IsModified())
m_pImpl->Commit();
}
/*-- 06.05.2004 12:59:50---------------------------------------------------
-----------------------------------------------------------------------*/
const ResStringArray& SwMailMergeConfigItem::GetDefaultAddressHeaders() const
{
return m_pImpl->m_AddressHeaderSA;
}
/*-- 27.04.2004 14:34:16---------------------------------------------------
-----------------------------------------------------------------------*/
void SwMailMergeConfigItem::SetAddressBlocks(
const Sequence< ::rtl::OUString>& rBlocks)
{
m_pImpl->SetAddressBlocks(rBlocks);
}
/*-- 27.04.2004 14:34:16---------------------------------------------------
-----------------------------------------------------------------------*/
const Sequence< ::rtl::OUString> SwMailMergeConfigItem::GetAddressBlocks() const
{
return m_pImpl->GetAddressBlocks();
}
/*-- 11.05.2004 17:08:45---------------------------------------------------
-----------------------------------------------------------------------*/
sal_Bool SwMailMergeConfigItem::IsAddressBlock()const
{
return m_pImpl->bIsAddressBlock && IsOutputToLetter();
}
/*-- 11.05.2004 17:08:46---------------------------------------------------
-----------------------------------------------------------------------*/
void SwMailMergeConfigItem::SetAddressBlock(sal_Bool bSet)
{
m_pImpl->bUserSettingWereOverwritten = sal_False;
if(m_pImpl->bIsAddressBlock != bSet)
{
m_pImpl->bIsAddressBlock = bSet;
m_pImpl->SetModified();
}
}
/*-- 30.08.2005 15:09:46---------------------------------------------------
-----------------------------------------------------------------------*/
sal_Bool SwMailMergeConfigItem::IsHideEmptyParagraphs() const
{
return m_pImpl->bIsHideEmptyParagraphs;
}
/*-- 30.08.2005 15:09:47---------------------------------------------------
-----------------------------------------------------------------------*/
void SwMailMergeConfigItem::SetHideEmptyParagraphs(sal_Bool bSet)
{
if(m_pImpl->bIsHideEmptyParagraphs != bSet)
{
m_pImpl->bIsHideEmptyParagraphs = bSet;
m_pImpl->SetModified();
}
}
/*-- 28.04.2004 13:00:02---------------------------------------------------
-----------------------------------------------------------------------*/
sal_Bool SwMailMergeConfigItem::IsIncludeCountry() const
{
return m_pImpl->bIncludeCountry;
}
/*-- 28.04.2004 13:00:02---------------------------------------------------
-----------------------------------------------------------------------*/
rtl::OUString& SwMailMergeConfigItem::GetExcludeCountry() const
{
return m_pImpl->sExcludeCountry;
}
/*-- 28.04.2004 13:00:02---------------------------------------------------
-----------------------------------------------------------------------*/
void SwMailMergeConfigItem::SetCountrySettings(sal_Bool bSet, const rtl::OUString& rCountry)
{
if(m_pImpl->sExcludeCountry != rCountry ||
m_pImpl->bIncludeCountry != bSet)
{
m_pImpl->bIncludeCountry = bSet;
m_pImpl->sExcludeCountry = bSet ? rCountry : OUString();
m_pImpl->SetModified();
}
}
/*-- 28.04.2004 15:35:16---------------------------------------------------
-----------------------------------------------------------------------*/
void SwMailMergeConfigItem::SetCurrentConnection(
Reference< XDataSource> xSource,
SharedConnection xConnection,
Reference< XColumnsSupplier> xColumnsSupplier,
const SwDBData& rDBData)
{
m_pImpl->xSource = xSource ;
m_pImpl->xConnection = xConnection ;
m_pImpl->xColumnsSupplier = xColumnsSupplier;
m_pImpl->aDBData = rDBData;
m_pImpl->xResultSet = 0;
m_pImpl->nResultSetCursorPos = 0;
m_pImpl->SetModified();
}
/*-- 28.04.2004 15:38:11---------------------------------------------------
-----------------------------------------------------------------------*/
Reference< XDataSource> SwMailMergeConfigItem::GetSource()
{
return m_pImpl->xSource;
}
/*-- 28.04.2004 15:38:11---------------------------------------------------
-----------------------------------------------------------------------*/
SharedConnection SwMailMergeConfigItem::GetConnection()
{
return m_pImpl->xConnection;
}
/*-- 28.04.2004 15:38:11---------------------------------------------------
-----------------------------------------------------------------------*/
Reference< XColumnsSupplier> SwMailMergeConfigItem::GetColumnsSupplier()
{
if(!m_pImpl->xColumnsSupplier.is() && m_pImpl->xConnection.is())
{
m_pImpl->xColumnsSupplier = SwNewDBMgr::GetColumnSupplier(m_pImpl->xConnection,
m_pImpl->aDBData.sCommand,
m_pImpl->aDBData.nCommandType == CommandType::TABLE ?
SW_DB_SELECT_TABLE : SW_DB_SELECT_QUERY );
}
return m_pImpl->xColumnsSupplier;
}
/*-- 30.04.2004 14:30:55---------------------------------------------------
-----------------------------------------------------------------------*/
const SwDBData& SwMailMergeConfigItem::GetCurrentDBData() const
{
return m_pImpl->aDBData;
}
/*-- 17.06.2004 13:18:47---------------------------------------------------
-----------------------------------------------------------------------*/
void SwMailMergeConfigItem::SetCurrentDBData( const SwDBData& rDBData)
{
if(m_pImpl->aDBData != rDBData)
{
m_pImpl->aDBData = rDBData;
m_pImpl->xConnection.clear();
m_pImpl->xSource = 0;
m_pImpl->xColumnsSupplier = 0;
m_pImpl->SetModified();
}
}
/*-- 29.04.2004 11:34:36---------------------------------------------------
-----------------------------------------------------------------------*/
Reference< XResultSet> SwMailMergeConfigItem::GetResultSet() const
{
if(!m_pImpl->xConnection.is() && m_pImpl->aDBData.sDataSource.getLength())
{
m_pImpl->xConnection.reset(
SwNewDBMgr::GetConnection( m_pImpl->aDBData.sDataSource, m_pImpl->xSource ),
SharedConnection::TakeOwnership
);
}
if(!m_pImpl->xResultSet.is() && m_pImpl->xConnection.is())
{
try
{
Reference< XMultiServiceFactory > xMgr( ::comphelper::getProcessServiceFactory() );
if( xMgr.is() )
{
Reference<XRowSet> xRowSet(
xMgr->createInstance(C2U("com.sun.star.sdb.RowSet")), UNO_QUERY);
Reference<XPropertySet> xRowProperties(xRowSet, UNO_QUERY);
xRowProperties->setPropertyValue(C2U("DataSourceName"), makeAny(m_pImpl->aDBData.sDataSource));
xRowProperties->setPropertyValue(C2U("Command"), makeAny(m_pImpl->aDBData.sCommand));
xRowProperties->setPropertyValue(C2U("CommandType"), makeAny(m_pImpl->aDBData.nCommandType));
xRowProperties->setPropertyValue(C2U("FetchSize"), makeAny((sal_Int32)10));
xRowProperties->setPropertyValue(C2U("ActiveConnection"), makeAny(m_pImpl->xConnection.getTyped()));
try
{
xRowProperties->setPropertyValue(C2U("ApplyFilter"), makeAny(m_pImpl->sFilter.getLength()>0));
xRowProperties->setPropertyValue(C2U("Filter"), makeAny(m_pImpl->sFilter));
}
catch(Exception&)
{
DBG_ERROR("exception caught in xResultSet->SetFilter()");
}
xRowSet->execute();
m_pImpl->xResultSet = xRowSet.get();
m_pImpl->xResultSet->first();
m_pImpl->nResultSetCursorPos = 1;
}
}
catch(Exception& )
{
DBG_ERROR("exception caught in: SwMailMergeConfigItem::GetResultSet() ");
}
}
return m_pImpl->xResultSet;
}
/*-- 13.08.2004 11:49:46---------------------------------------------------
-----------------------------------------------------------------------*/
void SwMailMergeConfigItem::DisposeResultSet()
{
m_pImpl->xConnection.clear();
if(m_pImpl->xResultSet.is())
{
::comphelper::disposeComponent( m_pImpl->xResultSet );
}
}
/*-- 14.05.2004 15:07:55---------------------------------------------------
-----------------------------------------------------------------------*/
::rtl::OUString& SwMailMergeConfigItem::GetFilter() const
{
return m_pImpl->sFilter;
}
/*-- 14.05.2004 15:07:55---------------------------------------------------
-----------------------------------------------------------------------*/
void SwMailMergeConfigItem::SetFilter(::rtl::OUString& rFilter)
{
if(m_pImpl->sFilter != rFilter)
{
m_pImpl->sFilter = rFilter;
m_pImpl->SetModified();
Reference<XPropertySet> xRowProperties(m_pImpl->xResultSet, UNO_QUERY);
if(xRowProperties.is())
{
try
{
xRowProperties->setPropertyValue(C2U("ApplyFilter"), makeAny(m_pImpl->sFilter.getLength()>0));
xRowProperties->setPropertyValue(C2U("Filter"), makeAny(m_pImpl->sFilter));
uno::Reference<XRowSet> xRowSet( m_pImpl->xResultSet, UNO_QUERY_THROW );
xRowSet->execute();
}
catch(Exception&)
{
DBG_ERROR("exception caught in SwMailMergeConfigItem::SetFilter()");
}
}
}
}
/*-- 29.04.2004 11:55:38---------------------------------------------------
-----------------------------------------------------------------------*/
sal_Int32 SwMailMergeConfigItem::MoveResultSet(sal_Int32 nTarget)
{
if(!m_pImpl->xResultSet.is())
GetResultSet();
if(m_pImpl->xResultSet.is())
{
try
{
//no action if the resultset is already at the right position
if(m_pImpl->xResultSet->getRow() != nTarget)
{
if(nTarget > 0)
{
sal_Bool bMoved = m_pImpl->xResultSet->absolute(nTarget);
if(!bMoved)
{
if(nTarget > 1)
m_pImpl->xResultSet->last();
else if(nTarget == 1)
m_pImpl->xResultSet->first();
}
}
else if(nTarget == -1)
m_pImpl->xResultSet->last();
m_pImpl->nResultSetCursorPos = m_pImpl->xResultSet->getRow();
}
}
catch(Exception&)
{
}
}
return m_pImpl->nResultSetCursorPos;
}
/*-- 27.05.2004 13:56:18---------------------------------------------------
-----------------------------------------------------------------------*/
bool SwMailMergeConfigItem::IsResultSetFirstLast(bool& bIsFirst, bool& bIsLast)
{
bool bRet = false;
if(!m_pImpl->xResultSet.is())
GetResultSet();
if(m_pImpl->xResultSet.is())
{
try
{
bIsFirst = m_pImpl->xResultSet->isFirst();
bIsLast = m_pImpl->xResultSet->isLast();
bRet = true;
}
catch(Exception&)
{
}
}
return bRet;
}
/*-- 29.04.2004 11:55:38---------------------------------------------------
-----------------------------------------------------------------------*/
sal_Int32 SwMailMergeConfigItem::GetResultSetPosition() const
{
return m_pImpl->nResultSetCursorPos;
}
/*-- 27.05.2004 14:49:53---------------------------------------------------
-----------------------------------------------------------------------*/
bool SwMailMergeConfigItem::IsRecordExcluded(sal_Int32 nRecord)
{
bool bRet = false;
if(nRecord > 0 && nRecord < m_aSelection.getLength())
{
sal_Int32 nTemp = 0;
m_aSelection[nRecord - 1] >>= nTemp;
bRet = nTemp < 1;
}
return bRet;
}
/*-- 27.05.2004 14:49:53---------------------------------------------------
-----------------------------------------------------------------------*/
void SwMailMergeConfigItem::ExcludeRecord(sal_Int32 nRecord, bool bExclude)
{
//nRecord is based on 1
//the selection array contains Anys for all records
//excluded records contain a '-1'
if(!m_aSelection.getLength() || nRecord > m_aSelection.getLength())
{
if(bExclude)
{
//if no selection array is available we need to create one containing the
//entries for all available records
if(!m_pImpl->xResultSet.is())
GetResultSet();
if(m_pImpl->xResultSet.is())
{
m_pImpl->xResultSet->last();
sal_Int32 nEnd = m_pImpl->xResultSet->getRow();
sal_Int32 nStart = m_aSelection.getLength();
m_aSelection.realloc(nEnd);
Any* pSelection = m_aSelection.getArray();
for(sal_Int32 nIndex = nStart; nIndex < nEnd; ++nIndex)
{
if((nRecord - 1) != nIndex)
pSelection[nIndex] <<= nIndex + 1;
else
pSelection[nIndex] <<= (sal_Int32) -1;
}
}
}
}
else
{
if(nRecord > 0 && m_aSelection.getLength() > nRecord)
{
m_aSelection[nRecord - 1] <<= bExclude ? -1 : nRecord;
}
}
}
/*-- 27.05.2004 15:08:35---------------------------------------------------
-----------------------------------------------------------------------*/
Sequence< Any > SwMailMergeConfigItem::GetSelection() const
{
Sequence< Any > aRet(m_aSelection.getLength());
sal_Int32 nRetIndex = 0;
sal_Int32 nRet;
for(sal_Int32 nIndex = 0; nIndex < m_aSelection.getLength(); ++nIndex)
{
m_aSelection[nIndex] >>= nRet;
if(nRet > 0)
{
aRet[nRetIndex] <<= nRet;
++nRetIndex;
}
}
aRet.realloc(nRetIndex);
return aRet;
}
/*-- 16.06.2004 15:15:56---------------------------------------------------
-----------------------------------------------------------------------*/
const uno::Sequence< ::rtl::OUString>&
SwMailMergeConfigItem::GetSavedDocuments() const
{
return m_pImpl->aSavedDocuments;
}
/*-- 16.06.2004 15:15:56---------------------------------------------------
-----------------------------------------------------------------------*/
void SwMailMergeConfigItem::AddSavedDocument(::rtl::OUString rName)
{
const ::rtl::OUString* pDocs = m_pImpl->aSavedDocuments.getConstArray();
bool bFound = false;
for(sal_Int32 nDoc = 0; nDoc < m_pImpl->aSavedDocuments.getLength(); ++nDoc)
{
if(pDocs[nDoc] == rName)
{
bFound = true;
break;
}
}
if(!bFound)
{
m_pImpl->aSavedDocuments.realloc(m_pImpl->aSavedDocuments.getLength() + 1);
m_pImpl->aSavedDocuments[m_pImpl->aSavedDocuments.getLength() - 1] = rName;
}
}
/*-- 28.04.2004 16:15:16---------------------------------------------------
-----------------------------------------------------------------------*/
sal_Bool SwMailMergeConfigItem::IsOutputToLetter()const
{
return m_pImpl->bIsOutputToLetter || !IsMailAvailable();
}
/*-- 28.04.2004 16:15:16---------------------------------------------------
-----------------------------------------------------------------------*/
void SwMailMergeConfigItem::SetOutputToLetter(sal_Bool bSet)
{
if(m_pImpl->bIsOutputToLetter != bSet)
{
m_pImpl->bIsOutputToLetter = bSet;
m_pImpl->SetModified();
}
}
/*-- 30.04.2004 10:51:10---------------------------------------------------
-----------------------------------------------------------------------*/
sal_Bool SwMailMergeConfigItem::IsIndividualGreeting(sal_Bool bInEMail) const
{
return bInEMail ?
m_pImpl->bIsIndividualGreetingLineInMail :
m_pImpl->bIsIndividualGreetingLine;
}
/*-- 30.04.2004 10:51:10---------------------------------------------------
-----------------------------------------------------------------------*/
void SwMailMergeConfigItem::SetIndividualGreeting(
sal_Bool bSet, sal_Bool bInEMail)
{
if(bInEMail)
{
if(m_pImpl->bIsIndividualGreetingLineInMail != bSet)
{
m_pImpl->bIsIndividualGreetingLineInMail = bSet;
m_pImpl->SetModified();
}
}
else
{
if(m_pImpl->bIsIndividualGreetingLine != bSet)
{
m_pImpl->bIsIndividualGreetingLine = bSet;
m_pImpl->SetModified();
}
}
}
/*-- 30.04.2004 10:51:10---------------------------------------------------
-----------------------------------------------------------------------*/
sal_Bool SwMailMergeConfigItem::IsGreetingLine(sal_Bool bInEMail) const
{
return bInEMail ? m_pImpl->bIsGreetingLineInMail : m_pImpl->bIsGreetingLine;
}
/*-- 30.04.2004 10:51:10---------------------------------------------------
-----------------------------------------------------------------------*/
void SwMailMergeConfigItem::SetGreetingLine(sal_Bool bSet, sal_Bool bInEMail)
{
m_pImpl->bUserSettingWereOverwritten = sal_False;
if(bInEMail)
{
if(m_pImpl->bIsGreetingLineInMail != bSet)
{
m_pImpl->bIsGreetingLineInMail = bSet;
m_pImpl->SetModified();
}
}
else
{
if(m_pImpl->bIsGreetingLine != bSet)
{
m_pImpl->bIsGreetingLine = bSet;
m_pImpl->SetModified();
}
}
}
/*-- 30.04.2004 11:04:52---------------------------------------------------
-----------------------------------------------------------------------*/
const Sequence< ::rtl::OUString> SwMailMergeConfigItem::GetGreetings(
Gender eType ) const
{
return m_pImpl->GetGreetings(eType);
}
/*-- 30.04.2004 11:04:52---------------------------------------------------
-----------------------------------------------------------------------*/
void SwMailMergeConfigItem::SetGreetings(
Gender eType, const Sequence< ::rtl::OUString>& rSetGreetings)
{
m_pImpl->SetGreetings( eType, rSetGreetings);
}
/*-- 11.05.2004 13:10:54---------------------------------------------------
-----------------------------------------------------------------------*/
sal_Int32 SwMailMergeConfigItem::GetCurrentGreeting(
SwMailMergeConfigItem::Gender eType) const
{
return m_pImpl->GetCurrentGreeting(eType);
}
/*-- 11.05.2004 13:10:55---------------------------------------------------
-----------------------------------------------------------------------*/
void SwMailMergeConfigItem::SetCurrentGreeting(Gender eType, sal_Int32 nIndex)
{
m_pImpl->SetCurrentGreeting(eType, nIndex);
}
/*-- 12.05.2004 12:29:59---------------------------------------------------
-----------------------------------------------------------------------*/
const ::rtl::OUString& SwMailMergeConfigItem::GetFemaleGenderValue() const
{
return m_pImpl->sFemaleGenderValue;
}
/*-- 12.05.2004 12:29:59---------------------------------------------------
-----------------------------------------------------------------------*/
void SwMailMergeConfigItem::SetFemaleGenderValue(const ::rtl::OUString rValue)
{
if( m_pImpl->sFemaleGenderValue != rValue )
{
m_pImpl->sFemaleGenderValue = rValue;
m_pImpl->SetModified();
}
}
/*-- 30.04.2004 13:25:41---------------------------------------------------
-----------------------------------------------------------------------*/
Sequence< ::rtl::OUString> SwMailMergeConfigItem::GetColumnAssignment(
const SwDBData& rDBData ) const
{
Sequence< ::rtl::OUString> aRet;
::std::vector<DBAddressDataAssignment>::iterator aAssignIter;
for(aAssignIter = m_pImpl->aAddressDataAssignments.begin();
aAssignIter != m_pImpl->aAddressDataAssignments.end(); aAssignIter++)
{
if(aAssignIter->aDBData == rDBData)
{
aRet = aAssignIter->aDBColumnAssignments;
break;
}
}
return aRet;
}
/*-- 21.05.2004 12:31:31---------------------------------------------------
returns the name that is assigned as e-mail column of the current data base
-----------------------------------------------------------------------*/
::rtl::OUString SwMailMergeConfigItem::GetAssignedColumn(sal_uInt32 nColumn) const
{
::rtl::OUString sRet;
Sequence< ::rtl::OUString> aAssignment = GetColumnAssignment( m_pImpl->aDBData );
if(aAssignment.getLength() > sal::static_int_cast< sal_Int32, sal_uInt32>(nColumn) && aAssignment[nColumn].getLength())
sRet = aAssignment[nColumn];
else if(nColumn < m_pImpl->m_AddressHeaderSA.Count())
sRet = m_pImpl->m_AddressHeaderSA.GetString(nColumn);
return sRet;
}
/*-- 30.04.2004 13:25:41---------------------------------------------------
-----------------------------------------------------------------------*/
void SwMailMergeConfigItem::SetColumnAssignment( const SwDBData& rDBData,
const Sequence< ::rtl::OUString>& rList)
{
::std::vector<DBAddressDataAssignment>::iterator aAssignIter;
sal_Bool bFound = sal_False;
for(aAssignIter = m_pImpl->aAddressDataAssignments.begin();
aAssignIter != m_pImpl->aAddressDataAssignments.end(); aAssignIter++)
{
if(aAssignIter->aDBData == rDBData)
{
if(aAssignIter->aDBColumnAssignments != rList)
{
aAssignIter->aDBColumnAssignments = rList;
aAssignIter->bColumnAssignmentsChanged = true;
}
bFound = sal_True;
break;
}
}
if(!bFound)
{
DBAddressDataAssignment aAssignment;
aAssignment.aDBData = rDBData;
aAssignment.aDBColumnAssignments = rList;
aAssignment.bColumnAssignmentsChanged = true;
m_pImpl->aAddressDataAssignments.push_back(aAssignment);
}
m_pImpl->SetModified();
}
/*-- 07.09.2005 11:50:27---------------------------------------------------
-----------------------------------------------------------------------*/
bool SwMailMergeConfigItem::IsAddressFieldsAssigned() const
{
bool bResult = true;
Reference< XResultSet> xResultSet = GetResultSet();
uno::Reference< XColumnsSupplier > xColsSupp( xResultSet, UNO_QUERY );
if(!xColsSupp.is())
return false;
uno::Reference<container::XNameAccess> xCols = xColsSupp->getColumns();
const ResStringArray& rHeaders = GetDefaultAddressHeaders();
Sequence< ::rtl::OUString> aAssignment =
GetColumnAssignment( GetCurrentDBData() );
const ::rtl::OUString* pAssignment = aAssignment.getConstArray();
const Sequence< ::rtl::OUString> aBlocks = GetAddressBlocks();
if(aBlocks.getLength() <= m_pImpl->GetCurrentAddressBlockIndex())
return false;
SwAddressIterator aIter(aBlocks[m_pImpl->GetCurrentAddressBlockIndex()]);
while(aIter.HasMore())
{
SwMergeAddressItem aItem = aIter.Next();
if(aItem.bIsColumn)
{
String sConvertedColumn = aItem.sText;
for(sal_uInt16 nColumn = 0;
nColumn < rHeaders.Count() && nColumn < aAssignment.getLength();
++nColumn)
{
if(rHeaders.GetString(nColumn) == aItem.sText &&
pAssignment[nColumn].getLength())
{
sConvertedColumn = pAssignment[nColumn];
break;
}
}
//find out if the column exists in the data base
if(!xCols->hasByName(sConvertedColumn))
{
bResult = false;
break;
}
}
}
return bResult;
}
/*-- 07.09.2005 11:50:27---------------------------------------------------
-----------------------------------------------------------------------*/
bool SwMailMergeConfigItem::IsGreetingFieldsAssigned() const
{
bool bResult = true;
if(!IsIndividualGreeting(sal_False))
return true;
Reference< XResultSet> xResultSet = GetResultSet();
uno::Reference< XColumnsSupplier > xColsSupp( xResultSet, UNO_QUERY );
if(!xColsSupp.is())
return false;
const ResStringArray& rHeaders = GetDefaultAddressHeaders();
uno::Reference<container::XNameAccess> xCols = xColsSupp->getColumns();
Sequence< ::rtl::OUString> aAssignment =
GetColumnAssignment( GetCurrentDBData() );
const ::rtl::OUString* pAssignment = aAssignment.getConstArray();
const Sequence< ::rtl::OUString> rFemaleEntries = GetGreetings(SwMailMergeConfigItem::FEMALE);
sal_Int32 nCurrentFemale = GetCurrentGreeting(SwMailMergeConfigItem::FEMALE);
const Sequence< ::rtl::OUString> rMaleEntries = GetGreetings(SwMailMergeConfigItem::MALE);
sal_Int32 nCurrentMale = GetCurrentGreeting(SwMailMergeConfigItem::MALE);
::rtl::OUString sMale, sFemale;
if(rFemaleEntries.getLength() > nCurrentFemale)
sFemale = rFemaleEntries[nCurrentFemale];
if(rMaleEntries.getLength() > nCurrentMale)
sMale = rMaleEntries[nCurrentMale];
::rtl::OUString sAddress( sFemale );
sAddress += sMale;
SwAddressIterator aIter(sAddress);
while(aIter.HasMore())
{
SwMergeAddressItem aItem = aIter.Next();
if(aItem.bIsColumn)
{
String sConvertedColumn = aItem.sText;
for(sal_uInt16 nColumn = 0;
nColumn < rHeaders.Count() && nColumn < aAssignment.getLength();
++nColumn)
{
if(rHeaders.GetString(nColumn) == aItem.sText &&
pAssignment[nColumn].getLength())
{
sConvertedColumn = pAssignment[nColumn];
break;
}
}
//find out if the column exists in the data base
if(!xCols->hasByName(sConvertedColumn))
{
bResult = false;
break;
}
}
}
return bResult;
}
/*-- 05.05.2004 16:10:07---------------------------------------------------
-----------------------------------------------------------------------*/
::rtl::OUString SwMailMergeConfigItem::GetMailDisplayName() const
{
return m_pImpl->sMailDisplayName;
}
/*-- 05.05.2004 16:10:08---------------------------------------------------
-----------------------------------------------------------------------*/
void SwMailMergeConfigItem::SetMailDisplayName(const ::rtl::OUString& rName)
{
if(m_pImpl->sMailDisplayName != rName)
{
m_pImpl->sMailDisplayName = rName;
m_pImpl->SetModified();
}
}
/*-- 05.05.2004 16:10:09---------------------------------------------------
-----------------------------------------------------------------------*/
::rtl::OUString SwMailMergeConfigItem::GetMailAddress() const
{
return m_pImpl->sMailAddress;
}
/*-- 05.05.2004 16:10:09---------------------------------------------------
-----------------------------------------------------------------------*/
void SwMailMergeConfigItem::SetMailAddress(const ::rtl::OUString& rAddress)
{
if(m_pImpl->sMailAddress != rAddress )
{
m_pImpl->sMailAddress = rAddress;
m_pImpl->SetModified();
}
}
/*-- 07.05.2004 12:40:59---------------------------------------------------
-----------------------------------------------------------------------*/
sal_Bool SwMailMergeConfigItem::IsMailReplyTo() const
{
return m_pImpl->bIsMailReplyTo;
}
/*-- 07.05.2004 12:40:59---------------------------------------------------
-----------------------------------------------------------------------*/
void SwMailMergeConfigItem::SetMailReplyTo(sal_Bool bSet)
{
if(m_pImpl->bIsMailReplyTo != bSet)
{
m_pImpl->bIsMailReplyTo = bSet;
m_pImpl->SetModified();
}
}
/*-- 05.05.2004 16:10:09---------------------------------------------------
-----------------------------------------------------------------------*/
::rtl::OUString SwMailMergeConfigItem::GetMailReplyTo() const
{
return m_pImpl->sMailReplyTo;
}
/*-- 05.05.2004 16:10:09---------------------------------------------------
-----------------------------------------------------------------------*/
void SwMailMergeConfigItem::SetMailReplyTo(const ::rtl::OUString& rReplyTo)
{
if(m_pImpl->sMailReplyTo != rReplyTo)
{
m_pImpl->sMailReplyTo = rReplyTo;
m_pImpl->SetModified();
}
}
/*-- 05.05.2004 16:10:09---------------------------------------------------
-----------------------------------------------------------------------*/
::rtl::OUString SwMailMergeConfigItem::GetMailServer() const
{
return m_pImpl->sMailServer;
}
/*-- 05.05.2004 16:10:10---------------------------------------------------
-----------------------------------------------------------------------*/
void SwMailMergeConfigItem::SetMailServer(const ::rtl::OUString& rAddress)
{
if(m_pImpl->sMailServer != rAddress)
{
m_pImpl->sMailServer = rAddress;
m_pImpl->SetModified();
}
}
/*-- 05.05.2004 16:10:10---------------------------------------------------
-----------------------------------------------------------------------*/
sal_Int16 SwMailMergeConfigItem::GetMailPort() const
{
return m_pImpl->bIsDefaultPort ?
(m_pImpl->bIsSecureConnection ? SECURE_PORT : DEFAULT_PORT) :
m_pImpl->nMailPort;
}
/*-- 05.05.2004 16:10:10---------------------------------------------------
-----------------------------------------------------------------------*/
void SwMailMergeConfigItem::SetMailPort(sal_Int16 nSet)
{
if(m_pImpl->nMailPort != nSet || m_pImpl->bIsDefaultPort)
{
m_pImpl->nMailPort = nSet;
m_pImpl->bIsDefaultPort = sal_False;
m_pImpl->SetModified();
}
}
/*-- 05.05.2004 16:10:11---------------------------------------------------
-----------------------------------------------------------------------*/
sal_Bool SwMailMergeConfigItem::IsSecureConnection() const
{
return m_pImpl->bIsSecureConnection;
}
/*-- 05.05.2004 16:10:12---------------------------------------------------
-----------------------------------------------------------------------*/
void SwMailMergeConfigItem::SetSecureConnection(sal_Bool bSet)
{
if(m_pImpl->bIsSecureConnection != bSet)
{
m_pImpl->bIsSecureConnection = bSet;
m_pImpl->SetModified();
}
}
/*-- 05.05.2004 16:10:12---------------------------------------------------
-----------------------------------------------------------------------*/
sal_Bool SwMailMergeConfigItem::IsAuthentication() const
{
return m_pImpl->bIsAuthentication;
}
/*-- 05.05.2004 16:10:13---------------------------------------------------
-----------------------------------------------------------------------*/
void SwMailMergeConfigItem::SetAuthentication(sal_Bool bSet)
{
if(m_pImpl->bIsAuthentication != bSet)
{
m_pImpl->bIsAuthentication = bSet;
m_pImpl->SetModified();
}
}
/*-- 05.05.2004 16:10:13---------------------------------------------------
-----------------------------------------------------------------------*/
::rtl::OUString SwMailMergeConfigItem::GetMailUserName() const
{
return m_pImpl->sMailUserName;
}
/*-- 05.05.2004 16:10:13---------------------------------------------------
-----------------------------------------------------------------------*/
void SwMailMergeConfigItem::SetMailUserName(const ::rtl::OUString& rName)
{
if(m_pImpl->sMailUserName != rName)
{
m_pImpl->sMailUserName = rName;
m_pImpl->SetModified();
}
}
/*-- 05.05.2004 16:10:14---------------------------------------------------
-----------------------------------------------------------------------*/
::rtl::OUString SwMailMergeConfigItem::GetMailPassword() const
{
return m_pImpl->sMailPassword;
}
/*-- 05.05.2004 16:10:14---------------------------------------------------
-----------------------------------------------------------------------*/
void SwMailMergeConfigItem::SetMailPassword(const ::rtl::OUString& rPassword)
{
if(m_pImpl->sMailPassword != rPassword)
{
m_pImpl->sMailPassword = rPassword;
m_pImpl->SetModified();
}
}
/*-- 19.08.2004 14:44:57---------------------------------------------------
-----------------------------------------------------------------------*/
sal_Bool SwMailMergeConfigItem::IsSMTPAfterPOP() const
{
return m_pImpl->bIsSMPTAfterPOP;
}
/*-- 19.08.2004 14:44:57---------------------------------------------------
-----------------------------------------------------------------------*/
void SwMailMergeConfigItem::SetSMTPAfterPOP(sal_Bool bSet)
{
if( m_pImpl->bIsSMPTAfterPOP != bSet)
{
m_pImpl->bIsSMPTAfterPOP = bSet;
m_pImpl->SetModified();
}
}
/*-- 19.08.2004 14:44:57---------------------------------------------------
-----------------------------------------------------------------------*/
::rtl::OUString SwMailMergeConfigItem::GetInServerName() const
{
return m_pImpl->sInServerName;
}
/*-- 19.08.2004 14:44:57---------------------------------------------------
-----------------------------------------------------------------------*/
void SwMailMergeConfigItem::SetInServerName(const ::rtl::OUString& rServer)
{
if(m_pImpl->sInServerName != rServer)
{
m_pImpl->sInServerName = rServer;
m_pImpl->SetModified();
}
}
/*-- 19.08.2004 14:44:58---------------------------------------------------
-----------------------------------------------------------------------*/
sal_Int16 SwMailMergeConfigItem::GetInServerPort() const
{
return m_pImpl->nInServerPort;
}
/*-- 19.08.2004 14:44:58---------------------------------------------------
-----------------------------------------------------------------------*/
void SwMailMergeConfigItem::SetInServerPort(sal_Int16 nSet)
{
if( m_pImpl->nInServerPort != nSet)
{
m_pImpl->nInServerPort = nSet;
m_pImpl->SetModified();
}
}
/*-- 20.08.2004 08:52:48---------------------------------------------------
-----------------------------------------------------------------------*/
sal_Bool SwMailMergeConfigItem::IsInServerPOP() const
{
return m_pImpl->bInServerPOP;
}
/*-- 20.08.2004 08:52:49---------------------------------------------------
-----------------------------------------------------------------------*/
void SwMailMergeConfigItem::SetInServerPOP(sal_Bool bSet)
{
if( m_pImpl->bInServerPOP != bSet)
{
m_pImpl->bInServerPOP = bSet;
m_pImpl->SetModified();
}
}
/*-- 19.08.2004 14:44:58---------------------------------------------------
-----------------------------------------------------------------------*/
::rtl::OUString SwMailMergeConfigItem::GetInServerUserName() const
{
return m_pImpl->sInServerUserName;
}
/*-- 19.08.2004 14:44:58---------------------------------------------------
-----------------------------------------------------------------------*/
void SwMailMergeConfigItem::SetInServerUserName(const ::rtl::OUString& rName)
{
if( m_pImpl->sInServerUserName != rName)
{
m_pImpl->sInServerUserName = rName;
m_pImpl->SetModified();
}
}
/*-- 19.08.2004 14:44:59---------------------------------------------------
-----------------------------------------------------------------------*/
::rtl::OUString SwMailMergeConfigItem::GetInServerPassword() const
{
return m_pImpl->sInServerPassword;
}
/*-- 19.08.2004 14:45:00---------------------------------------------------
-----------------------------------------------------------------------*/
void SwMailMergeConfigItem::SetInServerPassword(const ::rtl::OUString& rPassword)
{
if(m_pImpl->sInServerPassword != rPassword)
{
m_pImpl->sInServerPassword = rPassword;
m_pImpl->SetModified();
}
}
/*-- 02.09.2004 14:43:27---------------------------------------------------
-----------------------------------------------------------------------*/
void SwMailMergeConfigItem::DocumentReloaded()
{
m_bMergeDone = false;
m_bGreetingInserted = false;
m_bAddressInserted = false;
m_rAddressBlockFrame = ::rtl::OUString();
}
/*-- 16.06.2004 12:24:18---------------------------------------------------
-----------------------------------------------------------------------*/
bool SwMailMergeConfigItem::IsMailAvailable() const
{
return m_pImpl->bIsEMailSupported;
}
/*-- 21.05.2004 12:20:05---------------------------------------------------
-----------------------------------------------------------------------*/
void SwMailMergeConfigItem::AddMergedDocument(SwDocMergeInfo& rInfo)
{
m_pImpl->aMergeInfos.push_back(rInfo);
}
/*-- 21.05.2004 12:20:05---------------------------------------------------
-----------------------------------------------------------------------*/
SwDocMergeInfo& SwMailMergeConfigItem::GetDocumentMergeInfo(sal_uInt32 nDocument)
{
DBG_ASSERT(m_pImpl->aMergeInfos.size() > nDocument,"invalid document index");
return m_pImpl->aMergeInfos[nDocument];
}
/*-- 14.06.2004 11:46:26---------------------------------------------------
-----------------------------------------------------------------------*/
sal_uInt32 SwMailMergeConfigItem::GetMergedDocumentCount() const
{
return m_pImpl->aMergeInfos.size();
}
/*-- 11.06.2004 10:38:39---------------------------------------------------
-----------------------------------------------------------------------*/
SwView* lcl_ExistsView(SwView* pView)
{
const TypeId aType(TYPE(SwView));
SfxViewShell* pViewShell = SfxViewShell::GetFirst( &aType, sal_False );
while(pViewShell)
{
if(pViewShell == pView)
return pView;
pViewShell = SfxViewShell::GetNext( *pViewShell, &aType, sal_False );
}
return 0;
}
/*-- 16.06.2004 15:02:35---------------------------------------------------
-----------------------------------------------------------------------*/
SwView* SwMailMergeConfigItem::GetTargetView()
{
//make sure that the pointer is really valid - the document may have been closed manually
if(m_pTargetView)
{
m_pTargetView = lcl_ExistsView(m_pTargetView);
}
return m_pTargetView;
}
/*-- 02.09.2004 17:04:11---------------------------------------------------
-----------------------------------------------------------------------*/
void SwMailMergeConfigItem::SetTargetView(SwView* pView)
{
m_pTargetView = pView;
//reset the document merge counter
if(!m_pTargetView)
{
m_pImpl->aMergeInfos.clear();
}
}
/*-- 16.06.2004 15:02:35---------------------------------------------------
-----------------------------------------------------------------------*/
SwView* SwMailMergeConfigItem::GetSourceView()
{
m_pSourceView = lcl_ExistsView(m_pSourceView);
return m_pSourceView;
}
/*-- 04.11.2004 19:53 ---------------------------------------------------
-----------------------------------------------------------------------*/
void SwMailMergeConfigItem::SetSourceView(SwView* pView)
{
m_pSourceView = pView;
if(pView)
{
SvStringsDtor aDBNameList(5, 1);
SvStringsDtor aAllDBNames(5, 5);
pView->GetWrtShell().GetAllUsedDB( aDBNameList, &aAllDBNames );
if(aDBNameList.Count())
{
// if fields are available there is usually no need of an addressblock and greeting
if(!m_pImpl->bUserSettingWereOverwritten)
{
if( m_pImpl->bIsAddressBlock == sal_True
|| m_pImpl->bIsGreetingLineInMail == sal_True
|| m_pImpl->bIsGreetingLine == sal_True )
{
//store user settings
m_pImpl->bUserSettingWereOverwritten = sal_True;
m_pImpl->bIsAddressBlock_LastUserSetting = m_pImpl->bIsAddressBlock;
m_pImpl->bIsGreetingLineInMail_LastUserSetting = m_pImpl->bIsGreetingLineInMail;
m_pImpl->bIsGreetingLine_LastUserSetting = m_pImpl->bIsGreetingLine;
//set all to false
m_pImpl->bIsAddressBlock = sal_False;
m_pImpl->bIsGreetingLineInMail = sal_False;
m_pImpl->bIsGreetingLine = sal_False;
m_pImpl->SetModified();
}
}
}
else if( m_pImpl->bUserSettingWereOverwritten )
{
//restore last user settings:
m_pImpl->bIsAddressBlock = m_pImpl->bIsAddressBlock_LastUserSetting;
m_pImpl->bIsGreetingLineInMail = m_pImpl->bIsGreetingLineInMail_LastUserSetting;
m_pImpl->bIsGreetingLine = m_pImpl->bIsGreetingLine_LastUserSetting;
m_pImpl->bUserSettingWereOverwritten = sal_False;
}
}
}
/*-- 13.03.2006 12:15:06---------------------------------------------------
-----------------------------------------------------------------------*/
void SwMailMergeConfigItem::SetCurrentAddressBlockIndex( sal_Int32 nSet )
{
m_pImpl->SetCurrentAddressBlockIndex( nSet );
}
/*-- 13.03.2006 12:15:07---------------------------------------------------
-----------------------------------------------------------------------*/
sal_Int32 SwMailMergeConfigItem::GetCurrentAddressBlockIndex() const
{
return m_pImpl->GetCurrentAddressBlockIndex();
}