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