| /************************************************************** |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| *************************************************************/ |
| |
| |
| |
| // MARKER(update_precomp.py): autogen include statement, do not remove |
| #include "precompiled_dbaccess.hxx" |
| |
| #ifndef DBAUI_CONNECTIONPAGE_HXX |
| #include "ConnectionPage.hxx" |
| #endif |
| #ifndef DBAUI_CONNECTIONPAGE_HRC |
| #include "ConnectionPage.hrc" |
| #endif |
| #ifndef _DBU_DLG_HRC_ |
| #include "dbu_dlg.hrc" |
| #endif |
| #ifndef DBACCESS_DSMETA_HXX |
| #include "dsmeta.hxx" |
| #endif |
| #ifndef _SFXITEMSET_HXX |
| #include <svl/itemset.hxx> |
| #endif |
| #ifndef INCLUDED_SVTOOLS_PATHOPTIONS_HXX |
| #include <unotools/pathoptions.hxx> |
| #endif |
| #ifndef _SFXSTRITEM_HXX |
| #include <svl/stritem.hxx> |
| #endif |
| #ifndef _SFXENUMITEM_HXX |
| #include <svl/eitem.hxx> |
| #endif |
| #ifndef _SFXINTITEM_HXX |
| #include <svl/intitem.hxx> |
| #endif |
| #ifndef INCLUDED_SVTOOLS_MODULEOPTIONS_HXX |
| #include <unotools/moduleoptions.hxx> |
| #endif |
| #ifndef _DBAUI_DATASOURCEITEMS_HXX_ |
| #include "dsitems.hxx" |
| #endif |
| #ifndef _DBA_DBACCESS_HELPID_HRC_ |
| #include "dbaccess_helpid.hrc" |
| #endif |
| #ifndef _DBAUI_LOCALRESACCESS_HXX_ |
| #include "localresaccess.hxx" |
| #endif |
| #ifndef _OSL_PROCESS_H_ |
| #include <osl/process.h> |
| #endif |
| #ifndef _SV_MSGBOX_HXX |
| #include <vcl/msgbox.hxx> |
| #endif |
| #ifndef _FILEDLGHELPER_HXX |
| #include <sfx2/filedlghelper.hxx> |
| #endif |
| #ifndef _DBAUI_DBADMIN_HXX_ |
| #include "dbadmin.hxx" |
| #endif |
| #ifndef _COMPHELPER_TYPES_HXX_ |
| #include <comphelper/types.hxx> |
| #endif |
| #ifndef _VCL_STDTEXT_HXX |
| #include <vcl/stdtext.hxx> |
| #endif |
| #ifndef _DBAUI_SQLMESSAGE_HXX_ |
| #include "sqlmessage.hxx" |
| #endif |
| #ifndef _DBAUI_ODBC_CONFIG_HXX_ |
| #include "odbcconfig.hxx" |
| #endif |
| #ifndef _DBAUI_DSSELECT_HXX_ |
| #include "dsselect.hxx" |
| #endif |
| #ifndef SVTOOLS_FILENOTATION_HXX_ |
| #include <svl/filenotation.hxx> |
| #endif |
| #ifndef DBACCESS_SHARED_DBUSTRINGS_HRC |
| #include "dbustrings.hrc" |
| #endif |
| #ifndef _COM_SUN_STAR_UI_DIALOGS_XFOLDERPICKER_HPP_ |
| #include <com/sun/star/ui/dialogs/XFolderPicker.hpp> |
| #endif |
| #ifndef _COM_SUN_STAR_SDBC_XROW_HPP_ |
| #include <com/sun/star/sdbc/XRow.hpp> |
| #endif |
| #ifndef _COM_SUN_STAR_AWT_XWINDOW_HPP_ |
| #include <com/sun/star/awt/XWindow.hpp> |
| #endif |
| // #106016# ------------------------------------ |
| #ifndef _COM_SUN_STAR_TASK_XINTERACTIONHANDLER_HPP_ |
| #include <com/sun/star/task/XInteractionHandler.hpp> |
| #endif |
| #ifndef _COM_SUN_STAR_TASK_XPROGRESSHANDLER_HPP_ |
| #include <com/sun/star/ucb/XProgressHandler.hpp> |
| #endif |
| #ifndef _COM_SUN_STAR_SDBC_XCONNECTION_HPP_ |
| #include <com/sun/star/sdbc/XConnection.hpp> |
| #endif |
| #ifndef _COM_SUN_STAR_UI_DIALOGS_EXTENDEDFILEPICKERELEMENTIDS_HPP_ |
| #include <com/sun/star/ui/dialogs/ExtendedFilePickerElementIds.hpp> |
| #endif |
| #ifndef _COM_SUN_STAR_UI_DIALOGS_XFILEPICKERCONTROLACCESS_HPP_ |
| #include <com/sun/star/ui/dialogs/XFilePickerControlAccess.hpp> |
| #endif |
| #ifndef _COM_SUN_STAR_UI_DIALOGS_XFILEPICKER_HPP_ |
| #include <com/sun/star/ui/dialogs/XFilePicker.hpp> |
| #endif |
| #ifndef DBAUI_TOOLS_HXX |
| #include "UITools.hxx" |
| #endif |
| #ifndef _UNOTOOLS_LOCALFILEHELPER_HXX |
| #include <unotools/localfilehelper.hxx> |
| #endif |
| #ifndef _UNOTOOLS_UCBHELPER_HXX |
| #include <unotools/ucbhelper.hxx> |
| #endif |
| #ifndef _UCBHELPER_COMMANDENVIRONMENT_HXX |
| #include <ucbhelper/commandenvironment.hxx> |
| #endif |
| #ifndef DBAUI_FILEPICKER_INTERACTION_HXX |
| #include "finteraction.hxx" |
| #endif |
| #ifndef _CONNECTIVITY_COMMONTOOLS_HXX_ |
| #include <connectivity/CommonTools.hxx> |
| #endif |
| #ifndef _URLOBJ_HXX |
| #include <tools/urlobj.hxx> |
| #endif |
| #ifndef _SFX_DOCFILT_HACK_HXX |
| #include <sfx2/docfilt.hxx> |
| #endif |
| #include "dsnItem.hxx" |
| #if defined(WNT) |
| #define _ADO_DATALINK_BROWSE_ |
| #endif |
| |
| #ifdef _ADO_DATALINK_BROWSE_ |
| #if defined( WNT ) |
| #include <tools/prewin.h> |
| #include <windows.h> |
| #include <tools/postwin.h> |
| #endif |
| #ifndef _SV_SYSDATA_HXX |
| #include <vcl/sysdata.hxx> |
| #endif |
| #ifndef _DBAUI_ADO_DATALINK_HXX_ |
| #include "adodatalinks.hxx" |
| #endif |
| #endif //_ADO_DATALINK_BROWSE_ |
| |
| #include "AutoControls.hrc" |
| |
| //......................................................................... |
| namespace dbaui |
| { |
| //......................................................................... |
| using namespace ::com::sun::star::uno; |
| using namespace ::com::sun::star::ucb; |
| using namespace ::com::sun::star::ui::dialogs; |
| using namespace ::com::sun::star::sdbc; |
| using namespace ::com::sun::star::beans; |
| using namespace ::com::sun::star::lang; |
| using namespace ::com::sun::star::container; |
| using namespace ::dbtools; |
| using namespace ::svt; |
| |
| SfxTabPage* OConnectionTabPage::Create( Window* pParent, const SfxItemSet& _rAttrSet ) |
| { |
| return ( new OConnectionTabPage( pParent, _rAttrSet ) ); |
| } |
| //======================================================================== |
| //= OConnectionTabPage |
| //======================================================================== |
| DBG_NAME(OConnectionTabPage) |
| OConnectionTabPage::OConnectionTabPage(Window* pParent, const SfxItemSet& _rCoreAttrs) |
| :OConnectionHelper(pParent, ModuleRes(PAGE_CONNECTION), _rCoreAttrs) |
| ,m_bUserGrabFocus(sal_True) |
| ,m_aFL1(this, ModuleRes(FL_SEPARATOR1)) |
| ,m_aFL2(this, ModuleRes(FL_SEPARATOR2)) |
| ,m_aUserNameLabel(this, ModuleRes(FT_USERNAME)) |
| ,m_aUserName(this, ModuleRes(ET_USERNAME)) |
| ,m_aPasswordRequired(this, ModuleRes(CB_PASSWORD_REQUIRED)) |
| ,m_aFL3(this, ModuleRes(FL_SEPARATOR3)) |
| ,m_aJavaDriverLabel(this, ModuleRes(FT_JDBCDRIVERCLASS)) |
| ,m_aJavaDriver(this, ModuleRes(ET_JDBCDRIVERCLASS)) |
| ,m_aTestJavaDriver(this, ModuleRes(PB_TESTDRIVERCLASS)) |
| ,m_aTestConnection(this, ModuleRes(PB_TESTCONNECTION)) |
| { |
| DBG_CTOR(OConnectionTabPage,NULL); |
| m_aConnectionURL.SetModifyHdl(LINK(this, OConnectionTabPage, OnEditModified)); |
| m_aJavaDriver.SetModifyHdl(getControlModifiedLink()); |
| m_aJavaDriver.SetModifyHdl(LINK(this, OConnectionTabPage, OnEditModified)); |
| m_aUserName.SetModifyHdl(getControlModifiedLink()); |
| m_aPasswordRequired.SetClickHdl(getControlModifiedLink()); |
| |
| m_aTestConnection.SetClickHdl(LINK(this,OGenericAdministrationPage,OnTestConnectionClickHdl)); |
| m_aTestJavaDriver.SetClickHdl(LINK(this,OConnectionTabPage,OnTestJavaClickHdl)); |
| |
| FreeResource(); |
| |
| LayoutHelper::fitSizeRightAligned( m_aTestConnection ); |
| } |
| |
| // ----------------------------------------------------------------------- |
| OConnectionTabPage::~OConnectionTabPage() |
| { |
| DBG_DTOR(OConnectionTabPage,NULL); |
| } |
| |
| // ----------------------------------------------------------------------- |
| void OConnectionTabPage::implInitControls(const SfxItemSet& _rSet, sal_Bool _bSaveValue) |
| { |
| // check whether or not the selection is invalid or readonly (invalid implies readonly, but not vice versa) |
| sal_Bool bValid, bReadonly; |
| getFlags(_rSet, bValid, bReadonly); |
| |
| m_eType = m_pAdminDialog->getDatasourceType(_rSet); |
| OConnectionHelper::implInitControls( _rSet, _bSaveValue); |
| |
| LocalResourceAccess aLocRes( PAGE_CONNECTION, RSC_TABPAGE ); |
| ::dbaccess::DATASOURCE_TYPE eType = m_pCollection->determineType(m_eType); |
| switch( eType ) |
| { |
| case ::dbaccess::DST_DBASE: |
| m_aFT_Connection.SetText(String(ModuleRes(STR_DBASE_PATH_OR_FILE))); |
| m_aConnectionURL.SetHelpId(HID_DSADMIN_DBASE_PATH); |
| break; |
| case ::dbaccess::DST_FLAT: |
| m_aFT_Connection.SetText(String(ModuleRes(STR_FLAT_PATH_OR_FILE))); |
| m_aConnectionURL.SetHelpId(HID_DSADMIN_FLAT_PATH); |
| break; |
| case ::dbaccess::DST_CALC: |
| m_aFT_Connection.SetText(String(ModuleRes(STR_CALC_PATH_OR_FILE))); |
| m_aConnectionURL.SetHelpId(HID_DSADMIN_CALC_PATH); |
| break; |
| case ::dbaccess::DST_ADABAS: |
| m_aFT_Connection.SetText(String(ModuleRes(STR_ADABAS_DATABASE_NAME))); |
| m_aConnectionURL.SetHelpId(HID_DSADMIN_ADABAS_DATABASE); |
| break; |
| case ::dbaccess::DST_ADO: |
| m_aFT_Connection.SetText(String(ModuleRes(STR_COMMONURL))); |
| break; |
| case ::dbaccess::DST_MSACCESS: |
| case ::dbaccess::DST_MSACCESS_2007: |
| m_aFT_Connection.SetText(String(ModuleRes(STR_MSACCESS_MDB_FILE))); |
| m_aConnectionURL.SetHelpId(HID_DSADMIN_MSACCESS_MDB_FILE); |
| break; |
| case ::dbaccess::DST_MYSQL_NATIVE: |
| case ::dbaccess::DST_MYSQL_JDBC: |
| m_aFT_Connection.SetText(String(ModuleRes(STR_MYSQL_DATABASE_NAME))); |
| m_aConnectionURL.SetHelpId( HID_DSADMIN_MYSQL_DATABASE ); |
| break; |
| case ::dbaccess::DST_ORACLE_JDBC: |
| m_aFT_Connection.SetText(String(ModuleRes(STR_ORACLE_DATABASE_NAME))); |
| m_aConnectionURL.SetHelpId(HID_DSADMIN_ORACLE_DATABASE); |
| break; |
| case ::dbaccess::DST_MYSQL_ODBC: |
| case ::dbaccess::DST_ODBC: |
| m_aFT_Connection.SetText(String(ModuleRes(STR_NAME_OF_ODBC_DATASOURCE))); |
| m_aConnectionURL.SetHelpId( eType == ::dbaccess::DST_MYSQL_ODBC ? HID_DSADMIN_MYSQL_ODBC_DATASOURCE : HID_DSADMIN_ODBC_DATASOURCE); |
| break; |
| case ::dbaccess::DST_LDAP: |
| m_aFT_Connection.SetText(String(ModuleRes(STR_HOSTNAME))); |
| m_aConnectionURL.SetHelpId( HID_DSADMIN_LDAP_HOSTNAME ); |
| break; |
| case ::dbaccess::DST_MOZILLA: |
| m_aFT_Connection.SetText(String(ModuleRes(STR_MOZILLA_PROFILE_NAME))); |
| m_aConnectionURL.SetHelpId( HID_DSADMIN_MOZILLA_PROFILE_NAME ); |
| break; |
| case ::dbaccess::DST_THUNDERBIRD: |
| m_aFT_Connection.SetText(String(ModuleRes(STR_THUNDERBIRD_PROFILE_NAME))); |
| m_aConnectionURL.SetHelpId( HID_DSADMIN_THUNDERBIRD_PROFILE_NAME ); |
| break; |
| case ::dbaccess::DST_OUTLOOK: |
| case ::dbaccess::DST_OUTLOOKEXP: |
| case ::dbaccess::DST_EVOLUTION: |
| case ::dbaccess::DST_EVOLUTION_GROUPWISE: |
| case ::dbaccess::DST_EVOLUTION_LDAP: |
| case ::dbaccess::DST_KAB: |
| case ::dbaccess::DST_MACAB: |
| m_aFT_Connection.SetText(String(ModuleRes(STR_NO_ADDITIONAL_SETTINGS))); |
| { |
| String sText = m_aFT_Connection.GetText(); |
| sText.SearchAndReplaceAscii("%test",m_aTestConnection.GetText()); |
| String sTemp; |
| sText.SearchAndReplaceAscii("~",sTemp); |
| m_aFT_Connection.SetText(sText); |
| } |
| m_aConnectionURL.Hide(); |
| break; |
| case ::dbaccess::DST_JDBC: |
| default: |
| m_aFT_Connection.SetText(String(ModuleRes(STR_COMMONURL))); |
| break; |
| } |
| |
| ; |
| AuthenticationMode eAuthMode( DataSourceMetaData::getAuthentication( m_eType ) ); |
| bool bShowUserAuthenfication = ( eAuthMode != AuthNone ); |
| bool bShowUser = ( eAuthMode == AuthUserPwd ); |
| |
| m_aPB_Connection.SetHelpId(HID_DSADMIN_BROWSECONN); |
| m_aFL2.Show( bShowUserAuthenfication ); |
| m_aUserNameLabel.Show( bShowUser && bShowUserAuthenfication ); |
| m_aUserName.Show( bShowUser && bShowUserAuthenfication ); |
| m_aPasswordRequired.Show( bShowUserAuthenfication ); |
| if ( !bShowUser && bShowUserAuthenfication ) |
| m_aPasswordRequired.SetPosPixel(m_aUserNameLabel.GetPosPixel()); |
| |
| // collect the items |
| SFX_ITEMSET_GET(_rSet, pUidItem, SfxStringItem, DSID_USER, sal_True); |
| |
| SFX_ITEMSET_GET(_rSet, pJdbcDrvItem, SfxStringItem, DSID_JDBCDRIVERCLASS, sal_True); |
| SFX_ITEMSET_GET(_rSet, pUrlItem, SfxStringItem, DSID_CONNECTURL, sal_True); |
| SFX_ITEMSET_GET(_rSet, pAllowEmptyPwd, SfxBoolItem, DSID_PASSWORDREQUIRED, sal_True); |
| |
| // forward the values to the controls |
| if ( bValid ) |
| { |
| m_aUserName.SetText(pUidItem->GetValue()); |
| m_aPasswordRequired.Check(pAllowEmptyPwd->GetValue()); |
| |
| String sUrl = pUrlItem->GetValue(); |
| setURL( sUrl ); |
| |
| const sal_Bool bEnableJDBC = m_pCollection->determineType(m_eType) == ::dbaccess::DST_JDBC; |
| if ( !pJdbcDrvItem->GetValue().Len() ) |
| { |
| String sDefaultJdbcDriverName = m_pCollection->getJavaDriverClass(m_eType); |
| if ( sDefaultJdbcDriverName.Len() ) |
| { |
| m_aJavaDriver.SetText(sDefaultJdbcDriverName); |
| m_aJavaDriver.SetModifyFlag(); |
| } |
| } // if ( !pJdbcDrvItem->GetValue().Len() ) |
| else |
| m_aJavaDriver.SetText(pJdbcDrvItem->GetValue()); |
| |
| m_aJavaDriverLabel.Show(bEnableJDBC); |
| m_aJavaDriver.Show(bEnableJDBC); |
| m_aTestJavaDriver.Show(bEnableJDBC); |
| m_aTestJavaDriver.Enable( m_aJavaDriver.GetText().Len() != 0); |
| m_aFL3.Show(bEnableJDBC); |
| |
| checkTestConnection(); |
| |
| m_aUserName.ClearModifyFlag(); |
| m_aConnectionURL.ClearModifyFlag(); |
| m_aJavaDriver.ClearModifyFlag(); |
| } |
| } |
| // ----------------------------------------------------------------------- |
| void OConnectionTabPage::fillWindows(::std::vector< ISaveValueWrapper* >& _rControlList) |
| { |
| _rControlList.push_back(new ODisableWrapper<FixedLine>(&m_aFL1)); |
| |
| _rControlList.push_back(new ODisableWrapper<FixedLine>(&m_aFL2)); |
| _rControlList.push_back(new ODisableWrapper<FixedText>(&m_aJavaDriverLabel)); |
| _rControlList.push_back(new ODisableWrapper<PushButton>(&m_aTestJavaDriver)); |
| |
| _rControlList.push_back(new ODisableWrapper<FixedLine>(&m_aFL3)); |
| _rControlList.push_back(new ODisableWrapper<FixedText>(&m_aUserNameLabel)); |
| _rControlList.push_back(new ODisableWrapper<PushButton>(&m_aTestConnection)); |
| OConnectionHelper::fillWindows(_rControlList); |
| |
| } |
| // ----------------------------------------------------------------------- |
| void OConnectionTabPage::fillControls(::std::vector< ISaveValueWrapper* >& _rControlList) |
| { |
| _rControlList.push_back(new OSaveValueWrapper<Edit>(&m_aJavaDriver)); |
| _rControlList.push_back(new OSaveValueWrapper<Edit>(&m_aUserName)); |
| _rControlList.push_back(new OSaveValueWrapper<CheckBox>(&m_aPasswordRequired)); |
| OConnectionHelper::fillControls(_rControlList); |
| } |
| |
| // ----------------------------------------------------------------------- |
| sal_Bool OConnectionTabPage::FillItemSet(SfxItemSet& _rSet) |
| { |
| sal_Bool bChangedSomething = sal_False; |
| |
| if (m_aUserName.GetText() != m_aUserName.GetSavedValue()) |
| { |
| _rSet.Put(SfxStringItem(DSID_USER, m_aUserName.GetText())); |
| _rSet.Put(SfxStringItem(DSID_PASSWORD, String())); |
| bChangedSomething = sal_True; |
| } |
| |
| fillBool(_rSet,&m_aPasswordRequired,DSID_PASSWORDREQUIRED,bChangedSomething); |
| |
| if ( m_pCollection->determineType(m_eType) == ::dbaccess::DST_JDBC ) |
| { |
| fillString(_rSet,&m_aJavaDriver, DSID_JDBCDRIVERCLASS, bChangedSomething); |
| } |
| |
| fillString(_rSet,&m_aConnectionURL, DSID_CONNECTURL, bChangedSomething); |
| |
| return bChangedSomething; |
| } |
| // ----------------------------------------------------------------------- |
| IMPL_LINK(OConnectionTabPage, OnTestJavaClickHdl, PushButton*, /*_pButton*/) |
| { |
| OSL_ENSURE(m_pAdminDialog,"No Admin dialog set! ->GPF"); |
| sal_Bool bSuccess = sal_False; |
| try |
| { |
| if ( m_aJavaDriver.GetText().Len() ) |
| { |
| ::rtl::Reference< jvmaccess::VirtualMachine > xJVM = ::connectivity::getJavaVM(m_pAdminDialog->getORB()); |
| bSuccess = ::connectivity::existsJavaClassByName(xJVM,m_aJavaDriver.GetText()); |
| } |
| } |
| catch(Exception&) |
| { |
| } |
| |
| sal_uInt16 nMessage = bSuccess ? STR_JDBCDRIVER_SUCCESS : STR_JDBCDRIVER_NO_SUCCESS; |
| OSQLMessageBox aMsg( this, String( ModuleRes( nMessage ) ), String() ); |
| aMsg.Execute(); |
| return 0L; |
| } |
| // ----------------------------------------------------------------------- |
| bool OConnectionTabPage::checkTestConnection() |
| { |
| OSL_ENSURE(m_pAdminDialog,"No Admin dialog set! ->GPF"); |
| sal_Bool bEnableTestConnection = !m_aConnectionURL.IsVisible() || (m_aConnectionURL.GetTextNoPrefix().Len() != 0); |
| if ( m_pCollection->determineType(m_eType) == ::dbaccess::DST_JDBC ) |
| bEnableTestConnection = bEnableTestConnection && (m_aJavaDriver.GetText().Len() != 0); |
| m_aTestConnection.Enable(bEnableTestConnection); |
| return true; |
| } |
| // ----------------------------------------------------------------------- |
| IMPL_LINK(OConnectionTabPage, OnEditModified, Edit*, _pEdit) |
| { |
| if ( _pEdit == &m_aJavaDriver ) |
| m_aTestJavaDriver.Enable( m_aJavaDriver.GetText().Len() != 0 ); |
| |
| checkTestConnection(); |
| // tell the listener we were modified |
| callModifiedHdl(); |
| return 0L; |
| } |
| //......................................................................... |
| } // namespace dbaui |
| //......................................................................... |
| |