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