1*96de5490SAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 3*96de5490SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 4*96de5490SAndrew Rist * or more contributor license agreements. See the NOTICE file 5*96de5490SAndrew Rist * distributed with this work for additional information 6*96de5490SAndrew Rist * regarding copyright ownership. The ASF licenses this file 7*96de5490SAndrew Rist * to you under the Apache License, Version 2.0 (the 8*96de5490SAndrew Rist * "License"); you may not use this file except in compliance 9*96de5490SAndrew Rist * with the License. You may obtain a copy of the License at 10cdf0e10cSrcweir * 11*96de5490SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12cdf0e10cSrcweir * 13*96de5490SAndrew Rist * Unless required by applicable law or agreed to in writing, 14*96de5490SAndrew Rist * software distributed under the License is distributed on an 15*96de5490SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*96de5490SAndrew Rist * KIND, either express or implied. See the License for the 17*96de5490SAndrew Rist * specific language governing permissions and limitations 18*96de5490SAndrew Rist * under the License. 19cdf0e10cSrcweir * 20*96de5490SAndrew Rist *************************************************************/ 21*96de5490SAndrew Rist 22*96de5490SAndrew Rist 23cdf0e10cSrcweir 24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 25cdf0e10cSrcweir #include "precompiled_dbaccess.hxx" 26cdf0e10cSrcweir 27cdf0e10cSrcweir #ifndef DBAUI_WIZ_COLUMNSELECT_HXX 28cdf0e10cSrcweir #include "WColumnSelect.hxx" 29cdf0e10cSrcweir #endif 30cdf0e10cSrcweir #ifndef _DBU_MISC_HRC_ 31cdf0e10cSrcweir #include "dbu_misc.hrc" 32cdf0e10cSrcweir #endif 33cdf0e10cSrcweir #ifndef _TOOLS_DEBUG_HXX 34cdf0e10cSrcweir #include <tools/debug.hxx> 35cdf0e10cSrcweir #endif 36cdf0e10cSrcweir #ifndef DBAUI_WIZARD_PAGES_HRC 37cdf0e10cSrcweir #include "WizardPages.hrc" 38cdf0e10cSrcweir #endif 39cdf0e10cSrcweir #ifndef DBAUI_WIZ_COPYTABLEDIALOG_HXX 40cdf0e10cSrcweir #include "WCopyTable.hxx" 41cdf0e10cSrcweir #endif 42cdf0e10cSrcweir #ifndef _COM_SUN_STAR_SDBCX_XDATADESCRIPTORFACTORY_HPP_ 43cdf0e10cSrcweir #include <com/sun/star/sdbcx/XDataDescriptorFactory.hpp> 44cdf0e10cSrcweir #endif 45cdf0e10cSrcweir #ifndef _COM_SUN_STAR_SDBCX_XCOLUMNSSUPPLIER_HPP_ 46cdf0e10cSrcweir #include <com/sun/star/sdbcx/XColumnsSupplier.hpp> 47cdf0e10cSrcweir #endif 48cdf0e10cSrcweir #ifndef _COM_SUN_STAR_SDBCX_XAPPEND_HPP_ 49cdf0e10cSrcweir #include <com/sun/star/sdbcx/XAppend.hpp> 50cdf0e10cSrcweir #endif 51cdf0e10cSrcweir #ifndef _DBAUI_MODULE_DBU_HXX_ 52cdf0e10cSrcweir #include "moduledbu.hxx" 53cdf0e10cSrcweir #endif 54cdf0e10cSrcweir #ifndef _COM_SUN_STAR_SDBC_DATATYPE_HPP_ 55cdf0e10cSrcweir #include <com/sun/star/sdbc/DataType.hpp> 56cdf0e10cSrcweir #endif 57cdf0e10cSrcweir #ifndef _COM_SUN_STAR_SDBC_COLUMNVALUE_HPP_ 58cdf0e10cSrcweir #include <com/sun/star/sdbc/ColumnValue.hpp> 59cdf0e10cSrcweir #endif 60cdf0e10cSrcweir #ifndef _COM_SUN_STAR_SDB_APPLICATION_COPYTABLEOPERATION_HPP_ 61cdf0e10cSrcweir #include <com/sun/star/sdb/application/CopyTableOperation.hpp> 62cdf0e10cSrcweir #endif 63cdf0e10cSrcweir #ifndef DBACCESS_SHARED_DBUSTRINGS_HRC 64cdf0e10cSrcweir #include "dbustrings.hrc" 65cdf0e10cSrcweir #endif 66cdf0e10cSrcweir #include <functional> 67cdf0e10cSrcweir 68cdf0e10cSrcweir using namespace ::com::sun::star::uno; 69cdf0e10cSrcweir using namespace ::com::sun::star::beans; 70cdf0e10cSrcweir using namespace ::com::sun::star::container; 71cdf0e10cSrcweir using namespace ::com::sun::star::sdbc; 72cdf0e10cSrcweir using namespace ::com::sun::star::sdbcx; 73cdf0e10cSrcweir using namespace dbaui; 74cdf0e10cSrcweir 75cdf0e10cSrcweir namespace CopyTableOperation = ::com::sun::star::sdb::application::CopyTableOperation; 76cdf0e10cSrcweir 77cdf0e10cSrcweir // ----------------------------------------------------------------------- 78cdf0e10cSrcweir String OWizColumnSelect::GetTitle() const { return String(ModuleRes(STR_WIZ_COLUMN_SELECT_TITEL)); } 79cdf0e10cSrcweir // ----------------------------------------------------------------------------- 80cdf0e10cSrcweir OWizardPage::OWizardPage( Window* pParent, const ResId& rResId ) 81cdf0e10cSrcweir : TabPage(pParent,rResId) 82cdf0e10cSrcweir ,m_pParent(static_cast<OCopyTableWizard*>(pParent)) 83cdf0e10cSrcweir ,m_bFirstTime(sal_True) 84cdf0e10cSrcweir { 85cdf0e10cSrcweir } 86cdf0e10cSrcweir //======================================================================== 87cdf0e10cSrcweir // OWizColumnSelect 88cdf0e10cSrcweir DBG_NAME(OWizColumnSelect); 89cdf0e10cSrcweir //======================================================================== 90cdf0e10cSrcweir OWizColumnSelect::OWizColumnSelect( Window* pParent) 91cdf0e10cSrcweir :OWizardPage( pParent, ModuleRes( TAB_WIZ_COLUMN_SELECT )) 92cdf0e10cSrcweir ,m_flColumns( this, ModuleRes( FL_COLUMN_SELECT ) ) 93cdf0e10cSrcweir ,m_lbOrgColumnNames( this, ModuleRes( LB_ORG_COLUMN_NAMES ) ) 94cdf0e10cSrcweir ,m_ibColumn_RH( this, ModuleRes( IB_COLUMN_RH ) ) 95cdf0e10cSrcweir ,m_ibColumns_RH( this, ModuleRes( IB_COLUMNS_RH ) ) 96cdf0e10cSrcweir ,m_ibColumn_LH( this, ModuleRes( IB_COLUMN_LH ) ) 97cdf0e10cSrcweir ,m_ibColumns_LH( this, ModuleRes( IB_COLUMNS_LH ) ) 98cdf0e10cSrcweir ,m_lbNewColumnNames( this, ModuleRes( LB_NEW_COLUMN_NAMES ) ) 99cdf0e10cSrcweir { 100cdf0e10cSrcweir DBG_CTOR(OWizColumnSelect,NULL); 101cdf0e10cSrcweir m_ibColumn_RH.SetClickHdl(LINK(this,OWizColumnSelect,ButtonClickHdl)); 102cdf0e10cSrcweir m_ibColumn_LH.SetClickHdl(LINK(this,OWizColumnSelect,ButtonClickHdl)); 103cdf0e10cSrcweir m_ibColumns_RH.SetClickHdl(LINK(this,OWizColumnSelect,ButtonClickHdl)); 104cdf0e10cSrcweir m_ibColumns_LH.SetClickHdl(LINK(this,OWizColumnSelect,ButtonClickHdl)); 105cdf0e10cSrcweir 106cdf0e10cSrcweir m_lbOrgColumnNames.EnableMultiSelection(sal_True); 107cdf0e10cSrcweir m_lbNewColumnNames.EnableMultiSelection(sal_True); 108cdf0e10cSrcweir 109cdf0e10cSrcweir m_lbOrgColumnNames.SetDoubleClickHdl(LINK(this,OWizColumnSelect,ListDoubleClickHdl)); 110cdf0e10cSrcweir m_lbNewColumnNames.SetDoubleClickHdl(LINK(this,OWizColumnSelect,ListDoubleClickHdl)); 111cdf0e10cSrcweir FreeResource(); 112cdf0e10cSrcweir } 113cdf0e10cSrcweir // ----------------------------------------------------------------------- 114cdf0e10cSrcweir OWizColumnSelect::~OWizColumnSelect() 115cdf0e10cSrcweir { 116cdf0e10cSrcweir DBG_DTOR(OWizColumnSelect,NULL); 117cdf0e10cSrcweir while ( m_lbNewColumnNames.GetEntryCount() ) 118cdf0e10cSrcweir { 119cdf0e10cSrcweir void* pData = m_lbNewColumnNames.GetEntryData(0); 120cdf0e10cSrcweir if ( pData ) 121cdf0e10cSrcweir delete static_cast<OFieldDescription*>(pData); 122cdf0e10cSrcweir 123cdf0e10cSrcweir m_lbNewColumnNames.RemoveEntry(0); 124cdf0e10cSrcweir } 125cdf0e10cSrcweir m_lbNewColumnNames.Clear(); 126cdf0e10cSrcweir } 127cdf0e10cSrcweir 128cdf0e10cSrcweir // ----------------------------------------------------------------------- 129cdf0e10cSrcweir void OWizColumnSelect::Reset() 130cdf0e10cSrcweir { 131cdf0e10cSrcweir // urspr"unglichen zustand wiederherstellen 132cdf0e10cSrcweir DBG_CHKTHIS(OWizColumnSelect,NULL); 133cdf0e10cSrcweir 134cdf0e10cSrcweir clearListBox(m_lbOrgColumnNames); 135cdf0e10cSrcweir clearListBox(m_lbNewColumnNames); 136cdf0e10cSrcweir m_pParent->m_mNameMapping.clear(); 137cdf0e10cSrcweir 138cdf0e10cSrcweir // insert the source columns in the left listbox 139cdf0e10cSrcweir const ODatabaseExport::TColumnVector* pSrcColumns = m_pParent->getSrcVector(); 140cdf0e10cSrcweir ODatabaseExport::TColumnVector::const_iterator aIter = pSrcColumns->begin(); 141cdf0e10cSrcweir ODatabaseExport::TColumnVector::const_iterator aEnd = pSrcColumns->end(); 142cdf0e10cSrcweir 143cdf0e10cSrcweir for(;aIter != aEnd;++aIter) 144cdf0e10cSrcweir { 145cdf0e10cSrcweir sal_uInt16 nPos = m_lbOrgColumnNames.InsertEntry((*aIter)->first); 146cdf0e10cSrcweir m_lbOrgColumnNames.SetEntryData(nPos,(*aIter)->second); 147cdf0e10cSrcweir } 148cdf0e10cSrcweir 149cdf0e10cSrcweir // m_pParent->clearDestColumns(); 150cdf0e10cSrcweir 151cdf0e10cSrcweir if(m_lbOrgColumnNames.GetEntryCount()) 152cdf0e10cSrcweir m_lbOrgColumnNames.SelectEntryPos(0); 153cdf0e10cSrcweir 154cdf0e10cSrcweir m_bFirstTime = sal_False; 155cdf0e10cSrcweir } 156cdf0e10cSrcweir // ----------------------------------------------------------------------- 157cdf0e10cSrcweir void OWizColumnSelect::ActivatePage( ) 158cdf0e10cSrcweir { 159cdf0e10cSrcweir DBG_CHKTHIS(OWizColumnSelect,NULL); 160cdf0e10cSrcweir // if there are no dest columns reset the left side with the origibnal columns 161cdf0e10cSrcweir if(m_pParent->getDestColumns()->size() == 0) 162cdf0e10cSrcweir Reset(); 163cdf0e10cSrcweir 164cdf0e10cSrcweir clearListBox(m_lbNewColumnNames); 165cdf0e10cSrcweir 166cdf0e10cSrcweir const ODatabaseExport::TColumnVector* pDestColumns = m_pParent->getDestVector(); 167cdf0e10cSrcweir 168cdf0e10cSrcweir ODatabaseExport::TColumnVector::const_iterator aIter = pDestColumns->begin(); 169cdf0e10cSrcweir ODatabaseExport::TColumnVector::const_iterator aEnd = pDestColumns->end(); 170cdf0e10cSrcweir for(;aIter != aEnd;++aIter) 171cdf0e10cSrcweir { 172cdf0e10cSrcweir sal_uInt16 nPos = m_lbNewColumnNames.InsertEntry((*aIter)->first); 173cdf0e10cSrcweir m_lbNewColumnNames.SetEntryData(nPos,new OFieldDescription(*((*aIter)->second))); 174cdf0e10cSrcweir m_lbOrgColumnNames.RemoveEntry((*aIter)->first); 175cdf0e10cSrcweir } 176cdf0e10cSrcweir m_pParent->GetOKButton().Enable(m_lbNewColumnNames.GetEntryCount() != 0); 177cdf0e10cSrcweir m_pParent->EnableButton(OCopyTableWizard::WIZARD_NEXT,m_lbNewColumnNames.GetEntryCount() && m_pParent->getOperation() != CopyTableOperation::AppendData); 178cdf0e10cSrcweir m_ibColumns_RH.GrabFocus(); 179cdf0e10cSrcweir } 180cdf0e10cSrcweir // ----------------------------------------------------------------------- 181cdf0e10cSrcweir sal_Bool OWizColumnSelect::LeavePage() 182cdf0e10cSrcweir { 183cdf0e10cSrcweir DBG_CHKTHIS(OWizColumnSelect,NULL); 184cdf0e10cSrcweir 185cdf0e10cSrcweir // m_pParent->getColumns()->clear(); 186cdf0e10cSrcweir m_pParent->clearDestColumns(); 187cdf0e10cSrcweir 188cdf0e10cSrcweir for(sal_uInt16 i=0 ; i< m_lbNewColumnNames.GetEntryCount();++i) 189cdf0e10cSrcweir { 190cdf0e10cSrcweir OFieldDescription* pField = static_cast<OFieldDescription*>(m_lbNewColumnNames.GetEntryData(i)); 191cdf0e10cSrcweir OSL_ENSURE(pField,"The field information can not be null!"); 192cdf0e10cSrcweir m_pParent->insertColumn(i,pField); 193cdf0e10cSrcweir } 194cdf0e10cSrcweir 195cdf0e10cSrcweir clearListBox(m_lbNewColumnNames); 196cdf0e10cSrcweir 197cdf0e10cSrcweir 198cdf0e10cSrcweir if ( m_pParent->GetPressedButton() == OCopyTableWizard::WIZARD_NEXT 199cdf0e10cSrcweir || m_pParent->GetPressedButton() == OCopyTableWizard::WIZARD_FINISH 200cdf0e10cSrcweir ) 201cdf0e10cSrcweir return m_pParent->getDestColumns()->size() != 0; 202cdf0e10cSrcweir else 203cdf0e10cSrcweir return sal_True; 204cdf0e10cSrcweir } 205cdf0e10cSrcweir // ----------------------------------------------------------------------- 206cdf0e10cSrcweir IMPL_LINK( OWizColumnSelect, ButtonClickHdl, Button *, pButton ) 207cdf0e10cSrcweir { 208cdf0e10cSrcweir MultiListBox *pLeft = NULL; 209cdf0e10cSrcweir MultiListBox *pRight = NULL; 210cdf0e10cSrcweir sal_Bool bAll = sal_False; 211cdf0e10cSrcweir 212cdf0e10cSrcweir if(pButton == &m_ibColumn_RH) 213cdf0e10cSrcweir { 214cdf0e10cSrcweir pLeft = &m_lbOrgColumnNames; 215cdf0e10cSrcweir pRight = &m_lbNewColumnNames; 216cdf0e10cSrcweir } 217cdf0e10cSrcweir else if(pButton == &m_ibColumn_LH) 218cdf0e10cSrcweir { 219cdf0e10cSrcweir pLeft = &m_lbNewColumnNames; 220cdf0e10cSrcweir pRight = &m_lbOrgColumnNames; 221cdf0e10cSrcweir } 222cdf0e10cSrcweir else if(pButton == &m_ibColumns_RH) 223cdf0e10cSrcweir { 224cdf0e10cSrcweir pLeft = &m_lbOrgColumnNames; 225cdf0e10cSrcweir pRight = &m_lbNewColumnNames; 226cdf0e10cSrcweir bAll = sal_True; 227cdf0e10cSrcweir } 228cdf0e10cSrcweir else if(pButton == &m_ibColumns_LH) 229cdf0e10cSrcweir { 230cdf0e10cSrcweir pLeft = &m_lbNewColumnNames; 231cdf0e10cSrcweir pRight = &m_lbOrgColumnNames; 232cdf0e10cSrcweir bAll = sal_True; 233cdf0e10cSrcweir } 234cdf0e10cSrcweir // else ???? 235cdf0e10cSrcweir 236cdf0e10cSrcweir Reference< XDatabaseMetaData > xMetaData( m_pParent->m_xDestConnection->getMetaData() ); 237cdf0e10cSrcweir ::rtl::OUString sExtraChars = xMetaData->getExtraNameCharacters(); 238cdf0e10cSrcweir sal_Int32 nMaxNameLen = m_pParent->getMaxColumnNameLength(); 239cdf0e10cSrcweir 240cdf0e10cSrcweir ::comphelper::TStringMixEqualFunctor aCase(xMetaData->supportsMixedCaseQuotedIdentifiers()); 241cdf0e10cSrcweir ::std::vector< ::rtl::OUString> aRightColumns; 242cdf0e10cSrcweir fillColumns(pRight,aRightColumns); 243cdf0e10cSrcweir 244cdf0e10cSrcweir String aColumnName; 245cdf0e10cSrcweir if(!bAll) 246cdf0e10cSrcweir { 247cdf0e10cSrcweir for(sal_uInt16 i=0; i < pLeft->GetSelectEntryCount(); ++i) 248cdf0e10cSrcweir moveColumn(pRight,pLeft,aRightColumns,pLeft->GetSelectEntry(i),sExtraChars,nMaxNameLen,aCase); 249cdf0e10cSrcweir 250cdf0e10cSrcweir for(sal_uInt16 j=pLeft->GetSelectEntryCount(); j ; --j) 251cdf0e10cSrcweir pLeft->RemoveEntry(pLeft->GetSelectEntry(j-1)); 252cdf0e10cSrcweir } 253cdf0e10cSrcweir else 254cdf0e10cSrcweir { 255cdf0e10cSrcweir sal_uInt16 nEntries = pLeft->GetEntryCount(); 256cdf0e10cSrcweir for(sal_uInt16 i=0; i < nEntries; ++i) 257cdf0e10cSrcweir moveColumn(pRight,pLeft,aRightColumns,pLeft->GetEntry(i),sExtraChars,nMaxNameLen,aCase); 258cdf0e10cSrcweir for(sal_uInt16 j=pLeft->GetEntryCount(); j ; --j) 259cdf0e10cSrcweir pLeft->RemoveEntry(j-1); 260cdf0e10cSrcweir } 261cdf0e10cSrcweir 262cdf0e10cSrcweir enableButtons(); 263cdf0e10cSrcweir 264cdf0e10cSrcweir if(m_lbOrgColumnNames.GetEntryCount()) 265cdf0e10cSrcweir m_lbOrgColumnNames.SelectEntryPos(0); 266cdf0e10cSrcweir 267cdf0e10cSrcweir return 0; 268cdf0e10cSrcweir } 269cdf0e10cSrcweir // ----------------------------------------------------------------------- 270cdf0e10cSrcweir IMPL_LINK( OWizColumnSelect, ListDoubleClickHdl, MultiListBox *, pListBox ) 271cdf0e10cSrcweir { 272cdf0e10cSrcweir MultiListBox *pLeft,*pRight; 273cdf0e10cSrcweir if(pListBox == &m_lbOrgColumnNames) 274cdf0e10cSrcweir { 275cdf0e10cSrcweir pLeft = &m_lbOrgColumnNames; 276cdf0e10cSrcweir pRight = &m_lbNewColumnNames; 277cdf0e10cSrcweir } 278cdf0e10cSrcweir else 279cdf0e10cSrcweir { 280cdf0e10cSrcweir pRight = &m_lbOrgColumnNames; 281cdf0e10cSrcweir pLeft = &m_lbNewColumnNames; 282cdf0e10cSrcweir } 283cdf0e10cSrcweir 284cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////// 285cdf0e10cSrcweir // Wenn Datenbank PrimaryKeys verarbeiten kann, PrimaryKey anlegen 286cdf0e10cSrcweir Reference< XDatabaseMetaData > xMetaData( m_pParent->m_xDestConnection->getMetaData() ); 287cdf0e10cSrcweir ::rtl::OUString sExtraChars = xMetaData->getExtraNameCharacters(); 288cdf0e10cSrcweir sal_Int32 nMaxNameLen = m_pParent->getMaxColumnNameLength(); 289cdf0e10cSrcweir 290cdf0e10cSrcweir ::comphelper::TStringMixEqualFunctor aCase(xMetaData->supportsMixedCaseQuotedIdentifiers()); 291cdf0e10cSrcweir ::std::vector< ::rtl::OUString> aRightColumns; 292cdf0e10cSrcweir fillColumns(pRight,aRightColumns); 293cdf0e10cSrcweir 294cdf0e10cSrcweir String aColumnName; 295cdf0e10cSrcweir for(sal_uInt16 i=0; i < pLeft->GetSelectEntryCount(); ++i) 296cdf0e10cSrcweir moveColumn(pRight,pLeft,aRightColumns,pLeft->GetSelectEntry(i),sExtraChars,nMaxNameLen,aCase); 297cdf0e10cSrcweir for(sal_uInt16 j=pLeft->GetSelectEntryCount(); j ; --j) 298cdf0e10cSrcweir pLeft->RemoveEntry(pLeft->GetSelectEntry(j-1)); 299cdf0e10cSrcweir 300cdf0e10cSrcweir enableButtons(); 301cdf0e10cSrcweir return 0; 302cdf0e10cSrcweir } 303cdf0e10cSrcweir // ----------------------------------------------------------------------------- 304cdf0e10cSrcweir void OWizColumnSelect::clearListBox(MultiListBox& _rListBox) 305cdf0e10cSrcweir { 306cdf0e10cSrcweir while(_rListBox.GetEntryCount()) 307cdf0e10cSrcweir _rListBox.RemoveEntry(0); 308cdf0e10cSrcweir _rListBox.Clear(); 309cdf0e10cSrcweir } 310cdf0e10cSrcweir // ----------------------------------------------------------------------------- 311cdf0e10cSrcweir void OWizColumnSelect::fillColumns(ListBox* pRight,::std::vector< ::rtl::OUString> &_rRightColumns) 312cdf0e10cSrcweir { 313cdf0e10cSrcweir sal_uInt16 nCount = pRight->GetEntryCount(); 314cdf0e10cSrcweir _rRightColumns.reserve(nCount); 315cdf0e10cSrcweir for(sal_uInt16 i=0; i < nCount;++i) 316cdf0e10cSrcweir _rRightColumns.push_back(pRight->GetEntry(i)); 317cdf0e10cSrcweir } 318cdf0e10cSrcweir // ----------------------------------------------------------------------------- 319cdf0e10cSrcweir void OWizColumnSelect::createNewColumn( ListBox* _pListbox, 320cdf0e10cSrcweir OFieldDescription* _pSrcField, 321cdf0e10cSrcweir ::std::vector< ::rtl::OUString>& _rRightColumns, 322cdf0e10cSrcweir const ::rtl::OUString& _sColumnName, 323cdf0e10cSrcweir const ::rtl::OUString& _sExtraChars, 324cdf0e10cSrcweir sal_Int32 _nMaxNameLen, 325cdf0e10cSrcweir const ::comphelper::TStringMixEqualFunctor& _aCase) 326cdf0e10cSrcweir { 327cdf0e10cSrcweir ::rtl::OUString sConvertedName = m_pParent->convertColumnName(TMultiListBoxEntryFindFunctor(&_rRightColumns,_aCase), 328cdf0e10cSrcweir _sColumnName, 329cdf0e10cSrcweir _sExtraChars, 330cdf0e10cSrcweir _nMaxNameLen); 331cdf0e10cSrcweir OFieldDescription* pNewField = new OFieldDescription(*_pSrcField); 332cdf0e10cSrcweir pNewField->SetName(sConvertedName); 333cdf0e10cSrcweir sal_Bool bNotConvert = sal_True; 334cdf0e10cSrcweir pNewField->SetType(m_pParent->convertType(_pSrcField->getSpecialTypeInfo(),bNotConvert)); 335cdf0e10cSrcweir if ( !m_pParent->supportsPrimaryKey() ) 336cdf0e10cSrcweir pNewField->SetPrimaryKey(sal_False); 337cdf0e10cSrcweir 338cdf0e10cSrcweir _pListbox->SetEntryData(_pListbox->InsertEntry(sConvertedName),pNewField); 339cdf0e10cSrcweir _rRightColumns.push_back(sConvertedName); 340cdf0e10cSrcweir 341cdf0e10cSrcweir if ( !bNotConvert ) 342cdf0e10cSrcweir m_pParent->showColumnTypeNotSupported(sConvertedName); 343cdf0e10cSrcweir } 344cdf0e10cSrcweir // ----------------------------------------------------------------------------- 345cdf0e10cSrcweir void OWizColumnSelect::moveColumn( ListBox* _pRight, 346cdf0e10cSrcweir ListBox* _pLeft, 347cdf0e10cSrcweir ::std::vector< ::rtl::OUString>& _rRightColumns, 348cdf0e10cSrcweir const ::rtl::OUString& _sColumnName, 349cdf0e10cSrcweir const ::rtl::OUString& _sExtraChars, 350cdf0e10cSrcweir sal_Int32 _nMaxNameLen, 351cdf0e10cSrcweir const ::comphelper::TStringMixEqualFunctor& _aCase) 352cdf0e10cSrcweir { 353cdf0e10cSrcweir if(_pRight == &m_lbNewColumnNames) 354cdf0e10cSrcweir { 355cdf0e10cSrcweir // we copy the column into the new format for the dest 356cdf0e10cSrcweir OFieldDescription* pSrcField = static_cast<OFieldDescription*>(_pLeft->GetEntryData(_pLeft->GetEntryPos(String(_sColumnName)))); 357cdf0e10cSrcweir createNewColumn(_pRight,pSrcField,_rRightColumns,_sColumnName,_sExtraChars,_nMaxNameLen,_aCase); 358cdf0e10cSrcweir } 359cdf0e10cSrcweir else 360cdf0e10cSrcweir { 361cdf0e10cSrcweir // find the new column in the dest name mapping to obtain the old column 362cdf0e10cSrcweir OCopyTableWizard::TNameMapping::iterator aIter = ::std::find_if(m_pParent->m_mNameMapping.begin(),m_pParent->m_mNameMapping.end(), 363cdf0e10cSrcweir ::std::compose1( 364cdf0e10cSrcweir ::std::bind2nd(_aCase, _sColumnName), 365cdf0e10cSrcweir ::std::select2nd<OCopyTableWizard::TNameMapping::value_type>()) 366cdf0e10cSrcweir ); 367cdf0e10cSrcweir 368cdf0e10cSrcweir DBG_ASSERT(aIter != m_pParent->m_mNameMapping.end(),"Column must be defined"); 369cdf0e10cSrcweir if ( aIter == m_pParent->m_mNameMapping.end() ) 370cdf0e10cSrcweir return; // do nothing 371cdf0e10cSrcweir const ODatabaseExport::TColumns* pSrcColumns = m_pParent->getSourceColumns(); 372cdf0e10cSrcweir ODatabaseExport::TColumns::const_iterator aSrcIter = pSrcColumns->find((*aIter).first); 373cdf0e10cSrcweir if ( aSrcIter != pSrcColumns->end() ) 374cdf0e10cSrcweir { 375cdf0e10cSrcweir // we need also the old position of this column to insert it back on that position again 376cdf0e10cSrcweir const ODatabaseExport::TColumnVector* pSrcVector = m_pParent->getSrcVector(); 377cdf0e10cSrcweir ODatabaseExport::TColumnVector::const_iterator aPos = ::std::find(pSrcVector->begin(),pSrcVector->end(),aSrcIter); 378cdf0e10cSrcweir OSL_ENSURE( aPos != pSrcVector->end(),"Invalid position for the iterator here!"); 379cdf0e10cSrcweir ODatabaseExport::TColumnVector::size_type nPos = (aPos - pSrcVector->begin()) - adjustColumnPosition(_pLeft, _sColumnName, (aPos - pSrcVector->begin()), _aCase); 380cdf0e10cSrcweir 381cdf0e10cSrcweir _pRight->SetEntryData( _pRight->InsertEntry( (*aIter).first, sal::static_int_cast< sal_uInt16 >(nPos)),aSrcIter->second ); 382cdf0e10cSrcweir _rRightColumns.push_back((*aIter).first); 383cdf0e10cSrcweir m_pParent->removeColumnNameFromNameMap(_sColumnName); 384cdf0e10cSrcweir } 385cdf0e10cSrcweir } 386cdf0e10cSrcweir } 387cdf0e10cSrcweir // ----------------------------------------------------------------------------- 388cdf0e10cSrcweir // Simply returning fields back to their original position is 389cdf0e10cSrcweir // not enough. We need to take into acccount what fields have 390cdf0e10cSrcweir // been removed earlier and adjust accordingly. Based on the 391cdf0e10cSrcweir // algorithm employed in moveColumn(). 392cdf0e10cSrcweir sal_uInt16 OWizColumnSelect::adjustColumnPosition( ListBox* _pLeft, 393cdf0e10cSrcweir const ::rtl::OUString& _sColumnName, 394cdf0e10cSrcweir ODatabaseExport::TColumnVector::size_type nCurrentPos, 395cdf0e10cSrcweir const ::comphelper::TStringMixEqualFunctor& _aCase) 396cdf0e10cSrcweir { 397cdf0e10cSrcweir sal_uInt16 nAdjustedPos = 0; 398cdf0e10cSrcweir 399cdf0e10cSrcweir // if returning all entries to their original position, 400cdf0e10cSrcweir // then there is no need to adjust the positions. 401cdf0e10cSrcweir if (m_ibColumns_LH.HasFocus()) 402cdf0e10cSrcweir return nAdjustedPos; 403cdf0e10cSrcweir 404cdf0e10cSrcweir sal_uInt16 nCount = _pLeft->GetEntryCount(); 405cdf0e10cSrcweir ::rtl::OUString sColumnString; 406cdf0e10cSrcweir for(sal_uInt16 i=0; i < nCount; ++i) 407cdf0e10cSrcweir { 408cdf0e10cSrcweir sColumnString = _pLeft->GetEntry(i); 409cdf0e10cSrcweir if(_sColumnName != sColumnString) 410cdf0e10cSrcweir { 411cdf0e10cSrcweir // find the new column in the dest name mapping to obtain the old column 412cdf0e10cSrcweir OCopyTableWizard::TNameMapping::iterator aIter = ::std::find_if(m_pParent->m_mNameMapping.begin(),m_pParent->m_mNameMapping.end(), 413cdf0e10cSrcweir ::std::compose1( 414cdf0e10cSrcweir ::std::bind2nd(_aCase, sColumnString), 415cdf0e10cSrcweir ::std::select2nd<OCopyTableWizard::TNameMapping::value_type>()) 416cdf0e10cSrcweir ); 417cdf0e10cSrcweir 418cdf0e10cSrcweir DBG_ASSERT(aIter != m_pParent->m_mNameMapping.end(),"Column must be defined"); 419cdf0e10cSrcweir const ODatabaseExport::TColumns* pSrcColumns = m_pParent->getSourceColumns(); 420cdf0e10cSrcweir ODatabaseExport::TColumns::const_iterator aSrcIter = pSrcColumns->find((*aIter).first); 421cdf0e10cSrcweir if ( aSrcIter != pSrcColumns->end() ) 422cdf0e10cSrcweir { 423cdf0e10cSrcweir // we need also the old position of this column to insert it back on that position again 424cdf0e10cSrcweir const ODatabaseExport::TColumnVector* pSrcVector = m_pParent->getSrcVector(); 425cdf0e10cSrcweir ODatabaseExport::TColumnVector::const_iterator aPos = ::std::find(pSrcVector->begin(),pSrcVector->end(),aSrcIter); 426cdf0e10cSrcweir ODatabaseExport::TColumnVector::size_type nPos = aPos - pSrcVector->begin(); 427cdf0e10cSrcweir if( nPos < nCurrentPos) 428cdf0e10cSrcweir { 429cdf0e10cSrcweir nAdjustedPos++; 430cdf0e10cSrcweir } 431cdf0e10cSrcweir } 432cdf0e10cSrcweir } 433cdf0e10cSrcweir } 434cdf0e10cSrcweir 435cdf0e10cSrcweir return nAdjustedPos; 436cdf0e10cSrcweir } 437cdf0e10cSrcweir // ----------------------------------------------------------------------------- 438cdf0e10cSrcweir void OWizColumnSelect::enableButtons() 439cdf0e10cSrcweir { 440cdf0e10cSrcweir sal_Bool bEntries = m_lbNewColumnNames.GetEntryCount() != 0; 441cdf0e10cSrcweir if(!bEntries) 442cdf0e10cSrcweir m_pParent->m_mNameMapping.clear(); 443cdf0e10cSrcweir 444cdf0e10cSrcweir m_pParent->GetOKButton().Enable(bEntries); 445cdf0e10cSrcweir m_pParent->EnableButton(OCopyTableWizard::WIZARD_NEXT,bEntries && m_pParent->getOperation() != CopyTableOperation::AppendData); 446cdf0e10cSrcweir } 447cdf0e10cSrcweir // ----------------------------------------------------------------------------- 448cdf0e10cSrcweir 449