1*2a97ec55SAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 3*2a97ec55SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 4*2a97ec55SAndrew Rist * or more contributor license agreements. See the NOTICE file 5*2a97ec55SAndrew Rist * distributed with this work for additional information 6*2a97ec55SAndrew Rist * regarding copyright ownership. The ASF licenses this file 7*2a97ec55SAndrew Rist * to you under the Apache License, Version 2.0 (the 8*2a97ec55SAndrew Rist * "License"); you may not use this file except in compliance 9*2a97ec55SAndrew Rist * with the License. You may obtain a copy of the License at 10*2a97ec55SAndrew Rist * 11*2a97ec55SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12*2a97ec55SAndrew Rist * 13*2a97ec55SAndrew Rist * Unless required by applicable law or agreed to in writing, 14*2a97ec55SAndrew Rist * software distributed under the License is distributed on an 15*2a97ec55SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*2a97ec55SAndrew Rist * KIND, either express or implied. See the License for the 17*2a97ec55SAndrew Rist * specific language governing permissions and limitations 18*2a97ec55SAndrew Rist * under the License. 19*2a97ec55SAndrew Rist * 20*2a97ec55SAndrew Rist *************************************************************/ 21*2a97ec55SAndrew Rist 22*2a97ec55SAndrew Rist 23cdf0e10cSrcweir 24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 25cdf0e10cSrcweir #include "precompiled_extensions.hxx" 26cdf0e10cSrcweir #include "abspilot.hxx" 27cdf0e10cSrcweir #include "abpilot.hrc" 28cdf0e10cSrcweir #include "abpresid.hrc" 29cdf0e10cSrcweir #include "componentmodule.hxx" 30cdf0e10cSrcweir #include <tools/debug.hxx> 31cdf0e10cSrcweir #include <svtools/localresaccess.hxx> 32cdf0e10cSrcweir #include "typeselectionpage.hxx" 33cdf0e10cSrcweir #include "admininvokationpage.hxx" 34cdf0e10cSrcweir #include "tableselectionpage.hxx" 35cdf0e10cSrcweir #include <vcl/waitobj.hxx> 36cdf0e10cSrcweir #include <vcl/msgbox.hxx> 37cdf0e10cSrcweir #include "abpfinalpage.hxx" 38cdf0e10cSrcweir #include "fieldmappingpage.hxx" 39cdf0e10cSrcweir #include "fieldmappingimpl.hxx" 40cdf0e10cSrcweir 41cdf0e10cSrcweir //......................................................................... 42cdf0e10cSrcweir namespace abp 43cdf0e10cSrcweir { 44cdf0e10cSrcweir //......................................................................... 45cdf0e10cSrcweir 46cdf0e10cSrcweir #define STATE_SELECT_ABTYPE 0 47cdf0e10cSrcweir #define STATE_INVOKE_ADMIN_DIALOG 1 48cdf0e10cSrcweir #define STATE_TABLE_SELECTION 2 49cdf0e10cSrcweir #define STATE_MANUAL_FIELD_MAPPING 3 50cdf0e10cSrcweir #define STATE_FINAL_CONFIRM 4 51cdf0e10cSrcweir 52cdf0e10cSrcweir #define PATH_COMPLETE 1 53cdf0e10cSrcweir #define PATH_NO_SETTINGS 2 54cdf0e10cSrcweir #define PATH_NO_FIELDS 3 55cdf0e10cSrcweir #define PATH_NO_SETTINGS_NO_FIELDS 4 56cdf0e10cSrcweir 57cdf0e10cSrcweir using namespace ::svt; 58cdf0e10cSrcweir using namespace ::com::sun::star::uno; 59cdf0e10cSrcweir using namespace ::com::sun::star::lang; 60cdf0e10cSrcweir 61cdf0e10cSrcweir //===================================================================== 62cdf0e10cSrcweir //= OAddessBookSourcePilot 63cdf0e10cSrcweir //===================================================================== 64cdf0e10cSrcweir //--------------------------------------------------------------------- OAddessBookSourcePilot(Window * _pParent,const Reference<XMultiServiceFactory> & _rxORB)65cdf0e10cSrcweir OAddessBookSourcePilot::OAddessBookSourcePilot(Window* _pParent, const Reference< XMultiServiceFactory >& _rxORB) 66cdf0e10cSrcweir :OAddessBookSourcePilot_Base( _pParent, ModuleRes( RID_DLG_ADDRESSBOOKSOURCEPILOT ), 67cdf0e10cSrcweir WZB_HELP | WZB_FINISH | WZB_CANCEL | WZB_NEXT | WZB_PREVIOUS ) 68cdf0e10cSrcweir ,m_xORB(_rxORB) 69cdf0e10cSrcweir ,m_aNewDataSource(_rxORB) 70cdf0e10cSrcweir ,m_eNewDataSourceType( AST_INVALID ) 71cdf0e10cSrcweir { 72cdf0e10cSrcweir SetPageSizePixel(LogicToPixel(Size(WINDOW_SIZE_X, WINDOW_SIZE_Y), MAP_APPFONT)); 73cdf0e10cSrcweir 74cdf0e10cSrcweir ShowButtonFixedLine(sal_True); 75cdf0e10cSrcweir 76cdf0e10cSrcweir declarePath( PATH_COMPLETE, 77cdf0e10cSrcweir STATE_SELECT_ABTYPE, 78cdf0e10cSrcweir STATE_INVOKE_ADMIN_DIALOG, 79cdf0e10cSrcweir STATE_TABLE_SELECTION, 80cdf0e10cSrcweir STATE_MANUAL_FIELD_MAPPING, 81cdf0e10cSrcweir STATE_FINAL_CONFIRM, 82cdf0e10cSrcweir WZS_INVALID_STATE 83cdf0e10cSrcweir ); 84cdf0e10cSrcweir declarePath( PATH_NO_SETTINGS, 85cdf0e10cSrcweir STATE_SELECT_ABTYPE, 86cdf0e10cSrcweir STATE_TABLE_SELECTION, 87cdf0e10cSrcweir STATE_MANUAL_FIELD_MAPPING, 88cdf0e10cSrcweir STATE_FINAL_CONFIRM, 89cdf0e10cSrcweir WZS_INVALID_STATE 90cdf0e10cSrcweir ); 91cdf0e10cSrcweir declarePath( PATH_NO_FIELDS, 92cdf0e10cSrcweir STATE_SELECT_ABTYPE, 93cdf0e10cSrcweir STATE_INVOKE_ADMIN_DIALOG, 94cdf0e10cSrcweir STATE_TABLE_SELECTION, 95cdf0e10cSrcweir STATE_FINAL_CONFIRM, 96cdf0e10cSrcweir WZS_INVALID_STATE 97cdf0e10cSrcweir ); 98cdf0e10cSrcweir declarePath( PATH_NO_SETTINGS_NO_FIELDS, 99cdf0e10cSrcweir STATE_SELECT_ABTYPE, 100cdf0e10cSrcweir STATE_TABLE_SELECTION, 101cdf0e10cSrcweir STATE_FINAL_CONFIRM, 102cdf0e10cSrcweir WZS_INVALID_STATE 103cdf0e10cSrcweir ); 104cdf0e10cSrcweir 105cdf0e10cSrcweir m_pPrevPage->SetHelpId(HID_ABSPILOT_PREVIOUS); 106cdf0e10cSrcweir m_pNextPage->SetHelpId(HID_ABSPILOT_NEXT); 107cdf0e10cSrcweir m_pCancel->SetHelpId(HID_ABSPILOT_CANCEL); 108cdf0e10cSrcweir m_pFinish->SetHelpId(HID_ABSPILOT_FINISH); 109cdf0e10cSrcweir m_pHelp->SetUniqueId(UID_ABSPILOT_HELP); 110cdf0e10cSrcweir 111cdf0e10cSrcweir m_pCancel->SetClickHdl( LINK( this, OAddessBookSourcePilot, OnCancelClicked) ); 112cdf0e10cSrcweir 113cdf0e10cSrcweir // some initial settings 114cdf0e10cSrcweir #ifdef MACOSX 115cdf0e10cSrcweir m_aSettings.eType = AST_MACAB; 116cdf0e10cSrcweir #elif WITH_MOZILLA 117cdf0e10cSrcweir #ifdef UNX 118cdf0e10cSrcweir m_aSettings.eType = AST_MORK; 119cdf0e10cSrcweir #else 120cdf0e10cSrcweir m_aSettings.eType = AST_OE; 121cdf0e10cSrcweir #endif 122cdf0e10cSrcweir #else 123cdf0e10cSrcweir m_aSettings.eType = AST_OTHER; 124cdf0e10cSrcweir #endif 125cdf0e10cSrcweir m_aSettings.sDataSourceName = String(ModuleRes(RID_STR_DEFAULT_NAME)); 126cdf0e10cSrcweir m_aSettings.bRegisterDataSource = false; 127cdf0e10cSrcweir m_aSettings.bIgnoreNoTable = false; 128cdf0e10cSrcweir 129cdf0e10cSrcweir defaultButton(WZB_NEXT); 130cdf0e10cSrcweir enableButtons(WZB_FINISH, sal_False); 131cdf0e10cSrcweir ActivatePage(); 132cdf0e10cSrcweir 133cdf0e10cSrcweir typeSelectionChanged( m_aSettings.eType ); 134cdf0e10cSrcweir } 135cdf0e10cSrcweir 136cdf0e10cSrcweir //--------------------------------------------------------------------- getStateDisplayName(WizardState _nState) const137cdf0e10cSrcweir String OAddessBookSourcePilot::getStateDisplayName( WizardState _nState ) const 138cdf0e10cSrcweir { 139cdf0e10cSrcweir sal_uInt16 nResId = 0; 140cdf0e10cSrcweir switch ( _nState ) 141cdf0e10cSrcweir { 142cdf0e10cSrcweir case STATE_SELECT_ABTYPE: nResId = STR_SELECT_ABTYPE; break; 143cdf0e10cSrcweir case STATE_INVOKE_ADMIN_DIALOG: nResId = STR_INVOKE_ADMIN_DIALOG; break; 144cdf0e10cSrcweir case STATE_TABLE_SELECTION: nResId = STR_TABLE_SELECTION; break; 145cdf0e10cSrcweir case STATE_MANUAL_FIELD_MAPPING: nResId = STR_MANUAL_FIELD_MAPPING; break; 146cdf0e10cSrcweir case STATE_FINAL_CONFIRM: nResId = STR_FINAL_CONFIRM; break; 147cdf0e10cSrcweir } 148cdf0e10cSrcweir DBG_ASSERT( nResId, "OAddessBookSourcePilot::getStateDisplayName: don't know this state!" ); 149cdf0e10cSrcweir 150cdf0e10cSrcweir String sDisplayName; 151cdf0e10cSrcweir if ( nResId ) 152cdf0e10cSrcweir { 153cdf0e10cSrcweir svt::OLocalResourceAccess aAccess( ModuleRes( RID_DLG_ADDRESSBOOKSOURCEPILOT ), RSC_MODALDIALOG ); 154cdf0e10cSrcweir sDisplayName = String( ModuleRes( nResId ) ); 155cdf0e10cSrcweir } 156cdf0e10cSrcweir 157cdf0e10cSrcweir return sDisplayName; 158cdf0e10cSrcweir } 159cdf0e10cSrcweir 160cdf0e10cSrcweir //--------------------------------------------------------------------- implCommitAll()161cdf0e10cSrcweir void OAddessBookSourcePilot::implCommitAll() 162cdf0e10cSrcweir { 163cdf0e10cSrcweir // in real, the data source already exists in the data source context 164cdf0e10cSrcweir // Thus, if the user changed the name, we have to rename the data source 165cdf0e10cSrcweir if ( m_aSettings.sDataSourceName != m_aNewDataSource.getName() ) 166cdf0e10cSrcweir m_aNewDataSource.rename( m_aSettings.sDataSourceName ); 167cdf0e10cSrcweir 168cdf0e10cSrcweir // 1. the data source 169cdf0e10cSrcweir m_aNewDataSource.store(); 170cdf0e10cSrcweir 171cdf0e10cSrcweir // 2. check if we need to register the data source 172cdf0e10cSrcweir if ( m_aSettings.bRegisterDataSource ) 173cdf0e10cSrcweir m_aNewDataSource.registerDataSource(m_aSettings.sRegisteredDataSourceName); 174cdf0e10cSrcweir 175cdf0e10cSrcweir // 3. write the data source / table names into the configuration 176cdf0e10cSrcweir addressconfig::writeTemplateAddressSource( getORB(), m_aSettings.bRegisterDataSource ? m_aSettings.sRegisteredDataSourceName : m_aSettings.sDataSourceName, m_aSettings.sSelectedTable ); 177cdf0e10cSrcweir 178cdf0e10cSrcweir // 4. write the field mapping 179cdf0e10cSrcweir fieldmapping::writeTemplateAddressFieldMapping( getORB(), m_aSettings.aFieldMapping ); 180cdf0e10cSrcweir } 181cdf0e10cSrcweir 182cdf0e10cSrcweir //--------------------------------------------------------------------- implCleanup()183cdf0e10cSrcweir void OAddessBookSourcePilot::implCleanup() 184cdf0e10cSrcweir { 185cdf0e10cSrcweir if ( m_aNewDataSource.isValid() ) 186cdf0e10cSrcweir m_aNewDataSource.remove(); 187cdf0e10cSrcweir } 188cdf0e10cSrcweir 189cdf0e10cSrcweir //--------------------------------------------------------------------- 190cdf0e10cSrcweir IMPL_LINK( OAddessBookSourcePilot, OnCancelClicked, void*, /*NOTINTERESTEDIN*/ ) 191cdf0e10cSrcweir { 192cdf0e10cSrcweir // do cleanups 193cdf0e10cSrcweir implCleanup(); 194cdf0e10cSrcweir 195cdf0e10cSrcweir // reset the click hdl 196cdf0e10cSrcweir m_pCancel->SetClickHdl( Link() ); 197cdf0e10cSrcweir // simulate the click again - this time, the default handling of the button will strike .... 198cdf0e10cSrcweir m_pCancel->Click(); 199cdf0e10cSrcweir 200cdf0e10cSrcweir return 0L; 201cdf0e10cSrcweir } 202cdf0e10cSrcweir 203cdf0e10cSrcweir //--------------------------------------------------------------------- Close()204cdf0e10cSrcweir sal_Bool OAddessBookSourcePilot::Close() 205cdf0e10cSrcweir { 206cdf0e10cSrcweir implCleanup(); 207cdf0e10cSrcweir 208cdf0e10cSrcweir return OAddessBookSourcePilot_Base::Close(); 209cdf0e10cSrcweir } 210cdf0e10cSrcweir 211cdf0e10cSrcweir //--------------------------------------------------------------------- onFinish()212cdf0e10cSrcweir sal_Bool OAddessBookSourcePilot::onFinish() 213cdf0e10cSrcweir { 214cdf0e10cSrcweir if ( !OAddessBookSourcePilot_Base::onFinish() ) 215cdf0e10cSrcweir return sal_False; 216cdf0e10cSrcweir 217cdf0e10cSrcweir implCommitAll(); 218cdf0e10cSrcweir 219cdf0e10cSrcweir addressconfig::markPilotSuccess( getORB() ); 220cdf0e10cSrcweir 221cdf0e10cSrcweir return sal_True; 222cdf0e10cSrcweir } 223cdf0e10cSrcweir 224cdf0e10cSrcweir //--------------------------------------------------------------------- enterState(WizardState _nState)225cdf0e10cSrcweir void OAddessBookSourcePilot::enterState( WizardState _nState ) 226cdf0e10cSrcweir { 227cdf0e10cSrcweir switch ( _nState ) 228cdf0e10cSrcweir { 229cdf0e10cSrcweir case STATE_SELECT_ABTYPE: 230cdf0e10cSrcweir impl_updateRoadmap( static_cast< TypeSelectionPage* >( GetPage( STATE_SELECT_ABTYPE ) )->getSelectedType() ); 231cdf0e10cSrcweir break; 232cdf0e10cSrcweir 233cdf0e10cSrcweir case STATE_FINAL_CONFIRM: 234cdf0e10cSrcweir if ( !needManualFieldMapping( ) ) 235cdf0e10cSrcweir implDoAutoFieldMapping(); 236cdf0e10cSrcweir break; 237cdf0e10cSrcweir 238cdf0e10cSrcweir case STATE_TABLE_SELECTION: 239cdf0e10cSrcweir implDefaultTableName(); 240cdf0e10cSrcweir break; 241cdf0e10cSrcweir } 242cdf0e10cSrcweir 243cdf0e10cSrcweir OAddessBookSourcePilot_Base::enterState(_nState); 244cdf0e10cSrcweir } 245cdf0e10cSrcweir 246cdf0e10cSrcweir //--------------------------------------------------------------------- prepareLeaveCurrentState(CommitPageReason _eReason)247cdf0e10cSrcweir sal_Bool OAddessBookSourcePilot::prepareLeaveCurrentState( CommitPageReason _eReason ) 248cdf0e10cSrcweir { 249cdf0e10cSrcweir if ( !OAddessBookSourcePilot_Base::prepareLeaveCurrentState( _eReason ) ) 250cdf0e10cSrcweir return sal_False; 251cdf0e10cSrcweir 252cdf0e10cSrcweir if ( _eReason == eTravelBackward ) 253cdf0e10cSrcweir return sal_True; 254cdf0e10cSrcweir 255cdf0e10cSrcweir sal_Bool bAllow = sal_True; 256cdf0e10cSrcweir 257cdf0e10cSrcweir switch ( getCurrentState() ) 258cdf0e10cSrcweir { 259cdf0e10cSrcweir case STATE_SELECT_ABTYPE: 260cdf0e10cSrcweir implCreateDataSource(); 261cdf0e10cSrcweir if ( needAdminInvokationPage() ) 262cdf0e10cSrcweir break; 263cdf0e10cSrcweir // no break here 264cdf0e10cSrcweir 265cdf0e10cSrcweir case STATE_INVOKE_ADMIN_DIALOG: 266cdf0e10cSrcweir if ( !connectToDataSource( sal_False ) ) 267cdf0e10cSrcweir { 268cdf0e10cSrcweir // connecting did not succeed -> do not allow proceeding 269cdf0e10cSrcweir bAllow = sal_False; 270cdf0e10cSrcweir break; 271cdf0e10cSrcweir } 272cdf0e10cSrcweir 273cdf0e10cSrcweir // ........................................................ 274cdf0e10cSrcweir // now that we connected to the data source, check whether we need the "table selection" page 275cdf0e10cSrcweir const StringBag& aTables = m_aNewDataSource.getTableNames(); 276cdf0e10cSrcweir 277cdf0e10cSrcweir if ( aTables.empty() ) 278cdf0e10cSrcweir { 279cdf0e10cSrcweir if ( RET_YES != QueryBox( this, ModuleRes( RID_QRY_NOTABLES ) ).Execute() ) 280cdf0e10cSrcweir { 281cdf0e10cSrcweir // cannot ask the user, or the user chose to use this data source, though there are no tables 282cdf0e10cSrcweir bAllow = sal_False; 283cdf0e10cSrcweir break; 284cdf0e10cSrcweir } 285cdf0e10cSrcweir 286cdf0e10cSrcweir m_aSettings.bIgnoreNoTable = true; 287cdf0e10cSrcweir } 288cdf0e10cSrcweir 289cdf0e10cSrcweir if ( aTables.size() == 1 ) 290cdf0e10cSrcweir // remember the one and only table we have 291cdf0e10cSrcweir m_aSettings.sSelectedTable = *aTables.begin(); 292cdf0e10cSrcweir 293cdf0e10cSrcweir break; 294cdf0e10cSrcweir } 295cdf0e10cSrcweir 296cdf0e10cSrcweir impl_updateRoadmap( m_aSettings.eType ); 297cdf0e10cSrcweir return bAllow; 298cdf0e10cSrcweir } 299cdf0e10cSrcweir 300cdf0e10cSrcweir //--------------------------------------------------------------------- implDefaultTableName()301cdf0e10cSrcweir void OAddessBookSourcePilot::implDefaultTableName() 302cdf0e10cSrcweir { 303cdf0e10cSrcweir const StringBag& rTableNames = getDataSource().getTableNames(); 304cdf0e10cSrcweir if ( rTableNames.end() != rTableNames.find( getSettings().sSelectedTable ) ) 305cdf0e10cSrcweir // already a valid table selected 306cdf0e10cSrcweir return; 307cdf0e10cSrcweir 308cdf0e10cSrcweir const sal_Char* pGuess = NULL; 309cdf0e10cSrcweir switch ( getSettings().eType ) 310cdf0e10cSrcweir { 311cdf0e10cSrcweir case AST_MORK : 312cdf0e10cSrcweir case AST_THUNDERBIRD : pGuess = "Personal Address book"; break; 313cdf0e10cSrcweir case AST_LDAP : pGuess = "LDAP Directory"; break; 314cdf0e10cSrcweir case AST_EVOLUTION : 315cdf0e10cSrcweir case AST_EVOLUTION_GROUPWISE: 316cdf0e10cSrcweir case AST_EVOLUTION_LDAP : pGuess = "Personal"; break; 317cdf0e10cSrcweir default: 318cdf0e10cSrcweir DBG_ERROR( "OAddessBookSourcePilot::implDefaultTableName: unhandled case!" ); 319cdf0e10cSrcweir return; 320cdf0e10cSrcweir } 321cdf0e10cSrcweir const ::rtl::OUString sGuess = ::rtl::OUString::createFromAscii( pGuess ); 322cdf0e10cSrcweir if ( rTableNames.end() != rTableNames.find( sGuess ) ) 323cdf0e10cSrcweir getSettings().sSelectedTable = sGuess; 324cdf0e10cSrcweir } 325cdf0e10cSrcweir 326cdf0e10cSrcweir //--------------------------------------------------------------------- implDoAutoFieldMapping()327cdf0e10cSrcweir void OAddessBookSourcePilot::implDoAutoFieldMapping() 328cdf0e10cSrcweir { 329cdf0e10cSrcweir DBG_ASSERT( !needManualFieldMapping( ), "OAddessBookSourcePilot::implDoAutoFieldMapping: invalid call!" ); 330cdf0e10cSrcweir 331cdf0e10cSrcweir fieldmapping::defaultMapping( getORB(), m_aSettings.aFieldMapping ); 332cdf0e10cSrcweir } 333cdf0e10cSrcweir 334cdf0e10cSrcweir //--------------------------------------------------------------------- implCreateDataSource()335cdf0e10cSrcweir void OAddessBookSourcePilot::implCreateDataSource() 336cdf0e10cSrcweir { 337cdf0e10cSrcweir if (m_aNewDataSource.isValid()) 338cdf0e10cSrcweir { // we already have a data source object 339cdf0e10cSrcweir if ( m_aSettings.eType == m_eNewDataSourceType ) 340cdf0e10cSrcweir // and it already has the correct type 341cdf0e10cSrcweir return; 342cdf0e10cSrcweir 343cdf0e10cSrcweir // it has a wrong type -> remove it 344cdf0e10cSrcweir m_aNewDataSource.remove(); 345cdf0e10cSrcweir } 346cdf0e10cSrcweir 347cdf0e10cSrcweir ODataSourceContext aContext( getORB() ); 348cdf0e10cSrcweir aContext.disambiguate( m_aSettings.sDataSourceName ); 349cdf0e10cSrcweir 350cdf0e10cSrcweir switch (m_aSettings.eType) 351cdf0e10cSrcweir { 352cdf0e10cSrcweir case AST_MORK: 353cdf0e10cSrcweir m_aNewDataSource = aContext.createNewMORK( m_aSettings.sDataSourceName ); 354cdf0e10cSrcweir break; 355cdf0e10cSrcweir 356cdf0e10cSrcweir case AST_THUNDERBIRD: 357cdf0e10cSrcweir m_aNewDataSource = aContext.createNewThunderbird( m_aSettings.sDataSourceName ); 358cdf0e10cSrcweir break; 359cdf0e10cSrcweir 360cdf0e10cSrcweir case AST_EVOLUTION: 361cdf0e10cSrcweir m_aNewDataSource = aContext.createNewEvolution( m_aSettings.sDataSourceName ); 362cdf0e10cSrcweir break; 363cdf0e10cSrcweir 364cdf0e10cSrcweir case AST_EVOLUTION_GROUPWISE: 365cdf0e10cSrcweir m_aNewDataSource = aContext.createNewEvolutionGroupwise( m_aSettings.sDataSourceName ); 366cdf0e10cSrcweir break; 367cdf0e10cSrcweir 368cdf0e10cSrcweir case AST_EVOLUTION_LDAP: 369cdf0e10cSrcweir m_aNewDataSource = aContext.createNewEvolutionLdap( m_aSettings.sDataSourceName ); 370cdf0e10cSrcweir break; 371cdf0e10cSrcweir 372cdf0e10cSrcweir case AST_KAB: 373cdf0e10cSrcweir m_aNewDataSource = aContext.createNewKab( m_aSettings.sDataSourceName ); 374cdf0e10cSrcweir break; 375cdf0e10cSrcweir 376cdf0e10cSrcweir case AST_MACAB: 377cdf0e10cSrcweir m_aNewDataSource = aContext.createNewMacab( m_aSettings.sDataSourceName ); 378cdf0e10cSrcweir break; 379cdf0e10cSrcweir 380cdf0e10cSrcweir case AST_LDAP: 381cdf0e10cSrcweir m_aNewDataSource = aContext.createNewLDAP( m_aSettings.sDataSourceName ); 382cdf0e10cSrcweir break; 383cdf0e10cSrcweir 384cdf0e10cSrcweir case AST_OUTLOOK: 385cdf0e10cSrcweir m_aNewDataSource = aContext.createNewOutlook( m_aSettings.sDataSourceName ); 386cdf0e10cSrcweir break; 387cdf0e10cSrcweir 388cdf0e10cSrcweir case AST_OE: 389cdf0e10cSrcweir m_aNewDataSource = aContext.createNewOE( m_aSettings.sDataSourceName ); 390cdf0e10cSrcweir break; 391cdf0e10cSrcweir 392cdf0e10cSrcweir case AST_OTHER: 393cdf0e10cSrcweir m_aNewDataSource = aContext.createNewDBase( m_aSettings.sDataSourceName ); 394cdf0e10cSrcweir break; 395cdf0e10cSrcweir 396cdf0e10cSrcweir case AST_INVALID: 397cdf0e10cSrcweir DBG_ERROR( "OAddessBookSourcePilot::implCreateDataSource: illegal data source type!" ); 398cdf0e10cSrcweir break; 399cdf0e10cSrcweir } 400cdf0e10cSrcweir m_eNewDataSourceType = m_aSettings.eType; 401cdf0e10cSrcweir } 402cdf0e10cSrcweir 403cdf0e10cSrcweir //--------------------------------------------------------------------- connectToDataSource(sal_Bool _bForceReConnect)404cdf0e10cSrcweir sal_Bool OAddessBookSourcePilot::connectToDataSource( sal_Bool _bForceReConnect ) 405cdf0e10cSrcweir { 406cdf0e10cSrcweir DBG_ASSERT( m_aNewDataSource.isValid(), "OAddessBookSourcePilot::implConnect: invalid current data source!" ); 407cdf0e10cSrcweir 408cdf0e10cSrcweir WaitObject aWaitCursor( this ); 409cdf0e10cSrcweir if ( _bForceReConnect && m_aNewDataSource.isConnected( ) ) 410cdf0e10cSrcweir m_aNewDataSource.disconnect( ); 411cdf0e10cSrcweir 412cdf0e10cSrcweir return m_aNewDataSource.connect( this ); 413cdf0e10cSrcweir } 414cdf0e10cSrcweir 415cdf0e10cSrcweir //--------------------------------------------------------------------- createPage(WizardState _nState)416cdf0e10cSrcweir OWizardPage* OAddessBookSourcePilot::createPage(WizardState _nState) 417cdf0e10cSrcweir { 418cdf0e10cSrcweir switch (_nState) 419cdf0e10cSrcweir { 420cdf0e10cSrcweir case STATE_SELECT_ABTYPE: 421cdf0e10cSrcweir return new TypeSelectionPage( this ); 422cdf0e10cSrcweir 423cdf0e10cSrcweir case STATE_INVOKE_ADMIN_DIALOG: 424cdf0e10cSrcweir return new AdminDialogInvokationPage( this ); 425cdf0e10cSrcweir 426cdf0e10cSrcweir case STATE_TABLE_SELECTION: 427cdf0e10cSrcweir return new TableSelectionPage( this ); 428cdf0e10cSrcweir 429cdf0e10cSrcweir case STATE_MANUAL_FIELD_MAPPING: 430cdf0e10cSrcweir return new FieldMappingPage( this ); 431cdf0e10cSrcweir 432cdf0e10cSrcweir case STATE_FINAL_CONFIRM: 433cdf0e10cSrcweir return new FinalPage( this ); 434cdf0e10cSrcweir 435cdf0e10cSrcweir default: 436cdf0e10cSrcweir DBG_ERROR("OAddessBookSourcePilot::createPage: invalid state!"); 437cdf0e10cSrcweir return NULL; 438cdf0e10cSrcweir } 439cdf0e10cSrcweir } 440cdf0e10cSrcweir 441cdf0e10cSrcweir //--------------------------------------------------------------------- impl_updateRoadmap(AddressSourceType _eType)442cdf0e10cSrcweir void OAddessBookSourcePilot::impl_updateRoadmap( AddressSourceType _eType ) 443cdf0e10cSrcweir { 444cdf0e10cSrcweir bool bSettingsPage = needAdminInvokationPage( _eType ); 445cdf0e10cSrcweir bool bTablesPage = needTableSelection( _eType ); 446cdf0e10cSrcweir bool bFieldsPage = needManualFieldMapping( _eType ); 447cdf0e10cSrcweir 448cdf0e10cSrcweir bool bConnected = m_aNewDataSource.isConnected(); 449cdf0e10cSrcweir bool bCanSkipTables = 450cdf0e10cSrcweir ( m_aNewDataSource.hasTable( m_aSettings.sSelectedTable ) 451cdf0e10cSrcweir || m_aSettings.bIgnoreNoTable 452cdf0e10cSrcweir ); 453cdf0e10cSrcweir 454cdf0e10cSrcweir enableState( STATE_INVOKE_ADMIN_DIALOG, bSettingsPage ); 455cdf0e10cSrcweir 456cdf0e10cSrcweir enableState( STATE_TABLE_SELECTION, 457cdf0e10cSrcweir bTablesPage && ( bConnected ? !bCanSkipTables : !bSettingsPage ) 458cdf0e10cSrcweir // if we do not need a settings page, we connect upon "Next" on the first page 459cdf0e10cSrcweir ); 460cdf0e10cSrcweir 461cdf0e10cSrcweir enableState( STATE_MANUAL_FIELD_MAPPING, 462cdf0e10cSrcweir bFieldsPage && bConnected && m_aNewDataSource.hasTable( m_aSettings.sSelectedTable ) 463cdf0e10cSrcweir ); 464cdf0e10cSrcweir 465cdf0e10cSrcweir enableState( STATE_FINAL_CONFIRM, 466cdf0e10cSrcweir bConnected && bCanSkipTables 467cdf0e10cSrcweir ); 468cdf0e10cSrcweir } 469cdf0e10cSrcweir 470cdf0e10cSrcweir //--------------------------------------------------------------------- typeSelectionChanged(AddressSourceType _eType)471cdf0e10cSrcweir void OAddessBookSourcePilot::typeSelectionChanged( AddressSourceType _eType ) 472cdf0e10cSrcweir { 473cdf0e10cSrcweir PathId nCurrentPathID( PATH_COMPLETE ); 474cdf0e10cSrcweir bool bSettingsPage = needAdminInvokationPage( _eType ); 475cdf0e10cSrcweir bool bFieldsPage = needManualFieldMapping( _eType ); 476cdf0e10cSrcweir if ( !bSettingsPage ) 477cdf0e10cSrcweir if ( !bFieldsPage ) 478cdf0e10cSrcweir nCurrentPathID = PATH_NO_SETTINGS_NO_FIELDS; 479cdf0e10cSrcweir else 480cdf0e10cSrcweir nCurrentPathID = PATH_NO_SETTINGS; 481cdf0e10cSrcweir else 482cdf0e10cSrcweir if ( !bFieldsPage ) 483cdf0e10cSrcweir nCurrentPathID = PATH_NO_FIELDS; 484cdf0e10cSrcweir else 485cdf0e10cSrcweir nCurrentPathID = PATH_COMPLETE; 486cdf0e10cSrcweir activatePath( nCurrentPathID, true ); 487cdf0e10cSrcweir 488cdf0e10cSrcweir m_aNewDataSource.disconnect(); 489cdf0e10cSrcweir m_aSettings.bIgnoreNoTable = false; 490cdf0e10cSrcweir impl_updateRoadmap( _eType ); 491cdf0e10cSrcweir } 492cdf0e10cSrcweir 493cdf0e10cSrcweir //......................................................................... 494cdf0e10cSrcweir } // namespace abp 495cdf0e10cSrcweir //......................................................................... 496cdf0e10cSrcweir 497