LCOV - code coverage report
Current view: top level - libreoffice/dbaccess/source/ui/dlg - dbwizsetup.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 0 510 0.0 %
Date: 2012-12-17 Functions: 0 60 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
       2             : /*
       3             :  * This file is part of the LibreOffice project.
       4             :  *
       5             :  * This Source Code Form is subject to the terms of the Mozilla Public
       6             :  * License, v. 2.0. If a copy of the MPL was not distributed with this
       7             :  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
       8             :  *
       9             :  * This file incorporates work covered by the following license notice:
      10             :  *
      11             :  *   Licensed to the Apache Software Foundation (ASF) under one or more
      12             :  *   contributor license agreements. See the NOTICE file distributed
      13             :  *   with this work for additional information regarding copyright
      14             :  *   ownership. The ASF licenses this file to you under the Apache
      15             :  *   License, Version 2.0 (the "License"); you may not use this file
      16             :  *   except in compliance with the License. You may obtain a copy of
      17             :  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
      18             :  */
      19             : 
      20             : 
      21             : #include "dbwizsetup.hxx"
      22             : #include "dsmeta.hxx"
      23             : #include "DBSetupConnectionPages.hxx"
      24             : #include "dbadminsetup.hrc"
      25             : #include "dbu_dlg.hrc"
      26             : #include "dsitems.hxx"
      27             : #include "dsnItem.hxx"
      28             : 
      29             : #include <unotools/pathoptions.hxx>
      30             : #include <svl/stritem.hxx>
      31             : #include <svl/eitem.hxx>
      32             : #include <svl/intitem.hxx>
      33             : #include <vcl/msgbox.hxx>
      34             : #include "dbustrings.hrc"
      35             : #include "adminpages.hxx"
      36             : #include <sfx2/docfilt.hxx>
      37             : #include <unotools/ucbhelper.hxx>
      38             : #include "generalpage.hxx"
      39             : #include "localresaccess.hxx"
      40             : #include "stringlistitem.hxx"
      41             : #include "propertysetitem.hxx"
      42             : #include <unotools/confignode.hxx>
      43             : #include "DbAdminImpl.hxx"
      44             : #include "dbaccess_helpid.hrc"
      45             : #include "ConnectionPageSetup.hxx"
      46             : #include "UITools.hxx"
      47             : #include "dbadmin.hrc"
      48             : #include "AsyncronousLink.hxx"
      49             : #include <sfx2/filedlghelper.hxx>
      50             : #include <cppuhelper/exc_hlp.hxx>
      51             : 
      52             : #include <com/sun/star/frame/XStorable.hpp>
      53             : #include <com/sun/star/sdbcx/XTablesSupplier.hpp>
      54             : #include <com/sun/star/sdbc/XDataSource.hpp>
      55             : #include <com/sun/star/container/XNameAccess.hpp>
      56             : #include <com/sun/star/sdb/DatabaseContext.hpp>
      57             : #include <com/sun/star/sdb/XDocumentDataSource.hpp>
      58             : #include <com/sun/star/frame/FrameSearchFlag.hpp>
      59             : #include <com/sun/star/frame/XComponentLoader.hpp>
      60             : #include <com/sun/star/frame/XModel.hpp>
      61             : #include <com/sun/star/ucb/SimpleFileAccess.hpp>
      62             : #include <com/sun/star/task/XJobExecutor.hpp>
      63             : #include <com/sun/star/lang/XInitialization.hpp>
      64             : #include <com/sun/star/sdb/CommandType.hpp>
      65             : #include <com/sun/star/ucb/InteractiveIOException.hpp>
      66             : #include <com/sun/star/io/IOException.hpp>
      67             : #include <com/sun/star/frame/XTerminateListener.hpp>
      68             : #include <com/sun/star/frame/XDesktop.hpp>
      69             : #include <com/sun/star/sdbc/XDriverAccess.hpp>
      70             : #include <com/sun/star/document/MacroExecMode.hpp>
      71             : #include <com/sun/star/ucb/IOErrorCode.hpp>
      72             : #include <com/sun/star/task/InteractionHandler.hpp>
      73             : #include <com/sun/star/task/XInteractionHandler2.hpp>
      74             : #include <com/sun/star/ui/dialogs/TemplateDescription.hpp>
      75             : 
      76             : 
      77             : 
      78             : #include <svl/filenotation.hxx>
      79             : #include <comphelper/interaction.hxx>
      80             : #include <comphelper/namedvaluecollection.hxx>
      81             : #include <comphelper/processfactory.hxx>
      82             : #include <comphelper/sequenceashashmap.hxx>
      83             : #include <tools/diagnose_ex.h>
      84             : #include <osl/diagnose.h>
      85             : #include <connectivity/DriversConfig.hxx>
      86             : 
      87             : #include <memory>
      88             : 
      89             : 
      90             : //.........................................................................
      91             : namespace dbaui
      92             : {
      93             : //.........................................................................
      94             : using namespace dbtools;
      95             : using namespace svt;
      96             : using namespace com::sun::star;
      97             : using namespace com::sun::star::uno;
      98             : using namespace com::sun::star::sdbc;
      99             : using namespace com::sun::star::sdbcx;
     100             : using namespace com::sun::star::task;
     101             : using namespace com::sun::star::lang;
     102             : using namespace com::sun::star::io;
     103             : using namespace com::sun::star::util;
     104             : using namespace com::sun::star::beans;
     105             : using namespace com::sun::star::container;
     106             : using namespace com::sun::star::frame;
     107             : using namespace com::sun::star::ucb;
     108             : using namespace ::com::sun::star::sdb;
     109             : using namespace ::com::sun::star::document;
     110             : using namespace ::comphelper;
     111             : using namespace ::cppu;
     112             : 
     113             : #define START_PAGE      0
     114             : #define CONNECTION_PAGE 1
     115             : 
     116             : OFinalDBPageSetup*          pFinalPage;
     117             : 
     118             : DBG_NAME(ODbTypeWizDialogSetup)
     119             : //=========================================================================
     120             : //= ODbTypeWizDialogSetup
     121             : //=========================================================================
     122             : //-------------------------------------------------------------------------
     123           0 : ODbTypeWizDialogSetup::ODbTypeWizDialogSetup(Window* _pParent
     124             :                                ,SfxItemSet* _pItems
     125             :                                ,const Reference< XMultiServiceFactory >& _rxORB
     126             :                                ,const ::com::sun::star::uno::Any& _aDataSourceName
     127             :                                )
     128             :     :svt::RoadmapWizard( _pParent, ModuleRes(DLG_DATABASE_WIZARD),
     129             :                         WZB_NEXT | WZB_PREVIOUS | WZB_FINISH | WZB_CANCEL | WZB_HELP )
     130             : 
     131             :     , m_pOutSet(NULL)
     132             :     , m_bResetting(sal_False)
     133             :     , m_bApplied(sal_False)
     134             :     , m_bUIEnabled( sal_True )
     135             :     , m_bIsConnectable( sal_False)
     136             :     , m_sRM_IntroText(ModuleRes(STR_PAGETITLE_INTROPAGE))
     137             :     , m_sRM_dBaseText(ModuleRes(STR_PAGETITLE_DBASE))
     138             :     , m_sRM_TextText(ModuleRes(STR_PAGETITLE_TEXT))
     139             :     , m_sRM_MSAccessText(ModuleRes(STR_PAGETITLE_MSACCESS))
     140             :     , m_sRM_LDAPText(ModuleRes(STR_PAGETITLE_LDAP))
     141             :     , m_sRM_ADOText(ModuleRes(STR_PAGETITLE_ADO))
     142             :     , m_sRM_JDBCText(ModuleRes(STR_PAGETITLE_JDBC))
     143             :     , m_sRM_MySQLNativePageTitle(ModuleRes(STR_PAGETITLE_MYSQL_NATIVE))
     144             :     , m_pGeneralPage( NULL )
     145             :     , m_pMySQLIntroPage(NULL)
     146           0 :     , m_pCollection( NULL )
     147             : {
     148             :     DBG_CTOR(ODbTypeWizDialogSetup,NULL);
     149             :     // no local resources needed anymore
     150           0 :     m_sRM_MySQLText = String(ModuleRes(STR_PAGETITLE_MYSQL));
     151           0 :     m_sRM_OracleText = String(ModuleRes(STR_PAGETITLE_ORACLE));
     152           0 :     m_sRM_ODBCText = String(ModuleRes(STR_PAGETITLE_ODBC));
     153           0 :     m_sRM_SpreadSheetText = String(ModuleRes(STR_PAGETITLE_SPREADSHEET));
     154           0 :     m_sRM_AuthentificationText = String(ModuleRes(STR_PAGETITLE_AUTHENTIFICATION));
     155           0 :     m_sRM_FinalText = String(ModuleRes(STR_PAGETITLE_FINAL));
     156           0 :     m_sWorkPath = SvtPathOptions().GetWorkPath();
     157           0 :     pFinalPage = NULL;
     158             :     // extract the datasource type collection from the item set
     159           0 :     DbuTypeCollectionItem* pCollectionItem = PTR_CAST(DbuTypeCollectionItem, _pItems->GetItem(DSID_TYPECOLLECTION));
     160           0 :     if (pCollectionItem)
     161           0 :         m_pCollection = pCollectionItem->getCollection();
     162             : 
     163             :     OSL_ENSURE(m_pCollection, "ODbTypeWizDialogSetup::ODbTypeWizDialogSetup : really need a DSN type collection !");
     164             : 
     165           0 :     FreeResource();
     166             : 
     167           0 :     m_pImpl = ::std::auto_ptr<ODbDataSourceAdministrationHelper>(new ODbDataSourceAdministrationHelper(_rxORB,this,this));
     168           0 :     m_pImpl->setDataSourceOrName(_aDataSourceName);
     169           0 :     Reference< XPropertySet > xDatasource = m_pImpl->getCurrentDataSource();
     170           0 :     m_pOutSet = new SfxItemSet( *_pItems->GetPool(), _pItems->GetRanges() );
     171             : 
     172           0 :     m_pImpl->translateProperties(xDatasource, *m_pOutSet);
     173             : 
     174           0 :     SetPageSizePixel(LogicToPixel(::Size(WIZARD_PAGE_X, WIZARD_PAGE_Y), MAP_APPFONT));
     175           0 :     ShowButtonFixedLine(sal_True);
     176           0 :     defaultButton(WZB_NEXT);
     177           0 :     enableButtons(WZB_FINISH, sal_True);
     178           0 :     enableAutomaticNextButtonState();
     179             : 
     180           0 :     ::dbaccess::ODsnTypeCollection::TypeIterator aIter = m_pCollection->begin();
     181           0 :     ::dbaccess::ODsnTypeCollection::TypeIterator aEnd = m_pCollection->end();
     182           0 :     for(PathId i = 1;aIter != aEnd;++aIter,++i)
     183             :     {
     184           0 :         const ::rtl::OUString sURLPrefix = aIter.getURLPrefix();
     185           0 :         svt::RoadmapWizardTypes::WizardPath aPath;
     186           0 :         aPath.push_back(PAGE_DBSETUPWIZARD_INTRO);
     187           0 :         m_pCollection->fillPageIds(sURLPrefix,aPath);
     188           0 :         aPath.push_back(PAGE_DBSETUPWIZARD_AUTHENTIFICATION);
     189           0 :         aPath.push_back(PAGE_DBSETUPWIZARD_FINAL);
     190             : 
     191           0 :         declareAuthDepPath(sURLPrefix,i,aPath);
     192           0 :     }
     193             : 
     194           0 :     svt::RoadmapWizardTypes::WizardPath aPath;
     195           0 :     aPath.push_back(PAGE_DBSETUPWIZARD_INTRO);
     196           0 :     declarePath( static_cast<PathId>(m_pCollection->size()+1), aPath);
     197             : 
     198           0 :     m_pPrevPage->SetHelpId(HID_DBWIZ_PREVIOUS);
     199           0 :     m_pNextPage->SetHelpId(HID_DBWIZ_NEXT);
     200           0 :     m_pCancel->SetHelpId(HID_DBWIZ_CANCEL);
     201           0 :     m_pFinish->SetHelpId(HID_DBWIZ_FINISH);
     202           0 :     m_pHelp->SetUniqueId(UID_DBWIZ_HELP);
     203           0 :     SetRoadmapInteractive( sal_True );
     204           0 :     ActivatePage();
     205           0 : }
     206             : 
     207           0 : void ODbTypeWizDialogSetup::declareAuthDepPath( const ::rtl::OUString& _sURL, PathId _nPathId, const svt::RoadmapWizardTypes::WizardPath& _rPaths)
     208             : {
     209           0 :     bool bHasAuthentication = DataSourceMetaData::getAuthentication( _sURL ) != AuthNone;
     210             : 
     211             :     // collect the elements of the path
     212           0 :     WizardPath aPath;
     213             : 
     214           0 :     svt::RoadmapWizardTypes::WizardPath::const_iterator aIter = _rPaths.begin();
     215           0 :     svt::RoadmapWizardTypes::WizardPath::const_iterator aEnd = _rPaths.end();
     216           0 :     for(;aIter != aEnd;++aIter)
     217             :     {
     218           0 :         if ( bHasAuthentication || ( *aIter != PAGE_DBSETUPWIZARD_AUTHENTIFICATION ) )
     219           0 :             aPath.push_back( *aIter );
     220             :     }
     221             : 
     222             :     // call base method
     223           0 :     ::svt::RoadmapWizard::declarePath( _nPathId, aPath );
     224           0 : }
     225             : 
     226           0 : String ODbTypeWizDialogSetup::getStateDisplayName( WizardState _nState ) const
     227             : {
     228           0 :     String sRoadmapItem;
     229           0 :     switch( _nState )
     230             :     {
     231             :         case PAGE_DBSETUPWIZARD_INTRO:
     232           0 :             sRoadmapItem = m_sRM_IntroText;
     233           0 :             break;
     234             : 
     235             :         case PAGE_DBSETUPWIZARD_DBASE:
     236           0 :             sRoadmapItem = m_sRM_dBaseText;
     237           0 :             break;
     238             :         case PAGE_DBSETUPWIZARD_ADO:
     239           0 :             sRoadmapItem = m_sRM_ADOText;
     240           0 :             break;
     241             :         case PAGE_DBSETUPWIZARD_TEXT:
     242           0 :             sRoadmapItem = m_sRM_TextText;
     243           0 :             break;
     244             :         case PAGE_DBSETUPWIZARD_MSACCESS:
     245           0 :             sRoadmapItem = m_sRM_MSAccessText;
     246           0 :             break;
     247             :         case PAGE_DBSETUPWIZARD_LDAP:
     248           0 :             sRoadmapItem = m_sRM_LDAPText;
     249           0 :             break;
     250             :         case PAGE_DBSETUPWIZARD_JDBC:
     251           0 :             sRoadmapItem = m_sRM_JDBCText;
     252           0 :             break;
     253             :         case PAGE_DBSETUPWIZARD_ORACLE:
     254           0 :             sRoadmapItem = m_sRM_OracleText;
     255           0 :             break;
     256             :         case PAGE_DBSETUPWIZARD_MYSQL_INTRO:
     257           0 :             sRoadmapItem = m_sRM_MySQLText;
     258           0 :             break;
     259             :         case PAGE_DBSETUPWIZARD_MYSQL_JDBC:
     260           0 :             sRoadmapItem = m_sRM_JDBCText;
     261           0 :             break;
     262             :         case PAGE_DBSETUPWIZARD_MYSQL_NATIVE:
     263           0 :             sRoadmapItem = m_sRM_MySQLNativePageTitle;
     264           0 :             break;
     265             :         case PAGE_DBSETUPWIZARD_MYSQL_ODBC:
     266           0 :             sRoadmapItem = m_sRM_ODBCText;
     267           0 :             break;
     268             :         case PAGE_DBSETUPWIZARD_ODBC:
     269           0 :             sRoadmapItem = m_sRM_ODBCText;
     270           0 :             break;
     271             :         case PAGE_DBSETUPWIZARD_SPREADSHEET:
     272           0 :             sRoadmapItem = m_sRM_SpreadSheetText;
     273           0 :             break;
     274             :         case PAGE_DBSETUPWIZARD_AUTHENTIFICATION:
     275           0 :             sRoadmapItem = m_sRM_AuthentificationText;
     276           0 :             break;
     277             :         case PAGE_DBSETUPWIZARD_USERDEFINED:
     278             :             {
     279           0 :                 LocalResourceAccess aDummy(DLG_DATABASE_ADMINISTRATION, RSC_TABDIALOG);
     280           0 :                 sRoadmapItem = String(ModuleRes(STR_PAGETITLE_CONNECTION));
     281             :             }
     282           0 :             break;
     283             :         case PAGE_DBSETUPWIZARD_FINAL:
     284           0 :             sRoadmapItem = m_sRM_FinalText;
     285           0 :             break;
     286             :         default:
     287           0 :             break;
     288             :     }
     289           0 :     return sRoadmapItem;
     290             : }
     291             : 
     292             : //-------------------------------------------------------------------------
     293           0 : ODbTypeWizDialogSetup::~ODbTypeWizDialogSetup()
     294             : {
     295           0 :     delete m_pOutSet;
     296             :     DBG_DTOR(ODbTypeWizDialogSetup,NULL);
     297           0 : }
     298             : 
     299             : //-------------------------------------------------------------------------
     300           0 : IMPL_LINK(ODbTypeWizDialogSetup, OnTypeSelected, OGeneralPage*, /*_pTabPage*/)
     301             : {
     302           0 :     activateDatabasePath();
     303           0 :     return 1L;
     304             : }
     305             : 
     306           0 : void lcl_removeUnused(const ::comphelper::NamedValueCollection& _aOld,const ::comphelper::NamedValueCollection& _aNew,::comphelper::NamedValueCollection& _rDSInfo)
     307             : {
     308           0 :     _rDSInfo.merge(_aNew,true);
     309           0 :     uno::Sequence< beans::NamedValue > aOldValues = _aOld.getNamedValues();
     310           0 :     const beans::NamedValue* pIter = aOldValues.getConstArray();
     311           0 :     const beans::NamedValue* pEnd  = pIter + aOldValues.getLength();
     312           0 :     for(;pIter != pEnd;++pIter)
     313             :     {
     314           0 :         if ( !_aNew.has(pIter->Name) )
     315             :         {
     316           0 :             _rDSInfo.remove(pIter->Name);
     317             :         }
     318           0 :     }
     319           0 : }
     320             : // -----------------------------------------------------------------------------
     321           0 : void DataSourceInfoConverter::convert(const ::dbaccess::ODsnTypeCollection* _pCollection,const ::rtl::OUString& _sOldURLPrefix,const ::rtl::OUString& _sNewURLPrefix,const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& _xDatasource)
     322             : {
     323           0 :     if ( _pCollection->getPrefix(_sOldURLPrefix) == _pCollection->getPrefix(_sNewURLPrefix) )
     324           0 :         return ;
     325           0 :     uno::Sequence< beans::PropertyValue> aInfo;
     326           0 :     _xDatasource->getPropertyValue(PROPERTY_INFO) >>= aInfo;
     327           0 :     ::comphelper::NamedValueCollection aDS(aInfo);
     328             : 
     329           0 :     ::connectivity::DriversConfig aDriverConfig(m_xFactory);
     330             : 
     331           0 :     const ::comphelper::NamedValueCollection&  aOldProperties   = aDriverConfig.getProperties(_sOldURLPrefix);
     332           0 :     const ::comphelper::NamedValueCollection&  aNewProperties   = aDriverConfig.getProperties(_sNewURLPrefix);
     333           0 :     lcl_removeUnused(aOldProperties,aNewProperties,aDS);
     334             : 
     335           0 :     aDS >>= aInfo;
     336           0 :     _xDatasource->setPropertyValue(PROPERTY_INFO,uno::makeAny(aInfo));
     337             : }
     338             : //-------------------------------------------------------------------------
     339           0 : void ODbTypeWizDialogSetup::activateDatabasePath()
     340             : {
     341           0 :     switch ( m_pGeneralPage->GetDatabaseCreationMode() )
     342             :     {
     343             :     case OGeneralPage::eCreateNew:
     344             :     {
     345           0 :         sal_Int32 nCreateNewDBIndex = m_pCollection->getIndexOf( m_pCollection->getEmbeddedDatabase() );
     346           0 :         if ( nCreateNewDBIndex == -1 )
     347           0 :             nCreateNewDBIndex = m_pCollection->getIndexOf( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("sdbc:dbase:")) );
     348             :         OSL_ENSURE( nCreateNewDBIndex != -1, "ODbTypeWizDialogSetup::activateDatabasePath: the GeneralPage should have prevented this!" );
     349           0 :         activatePath( static_cast< PathId >( nCreateNewDBIndex + 1 ), sal_True );
     350             : 
     351           0 :         enableState(PAGE_DBSETUPWIZARD_FINAL, sal_True );
     352           0 :         enableButtons( WZB_FINISH, sal_True);
     353             :     }
     354           0 :     break;
     355             :     case OGeneralPage::eConnectExternal:
     356             :     {
     357           0 :         ::rtl::OUString sOld = m_sURL;
     358           0 :         DataSourceInfoConverter aConverter(getORB());
     359           0 :         m_sURL = m_pGeneralPage->GetSelectedType();
     360           0 :         aConverter.convert(m_pCollection,sOld,m_sURL,m_pImpl->getCurrentDataSource());
     361           0 :         ::dbaccess::DATASOURCE_TYPE eType = VerifyDataSourceType(m_pCollection->determineType(m_sURL));
     362           0 :         if (eType ==  ::dbaccess::DST_UNKNOWN)
     363           0 :             eType = m_pCollection->determineType(m_sOldURL);
     364             : 
     365           0 :         activatePath( static_cast<PathId>(m_pCollection->getIndexOf(m_sURL) + 1), sal_True);
     366           0 :         updateTypeDependentStates();
     367             :     }
     368           0 :     break;
     369             :     case OGeneralPage::eOpenExisting:
     370             :     {
     371           0 :         activatePath( static_cast<PathId>(m_pCollection->size() + 1), sal_True );
     372           0 :         enableButtons( WZB_FINISH, m_pGeneralPage->GetSelectedDocument().sURL.Len() != 0 );
     373             :     }
     374           0 :     break;
     375             :     default:
     376             :         OSL_FAIL( "ODbTypeWizDialogSetup::activateDatabasePath: unknown creation mode!" );
     377             :     }
     378             : 
     379           0 :     enableButtons( WZB_NEXT, m_pGeneralPage->GetDatabaseCreationMode() != OGeneralPage::eOpenExisting );
     380             :         // TODO: this should go into the base class. Point is, we activate a path whose *last*
     381             :         // step is also the current one. The base class should automatically disable
     382             :         // the Next button in such a case. However, not for this patch ...
     383           0 : }
     384             : 
     385             : //-------------------------------------------------------------------------
     386           0 : void ODbTypeWizDialogSetup::updateTypeDependentStates()
     387             : {
     388           0 :     sal_Bool bDoEnable = sal_False;
     389           0 :     sal_Bool bIsConnectionRequired = IsConnectionUrlRequired();
     390           0 :     if (!bIsConnectionRequired)
     391             :     {
     392           0 :         bDoEnable = sal_True;
     393             :     }
     394           0 :     else if ( m_sURL == m_sOldURL )
     395             :     {
     396           0 :         bDoEnable = m_bIsConnectable;
     397             :     }
     398           0 :     enableState(PAGE_DBSETUPWIZARD_AUTHENTIFICATION, bDoEnable);
     399           0 :     enableState(PAGE_DBSETUPWIZARD_FINAL, bDoEnable );
     400           0 :     enableButtons( WZB_FINISH, bDoEnable);
     401           0 : }
     402             : 
     403             : 
     404             : //-------------------------------------------------------------------------
     405           0 : sal_Bool ODbTypeWizDialogSetup::IsConnectionUrlRequired()
     406             : {
     407           0 :     return m_pCollection->isConnectionUrlRequired(m_sURL);
     408             : }
     409             : 
     410             : //-------------------------------------------------------------------------
     411           0 : void ODbTypeWizDialogSetup::resetPages(const Reference< XPropertySet >& _rxDatasource)
     412             : {
     413             :     // remove all items which relate to indirect properties from the input set
     414             :     // (without this, the following may happen: select an arbitrary data source where some indirect properties
     415             :     // are set. Select another data source of the same type, where the indirect props are not set (yet). Then,
     416             :     // the indirect property values of the first ds are shown in the second ds ...)
     417           0 :     const ODbDataSourceAdministrationHelper::MapInt2String& rMap = m_pImpl->getIndirectProperties();
     418           0 :     for (   ODbDataSourceAdministrationHelper::ConstMapInt2StringIterator aIndirect = rMap.begin();
     419           0 :             aIndirect != rMap.end();
     420             :             ++aIndirect
     421             :         )
     422           0 :         getWriteOutputSet()->ClearItem( (sal_uInt16)aIndirect->first );
     423             : 
     424             :     // extract all relevant data from the property set of the data source
     425           0 :     m_pImpl->translateProperties(_rxDatasource, *getWriteOutputSet());
     426           0 : }
     427             : // -----------------------------------------------------------------------------
     428           0 : const SfxItemSet* ODbTypeWizDialogSetup::getOutputSet() const
     429             : {
     430           0 :     return m_pOutSet;
     431             : }
     432             : // -----------------------------------------------------------------------------
     433           0 : SfxItemSet* ODbTypeWizDialogSetup::getWriteOutputSet()
     434             : {
     435           0 :     return m_pOutSet;
     436             : }
     437             : // -----------------------------------------------------------------------------
     438           0 : ::std::pair< Reference<XConnection>,sal_Bool> ODbTypeWizDialogSetup::createConnection()
     439             : {
     440           0 :     return m_pImpl->createConnection();
     441             : }
     442             : // -----------------------------------------------------------------------------
     443           0 : Reference< XMultiServiceFactory > ODbTypeWizDialogSetup::getORB() const
     444             : {
     445           0 :     return m_pImpl->getORB();
     446             : }
     447             : // -----------------------------------------------------------------------------
     448           0 : Reference< XDriver > ODbTypeWizDialogSetup::getDriver()
     449             : {
     450           0 :     return m_pImpl->getDriver();
     451             : }
     452             : 
     453             : 
     454           0 : ::dbaccess::DATASOURCE_TYPE ODbTypeWizDialogSetup::VerifyDataSourceType(const ::dbaccess::DATASOURCE_TYPE _DatabaseType) const
     455             : {
     456           0 :     ::dbaccess::DATASOURCE_TYPE LocDatabaseType = _DatabaseType;
     457           0 :     if ((LocDatabaseType ==  ::dbaccess::DST_MYSQL_JDBC) || (LocDatabaseType ==  ::dbaccess::DST_MYSQL_ODBC) || (LocDatabaseType ==  ::dbaccess::DST_MYSQL_NATIVE))
     458             :     {
     459           0 :         if (m_pMySQLIntroPage != NULL)
     460             :         {
     461           0 :             switch( m_pMySQLIntroPage->getMySQLMode() )
     462             :             {
     463             :                 case OMySQLIntroPageSetup::VIA_JDBC:
     464           0 :                     return  ::dbaccess::DST_MYSQL_JDBC;
     465             :                 case OMySQLIntroPageSetup::VIA_NATIVE:
     466           0 :                     return  ::dbaccess::DST_MYSQL_NATIVE;
     467             :                 case OMySQLIntroPageSetup::VIA_ODBC:
     468           0 :                     return  ::dbaccess::DST_MYSQL_ODBC;
     469             :             }
     470             :         }
     471             :     }
     472           0 :     return LocDatabaseType;
     473             : }
     474             : 
     475             : 
     476             : 
     477             : // -----------------------------------------------------------------------------
     478           0 : ::rtl::OUString ODbTypeWizDialogSetup::getDatasourceType(const SfxItemSet& _rSet) const
     479             : {
     480           0 :     ::rtl::OUString sRet = m_pImpl->getDatasourceType(_rSet);
     481           0 :     if (m_pMySQLIntroPage != NULL && m_pMySQLIntroPage->IsVisible() )
     482             :     {
     483           0 :         switch( m_pMySQLIntroPage->getMySQLMode() )
     484             :         {
     485             :             case OMySQLIntroPageSetup::VIA_JDBC:
     486           0 :                 sRet = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("sdbc:mysql:jdbc:"));
     487           0 :                 break;
     488             :             case OMySQLIntroPageSetup::VIA_NATIVE:
     489           0 :                 sRet = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("sdbc:mysql:mysqlc:"));
     490           0 :                 break;
     491             :             case OMySQLIntroPageSetup::VIA_ODBC:
     492           0 :                 sRet = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("sdbc:mysql:odbc:"));
     493           0 :                 break;
     494             :         }
     495             :     }
     496           0 :     return sRet;
     497             : }
     498             : 
     499             : // -----------------------------------------------------------------------------
     500           0 : void ODbTypeWizDialogSetup::clearPassword()
     501             : {
     502           0 :     m_pImpl->clearPassword();
     503           0 : }
     504             : 
     505             : // -----------------------------------------------------------------------------
     506           0 : TabPage* ODbTypeWizDialogSetup::createPage(WizardState _nState)
     507             : {
     508             :     SfxTabPage* pFirstPage;
     509           0 :     OGenericAdministrationPage* pPage = NULL;
     510           0 :     switch(_nState)
     511             :     {
     512             :         case PAGE_DBSETUPWIZARD_INTRO:
     513           0 :             pFirstPage = OGeneralPage::Create(this,*m_pOutSet, sal_True);
     514           0 :             pPage = static_cast<OGenericAdministrationPage*> (pFirstPage);
     515           0 :             m_pGeneralPage = static_cast<OGeneralPage*>(pFirstPage);
     516           0 :             m_pGeneralPage->SetTypeSelectHandler(LINK(this, ODbTypeWizDialogSetup, OnTypeSelected));
     517           0 :             m_pGeneralPage->SetCreationModeHandler(LINK( this, ODbTypeWizDialogSetup, OnChangeCreationMode ) );
     518           0 :             m_pGeneralPage->SetDocumentSelectionHandler(LINK( this, ODbTypeWizDialogSetup, OnRecentDocumentSelected ) );
     519           0 :             m_pGeneralPage->SetChooseDocumentHandler(LINK( this, ODbTypeWizDialogSetup, OnSingleDocumentChosen ) );
     520           0 :             break;
     521             : 
     522             :         case PAGE_DBSETUPWIZARD_DBASE:
     523           0 :             pPage = OConnectionTabPageSetup::CreateDbaseTabPage(this,*m_pOutSet);
     524           0 :             break;
     525             : 
     526             :         case PAGE_DBSETUPWIZARD_ADO:
     527           0 :             pPage = OConnectionTabPageSetup::CreateADOTabPage( this, *m_pOutSet);
     528           0 :             break;
     529             : 
     530             :         case PAGE_DBSETUPWIZARD_TEXT:
     531           0 :             pPage = OTextConnectionPageSetup::CreateTextTabPage(this,*m_pOutSet);
     532           0 :             break;
     533             : 
     534             :         case PAGE_DBSETUPWIZARD_ODBC:
     535           0 :             pPage = OConnectionTabPageSetup::CreateODBCTabPage( this, *m_pOutSet);
     536           0 :             break;
     537             : 
     538             :         case PAGE_DBSETUPWIZARD_JDBC:
     539           0 :             pPage = OJDBCConnectionPageSetup::CreateJDBCTabPage( this, *m_pOutSet);
     540           0 :             break;
     541             : 
     542             :         case PAGE_DBSETUPWIZARD_MYSQL_ODBC:
     543           0 :             m_pOutSet->Put(SfxStringItem(DSID_CONNECTURL, m_pCollection->getPrefix(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("sdbc:mysql:odbc:")))));
     544           0 :             pPage = OConnectionTabPageSetup::CreateODBCTabPage( this, *m_pOutSet);
     545           0 :             break;
     546             : 
     547             :         case PAGE_DBSETUPWIZARD_MYSQL_JDBC:
     548           0 :             m_pOutSet->Put(SfxStringItem(DSID_CONNECTURL, m_pCollection->getPrefix(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("sdbc:mysql:jdbc:")))));
     549           0 :             pPage = OGeneralSpecialJDBCConnectionPageSetup::CreateMySQLJDBCTabPage( this, *m_pOutSet);
     550           0 :             break;
     551             :         case PAGE_DBSETUPWIZARD_MYSQL_NATIVE:
     552           0 :             m_pOutSet->Put(SfxStringItem(DSID_CONNECTURL, m_pCollection->getPrefix(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("sdbc:mysql:mysqlc:")))));
     553           0 :             pPage = MySQLNativeSetupPage::Create( this, *m_pOutSet);
     554           0 :             break;
     555             : 
     556             :         case PAGE_DBSETUPWIZARD_ORACLE:
     557           0 :             pPage = OGeneralSpecialJDBCConnectionPageSetup::CreateOracleJDBCTabPage( this, *m_pOutSet);
     558           0 :             break;
     559             : 
     560             :         case PAGE_DBSETUPWIZARD_LDAP:
     561           0 :             pPage = OLDAPConnectionPageSetup::CreateLDAPTabPage(this,*m_pOutSet);
     562           0 :             break;
     563             : 
     564             :         case PAGE_DBSETUPWIZARD_SPREADSHEET:    /// first user defined driver
     565           0 :             pPage = OSpreadSheetConnectionPageSetup::CreateSpreadSheetTabPage(this,*m_pOutSet);
     566           0 :             break;
     567             : 
     568             :         case PAGE_DBSETUPWIZARD_MSACCESS:
     569           0 :             pPage  = OConnectionTabPageSetup::CreateMSAccessTabPage(this,*m_pOutSet);
     570           0 :             break;
     571             :         case PAGE_DBSETUPWIZARD_MYSQL_INTRO:
     572           0 :             m_pMySQLIntroPage = OMySQLIntroPageSetup::CreateMySQLIntroTabPage(this,*m_pOutSet);
     573           0 :             m_pMySQLIntroPage->SetClickHdl(LINK( this, ODbTypeWizDialogSetup, ImplClickHdl ) );
     574           0 :             pPage = m_pMySQLIntroPage;
     575           0 :             break;
     576             : 
     577             :         case PAGE_DBSETUPWIZARD_AUTHENTIFICATION:
     578           0 :             pPage = OAuthentificationPageSetup::CreateAuthentificationTabPage(this,*m_pOutSet);
     579           0 :             break;
     580             : 
     581             :         case PAGE_DBSETUPWIZARD_USERDEFINED:
     582           0 :             pPage = OConnectionTabPageSetup::CreateUserDefinedTabPage(this,*m_pOutSet);
     583           0 :             break;
     584             : 
     585             :         case PAGE_DBSETUPWIZARD_FINAL:
     586           0 :             pPage = OFinalDBPageSetup::CreateFinalDBTabPageSetup(this,*m_pOutSet);
     587           0 :             pFinalPage = static_cast<OFinalDBPageSetup*> (pPage);
     588           0 :             break;
     589             :     }
     590             : 
     591           0 :     if ((_nState != PAGE_DBSETUPWIZARD_INTRO) && (_nState != PAGE_DBSETUPWIZARD_AUTHENTIFICATION))
     592             :     {
     593           0 :         pPage->SetModifiedHandler(LINK( this, ODbTypeWizDialogSetup, ImplModifiedHdl ) );
     594             :     }
     595             : 
     596           0 :     if ( pPage )
     597             :     {
     598           0 :         pPage->SetServiceFactory(m_pImpl->getORB());
     599           0 :         pPage->SetAdminDialog(this, this);
     600             : 
     601           0 :         defaultButton( _nState == PAGE_DBSETUPWIZARD_FINAL ? WZB_FINISH : WZB_NEXT );
     602           0 :         enableButtons( WZB_FINISH, _nState == PAGE_DBSETUPWIZARD_FINAL );
     603           0 :         enableButtons( WZB_NEXT, _nState == PAGE_DBSETUPWIZARD_FINAL ? sal_False : sal_True);
     604           0 :         pPage->Show();
     605             :     }
     606           0 :     return pPage;
     607             : }
     608             : 
     609             : 
     610           0 : IMPL_LINK(ODbTypeWizDialogSetup, ImplModifiedHdl, OGenericAdministrationPage*, _pConnectionPageSetup)
     611             : {
     612           0 :     m_bIsConnectable = _pConnectionPageSetup->GetRoadmapStateValue( );
     613           0 :     enableState(PAGE_DBSETUPWIZARD_FINAL, m_bIsConnectable);
     614           0 :     enableState(PAGE_DBSETUPWIZARD_AUTHENTIFICATION, m_bIsConnectable);
     615           0 :     if (getCurrentState() == PAGE_DBSETUPWIZARD_FINAL)
     616           0 :         enableButtons( WZB_FINISH, sal_True);
     617             :     else
     618           0 :         enableButtons( WZB_FINISH, m_bIsConnectable);
     619           0 :     enableButtons( WZB_NEXT, m_bIsConnectable  && (getCurrentState() != PAGE_DBSETUPWIZARD_FINAL));
     620           0 :     return sal_True;
     621             : }
     622             : 
     623             : 
     624             : // -----------------------------------------------------------------------------
     625           0 : IMPL_LINK(ODbTypeWizDialogSetup, ImplClickHdl, OMySQLIntroPageSetup*, _pMySQLIntroPageSetup)
     626             : {
     627           0 :     ::rtl::OUString sURLPrefix;
     628           0 :     switch( _pMySQLIntroPageSetup->getMySQLMode() )
     629             :     {
     630             :         case  OMySQLIntroPageSetup::VIA_ODBC:
     631           0 :             sURLPrefix = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("sdbc:mysql:odbc:"));
     632           0 :             break;
     633             :         case  OMySQLIntroPageSetup::VIA_JDBC:
     634           0 :             sURLPrefix = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("sdbc:mysql:jdbc:"));
     635           0 :             break;
     636             :         case  OMySQLIntroPageSetup::VIA_NATIVE:
     637           0 :             sURLPrefix = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("sdbc:mysql:mysqlc:"));
     638           0 :             break;
     639             :     }
     640           0 :     activatePath( static_cast<PathId>(m_pCollection->getIndexOf(sURLPrefix) + 1), sal_True);
     641           0 :     return sal_True;
     642             : }
     643             : 
     644             : // -----------------------------------------------------------------------------
     645           0 : IMPL_LINK(ODbTypeWizDialogSetup, OnChangeCreationMode, OGeneralPage*, /*_pGeneralPage*/)
     646             : {
     647           0 :     activateDatabasePath();
     648           0 :     return sal_True;
     649             : }
     650             : 
     651             : // -----------------------------------------------------------------------------
     652           0 : IMPL_LINK(ODbTypeWizDialogSetup, OnRecentDocumentSelected, OGeneralPage*, /*_pGeneralPage*/)
     653             : {
     654           0 :     enableButtons( WZB_FINISH, m_pGeneralPage->GetSelectedDocument().sURL.Len() != 0 );
     655           0 :     return 0L;
     656             : }
     657             : 
     658             : // -----------------------------------------------------------------------------
     659           0 : IMPL_LINK(ODbTypeWizDialogSetup, OnSingleDocumentChosen, OGeneralPage*, /*_pGeneralPage*/)
     660             : {
     661           0 :     if ( prepareLeaveCurrentState( eFinish ) )
     662           0 :         onFinish();
     663           0 :     return 0L;
     664             : }
     665             : 
     666             : // -----------------------------------------------------------------------------
     667           0 : void ODbTypeWizDialogSetup::enterState(WizardState _nState)
     668             : {
     669           0 :     m_sURL = m_pImpl->getDatasourceType(*m_pOutSet);
     670           0 :     RoadmapWizard::enterState(_nState);
     671           0 :     switch(_nState)
     672             :     {
     673             :         case PAGE_DBSETUPWIZARD_INTRO:
     674           0 :             m_sOldURL = m_sURL;
     675           0 :             break;
     676             :         case PAGE_DBSETUPWIZARD_FINAL:
     677           0 :             enableButtons( WZB_FINISH, sal_True);
     678           0 :             if ( pFinalPage )
     679           0 :                 pFinalPage->enableTableWizardCheckBox(m_pCollection->supportsTableCreation(m_sURL));
     680           0 :             break;
     681             :     }
     682           0 : }
     683             : 
     684             : //-------------------------------------------------------------------------
     685           0 : sal_Bool ODbTypeWizDialogSetup::saveDatasource()
     686             : {
     687           0 :     SfxTabPage* pPage = static_cast<SfxTabPage*>(WizardDialog::GetPage(getCurrentState()));
     688           0 :     if ( pPage )
     689           0 :         pPage->FillItemSet(*m_pOutSet);
     690           0 :     return sal_True;
     691             : }
     692             : 
     693             : 
     694             : // -----------------------------------------------------------------------------
     695           0 : sal_Bool ODbTypeWizDialogSetup::leaveState(WizardState _nState)
     696             : {
     697           0 :     if (_nState == PAGE_DBSETUPWIZARD_MYSQL_INTRO)
     698           0 :         return sal_True;
     699           0 :     if ( _nState == PAGE_DBSETUPWIZARD_INTRO && m_sURL != m_sOldURL )
     700             :     {
     701           0 :         resetPages(m_pImpl->getCurrentDataSource());
     702             :     }
     703           0 :     SfxTabPage* pPage = static_cast<SfxTabPage*>(WizardDialog::GetPage(_nState));
     704           0 :     return pPage && pPage->DeactivatePage(m_pOutSet) != 0;
     705             : }
     706             : 
     707             : // -----------------------------------------------------------------------------
     708           0 : void ODbTypeWizDialogSetup::setTitle(const ::rtl::OUString& /*_sTitle*/)
     709             : {
     710             :     OSL_FAIL( "ODbTypeWizDialogSetup::setTitle: not implemented!" );
     711             :         // why?
     712           0 : }
     713             : 
     714             : //-------------------------------------------------------------------------
     715           0 : void ODbTypeWizDialogSetup::enableConfirmSettings( bool _bEnable )
     716             : {
     717             :     (void)_bEnable;
     718           0 : }
     719             : 
     720             : //-------------------------------------------------------------------------
     721             : namespace
     722             : {
     723           0 :     bool lcl_handle( const Reference< XInteractionHandler2 >& _rxHandler, const Any& _rRequest )
     724             :     {
     725           0 :         OInteractionRequest* pRequest = new OInteractionRequest( _rRequest );
     726           0 :         Reference < XInteractionRequest > xRequest( pRequest );
     727           0 :         OInteractionAbort* pAbort = new OInteractionAbort;
     728           0 :         pRequest->addContinuation( pAbort );
     729             : 
     730           0 :         return _rxHandler->handleInteractionRequest( xRequest );
     731             :     }
     732             : }
     733             : 
     734             : //-------------------------------------------------------------------------
     735           0 : sal_Bool ODbTypeWizDialogSetup::SaveDatabaseDocument()
     736             : {
     737           0 :     Reference< XInteractionHandler2 > xHandler( InteractionHandler::createWithParent(comphelper::getComponentContext(getORB()), 0) );
     738             :     try
     739             :     {
     740           0 :         if (callSaveAsDialog() == sal_True)
     741             :         {
     742           0 :             m_pImpl->saveChanges(*m_pOutSet);
     743           0 :             Reference< XPropertySet > xDatasource = m_pImpl->getCurrentDataSource();
     744           0 :             Reference< XModel > xModel( getDataSourceOrModel( xDatasource ), UNO_QUERY_THROW );
     745           0 :             Reference< XStorable > xStore( xModel, UNO_QUERY_THROW );
     746             : 
     747           0 :             if ( m_pGeneralPage->GetDatabaseCreationMode() == OGeneralPage::eCreateNew )
     748           0 :                 CreateDatabase();
     749             : 
     750           0 :             ::comphelper::NamedValueCollection aArgs( xModel->getArgs() );
     751           0 :             aArgs.put( "Overwrite", sal_Bool( sal_True ) );
     752           0 :             aArgs.put( "InteractionHandler", xHandler );
     753           0 :             aArgs.put( "MacroExecutionMode", MacroExecMode::USE_CONFIG );
     754             : 
     755           0 :             ::rtl::OUString sPath = m_pImpl->getDocumentUrl( *m_pOutSet );
     756           0 :             xStore->storeAsURL( sPath, aArgs.getPropertyValues() );
     757             : 
     758           0 :             if ( !pFinalPage || pFinalPage->IsDatabaseDocumentToBeRegistered() )
     759           0 :                 RegisterDataSourceByLocation( sPath );
     760             : 
     761           0 :             return sal_True;
     762             :         }
     763             :     }
     764           0 :     catch ( const Exception& e )
     765             :     {
     766           0 :         Any aError = ::cppu::getCaughtException();
     767           0 :         if ( xHandler.is() )
     768             :         {
     769           0 :             if ( !lcl_handle( xHandler, aError ) )
     770             :             {
     771           0 :                 InteractiveIOException aRequest;
     772           0 :                 aRequest.Classification = InteractionClassification_ERROR;
     773           0 :                 if ( aError.isExtractableTo( ::cppu::UnoType< IOException >::get() ) )
     774             :                     // assume savint the document faile
     775           0 :                     aRequest.Code = IOErrorCode_CANT_WRITE;
     776             :                 else
     777           0 :                     aRequest.Code = IOErrorCode_GENERAL;
     778           0 :                 aRequest.Message = e.Message;
     779           0 :                 aRequest.Context = e.Context;
     780           0 :                 lcl_handle( xHandler, makeAny( aRequest ) );
     781             :             }
     782           0 :         }
     783             :     }
     784           0 :     return sal_False;
     785             : }
     786             :     // ------------------------------------------------------------------------
     787           0 :     sal_Bool ODbTypeWizDialogSetup::IsDatabaseDocumentToBeOpened() const
     788             :     {
     789           0 :         if ( m_pGeneralPage->GetDatabaseCreationMode() == OGeneralPage::eOpenExisting )
     790           0 :             return sal_True;
     791             : 
     792           0 :         if ( pFinalPage != NULL )
     793           0 :             return pFinalPage->IsDatabaseDocumentToBeOpened();
     794             : 
     795           0 :         return sal_True;
     796             :     }
     797             : 
     798             :     // ------------------------------------------------------------------------
     799           0 :     sal_Bool ODbTypeWizDialogSetup::IsTableWizardToBeStarted() const
     800             :     {
     801           0 :         if ( m_pGeneralPage->GetDatabaseCreationMode() == OGeneralPage::eOpenExisting )
     802           0 :             return sal_False;
     803             : 
     804           0 :         if ( pFinalPage != NULL )
     805           0 :             return pFinalPage->IsTableWizardToBeStarted();
     806             : 
     807           0 :         return sal_False;
     808             :     }
     809             : 
     810             :     //-------------------------------------------------------------------------
     811           0 :     ::rtl::OUString ODbTypeWizDialogSetup::getDefaultDatabaseType() const
     812             :     {
     813           0 :         ::rtl::OUString sEmbeddedURL = m_pCollection->getEmbeddedDatabase();
     814           0 :         ::connectivity::DriversConfig aDriverConfig(getORB());
     815             :         try
     816             :         {
     817           0 :         if ( aDriverConfig.getDriverFactoryName(sEmbeddedURL).isEmpty() || !m_pImpl->getDriver(sEmbeddedURL).is() )
     818           0 :             sEmbeddedURL = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("sdbc:dbase:"));
     819             :         }
     820           0 :         catch(const Exception&)
     821             :         {
     822           0 :             sEmbeddedURL = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("sdbc:dbase:"));
     823             :         }
     824             : 
     825           0 :         return sEmbeddedURL;
     826             :     }
     827             : 
     828             :     //-------------------------------------------------------------------------
     829           0 :     void ODbTypeWizDialogSetup::CreateDatabase()
     830             :     {
     831           0 :         ::rtl::OUString sUrl;
     832           0 :         ::rtl::OUString eType = getDefaultDatabaseType();
     833           0 :         if ( m_pCollection->isEmbeddedDatabase(eType) )
     834             :         {
     835           0 :             sUrl = eType;
     836           0 :             Reference< XPropertySet > xDatasource = m_pImpl->getCurrentDataSource();
     837             :             OSL_ENSURE(xDatasource.is(),"DataSource is null!");
     838           0 :             if ( xDatasource.is() )
     839           0 :                 xDatasource->setPropertyValue( PROPERTY_INFO, makeAny( m_pCollection->getDefaultDBSettings( eType ) ) );
     840           0 :             m_pImpl->translateProperties(xDatasource,*m_pOutSet);
     841             :         }
     842           0 :         else if ( m_pCollection->isFileSystemBased(eType) )
     843             :         {
     844           0 :             Reference< XSimpleFileAccess3 > xSimpleFileAccess(ucb::SimpleFileAccess::create(comphelper::getComponentContext(getORB())));
     845           0 :             INetURLObject aDBPathURL(m_sWorkPath);
     846           0 :             aDBPathURL.Append(m_aDocURL.getBase());
     847           0 :             createUniqueFolderName(&aDBPathURL);
     848           0 :             ::rtl::OUString sPrefix = eType;
     849           0 :             sUrl = aDBPathURL.GetMainURL( INetURLObject::NO_DECODE);
     850           0 :             xSimpleFileAccess->createFolder(sUrl);
     851           0 :              sUrl = sPrefix.concat(sUrl);
     852             :         }
     853           0 :         m_pOutSet->Put(SfxStringItem(DSID_CONNECTURL, sUrl));
     854           0 :         m_pImpl->saveChanges(*m_pOutSet);
     855           0 :     }
     856             : 
     857             :     //-------------------------------------------------------------------------
     858           0 :     void ODbTypeWizDialogSetup::RegisterDataSourceByLocation(const ::rtl::OUString& _sPath)
     859             :     {
     860           0 :         Reference< XPropertySet > xDatasource = m_pImpl->getCurrentDataSource();
     861           0 :         Reference< XDatabaseContext > xDatabaseContext( DatabaseContext::create(comphelper::getComponentContext(getORB())) );
     862           0 :         Reference< XNameAccess > xNameAccessDatabaseContext(xDatabaseContext, UNO_QUERY_THROW );
     863           0 :         INetURLObject aURL( _sPath );
     864           0 :         ::rtl::OUString sFilename = aURL.getBase( INetURLObject::LAST_SEGMENT, true, INetURLObject::DECODE_WITH_CHARSET );
     865           0 :         ::rtl::OUString sDatabaseName = ::dbtools::createUniqueName(xNameAccessDatabaseContext, sFilename,sal_False);
     866           0 :         xDatabaseContext->registerObject(sDatabaseName, xDatasource);
     867           0 :     }
     868             : 
     869             : 
     870             :     //-------------------------------------------------------------------------
     871           0 :     sal_Bool ODbTypeWizDialogSetup::callSaveAsDialog()
     872             :     {
     873           0 :         sal_Bool bRet = sal_False;
     874             :         ::sfx2::FileDialogHelper aFileDlg(
     875             :                 ui::dialogs::TemplateDescription::FILESAVE_AUTOEXTENSION,
     876           0 :                 0, this);
     877           0 :         const SfxFilter* pFilter = getStandardDatabaseFilter();
     878           0 :         if ( pFilter )
     879             :         {
     880           0 :             INetURLObject aWorkURL( m_sWorkPath );
     881           0 :             aFileDlg.SetDisplayFolder( aWorkURL.GetMainURL( INetURLObject::NO_DECODE ));
     882             : 
     883           0 :             ::rtl::OUString sDefaultName = String( ModuleRes( STR_DATABASEDEFAULTNAME ) );
     884           0 :             ::rtl::OUString sExtension = pFilter->GetDefaultExtension();
     885           0 :             sDefaultName += sExtension.replaceAt( 0, 1, ::rtl::OUString() );
     886           0 :             aWorkURL.Append( sDefaultName );
     887           0 :             sDefaultName = createUniqueFileName( aWorkURL );
     888           0 :             aFileDlg.SetFileName( sDefaultName );
     889             : 
     890           0 :             aFileDlg.AddFilter(pFilter->GetUIName(),pFilter->GetDefaultExtension());
     891           0 :             aFileDlg.SetCurrentFilter(pFilter->GetUIName());
     892             :         }
     893           0 :         if ( aFileDlg.Execute() == ERRCODE_NONE )
     894             :         {
     895           0 :             m_aDocURL = INetURLObject(aFileDlg.GetPath());
     896             : 
     897           0 :             if( m_aDocURL.GetProtocol() != INET_PROT_NOT_VALID )
     898             :             {
     899           0 :                 ::rtl::OUString sFileName = m_aDocURL.GetMainURL( INetURLObject::NO_DECODE );
     900           0 :                 if ( ::utl::UCBContentHelper::IsDocument(sFileName) )
     901           0 :                     ::utl::UCBContentHelper::Kill(sFileName);
     902           0 :                 m_pOutSet->Put(SfxStringItem(DSID_DOCUMENT_URL, sFileName));
     903           0 :                 bRet = sal_True;
     904             :             }
     905             :         }
     906           0 :         return bRet;
     907             :     }
     908             : 
     909             :     //-------------------------------------------------------------------------
     910           0 :     void ODbTypeWizDialogSetup::createUniqueFolderName(INetURLObject* pURL)
     911             :     {
     912           0 :         Reference< XSimpleFileAccess3 > xSimpleFileAccess(ucb::SimpleFileAccess::create(comphelper::getComponentContext(getORB())));
     913           0 :         :: rtl::OUString sLastSegmentName = pURL->getName();
     914           0 :         sal_Bool bFolderExists = sal_True;
     915           0 :         sal_Int32 i = 1;
     916           0 :         while (bFolderExists == sal_True)
     917             :         {
     918           0 :             bFolderExists = xSimpleFileAccess->isFolder(pURL->GetMainURL( INetURLObject::NO_DECODE ));
     919           0 :             if (bFolderExists == sal_True)
     920             :             {
     921           0 :                 i++;
     922           0 :                 pURL->setName(sLastSegmentName.concat(::rtl::OUString::valueOf(i)));
     923             :             }
     924           0 :         }
     925           0 :     }
     926             : 
     927             :     //-------------------------------------------------------------------------
     928           0 :     String ODbTypeWizDialogSetup::createUniqueFileName(const INetURLObject& _rURL)
     929             :     {
     930           0 :         Reference< XSimpleFileAccess3 > xSimpleFileAccess(ucb::SimpleFileAccess::create(comphelper::getComponentContext(getORB())));
     931           0 :         :: rtl::OUString sFilename = _rURL.getName();
     932           0 :         ::rtl::OUString BaseName = _rURL.getBase();
     933           0 :         ::rtl::OUString sExtension = _rURL.getExtension();
     934             : 
     935           0 :         sal_Bool bElementExists = sal_True;
     936             : 
     937           0 :         INetURLObject aExistenceCheck( _rURL );
     938           0 :         for ( sal_Int32 i = 1; bElementExists; )
     939             :         {
     940           0 :             bElementExists = xSimpleFileAccess->exists( aExistenceCheck.GetMainURL( INetURLObject::NO_DECODE ) );
     941           0 :             if ( bElementExists )
     942             :             {
     943           0 :                 aExistenceCheck.setBase( BaseName.concat( ::rtl::OUString::valueOf( i ) ) );
     944           0 :                 ++i;
     945             :             }
     946             :         }
     947           0 :         return aExistenceCheck.getName( INetURLObject::LAST_SEGMENT, true, INetURLObject::DECODE_WITH_CHARSET );
     948             :     }
     949             :     // -----------------------------------------------------------------------------
     950           0 :     IWizardPageController* ODbTypeWizDialogSetup::getPageController( TabPage* _pCurrentPage ) const
     951             :     {
     952           0 :         OGenericAdministrationPage* pPage = static_cast<OGenericAdministrationPage*>(_pCurrentPage);
     953           0 :         return pPage;
     954             :     }
     955             : 
     956             :     // -----------------------------------------------------------------------------
     957             :     namespace
     958             :     {
     959             :         // .............................................................................
     960             :         typedef ::cppu::WeakImplHelper1 <   XTerminateListener
     961             :                                         >   AsyncLoader_Base;
     962           0 :         class AsyncLoader : public AsyncLoader_Base
     963             :         {
     964             :         private:
     965             :             Reference< XComponentLoader >       m_xFrameLoader;
     966             :             Reference< XDesktop >               m_xDesktop;
     967             :             Reference< XInteractionHandler2 >   m_xInteractionHandler;
     968             :             ::rtl::OUString                     m_sURL;
     969             :             OAsyncronousLink                    m_aAsyncCaller;
     970             : 
     971             :         public:
     972             :             AsyncLoader( const Reference< XMultiServiceFactory >& _rxORB, const ::rtl::OUString& _rURL );
     973             : 
     974             :             void doLoadAsync();
     975             : 
     976             :             // XTerminateListener
     977             :             virtual void SAL_CALL queryTermination( const EventObject& Event ) throw (TerminationVetoException, RuntimeException);
     978             :             virtual void SAL_CALL notifyTermination( const EventObject& Event ) throw (RuntimeException);
     979             :             // XEventListener
     980             :             virtual void SAL_CALL disposing( const ::com::sun::star::lang::EventObject& Source ) throw (::com::sun::star::uno::RuntimeException);
     981             : 
     982             :         private:
     983             :             DECL_LINK( OnOpenDocument, void* );
     984             :         };
     985             : 
     986             :         // .............................................................................
     987           0 :         AsyncLoader::AsyncLoader( const Reference< XMultiServiceFactory >& _rxORB, const ::rtl::OUString& _rURL )
     988             :             :m_sURL( _rURL )
     989           0 :             ,m_aAsyncCaller( LINK( this, AsyncLoader, OnOpenDocument ) )
     990             :         {
     991             :             try
     992             :             {
     993           0 :                 m_xDesktop.set( _rxORB->createInstance( SERVICE_FRAME_DESKTOP ), UNO_QUERY_THROW );
     994           0 :                 m_xFrameLoader.set( m_xDesktop, UNO_QUERY_THROW );
     995             :                 m_xInteractionHandler =
     996           0 :                     InteractionHandler::createWithParent(comphelper::getComponentContext(_rxORB), 0);
     997             :             }
     998           0 :             catch( const Exception& )
     999             :             {
    1000             :                 DBG_UNHANDLED_EXCEPTION();
    1001             :             }
    1002           0 :         }
    1003             : 
    1004             :         // .............................................................................
    1005           0 :         void AsyncLoader::doLoadAsync()
    1006             :         {
    1007             :             OSL_ENSURE( !m_aAsyncCaller.IsRunning(), "AsyncLoader:doLoadAsync: already running!" );
    1008             : 
    1009           0 :             acquire();
    1010             :             try
    1011             :             {
    1012           0 :                 if ( m_xDesktop.is() )
    1013           0 :                     m_xDesktop->addTerminateListener( this );
    1014             :             }
    1015           0 :             catch( const Exception& ) { DBG_UNHANDLED_EXCEPTION(); }
    1016             : 
    1017           0 :             m_aAsyncCaller.Call( NULL );
    1018           0 :         }
    1019             : 
    1020             :         // .............................................................................
    1021           0 :         IMPL_LINK( AsyncLoader, OnOpenDocument, void*, /*_pEmptyArg*/ )
    1022             :         {
    1023             :             try
    1024             :             {
    1025           0 :                 if ( m_xFrameLoader.is() )
    1026             :                 {
    1027           0 :                     ::comphelper::NamedValueCollection aLoadArgs;
    1028           0 :                     aLoadArgs.put( "InteractionHandler", m_xInteractionHandler );
    1029           0 :                     aLoadArgs.put( "MacroExecutionMode", MacroExecMode::USE_CONFIG );
    1030             : 
    1031           0 :                     Sequence< PropertyValue > aLoadArgPV;
    1032           0 :                     aLoadArgs >>= aLoadArgPV;
    1033             : 
    1034           0 :                     m_xFrameLoader->loadComponentFromURL( m_sURL,
    1035             :                         ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "_default" ) ),
    1036             :                         FrameSearchFlag::ALL,
    1037             :                         aLoadArgPV
    1038           0 :                     );
    1039             :                 }
    1040             :             }
    1041           0 :             catch( const Exception& )
    1042             :             {
    1043             :                 // do not assert.
    1044             :                 // Such an exception happens for instance of the to-be-loaded document does not exist anymore.
    1045             :             }
    1046             : 
    1047             :             try
    1048             :             {
    1049           0 :                 if ( m_xDesktop.is() )
    1050           0 :                     m_xDesktop->removeTerminateListener( this );
    1051             :             }
    1052           0 :             catch( const Exception& ) { DBG_UNHANDLED_EXCEPTION(); }
    1053             : 
    1054           0 :             release();
    1055           0 :             return 0L;
    1056             :         }
    1057             : 
    1058             :         // .............................................................................
    1059           0 :         void SAL_CALL AsyncLoader::queryTermination( const EventObject& /*Event*/ ) throw (TerminationVetoException, RuntimeException)
    1060             :         {
    1061           0 :             throw TerminationVetoException();
    1062             :         }
    1063             : 
    1064             :         // .............................................................................
    1065           0 :         void SAL_CALL AsyncLoader::notifyTermination( const EventObject& /*Event*/ ) throw (RuntimeException)
    1066             :         {
    1067           0 :         }
    1068             :         // .............................................................................
    1069           0 :         void SAL_CALL AsyncLoader::disposing( const EventObject& /*Source*/ ) throw (RuntimeException)
    1070             :         {
    1071           0 :         }
    1072             :     }
    1073             : 
    1074             :     // -----------------------------------------------------------------------------
    1075           0 :     sal_Bool ODbTypeWizDialogSetup::onFinish()
    1076             :     {
    1077           0 :         if ( m_pGeneralPage->GetDatabaseCreationMode() == OGeneralPage::eOpenExisting )
    1078             :         {
    1079             :             // we're not going to re-use the XModel we have - since the document the user
    1080             :             // wants us to load could be a non-database document. Instead, we asynchronously
    1081             :             // open the selected document. Thus, the wizard's return value is RET_CANCEL,
    1082             :             // which means to not continue loading the database document
    1083           0 :             if ( !OWizardMachine::Finnish( RET_CANCEL ) )
    1084           0 :                 return sal_False;
    1085             : 
    1086           0 :             Reference< XComponentLoader > xFrameLoader;
    1087             :             try
    1088             :             {
    1089           0 :                 AsyncLoader* pAsyncLoader = new AsyncLoader( getORB(), m_pGeneralPage->GetSelectedDocument().sURL );
    1090           0 :                 ::rtl::Reference< AsyncLoader > xKeepAlive( pAsyncLoader );
    1091           0 :                 pAsyncLoader->doLoadAsync();
    1092             :             }
    1093           0 :             catch( const Exception& )
    1094             :             {
    1095             :                 DBG_UNHANDLED_EXCEPTION();
    1096             :             }
    1097             : 
    1098           0 :             return sal_True;
    1099             :         }
    1100             : 
    1101           0 :         if (getCurrentState() != PAGE_DBSETUPWIZARD_FINAL)
    1102             :         {
    1103           0 :             skipUntil(PAGE_DBSETUPWIZARD_FINAL);
    1104             :         }
    1105           0 :         if (getCurrentState() == PAGE_DBSETUPWIZARD_FINAL)
    1106           0 :             return SaveDatabaseDocument() ? OWizardMachine::onFinish() : sal_False;
    1107             :         else
    1108             :         {
    1109           0 :                enableButtons( WZB_FINISH, sal_False );
    1110           0 :             return sal_False;
    1111             :         }
    1112             :     }
    1113             : 
    1114             : //.........................................................................
    1115           0 : }   // namespace dbaui
    1116             : //.........................................................................
    1117             : 
    1118             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10