diff options
Diffstat (limited to 'dbaccess/source/ui/dlg/ConnectionHelper.cxx')
-rw-r--r-- | dbaccess/source/ui/dlg/ConnectionHelper.cxx | 902 |
1 files changed, 0 insertions, 902 deletions
diff --git a/dbaccess/source/ui/dlg/ConnectionHelper.cxx b/dbaccess/source/ui/dlg/ConnectionHelper.cxx deleted file mode 100644 index 8c0d2c330..000000000 --- a/dbaccess/source/ui/dlg/ConnectionHelper.cxx +++ /dev/null @@ -1,902 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_dbaccess.hxx" - -#include "dsnItem.hxx" -#include "ConnectionHelper.hxx" -#include "AutoControls.hrc" -#include "dbu_dlg.hrc" -#include "dbu_misc.hrc" -#include <svl/itemset.hxx> -#include <unotools/moduleoptions.hxx> -#include <sfx2/fcontnr.hxx> -#include <unotools/pathoptions.hxx> -#include <svl/stritem.hxx> -#include <svl/eitem.hxx> -#include <svl/intitem.hxx> -#include "dsitems.hxx" -#include "dbaccess_helpid.hrc" -#include "localresaccess.hxx" -#include <osl/process.h> -#include <osl/diagnose.h> -#include <vcl/msgbox.hxx> -#include <sfx2/filedlghelper.hxx> -#include "dbadmin.hxx" -#include <comphelper/types.hxx> -#include <vcl/stdtext.hxx> -#include "sqlmessage.hxx" -#include "odbcconfig.hxx" -#include "dsselect.hxx" -#include <svl/filenotation.hxx> -#include "dbustrings.hrc" -#include <com/sun/star/ui/dialogs/XFolderPicker.hpp> -#include <com/sun/star/sdbc/XRow.hpp> -#include <com/sun/star/awt/XWindow.hpp> -#include <com/sun/star/task/XInteractionHandler.hpp> -#include <com/sun/star/ucb/XProgressHandler.hpp> -#include "UITools.hxx" -#include <unotools/localfilehelper.hxx> -#include <unotools/ucbhelper.hxx> -#include <ucbhelper/commandenvironment.hxx> -#include "finteraction.hxx" -#include <connectivity/CommonTools.hxx> -#include <tools/urlobj.hxx> -#include <tools/diagnose_ex.h> -#include <sfx2/docfilt.hxx> - -#ifdef _ADO_DATALINK_BROWSE_ -#include <vcl/sysdata.hxx> -#include "adodatalinks.hxx" -#endif //_ADO_DATALINK_BROWSE_ - -#include <com/sun/star/mozilla/XMozillaBootstrap.hpp> -#include <unotools/processfactory.hxx> - - - -//......................................................................... -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 ::com::sun::star::mozilla; - using namespace ::dbtools; - using namespace ::svt; - - -DBG_NAME(OConnectionHelper) - - OConnectionHelper::OConnectionHelper( Window* pParent, const ResId& _rId, const SfxItemSet& _rCoreAttrs) - :OGenericAdministrationPage(pParent, _rId, _rCoreAttrs) - ,m_aFT_Connection ( this, ResId( FT_AUTOBROWSEURL, *_rId.GetResMgr() ) ) - ,m_aConnectionURL ( this, ResId( ET_AUTOBROWSEURL, *_rId.GetResMgr() ) ) - ,m_aPB_Connection ( this, ResId( PB_AUTOBROWSEURL, *_rId.GetResMgr() ) ) - { - DBG_CTOR(OConnectionHelper,NULL); - - // extract the datasource type collection from the item set - DbuTypeCollectionItem* pCollectionItem = PTR_CAST(DbuTypeCollectionItem, _rCoreAttrs.GetItem(DSID_TYPECOLLECTION)); - if (pCollectionItem) - m_pCollection = pCollectionItem->getCollection(); - m_aPB_Connection.SetClickHdl(LINK(this, OConnectionHelper, OnBrowseConnections)); - OSL_ENSURE(m_pCollection, "OConnectionHelper::OConnectionHelper : really need a DSN type collection !"); - m_aConnectionURL.SetTypeCollection(m_pCollection); - } - - - OConnectionHelper::~OConnectionHelper() - { - - DBG_DTOR(OConnectionHelper,NULL); - } - - - // ----------------------------------------------------------------------- - void OConnectionHelper::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_aFT_Connection.Show(); - m_aConnectionURL.Show(); - m_aConnectionURL.ShowPrefix( ::dbaccess::DST_JDBC == m_pCollection->determineType(m_eType) ); - - sal_Bool bEnableBrowseButton = m_pCollection->supportsBrowsing( m_eType ); - m_aPB_Connection.Show( bEnableBrowseButton ); - - SFX_ITEMSET_GET(_rSet, pUrlItem, SfxStringItem, DSID_CONNECTURL, sal_True); - - // forward the values to the controls - if ( bValid ) - { - String sUrl = pUrlItem->GetValue(); - setURL( sUrl ); - - checkTestConnection(); - m_aConnectionURL.ClearModifyFlag(); - } - - OGenericAdministrationPage::implInitControls(_rSet, _bSaveValue); - } - - // ----------------------------------------------------------------------- - void OConnectionHelper::implUpdateURLDependentStates() const - { - OSL_PRECOND( m_pAdminDialog, "OConnectionHelper::implUpdateURLDependentStates: no admin dialog!" ); - if ( !m_pAdminDialog ) - return; - - if ( m_pCollection->isFileSystemBased(m_eType) ) - m_pAdminDialog->enableConfirmSettings( getURLNoPrefix().Len() > 0 ); - } - - // ----------------------------------------------------------------------- - IMPL_LINK(OConnectionHelper, OnBrowseConnections, PushButton*, /*_pButton*/) - { - OSL_ENSURE(m_pAdminDialog,"No Admin dialog set! ->GPF"); - const ::dbaccess::DATASOURCE_TYPE eType = m_pCollection->determineType(m_eType); - switch ( eType ) - { - case ::dbaccess::DST_DBASE: - case ::dbaccess::DST_FLAT: - { - try - { - ::rtl::OUString sFolderPickerService(SERVICE_UI_FOLDERPICKER); - Reference< XFolderPicker > xFolderPicker(m_xORB->createInstance(sFolderPickerService), UNO_QUERY); - if (!xFolderPicker.is()) - { - ShowServiceNotAvailableError(GetParent(), sFolderPickerService, sal_True); - break; - } - - sal_Bool bDoBrowse = sal_False; - String sOldPath = getURLNoPrefix(); - do - { - if (sOldPath.Len()) - xFolderPicker->setDisplayDirectory(sOldPath); - if (0 == xFolderPicker->execute()) - // cancelled by the user - return 0L; - - sOldPath = xFolderPicker->getDirectory(); - switch (checkPathExistence(sOldPath)) - { - case RET_RETRY: - bDoBrowse = sal_True; - break; - case RET_CANCEL: - return 0L; - default: - break; - } - } - while (bDoBrowse); - - String sSelectedDirectory = xFolderPicker->getDirectory(); - INetURLObject aSelectedDirectory( sSelectedDirectory, INetURLObject::WAS_ENCODED, RTL_TEXTENCODING_UTF8 ); - - // for UI purpose, we don't want to have the path encoded - sSelectedDirectory = aSelectedDirectory.GetMainURL( INetURLObject::DECODE_WITH_CHARSET, RTL_TEXTENCODING_UTF8 ); - - setURLNoPrefix( sSelectedDirectory ); - SetRoadmapStateValue(sal_True); - callModifiedHdl(); - } - catch( const Exception& ) - { - DBG_UNHANDLED_EXCEPTION(); - } - } - break; - case ::dbaccess::DST_CALC: - { - SvtModuleOptions aModule; - ::sfx2::FileDialogHelper aFileDlg(WB_3DLOOK | WB_STDMODAL | WB_OPEN - ,aModule.GetFactoryEmptyDocumentURL(SvtModuleOptions::E_CALC) - ,SFX_FILTER_IMPORT); - askForFileName(aFileDlg); - } - break; - case ::dbaccess::DST_MSACCESS: - { - const ::rtl::OUString sExt(RTL_CONSTASCII_USTRINGPARAM("*.mdb")); - String sFilterName(ModuleRes (STR_MSACCESS_FILTERNAME)); - ::sfx2::FileDialogHelper aFileDlg(WB_3DLOOK | WB_STDMODAL | WB_OPEN); - aFileDlg.AddFilter(sFilterName,sExt); - aFileDlg.SetCurrentFilter(sFilterName); - askForFileName(aFileDlg); - } - break; - case ::dbaccess::DST_MSACCESS_2007: - { - const ::rtl::OUString sAccdb(RTL_CONSTASCII_USTRINGPARAM("*.accdb")); - String sFilterName2(ModuleRes (STR_MSACCESS_2007_FILTERNAME)); - ::sfx2::FileDialogHelper aFileDlg(WB_3DLOOK | WB_STDMODAL | WB_OPEN); - aFileDlg.AddFilter(sFilterName2,sAccdb); - aFileDlg.SetCurrentFilter(sFilterName2); - askForFileName(aFileDlg); - } - break; - case ::dbaccess::DST_ADABAS: - { - // collect all names from the config dir - // and all dir's of the DBWORK/wrk or DBROOT/wrk dir - // compare the names - - // collect the names of the installed databases - StringBag aInstalledDBs; - ::rtl::OUString sAdabasConfigDir,sAdabasWorkDir,sRootDir; - ::rtl::OUString sEnvVarName(RTL_CONSTASCII_USTRINGPARAM("DBWORK")); - rtl_uString* pDbVar = NULL; - if(osl_getEnvironment(sEnvVarName.pData,&pDbVar) == osl_Process_E_None && pDbVar) - { - sAdabasWorkDir = pDbVar; - String sURL; - utl::LocalFileHelper::ConvertPhysicalNameToURL(sAdabasWorkDir,sURL); - sAdabasWorkDir = sURL; - rtl_uString_release(pDbVar); - pDbVar = NULL; - } - - sEnvVarName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("DBCONFIG")); - if(osl_getEnvironment(sEnvVarName.pData,&pDbVar) == osl_Process_E_None && pDbVar) - { - sAdabasConfigDir = pDbVar; - String sURL; - utl::LocalFileHelper::ConvertPhysicalNameToURL(sAdabasConfigDir,sURL); - sAdabasConfigDir = sURL; - rtl_uString_release(pDbVar); - pDbVar = NULL; - } - - sEnvVarName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("DBROOT")); - if(osl_getEnvironment(sEnvVarName.pData,&pDbVar) == osl_Process_E_None && pDbVar) - { - sRootDir = pDbVar; - String sURL; - utl::LocalFileHelper::ConvertPhysicalNameToURL(sRootDir,sURL); - sRootDir = sURL; - rtl_uString_release(pDbVar); - pDbVar = NULL; - } - - sal_Bool bOldFashion = sAdabasConfigDir.getLength() && sAdabasWorkDir.getLength(); - - if(!bOldFashion) // we have a normal adabas installation - { // so we check the local database names in $DBROOT/config - sAdabasConfigDir = sRootDir; - sAdabasWorkDir = sRootDir; - } - - if(sAdabasConfigDir.getLength() && sAdabasWorkDir.getLength() && sRootDir.getLength()) - { - - aInstalledDBs = getInstalledAdabasDBs(sAdabasConfigDir,sAdabasWorkDir); - - if(!aInstalledDBs.size() && bOldFashion) - { - sAdabasConfigDir = sRootDir; - sAdabasWorkDir = sRootDir; - aInstalledDBs = getInstalledAdabasDBs(sAdabasConfigDir,sAdabasWorkDir); - } - - ODatasourceSelectDialog aSelector(GetParent(), aInstalledDBs, true,m_pItemSetHelper->getWriteOutputSet()); - if (RET_OK == aSelector.Execute()) - { - setURLNoPrefix(aSelector.GetSelected()); - SetRoadmapStateValue(sal_True); - callModifiedHdl(); - } - } - else - { - LocalResourceAccess aLocRes( PAGE_CONNECTION, RSC_TABPAGE ); - String sError = String(ModuleRes(STR_NO_ADABASE_DATASOURCES)); - ErrorBox aBox(this, WB_OK, sError); - aBox.Execute(); - } - } - break; - case ::dbaccess::DST_MYSQL_ODBC: - case ::dbaccess::DST_ODBC: - { - // collect all ODBC data source names - ::rtl::OUString sCurrDatasource = getURLNoPrefix(); - ::rtl::OUString sDataSource; - if ( getSelectedDataSource(sDataSource,sCurrDatasource) && sDataSource.getLength() ) - { - setURLNoPrefix(sDataSource); - SetRoadmapStateValue(sal_True); - callModifiedHdl(); - } - else - return 1L; - } - break; -#ifdef _ADO_DATALINK_BROWSE_ - case ::dbaccess::DST_ADO: - { - ::rtl::OUString sOldDataSource=getURLNoPrefix(); - ::rtl::OUString sNewDataSource; - HWND hWnd = GetParent()->GetSystemData()->hWnd; - sNewDataSource = getAdoDatalink((long)hWnd,sOldDataSource); - if ( sNewDataSource.getLength() ) - { - setURLNoPrefix(sNewDataSource); - SetRoadmapStateValue(sal_True); - callModifiedHdl(); - } - else - return 1L; - } - break; -#endif - case ::dbaccess::DST_MOZILLA: - case ::dbaccess::DST_THUNDERBIRD: - { - MozillaProductType profileType = MozillaProductType_Mozilla; - if (eType == ::dbaccess::DST_THUNDERBIRD) - profileType = MozillaProductType_Thunderbird; - - Reference<XMultiServiceFactory> xFactory = ::comphelper::getProcessServiceFactory(); - OSL_ENSURE( xFactory.is(), "can't get service factory" ); - - Reference<XInterface> xInstance = xFactory->createInstance(::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.mozilla.MozillaBootstrap")) ); - OSL_ENSURE( xInstance.is(), "failed to create instance" ); - Reference<XMozillaBootstrap> xMozillaBootstrap = Reference<XMozillaBootstrap>(xInstance,UNO_QUERY); - OSL_ENSURE( xMozillaBootstrap.is(), "failed to create instance" ); - - if (xMozillaBootstrap.is()) - { - // collect all Mozilla Profiles - ::com::sun::star::uno::Sequence< ::rtl::OUString > list; - - xMozillaBootstrap->getProfileList( profileType, list ); - const ::rtl::OUString * pArray = list.getConstArray(); - - sal_Int32 count = list.getLength(); - - StringBag aProfiles; - for (sal_Int32 index=0; index < count; index++) - aProfiles.insert(pArray[index]); - - - // execute the select dialog - ODatasourceSelectDialog aSelector(GetParent(), aProfiles, eType); - ::rtl::OUString sOldProfile=getURLNoPrefix(); - - if (sOldProfile.getLength()) - aSelector.Select(sOldProfile); - else - aSelector.Select(xMozillaBootstrap->getDefaultProfile(profileType)); - - if ( RET_OK == aSelector.Execute() ) - setURLNoPrefix(aSelector.GetSelected()); - break; - } - } - default: - break; - } - - checkTestConnection(); - - return 0L; - } - - //------------------------------------------------------------------------- - - bool OConnectionHelper::checkTestConnection() - { - return true; - } - - //------------------------------------------------------------------------- - void OConnectionHelper::impl_setURL( const String& _rURL, sal_Bool _bPrefix ) - { - String sURL( _rURL ); - OSL_ENSURE( m_pCollection, "OConnectionHelper::impl_setURL: have no interpreter for the URLs!" ); - - if ( m_pCollection && sURL.Len() ) - { - if ( m_pCollection->isFileSystemBased( m_eType ) ) - { - // get the two parts: prefix and file URL - String sTypePrefix, sFileURLEncoded; - if ( _bPrefix ) - { - sTypePrefix = m_pCollection->getPrefix( m_eType ); - sFileURLEncoded = m_pCollection->cutPrefix( sURL ); - } - else - { - sFileURLEncoded = sURL; - } - - // substitute any variables - sFileURLEncoded = SvtPathOptions().SubstituteVariable( sFileURLEncoded ); - - // decode the URL - sURL = sTypePrefix; - if ( sFileURLEncoded.Len() ) - { - OFileNotation aFileNotation(sFileURLEncoded); - // set this decoded URL as text - sURL += String(aFileNotation.get(OFileNotation::N_SYSTEM)); - } - } - } - - if ( _bPrefix ) - m_aConnectionURL.SetText( sURL ); - else - m_aConnectionURL.SetTextNoPrefix( sURL ); - - implUpdateURLDependentStates(); - } - - //------------------------------------------------------------------------- - String OConnectionHelper::impl_getURL( sal_Bool _bPrefix ) const - { - // get the pure text - String sURL = _bPrefix ? m_aConnectionURL.GetText() : m_aConnectionURL.GetTextNoPrefix(); - - OSL_ENSURE( m_pCollection, "OConnectionHelper::impl_getURL: have no interpreter for the URLs!" ); - - if ( m_pCollection && sURL.Len() ) - { - if ( m_pCollection->isFileSystemBased( m_eType ) ) - { - // get the two parts: prefix and file URL - String sTypePrefix, sFileURLDecoded; - if ( _bPrefix ) - { - sTypePrefix = m_pCollection->getPrefix( m_eType ); - sFileURLDecoded = m_pCollection->cutPrefix( sURL ); - } - else - { - sFileURLDecoded = sURL; - } - - sURL = sTypePrefix; - if ( sFileURLDecoded.Len() ) - { - OFileNotation aFileNotation( sFileURLDecoded, OFileNotation::N_SYSTEM ); - sURL += String( aFileNotation.get( OFileNotation::N_URL ) ); - } - - // encode the URL - INetURLObject aFileURL( sFileURLDecoded, INetURLObject::ENCODE_ALL, RTL_TEXTENCODING_UTF8 ); - sFileURLDecoded = aFileURL.GetMainURL( INetURLObject::NO_DECODE ); - } - } - return sURL; - } - - //------------------------------------------------------------------------- - void OConnectionHelper::setURL( const String& _rURL ) - { - impl_setURL( _rURL, sal_True ); - } - - //------------------------------------------------------------------------- - String OConnectionHelper::getURLNoPrefix( ) const - { - return impl_getURL( sal_False ); - } - - //------------------------------------------------------------------------- - void OConnectionHelper::setURLNoPrefix( const String& _rURL ) - { - impl_setURL( _rURL, sal_False ); - } - - //------------------------------------------------------------------------- - sal_Int32 OConnectionHelper::checkPathExistence(const String& _rURL) - { - IS_PATH_EXIST e_exists = pathExists(_rURL, sal_False); - if (( e_exists == PATH_NOT_EXIST) || ( e_exists == PATH_NOT_KNOWN)) - { - String sQuery(ModuleRes(STR_ASK_FOR_DIRECTORY_CREATION)); - OFileNotation aTransformer(_rURL); - sQuery.SearchAndReplaceAscii("$path$", aTransformer.get(OFileNotation::N_SYSTEM)); - - m_bUserGrabFocus = sal_False; - QueryBox aQuery(GetParent(), WB_YES_NO | WB_DEF_YES, sQuery); - sal_Int32 nQueryResult = aQuery.Execute(); - m_bUserGrabFocus = sal_True; - - switch (nQueryResult) - { - case RET_YES: - { - sal_Bool bTryCreate = sal_False; - do - { - if ( !createDirectoryDeep(_rURL) ) - { // could not create the directory - sQuery = String(ModuleRes(STR_COULD_NOT_CREATE_DIRECTORY)); - sQuery.SearchAndReplaceAscii("$name$", aTransformer.get(OFileNotation::N_SYSTEM)); - - m_bUserGrabFocus = sal_False; - QueryBox aWhatToDo(GetParent(), WB_RETRY_CANCEL | WB_DEF_RETRY, sQuery); - nQueryResult = aWhatToDo.Execute(); - m_bUserGrabFocus = sal_True; - - if (RET_RETRY == nQueryResult) - bTryCreate = sal_True; - else - { - SetRoadmapStateValue(sal_False); - callModifiedHdl(); - return RET_RETRY; - } - } - } - while (bTryCreate); - } - break; - - case RET_NO: - callModifiedHdl(); - return RET_OK; - - default: - // cancelled - SetRoadmapStateValue(sal_False); - callModifiedHdl(); - return RET_CANCEL; - } - } -/* else - { - // TODO: error msg - return RET_CANCEL; - } */ - SetRoadmapStateValue(sal_True); - callModifiedHdl(); - return RET_OK; - } - - - //------------------------------------------------------------------------- - StringBag OConnectionHelper::getInstalledAdabasDBDirs(const String& _rPath,const ::ucbhelper::ResultSetInclude& _reResultSetInclude) - { - INetURLObject aNormalizer; - aNormalizer.SetSmartProtocol(INET_PROT_FILE); - aNormalizer.SetSmartURL(_rPath); - String sAdabasConfigDir = aNormalizer.GetMainURL(INetURLObject::NO_DECODE); - - ::ucbhelper::Content aAdabasConfigDir; - try - { - aAdabasConfigDir = ::ucbhelper::Content(sAdabasConfigDir, Reference< ::com::sun::star::ucb::XCommandEnvironment >()); - } - catch(::com::sun::star::ucb::ContentCreationException&) - { - return StringBag(); - } - - StringBag aInstalledDBs; - sal_Bool bIsFolder = sal_False; - try - { - bIsFolder = aAdabasConfigDir.isFolder(); - } - catch(Exception&) // the exception is thrown when the path doesn't exists - { - } - if (bIsFolder && aAdabasConfigDir.get().is()) - { // we have a content for the directory, loop through all entries - Sequence< ::rtl::OUString > aProperties(1); - aProperties[0] = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Title")); - - try - { - Reference< XResultSet > xFiles = aAdabasConfigDir.createCursor(aProperties, _reResultSetInclude); - Reference< XRow > xRow(xFiles, UNO_QUERY); - xFiles->beforeFirst(); - while (xFiles->next()) - { -#ifdef DBG_UTIL - ::rtl::OUString sName = xRow->getString(1); -#endif - aInstalledDBs.insert(xRow->getString(1)); - } - } - catch(Exception&) - { - OSL_FAIL("OConnectionHelper::getInstalledAdabasDBDirs: could not enumerate the adabas config files!"); - } - } - - - return aInstalledDBs; - } - // ----------------------------------------------------------------------------- - StringBag OConnectionHelper::getInstalledAdabasDBs(const String &_rConfigDir,const String &_rWorkDir) - { - String sAdabasConfigDir(_rConfigDir),sAdabasWorkDir(_rWorkDir); - - if (sAdabasConfigDir.Len() && ('/' == sAdabasConfigDir.GetBuffer()[sAdabasConfigDir.Len() - 1])) - sAdabasConfigDir.AppendAscii("config"); - else - sAdabasConfigDir.AppendAscii("/config"); - - if (sAdabasWorkDir.Len() && ('/' == sAdabasWorkDir.GetBuffer()[sAdabasWorkDir.Len() - 1])) - sAdabasWorkDir.AppendAscii("wrk"); - else - sAdabasWorkDir.AppendAscii("/wrk"); - // collect the names of the installed databases - StringBag aInstalledDBs; - // collect the names of the installed databases - StringBag aConfigDBs,aWrkDBs; - aConfigDBs = getInstalledAdabasDBDirs(sAdabasConfigDir,::ucbhelper::INCLUDE_DOCUMENTS_ONLY); - aWrkDBs = getInstalledAdabasDBDirs(sAdabasWorkDir,::ucbhelper::INCLUDE_FOLDERS_ONLY); - ConstStringBagIterator aOuter = aConfigDBs.begin(); - ConstStringBagIterator aOuterEnd = aConfigDBs.end(); - for(;aOuter != aOuterEnd;++aOuter) - { - ConstStringBagIterator aInner = aWrkDBs.begin(); - ConstStringBagIterator aInnerEnd = aWrkDBs.end(); - for (;aInner != aInnerEnd; ++aInner) - { - if (aInner->equalsIgnoreAsciiCase(*aOuter)) - { - aInstalledDBs.insert(*aInner); - break; - } - } - } - return aInstalledDBs; - } - // ----------------------------------------------------------------------------- - IS_PATH_EXIST OConnectionHelper::pathExists(const ::rtl::OUString& _rURL, sal_Bool bIsFile) const - { - ::ucbhelper::Content aCheckExistence; - sal_Bool bExists = sal_False; - IS_PATH_EXIST eExists = PATH_NOT_EXIST; - Reference< ::com::sun::star::task::XInteractionHandler > xInteractionHandler = Reference< ::com::sun::star::task::XInteractionHandler >( - m_xORB->createInstance( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.task.InteractionHandler") ) ), UNO_QUERY ); - OFilePickerInteractionHandler* pHandler = new OFilePickerInteractionHandler(xInteractionHandler); - xInteractionHandler = pHandler; - - Reference< XCommandEnvironment > xCmdEnv = new ::ucbhelper::CommandEnvironment( xInteractionHandler, Reference< XProgressHandler >() ); - try - { - aCheckExistence = ::ucbhelper::Content(_rURL, xCmdEnv ); - bExists = bIsFile? aCheckExistence.isDocument(): aCheckExistence.isFolder(); - eExists = bExists? PATH_EXIST: PATH_NOT_EXIST; - } - catch(const Exception&) - { - eExists = ( pHandler && pHandler->isDoesNotExist() ) ? PATH_NOT_EXIST: (bIsFile ? PATH_NOT_EXIST : PATH_NOT_KNOWN); - } - return eExists; - } - //------------------------------------------------------------------------- - long OConnectionHelper::PreNotify( NotifyEvent& _rNEvt ) - { - if ( m_pCollection->isFileSystemBased(m_eType) ) - { - switch (_rNEvt.GetType()) - { - case EVENT_GETFOCUS: - if (m_aConnectionURL.IsWindowOrChild(_rNEvt.GetWindow()) && m_bUserGrabFocus) - { // a descendant of the URL edit field got the focus - m_aConnectionURL.SaveValueNoPrefix(); - } - break; - - case EVENT_LOSEFOCUS: - if (m_aConnectionURL.IsWindowOrChild(_rNEvt.GetWindow()) && m_bUserGrabFocus) - { // a descendant of the URL edit field lost the focus - if (!commitURL()) - return 1L; // handled - } - break; - } - } - - return OGenericAdministrationPage::PreNotify( _rNEvt ); - } - - //------------------------------------------------------------------------- - - sal_Bool OConnectionHelper::createDirectoryDeep(const String& _rPathURL) - { - ::rtl::OUString sPath(_rPathURL); - - // get an URL object analyzing the URL for us ... - INetURLObject aParser; - aParser.SetURL(_rPathURL); - - INetProtocol eProtocol = aParser.GetProtocol(); - - ::std::vector< ::rtl::OUString > aToBeCreated; // the to-be-created levels - - // search a level which exists - IS_PATH_EXIST eParentExists = PATH_NOT_EXIST; - while ( eParentExists == PATH_NOT_EXIST && aParser.getSegmentCount()) - { - aToBeCreated.push_back(aParser.getName()); // remember the local name for creation - aParser.removeSegment(); // cut the local name - eParentExists = pathExists(aParser.GetMainURL(INetURLObject::NO_DECODE), sal_False); - } - - if (!aParser.getSegmentCount()) - return sal_False; - - // create all the missing levels - try - { - // the parent content - Reference< XCommandEnvironment > xEmptyEnv; - ::ucbhelper::Content aParent(aParser.GetMainURL(INetURLObject::NO_DECODE), xEmptyEnv); - - ::rtl::OUString sContentType; - if ( INET_PROT_FILE == eProtocol ) - { - sContentType = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("application/vnd.sun.staroffice.fsys-folder")); - // the file UCP currently does not support the ContentType property - } - else - { - Any aContentType = aParent.getPropertyValue( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ContentType")) ); - aContentType >>= sContentType; - } - - // the properties which need to be set on the new content - Sequence< ::rtl::OUString > aNewDirectoryProperties(1); - aNewDirectoryProperties[0] = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Title")); - - // the values to be set - Sequence< Any > aNewDirectoryAttributes(1); - - // loop - for ( ::std::vector< ::rtl::OUString >::reverse_iterator aLocalName = aToBeCreated.rbegin(); - aLocalName != aToBeCreated.rend(); - ++aLocalName - ) - { - aNewDirectoryAttributes[0] <<= *aLocalName; - if (!aParent.insertNewContent(sContentType, aNewDirectoryProperties, aNewDirectoryAttributes, aParent)) - return sal_False; - } - } - catch ( const Exception& ) - { - DBG_UNHANDLED_EXCEPTION(); - return sal_False; - } - - return sal_True; - } - - - // ----------------------------------------------------------------------- - void OConnectionHelper::fillWindows(::std::vector< ISaveValueWrapper* >& _rControlList) - { - _rControlList.push_back(new ODisableWrapper<FixedText>(&m_aFT_Connection)); - _rControlList.push_back(new ODisableWrapper<PushButton>(&m_aPB_Connection)); - } - - - // ----------------------------------------------------------------------- - void OConnectionHelper::fillControls(::std::vector< ISaveValueWrapper* >& _rControlList) - { - _rControlList.push_back( new OSaveValueWrapper<Edit>( &m_aConnectionURL ) ); - } - - //------------------------------------------------------------------------- - sal_Bool OConnectionHelper::commitURL() - { - String sURL; - String sOldPath; - sOldPath = m_aConnectionURL.GetSavedValueNoPrefix(); - sURL = m_aConnectionURL.GetTextNoPrefix(); - - if ( m_pCollection->isFileSystemBased(m_eType) ) - { - if ( ( sURL != sOldPath ) && ( 0 != sURL.Len() ) ) - { // the text changed since entering the control - - // the path may be in system notation .... - OFileNotation aTransformer(sURL); - sURL = aTransformer.get(OFileNotation::N_URL); - - const ::dbaccess::DATASOURCE_TYPE eType = m_pCollection->determineType(m_eType); - - if ( ( ::dbaccess::DST_CALC == eType) || ( ::dbaccess::DST_MSACCESS == eType) || ( ::dbaccess::DST_MSACCESS_2007 == eType) ) - { - if( pathExists(sURL, sal_True) == PATH_NOT_EXIST ) - { - String sFile = String( ModuleRes( STR_FILE_DOES_NOT_EXIST ) ); - sFile.SearchAndReplaceAscii("$file$", aTransformer.get(OFileNotation::N_SYSTEM)); - OSQLWarningBox( this, sFile ).Execute(); - setURLNoPrefix(sOldPath); - SetRoadmapStateValue(sal_False); - callModifiedHdl(); - return sal_False; - } - } - else - { - switch (checkPathExistence(sURL)) - { - case RET_RETRY: - m_bUserGrabFocus = sal_False; - m_aConnectionURL.GrabFocus(); - m_bUserGrabFocus = sal_True; - return sal_False; - - case RET_CANCEL: - setURLNoPrefix(sOldPath); - return sal_False; - } - } - } - } - - setURLNoPrefix(sURL); - m_aConnectionURL.SaveValueNoPrefix(); - return sal_True; - } - //------------------------------------------------------------------------- - void OConnectionHelper::askForFileName(::sfx2::FileDialogHelper& _aFileOpen) - { - String sOldPath = getURLNoPrefix(); - if ( sOldPath.Len() ) - _aFileOpen.SetDisplayDirectory(sOldPath); - else - _aFileOpen.SetDisplayDirectory( SvtPathOptions().GetWorkPath() ); - if (0 == _aFileOpen.Execute()) - { - setURLNoPrefix(_aFileOpen.GetPath()); - SetRoadmapStateValue(checkTestConnection()); - callModifiedHdl(); - } - } - -//......................................................................... -} // namespace dbaui -//......................................................................... - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |