1 /************************************************************************* 2 * 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * Copyright 2000, 2010 Oracle and/or its affiliates. 6 * 7 * OpenOffice.org - a multi-platform office productivity suite 8 * 9 * This file is part of OpenOffice.org. 10 * 11 * OpenOffice.org is free software: you can redistribute it and/or modify 12 * it under the terms of the GNU Lesser General Public License version 3 13 * only, as published by the Free Software Foundation. 14 * 15 * OpenOffice.org is distributed in the hope that it will be useful, 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 * GNU Lesser General Public License version 3 for more details 19 * (a copy is included in the LICENSE file that accompanied this code). 20 * 21 * You should have received a copy of the GNU Lesser General Public License 22 * version 3 along with OpenOffice.org. If not, see 23 * <http://www.openoffice.org/license.html> 24 * for a copy of the LGPLv3 License. 25 * 26 ************************************************************************/ 27 28 // MARKER(update_precomp.py): autogen include statement, do not remove 29 #include "precompiled_dbaccess.hxx" 30 31 #ifndef DBAUI_CONNECTIONPAGE_HXX 32 #include "ConnectionPage.hxx" 33 #endif 34 #ifndef DBAUI_CONNECTIONPAGE_HRC 35 #include "ConnectionPage.hrc" 36 #endif 37 #ifndef _DBU_DLG_HRC_ 38 #include "dbu_dlg.hrc" 39 #endif 40 #ifndef DBACCESS_DSMETA_HXX 41 #include "dsmeta.hxx" 42 #endif 43 #ifndef _SFXITEMSET_HXX 44 #include <svl/itemset.hxx> 45 #endif 46 #ifndef INCLUDED_SVTOOLS_PATHOPTIONS_HXX 47 #include <unotools/pathoptions.hxx> 48 #endif 49 #ifndef _SFXSTRITEM_HXX 50 #include <svl/stritem.hxx> 51 #endif 52 #ifndef _SFXENUMITEM_HXX 53 #include <svl/eitem.hxx> 54 #endif 55 #ifndef _SFXINTITEM_HXX 56 #include <svl/intitem.hxx> 57 #endif 58 #ifndef INCLUDED_SVTOOLS_MODULEOPTIONS_HXX 59 #include <unotools/moduleoptions.hxx> 60 #endif 61 #ifndef _DBAUI_DATASOURCEITEMS_HXX_ 62 #include "dsitems.hxx" 63 #endif 64 #ifndef _DBA_DBACCESS_HELPID_HRC_ 65 #include "dbaccess_helpid.hrc" 66 #endif 67 #ifndef _DBAUI_LOCALRESACCESS_HXX_ 68 #include "localresaccess.hxx" 69 #endif 70 #ifndef _OSL_PROCESS_H_ 71 #include <osl/process.h> 72 #endif 73 #ifndef _SV_MSGBOX_HXX 74 #include <vcl/msgbox.hxx> 75 #endif 76 #ifndef _FILEDLGHELPER_HXX 77 #include <sfx2/filedlghelper.hxx> 78 #endif 79 #ifndef _DBAUI_DBADMIN_HXX_ 80 #include "dbadmin.hxx" 81 #endif 82 #ifndef _COMPHELPER_TYPES_HXX_ 83 #include <comphelper/types.hxx> 84 #endif 85 #ifndef _VCL_STDTEXT_HXX 86 #include <vcl/stdtext.hxx> 87 #endif 88 #ifndef _DBAUI_SQLMESSAGE_HXX_ 89 #include "sqlmessage.hxx" 90 #endif 91 #ifndef _DBAUI_ODBC_CONFIG_HXX_ 92 #include "odbcconfig.hxx" 93 #endif 94 #ifndef _DBAUI_DSSELECT_HXX_ 95 #include "dsselect.hxx" 96 #endif 97 #ifndef SVTOOLS_FILENOTATION_HXX_ 98 #include <svl/filenotation.hxx> 99 #endif 100 #ifndef DBACCESS_SHARED_DBUSTRINGS_HRC 101 #include "dbustrings.hrc" 102 #endif 103 #ifndef _COM_SUN_STAR_UI_DIALOGS_XFOLDERPICKER_HPP_ 104 #include <com/sun/star/ui/dialogs/XFolderPicker.hpp> 105 #endif 106 #ifndef _COM_SUN_STAR_SDBC_XROW_HPP_ 107 #include <com/sun/star/sdbc/XRow.hpp> 108 #endif 109 #ifndef _COM_SUN_STAR_AWT_XWINDOW_HPP_ 110 #include <com/sun/star/awt/XWindow.hpp> 111 #endif 112 // #106016# ------------------------------------ 113 #ifndef _COM_SUN_STAR_TASK_XINTERACTIONHANDLER_HPP_ 114 #include <com/sun/star/task/XInteractionHandler.hpp> 115 #endif 116 #ifndef _COM_SUN_STAR_TASK_XPROGRESSHANDLER_HPP_ 117 #include <com/sun/star/ucb/XProgressHandler.hpp> 118 #endif 119 #ifndef _COM_SUN_STAR_SDBC_XCONNECTION_HPP_ 120 #include <com/sun/star/sdbc/XConnection.hpp> 121 #endif 122 #ifndef _COM_SUN_STAR_UI_DIALOGS_EXTENDEDFILEPICKERELEMENTIDS_HPP_ 123 #include <com/sun/star/ui/dialogs/ExtendedFilePickerElementIds.hpp> 124 #endif 125 #ifndef _COM_SUN_STAR_UI_DIALOGS_XFILEPICKERCONTROLACCESS_HPP_ 126 #include <com/sun/star/ui/dialogs/XFilePickerControlAccess.hpp> 127 #endif 128 #ifndef _COM_SUN_STAR_UI_DIALOGS_XFILEPICKER_HPP_ 129 #include <com/sun/star/ui/dialogs/XFilePicker.hpp> 130 #endif 131 #ifndef DBAUI_TOOLS_HXX 132 #include "UITools.hxx" 133 #endif 134 #ifndef _UNOTOOLS_LOCALFILEHELPER_HXX 135 #include <unotools/localfilehelper.hxx> 136 #endif 137 #ifndef _UNOTOOLS_UCBHELPER_HXX 138 #include <unotools/ucbhelper.hxx> 139 #endif 140 #ifndef _UCBHELPER_COMMANDENVIRONMENT_HXX 141 #include <ucbhelper/commandenvironment.hxx> 142 #endif 143 #ifndef DBAUI_FILEPICKER_INTERACTION_HXX 144 #include "finteraction.hxx" 145 #endif 146 #ifndef _CONNECTIVITY_COMMONTOOLS_HXX_ 147 #include <connectivity/CommonTools.hxx> 148 #endif 149 #ifndef _URLOBJ_HXX 150 #include <tools/urlobj.hxx> 151 #endif 152 #ifndef _SFX_DOCFILT_HACK_HXX 153 #include <sfx2/docfilt.hxx> 154 #endif 155 #include "dsnItem.hxx" 156 #if defined(WNT) 157 #define _ADO_DATALINK_BROWSE_ 158 #endif 159 160 #ifdef _ADO_DATALINK_BROWSE_ 161 #if defined( WNT ) 162 #include <tools/prewin.h> 163 #include <windows.h> 164 #include <tools/postwin.h> 165 #endif 166 #ifndef _SV_SYSDATA_HXX 167 #include <vcl/sysdata.hxx> 168 #endif 169 #ifndef _DBAUI_ADO_DATALINK_HXX_ 170 #include "adodatalinks.hxx" 171 #endif 172 #endif //_ADO_DATALINK_BROWSE_ 173 174 #include "AutoControls.hrc" 175 176 //......................................................................... 177 namespace dbaui 178 { 179 //......................................................................... 180 using namespace ::com::sun::star::uno; 181 using namespace ::com::sun::star::ucb; 182 using namespace ::com::sun::star::ui::dialogs; 183 using namespace ::com::sun::star::sdbc; 184 using namespace ::com::sun::star::beans; 185 using namespace ::com::sun::star::lang; 186 using namespace ::com::sun::star::container; 187 using namespace ::dbtools; 188 using namespace ::svt; 189 190 SfxTabPage* OConnectionTabPage::Create( Window* pParent, const SfxItemSet& _rAttrSet ) 191 { 192 return ( new OConnectionTabPage( pParent, _rAttrSet ) ); 193 } 194 //======================================================================== 195 //= OConnectionTabPage 196 //======================================================================== 197 DBG_NAME(OConnectionTabPage) 198 OConnectionTabPage::OConnectionTabPage(Window* pParent, const SfxItemSet& _rCoreAttrs) 199 :OConnectionHelper(pParent, ModuleRes(PAGE_CONNECTION), _rCoreAttrs) 200 ,m_bUserGrabFocus(sal_True) 201 ,m_aFL1(this, ModuleRes(FL_SEPARATOR1)) 202 ,m_aFL2(this, ModuleRes(FL_SEPARATOR2)) 203 ,m_aUserNameLabel(this, ModuleRes(FT_USERNAME)) 204 ,m_aUserName(this, ModuleRes(ET_USERNAME)) 205 ,m_aPasswordRequired(this, ModuleRes(CB_PASSWORD_REQUIRED)) 206 ,m_aFL3(this, ModuleRes(FL_SEPARATOR3)) 207 ,m_aJavaDriverLabel(this, ModuleRes(FT_JDBCDRIVERCLASS)) 208 ,m_aJavaDriver(this, ModuleRes(ET_JDBCDRIVERCLASS)) 209 ,m_aTestJavaDriver(this, ModuleRes(PB_TESTDRIVERCLASS)) 210 ,m_aTestConnection(this, ModuleRes(PB_TESTCONNECTION)) 211 { 212 DBG_CTOR(OConnectionTabPage,NULL); 213 m_aConnectionURL.SetModifyHdl(LINK(this, OConnectionTabPage, OnEditModified)); 214 m_aJavaDriver.SetModifyHdl(getControlModifiedLink()); 215 m_aJavaDriver.SetModifyHdl(LINK(this, OConnectionTabPage, OnEditModified)); 216 m_aUserName.SetModifyHdl(getControlModifiedLink()); 217 m_aPasswordRequired.SetClickHdl(getControlModifiedLink()); 218 219 m_aTestConnection.SetClickHdl(LINK(this,OGenericAdministrationPage,OnTestConnectionClickHdl)); 220 m_aTestJavaDriver.SetClickHdl(LINK(this,OConnectionTabPage,OnTestJavaClickHdl)); 221 222 FreeResource(); 223 224 LayoutHelper::fitSizeRightAligned( m_aTestConnection ); 225 } 226 227 // ----------------------------------------------------------------------- 228 OConnectionTabPage::~OConnectionTabPage() 229 { 230 DBG_DTOR(OConnectionTabPage,NULL); 231 } 232 233 // ----------------------------------------------------------------------- 234 void OConnectionTabPage::implInitControls(const SfxItemSet& _rSet, sal_Bool _bSaveValue) 235 { 236 // check whether or not the selection is invalid or readonly (invalid implies readonly, but not vice versa) 237 sal_Bool bValid, bReadonly; 238 getFlags(_rSet, bValid, bReadonly); 239 240 m_eType = m_pAdminDialog->getDatasourceType(_rSet); 241 OConnectionHelper::implInitControls( _rSet, _bSaveValue); 242 243 LocalResourceAccess aLocRes( PAGE_CONNECTION, RSC_TABPAGE ); 244 ::dbaccess::DATASOURCE_TYPE eType = m_pCollection->determineType(m_eType); 245 switch( eType ) 246 { 247 case ::dbaccess::DST_DBASE: 248 m_aFT_Connection.SetText(String(ModuleRes(STR_DBASE_PATH_OR_FILE))); 249 m_aConnectionURL.SetHelpId(HID_DSADMIN_DBASE_PATH); 250 break; 251 case ::dbaccess::DST_FLAT: 252 m_aFT_Connection.SetText(String(ModuleRes(STR_FLAT_PATH_OR_FILE))); 253 m_aConnectionURL.SetHelpId(HID_DSADMIN_FLAT_PATH); 254 break; 255 case ::dbaccess::DST_CALC: 256 m_aFT_Connection.SetText(String(ModuleRes(STR_CALC_PATH_OR_FILE))); 257 m_aConnectionURL.SetHelpId(HID_DSADMIN_CALC_PATH); 258 break; 259 case ::dbaccess::DST_ADABAS: 260 m_aFT_Connection.SetText(String(ModuleRes(STR_ADABAS_DATABASE_NAME))); 261 m_aConnectionURL.SetHelpId(HID_DSADMIN_ADABAS_DATABASE); 262 break; 263 case ::dbaccess::DST_ADO: 264 m_aFT_Connection.SetText(String(ModuleRes(STR_COMMONURL))); 265 break; 266 case ::dbaccess::DST_MSACCESS: 267 case ::dbaccess::DST_MSACCESS_2007: 268 m_aFT_Connection.SetText(String(ModuleRes(STR_MSACCESS_MDB_FILE))); 269 m_aConnectionURL.SetHelpId(HID_DSADMIN_MSACCESS_MDB_FILE); 270 break; 271 case ::dbaccess::DST_MYSQL_NATIVE: 272 case ::dbaccess::DST_MYSQL_JDBC: 273 m_aFT_Connection.SetText(String(ModuleRes(STR_MYSQL_DATABASE_NAME))); 274 m_aConnectionURL.SetHelpId( HID_DSADMIN_MYSQL_DATABASE ); 275 break; 276 case ::dbaccess::DST_ORACLE_JDBC: 277 m_aFT_Connection.SetText(String(ModuleRes(STR_ORACLE_DATABASE_NAME))); 278 m_aConnectionURL.SetHelpId(HID_DSADMIN_ORACLE_DATABASE); 279 break; 280 case ::dbaccess::DST_MYSQL_ODBC: 281 case ::dbaccess::DST_ODBC: 282 m_aFT_Connection.SetText(String(ModuleRes(STR_NAME_OF_ODBC_DATASOURCE))); 283 m_aConnectionURL.SetHelpId( eType == ::dbaccess::DST_MYSQL_ODBC ? HID_DSADMIN_MYSQL_ODBC_DATASOURCE : HID_DSADMIN_ODBC_DATASOURCE); 284 break; 285 case ::dbaccess::DST_LDAP: 286 m_aFT_Connection.SetText(String(ModuleRes(STR_HOSTNAME))); 287 m_aConnectionURL.SetHelpId( HID_DSADMIN_LDAP_HOSTNAME ); 288 break; 289 case ::dbaccess::DST_MOZILLA: 290 m_aFT_Connection.SetText(String(ModuleRes(STR_MOZILLA_PROFILE_NAME))); 291 m_aConnectionURL.SetHelpId( HID_DSADMIN_MOZILLA_PROFILE_NAME ); 292 break; 293 case ::dbaccess::DST_THUNDERBIRD: 294 m_aFT_Connection.SetText(String(ModuleRes(STR_THUNDERBIRD_PROFILE_NAME))); 295 m_aConnectionURL.SetHelpId( HID_DSADMIN_THUNDERBIRD_PROFILE_NAME ); 296 break; 297 case ::dbaccess::DST_OUTLOOK: 298 case ::dbaccess::DST_OUTLOOKEXP: 299 case ::dbaccess::DST_EVOLUTION: 300 case ::dbaccess::DST_EVOLUTION_GROUPWISE: 301 case ::dbaccess::DST_EVOLUTION_LDAP: 302 case ::dbaccess::DST_KAB: 303 case ::dbaccess::DST_MACAB: 304 m_aFT_Connection.SetText(String(ModuleRes(STR_NO_ADDITIONAL_SETTINGS))); 305 { 306 String sText = m_aFT_Connection.GetText(); 307 sText.SearchAndReplaceAscii("%test",m_aTestConnection.GetText()); 308 String sTemp; 309 sText.SearchAndReplaceAscii("~",sTemp); 310 m_aFT_Connection.SetText(sText); 311 } 312 m_aConnectionURL.Hide(); 313 break; 314 case ::dbaccess::DST_JDBC: 315 default: 316 m_aFT_Connection.SetText(String(ModuleRes(STR_COMMONURL))); 317 break; 318 } 319 320 ; 321 AuthenticationMode eAuthMode( DataSourceMetaData::getAuthentication( m_eType ) ); 322 bool bShowUserAuthenfication = ( eAuthMode != AuthNone ); 323 bool bShowUser = ( eAuthMode == AuthUserPwd ); 324 325 m_aPB_Connection.SetHelpId(HID_DSADMIN_BROWSECONN); 326 m_aFL2.Show( bShowUserAuthenfication ); 327 m_aUserNameLabel.Show( bShowUser && bShowUserAuthenfication ); 328 m_aUserName.Show( bShowUser && bShowUserAuthenfication ); 329 m_aPasswordRequired.Show( bShowUserAuthenfication ); 330 if ( !bShowUser && bShowUserAuthenfication ) 331 m_aPasswordRequired.SetPosPixel(m_aUserNameLabel.GetPosPixel()); 332 333 // collect the items 334 SFX_ITEMSET_GET(_rSet, pUidItem, SfxStringItem, DSID_USER, sal_True); 335 336 SFX_ITEMSET_GET(_rSet, pJdbcDrvItem, SfxStringItem, DSID_JDBCDRIVERCLASS, sal_True); 337 SFX_ITEMSET_GET(_rSet, pUrlItem, SfxStringItem, DSID_CONNECTURL, sal_True); 338 SFX_ITEMSET_GET(_rSet, pAllowEmptyPwd, SfxBoolItem, DSID_PASSWORDREQUIRED, sal_True); 339 340 // forward the values to the controls 341 if ( bValid ) 342 { 343 m_aUserName.SetText(pUidItem->GetValue()); 344 m_aPasswordRequired.Check(pAllowEmptyPwd->GetValue()); 345 346 String sUrl = pUrlItem->GetValue(); 347 setURL( sUrl ); 348 349 const sal_Bool bEnableJDBC = m_pCollection->determineType(m_eType) == ::dbaccess::DST_JDBC; 350 if ( !pJdbcDrvItem->GetValue().Len() ) 351 { 352 String sDefaultJdbcDriverName = m_pCollection->getJavaDriverClass(m_eType); 353 if ( sDefaultJdbcDriverName.Len() ) 354 { 355 m_aJavaDriver.SetText(sDefaultJdbcDriverName); 356 m_aJavaDriver.SetModifyFlag(); 357 } 358 } // if ( !pJdbcDrvItem->GetValue().Len() ) 359 else 360 m_aJavaDriver.SetText(pJdbcDrvItem->GetValue()); 361 362 m_aJavaDriverLabel.Show(bEnableJDBC); 363 m_aJavaDriver.Show(bEnableJDBC); 364 m_aTestJavaDriver.Show(bEnableJDBC); 365 m_aTestJavaDriver.Enable( m_aJavaDriver.GetText().Len() != 0); 366 m_aFL3.Show(bEnableJDBC); 367 368 checkTestConnection(); 369 370 m_aUserName.ClearModifyFlag(); 371 m_aConnectionURL.ClearModifyFlag(); 372 m_aJavaDriver.ClearModifyFlag(); 373 } 374 } 375 // ----------------------------------------------------------------------- 376 void OConnectionTabPage::fillWindows(::std::vector< ISaveValueWrapper* >& _rControlList) 377 { 378 _rControlList.push_back(new ODisableWrapper<FixedLine>(&m_aFL1)); 379 380 _rControlList.push_back(new ODisableWrapper<FixedLine>(&m_aFL2)); 381 _rControlList.push_back(new ODisableWrapper<FixedText>(&m_aJavaDriverLabel)); 382 _rControlList.push_back(new ODisableWrapper<PushButton>(&m_aTestJavaDriver)); 383 384 _rControlList.push_back(new ODisableWrapper<FixedLine>(&m_aFL3)); 385 _rControlList.push_back(new ODisableWrapper<FixedText>(&m_aUserNameLabel)); 386 _rControlList.push_back(new ODisableWrapper<PushButton>(&m_aTestConnection)); 387 OConnectionHelper::fillWindows(_rControlList); 388 389 } 390 // ----------------------------------------------------------------------- 391 void OConnectionTabPage::fillControls(::std::vector< ISaveValueWrapper* >& _rControlList) 392 { 393 _rControlList.push_back(new OSaveValueWrapper<Edit>(&m_aJavaDriver)); 394 _rControlList.push_back(new OSaveValueWrapper<Edit>(&m_aUserName)); 395 _rControlList.push_back(new OSaveValueWrapper<CheckBox>(&m_aPasswordRequired)); 396 OConnectionHelper::fillControls(_rControlList); 397 } 398 399 // ----------------------------------------------------------------------- 400 sal_Bool OConnectionTabPage::FillItemSet(SfxItemSet& _rSet) 401 { 402 sal_Bool bChangedSomething = sal_False; 403 404 if (m_aUserName.GetText() != m_aUserName.GetSavedValue()) 405 { 406 _rSet.Put(SfxStringItem(DSID_USER, m_aUserName.GetText())); 407 _rSet.Put(SfxStringItem(DSID_PASSWORD, String())); 408 bChangedSomething = sal_True; 409 } 410 411 fillBool(_rSet,&m_aPasswordRequired,DSID_PASSWORDREQUIRED,bChangedSomething); 412 413 if ( m_pCollection->determineType(m_eType) == ::dbaccess::DST_JDBC ) 414 { 415 fillString(_rSet,&m_aJavaDriver, DSID_JDBCDRIVERCLASS, bChangedSomething); 416 } 417 418 fillString(_rSet,&m_aConnectionURL, DSID_CONNECTURL, bChangedSomething); 419 420 return bChangedSomething; 421 } 422 // ----------------------------------------------------------------------- 423 IMPL_LINK(OConnectionTabPage, OnTestJavaClickHdl, PushButton*, /*_pButton*/) 424 { 425 OSL_ENSURE(m_pAdminDialog,"No Admin dialog set! ->GPF"); 426 sal_Bool bSuccess = sal_False; 427 try 428 { 429 if ( m_aJavaDriver.GetText().Len() ) 430 { 431 ::rtl::Reference< jvmaccess::VirtualMachine > xJVM = ::connectivity::getJavaVM(m_pAdminDialog->getORB()); 432 bSuccess = ::connectivity::existsJavaClassByName(xJVM,m_aJavaDriver.GetText()); 433 } 434 } 435 catch(Exception&) 436 { 437 } 438 439 sal_uInt16 nMessage = bSuccess ? STR_JDBCDRIVER_SUCCESS : STR_JDBCDRIVER_NO_SUCCESS; 440 OSQLMessageBox aMsg( this, String( ModuleRes( nMessage ) ), String() ); 441 aMsg.Execute(); 442 return 0L; 443 } 444 // ----------------------------------------------------------------------- 445 bool OConnectionTabPage::checkTestConnection() 446 { 447 OSL_ENSURE(m_pAdminDialog,"No Admin dialog set! ->GPF"); 448 sal_Bool bEnableTestConnection = !m_aConnectionURL.IsVisible() || (m_aConnectionURL.GetTextNoPrefix().Len() != 0); 449 if ( m_pCollection->determineType(m_eType) == ::dbaccess::DST_JDBC ) 450 bEnableTestConnection = bEnableTestConnection && (m_aJavaDriver.GetText().Len() != 0); 451 m_aTestConnection.Enable(bEnableTestConnection); 452 return true; 453 } 454 // ----------------------------------------------------------------------- 455 IMPL_LINK(OConnectionTabPage, OnEditModified, Edit*, _pEdit) 456 { 457 if ( _pEdit == &m_aJavaDriver ) 458 m_aTestJavaDriver.Enable( m_aJavaDriver.GetText().Len() != 0 ); 459 460 checkTestConnection(); 461 // tell the listener we were modified 462 callModifiedHdl(); 463 return 0L; 464 } 465 //......................................................................... 466 } // namespace dbaui 467 //......................................................................... 468 469