summaryrefslogtreecommitdiff
path: root/dbaccess/source/filter/xml/dbloader2.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'dbaccess/source/filter/xml/dbloader2.cxx')
-rw-r--r--dbaccess/source/filter/xml/dbloader2.cxx660
1 files changed, 0 insertions, 660 deletions
diff --git a/dbaccess/source/filter/xml/dbloader2.cxx b/dbaccess/source/filter/xml/dbloader2.cxx
deleted file mode 100644
index a5c1937fa..000000000
--- a/dbaccess/source/filter/xml/dbloader2.cxx
+++ /dev/null
@@ -1,660 +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 "flt_reghelper.hxx"
-#include "xmlstrings.hrc"
-
-/** === begin UNO includes === **/
-#include <com/sun/star/beans/NamedValue.hpp>
-#include <com/sun/star/beans/XPropertySet.hpp>
-#include <com/sun/star/document/XEventListener.hpp>
-#include <com/sun/star/document/XExtendedFilterDetection.hpp>
-#include <com/sun/star/document/XFilter.hpp>
-#include <com/sun/star/embed/ElementModes.hpp>
-#include <com/sun/star/embed/XStorage.hpp>
-#include <com/sun/star/frame/XController.hpp>
-#include <com/sun/star/frame/XFrame.hpp>
-#include <com/sun/star/frame/XFrameLoader.hpp>
-#include <com/sun/star/frame/XFramesSupplier.hpp>
-#include <com/sun/star/frame/XLoadEventListener.hpp>
-#include <com/sun/star/frame/XModel2.hpp>
-#include <com/sun/star/io/XInputStream.hpp>
-#include <com/sun/star/lang/XInitialization.hpp>
-#include <com/sun/star/lang/XMultiServiceFactory.hpp>
-#include <com/sun/star/lang/XServiceInfo.hpp>
-#include <com/sun/star/lang/XSingleServiceFactory.hpp>
-#include <com/sun/star/registry/XRegistryKey.hpp>
-#include <com/sun/star/sdb/XDocumentDataSource.hpp>
-#include <com/sun/star/task/XJobExecutor.hpp>
-#include <com/sun/star/ui/dialogs/XExecutableDialog.hpp>
-#include <com/sun/star/util/XURLTransformer.hpp>
-#include <com/sun/star/view/XSelectionSupplier.hpp>
-#include <com/sun/star/sdb/application/DatabaseObjectContainer.hpp>
-#include <com/sun/star/sdb/application/NamedDatabaseObject.hpp>
-#include <com/sun/star/frame/XLoadable.hpp>
-/** === end UNO includes === **/
-
-#include <comphelper/componentcontext.hxx>
-#include <comphelper/documentconstants.hxx>
-#include <comphelper/namedvaluecollection.hxx>
-#include <comphelper/processfactory.hxx>
-#include <comphelper/sequenceashashmap.hxx>
-#include <comphelper/stl_types.hxx>
-#include <comphelper/storagehelper.hxx>
-#include <comphelper/types.hxx>
-#include <cppuhelper/implbase2.hxx>
-#include <osl/file.hxx>
-#include <sfx2/docfile.hxx>
-#include <unotools/moduleoptions.hxx>
-#include <toolkit/awt/vclxwindow.hxx>
-#include <toolkit/helper/vclunohelper.hxx>
-#include <tools/diagnose_ex.h>
-#include <tools/urlobj.hxx>
-#include <ucbhelper/commandenvironment.hxx>
-#include <ucbhelper/content.hxx>
-#include <ucbhelper/contentbroker.hxx>
-#include <vcl/msgbox.hxx>
-#include <vcl/svapp.hxx>
-
-using namespace ::ucbhelper;
-using namespace ::com::sun::star::task;
-using namespace ::com::sun::star::uno;
-using namespace ::com::sun::star::ucb;
-using namespace ::com::sun::star::io;
-using namespace ::com::sun::star::util;
-using namespace ::com::sun::star::frame;
-using namespace ::com::sun::star::beans;
-using namespace ::com::sun::star::container;
-using namespace ::com::sun::star::lang;
-using namespace ::com::sun::star::document;
-using namespace ::com::sun::star::registry;
-using namespace ::com::sun::star::sdb;
-using namespace ::com::sun::star::embed;
-namespace css = ::com::sun::star;
-using namespace ::com::sun::star::ui::dialogs;
-using ::com::sun::star::awt::XWindow;
-using ::com::sun::star::sdb::application::NamedDatabaseObject;
-
-// -------------------------------------------------------------------------
-namespace dbaxml
-{
-
-class DBTypeDetection : public ::cppu::WeakImplHelper2< XExtendedFilterDetection, XServiceInfo>
-{
- ::comphelper::ComponentContext m_aContext;
-
-public:
- DBTypeDetection(const Reference< XMultiServiceFactory >&);
-
- // XServiceInfo
- ::rtl::OUString SAL_CALL getImplementationName() throw( );
- sal_Bool SAL_CALL supportsService(const ::rtl::OUString& ServiceName) throw( );
- Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames(void) throw( );
-
- // static methods
- static ::rtl::OUString getImplementationName_Static() throw( )
- {
- return ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("org.openoffice.comp.dbflt.DBTypeDetection"));
- }
- static Sequence< ::rtl::OUString> getSupportedServiceNames_Static(void) throw( );
- static ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >
- SAL_CALL Create(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >&);
-
- virtual ::rtl::OUString SAL_CALL detect( ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& Descriptor ) throw (::com::sun::star::uno::RuntimeException);
-};
-// -------------------------------------------------------------------------
-DBTypeDetection::DBTypeDetection(const Reference< XMultiServiceFactory >& _rxFactory)
- :m_aContext( _rxFactory )
-{
-}
-// -------------------------------------------------------------------------
-::rtl::OUString SAL_CALL DBTypeDetection::detect( ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& Descriptor ) throw (::com::sun::star::uno::RuntimeException)
-{
- try
- {
- ::comphelper::NamedValueCollection aMedia( Descriptor );
- sal_Bool bStreamFromDescr = sal_False;
- ::rtl::OUString sURL = aMedia.getOrDefault( "URL", ::rtl::OUString() );
-
- Reference< XInputStream > xInStream( aMedia.getOrDefault( "InputStream", Reference< XInputStream >() ) );
- Reference< XPropertySet > xStorageProperties;
- if ( xInStream.is() )
- {
- bStreamFromDescr = sal_True;
- xStorageProperties.set( ::comphelper::OStorageHelper::GetStorageFromInputStream(
- xInStream, m_aContext.getLegacyServiceFactory() ), UNO_QUERY );
- }
- else
- {
- ::rtl::OUString sSalvagedURL( aMedia.getOrDefault( "SalvagedFile", ::rtl::OUString() ) );
-
- ::rtl::OUString sFileLocation( sSalvagedURL.getLength() ? sSalvagedURL : sURL );
- if ( sFileLocation.getLength() )
- {
- xStorageProperties.set( ::comphelper::OStorageHelper::GetStorageFromURL(
- sFileLocation, ElementModes::READ, m_aContext.getLegacyServiceFactory() ), UNO_QUERY );
- }
- }
-
- if ( xStorageProperties.is() )
- {
- ::rtl::OUString sMediaType;
- xStorageProperties->getPropertyValue( INFO_MEDIATYPE ) >>= sMediaType;
- if ( sMediaType.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(MIMETYPE_OASIS_OPENDOCUMENT_DATABASE_ASCII)) || sMediaType.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(MIMETYPE_VND_SUN_XML_BASE_ASCII)) )
- {
- if ( bStreamFromDescr && sURL.compareTo( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "private:stream" ) ), 14 ) != COMPARE_EQUAL )
- {
- // After fixing of the i88522 issue ( use the new file locking for database files ) the stream from the type detection can be used further
- // for now the file should be reopened to have read/write access
- aMedia.remove( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "InputStream" ) ) );
- aMedia.remove( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Stream" ) ) );
- aMedia >>= Descriptor;
- try
- {
- ::comphelper::disposeComponent(xStorageProperties);
- if ( xInStream.is() )
- xInStream->closeInput();
- }
- catch( Exception& )
- {
- DBG_UNHANDLED_EXCEPTION();
- }
- }
-
- return ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("StarBase"));
- }
- ::comphelper::disposeComponent(xStorageProperties);
- }
- } catch(Exception&){}
- return ::rtl::OUString();
-}
-// -------------------------------------------------------------------------
-Reference< XInterface > SAL_CALL DBTypeDetection::Create( const Reference< XMultiServiceFactory > & rSMgr )
-{
- return *(new DBTypeDetection(rSMgr));
-}
-// -------------------------------------------------------------------------
-// XServiceInfo
-::rtl::OUString SAL_CALL DBTypeDetection::getImplementationName() throw( )
-{
- return getImplementationName_Static();
-}
-// -------------------------------------------------------------------------
-
-// XServiceInfo
-sal_Bool SAL_CALL DBTypeDetection::supportsService(const ::rtl::OUString& ServiceName) throw( )
-{
- Sequence< ::rtl::OUString > aSNL = getSupportedServiceNames();
- const ::rtl::OUString * pBegin = aSNL.getConstArray();
- const ::rtl::OUString * pEnd = pBegin + aSNL.getLength();
- for( ; pBegin != pEnd; ++pBegin)
- if( *pBegin == ServiceName )
- return sal_True;
- return sal_False;
-}
-// -------------------------------------------------------------------------
-// XServiceInfo
-Sequence< ::rtl::OUString > SAL_CALL DBTypeDetection::getSupportedServiceNames(void) throw( )
-{
- return getSupportedServiceNames_Static();
-}
-// -------------------------------------------------------------------------
-// ORegistryServiceManager_Static
-Sequence< ::rtl::OUString > DBTypeDetection::getSupportedServiceNames_Static(void) throw( )
-{
- Sequence< ::rtl::OUString > aSNS( 1 );
- aSNS.getArray()[0] = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.document.ExtendedTypeDetection"));
- return aSNS;
-}
-// -------------------------------------------------------------------------
-extern "C" void SAL_CALL createRegistryInfo_DBTypeDetection()
-{
- static ::dbaxml::OMultiInstanceAutoRegistration< ::dbaxml::DBTypeDetection > aAutoRegistration;
-}
-// -----------------------------------------------------------------------------
-
-class DBContentLoader : public ::cppu::WeakImplHelper2< XFrameLoader, XServiceInfo>
-{
-private:
- ::comphelper::ComponentContext m_aContext;
- Reference< XFrameLoader > m_xMySelf;
- ::rtl::OUString m_sCurrentURL;
- sal_uLong m_nStartWizard;
-
- DECL_LINK( OnStartTableWizard, void* );
-public:
- DBContentLoader(const Reference< XMultiServiceFactory >&);
- ~DBContentLoader();
-
- // XServiceInfo
- ::rtl::OUString SAL_CALL getImplementationName() throw( );
- sal_Bool SAL_CALL supportsService(const ::rtl::OUString& ServiceName) throw( );
- Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames(void) throw( );
-
- // static methods
- static ::rtl::OUString getImplementationName_Static() throw( )
- {
- return ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("org.openoffice.comp.dbflt.DBContentLoader2"));
- }
- static Sequence< ::rtl::OUString> getSupportedServiceNames_Static(void) throw( );
- static ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >
- SAL_CALL Create(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >&);
-
- // XLoader
- virtual void SAL_CALL load( const Reference< XFrame > & _rFrame, const ::rtl::OUString& _rURL,
- const Sequence< PropertyValue >& _rArgs,
- const Reference< XLoadEventListener > & _rListener) throw(::com::sun::star::uno::RuntimeException);
- virtual void SAL_CALL cancel(void) throw();
-
-private:
- sal_Bool impl_executeNewDatabaseWizard( Reference< XModel >& _rxModel, sal_Bool& _bShouldStartTableWizard );
-};
-DBG_NAME(DBContentLoader)
-
-DBContentLoader::DBContentLoader(const Reference< XMultiServiceFactory >& _rxFactory)
- :m_aContext( _rxFactory )
- ,m_nStartWizard(0)
-{
- DBG_CTOR(DBContentLoader,NULL);
-
-}
-// -------------------------------------------------------------------------
-
-DBContentLoader::~DBContentLoader()
-{
-
- DBG_DTOR(DBContentLoader,NULL);
-}
-// -------------------------------------------------------------------------
-
-// -------------------------------------------------------------------------
-Reference< XInterface > SAL_CALL DBContentLoader::Create( const Reference< XMultiServiceFactory > & rSMgr )
-{
- return *(new DBContentLoader(rSMgr));
-}
-// -------------------------------------------------------------------------
-// XServiceInfo
-::rtl::OUString SAL_CALL DBContentLoader::getImplementationName() throw( )
-{
- return getImplementationName_Static();
-}
-// -------------------------------------------------------------------------
-
-// XServiceInfo
-sal_Bool SAL_CALL DBContentLoader::supportsService(const ::rtl::OUString& ServiceName) throw( )
-{
- Sequence< ::rtl::OUString > aSNL = getSupportedServiceNames();
- const ::rtl::OUString * pBegin = aSNL.getConstArray();
- const ::rtl::OUString * pEnd = pBegin + aSNL.getLength();
- for( ; pBegin != pEnd; ++pBegin)
- if( *pBegin == ServiceName )
- return sal_True;
- return sal_False;
-}
-// -------------------------------------------------------------------------
-// XServiceInfo
-Sequence< ::rtl::OUString > SAL_CALL DBContentLoader::getSupportedServiceNames(void) throw( )
-{
- return getSupportedServiceNames_Static();
-}
-// -------------------------------------------------------------------------
-// ORegistryServiceManager_Static
-Sequence< ::rtl::OUString > DBContentLoader::getSupportedServiceNames_Static(void) throw( )
-{
- Sequence< ::rtl::OUString > aSNS( 1 );
- aSNS.getArray()[0] = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.frame.FrameLoader"));
- return aSNS;
-}
-
-// -----------------------------------------------------------------------
-namespace
-{
- // ...................................................................
- sal_Bool lcl_urlAllowsInteraction( const ::comphelper::ComponentContext& _rContext, const ::rtl::OUString& _rURL )
- {
- bool bDoesAllow = sal_False;
- try
- {
- Reference< XURLTransformer > xTransformer;
- if ( _rContext.createComponent( "com.sun.star.util.URLTransformer", xTransformer ) )
- {
- URL aURL;
- aURL.Complete = _rURL;
- xTransformer->parseStrict( aURL );
- bDoesAllow = aURL.Arguments.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "Interactive" ) );
- }
- }
- catch( const Exception& )
- {
- OSL_FAIL( "lcl_urlAllowsInteraction: caught an exception while analyzing the URL!" );
- }
- return bDoesAllow;
- }
-
- // ...................................................................
- Reference< XWindow > lcl_getTopMostWindow( const ::comphelper::ComponentContext& _rContext )
- {
- Reference< XWindow > xWindow;
- // get the top most window
- Reference < XFramesSupplier > xDesktop;
- if ( _rContext.createComponent( "com.sun.star.frame.Desktop", xDesktop ) )
- {
- Reference < XFrame > xActiveFrame = xDesktop->getActiveFrame();
- if ( xActiveFrame.is() )
- {
- xWindow = xActiveFrame->getContainerWindow();
- Reference<XFrame> xFrame = xActiveFrame;
- while ( xFrame.is() && !xFrame->isTop() )
- xFrame.set(xFrame->getCreator(),UNO_QUERY);
-
- if ( xFrame.is() )
- xWindow = xFrame->getContainerWindow();
- }
- }
- return xWindow;
- }
-}
-
-// -----------------------------------------------------------------------
-sal_Bool DBContentLoader::impl_executeNewDatabaseWizard( Reference< XModel >& _rxModel, sal_Bool& _bShouldStartTableWizard )
-{
- Sequence< Any > aWizardArgs(2);
- aWizardArgs[0] <<= PropertyValue(
- ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ParentWindow")),
- 0,
- makeAny( lcl_getTopMostWindow( m_aContext ) ),
- PropertyState_DIRECT_VALUE);
-
- aWizardArgs[1] <<= PropertyValue(
- ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("InitialSelection")),
- 0,
- makeAny( _rxModel ),
- PropertyState_DIRECT_VALUE);
-
- // create the dialog
- Reference< XExecutableDialog > xAdminDialog;
- OSL_VERIFY( m_aContext.createComponentWithArguments( "com.sun.star.sdb.DatabaseWizardDialog", aWizardArgs, xAdminDialog ) );
-
- // execute it
- if ( !xAdminDialog.is() || ( RET_OK != xAdminDialog->execute() ) )
- return sal_False;
-
- Reference<XPropertySet> xProp(xAdminDialog,UNO_QUERY);
- sal_Bool bSuccess = sal_False;
- xProp->getPropertyValue(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("OpenDatabase"))) >>= bSuccess;
- xProp->getPropertyValue(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("StartTableWizard"))) >>= _bShouldStartTableWizard;
- return bSuccess;
-}
-
-// -----------------------------------------------------------------------
-void SAL_CALL DBContentLoader::load(const Reference< XFrame > & rFrame, const ::rtl::OUString& _rURL,
- const Sequence< PropertyValue >& rArgs,
- const Reference< XLoadEventListener > & rListener) throw(::com::sun::star::uno::RuntimeException)
-{
- // first check if preview is true, if so return with out creating a controller. Preview is not supported
- ::comphelper::NamedValueCollection aMediaDesc( rArgs );
- sal_Bool bPreview = aMediaDesc.getOrDefault( "Preview", sal_False );
- if ( bPreview )
- {
- if (rListener.is())
- rListener->loadCancelled(this);
- return;
- }
-
- Reference< XModel > xModel = aMediaDesc.getOrDefault( "Model", Reference< XModel >() );
- ::rtl::OUString sSalvagedURL = aMediaDesc.getOrDefault( "SalvagedFile", _rURL );
-
- sal_Bool bCreateNew = sal_False; // does the URL denote the private:factory URL?
- sal_Bool bStartTableWizard = sal_False; // start the table wizard after everything was loaded successfully?
-
- sal_Bool bSuccess = sal_True;
-
- // If there's no interaction handler in the media descriptor, put one.
- // By definition, loading via loadComponentFromURL (and thus via the content loader here)
- // is allowed to raise UI. To not burden every place inside the document with creating
- // a default handler, we simply ensure there is one.
- // If a handler is present in the media descriptor, even if it is NULL, we will
- // not touch it.
- if ( !aMediaDesc.has( "InteractionHandler" ) )
- {
- Reference< XInteractionHandler > xHandler;
- if ( m_aContext.createComponent( "com.sun.star.task.InteractionHandler", xHandler ) )
- aMediaDesc.put( "InteractionHandler", xHandler );
- }
-
- // it's allowed to pass an existing document
- Reference< XOfficeDatabaseDocument > xExistentDBDoc;
- xModel.set( aMediaDesc.getOrDefault( "Model", xExistentDBDoc ), UNO_QUERY );
- aMediaDesc.remove( "Model" );
-
- // also, it's allowed to specify the type of view which should be created
- ::rtl::OUString sViewName = aMediaDesc.getOrDefault( "ViewName", ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Default" ) ) );
- aMediaDesc.remove( "ViewName" );
-
- sal_Int32 nInitialSelection = -1;
- if ( !xModel.is() )
- {
- Reference< XSingleServiceFactory > xDatabaseContext;
- if ( !m_aContext.createComponent( (::rtl::OUString)SERVICE_SDB_DATABASECONTEXT, xDatabaseContext ) )
- throw RuntimeException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "css.sdb.DatabaseContext not available" ) ), NULL );
-
- ::rtl::OUString sFactoryName = SvtModuleOptions().GetFactoryEmptyDocumentURL(SvtModuleOptions::E_DATABASE);
- bCreateNew = sFactoryName.match(_rURL);
-
- Reference< XDocumentDataSource > xDocumentDataSource;
- bool bNewAndInteractive = false;
- if ( bCreateNew )
- {
- bNewAndInteractive = lcl_urlAllowsInteraction( m_aContext, _rURL );
- xDocumentDataSource.set( xDatabaseContext->createInstance(), UNO_QUERY_THROW );
- }
- else
- {
- ::comphelper::NamedValueCollection aCreationArgs;
- aCreationArgs.put( (::rtl::OUString)INFO_POOLURL, sSalvagedURL );
- xDocumentDataSource.set( xDatabaseContext->createInstanceWithArguments( aCreationArgs.getWrappedNamedValues() ), UNO_QUERY_THROW );
- }
-
- xModel.set( xDocumentDataSource->getDatabaseDocument(), UNO_QUERY );
-
- if ( bCreateNew && xModel.is() )
- {
- if ( bNewAndInteractive )
- {
- bSuccess = impl_executeNewDatabaseWizard( xModel, bStartTableWizard );
- }
- else
- {
- try
- {
- Reference< XLoadable > xLoad( xModel, UNO_QUERY_THROW );
- xLoad->initNew();
- bSuccess = true;
- }
- catch( const Exception& )
- {
- bSuccess = false;
- }
- }
-
- // initially select the "Tables" category (will be done below)
- nInitialSelection = ::com::sun::star::sdb::application::DatabaseObjectContainer::TABLES;
- }
- }
-
- if ( !xModel.is() )
- {
- if ( rListener.is() )
- rListener->loadCancelled(this);
- return;
- }
-
- if ( !bCreateNew )
- {
- // We need to XLoadable::load the document if it does not yet have an URL.
- // If it already *does* have an URL, then it was either passed in the arguments, or a previous incarnation
- // of that model existed before (which can happen if a model is closed, but an associated DataSource is kept
- // alive 'til loading the document again).
- bool bNeedLoad = ( xModel->getURL().getLength() == 0 );
- try
- {
- aMediaDesc.put( "FileName", _rURL );
- Sequence< PropertyValue > aResource( aMediaDesc.getPropertyValues() );
-
- if ( bNeedLoad )
- {
- Reference< XLoadable > xLoad( xModel, UNO_QUERY_THROW );
- xLoad->load( aResource );
- }
-
- // always attach the resource, even if the document has not been freshly loaded
- xModel->attachResource( _rURL, aResource );
- }
- catch(const Exception&)
- {
- DBG_UNHANDLED_EXCEPTION();
- bSuccess = sal_False;
- }
- }
-
- if ( bSuccess )
- {
- try
- {
- Reference< XModel2 > xModel2( xModel, UNO_QUERY_THROW );
- Reference< XController2 > xController( xModel2->createViewController( sViewName, Sequence< PropertyValue >(), rFrame ), UNO_QUERY_THROW );
-
- xController->attachModel( xModel );
- xModel->connectController( xController.get() );
- rFrame->setComponent( xController->getComponentWindow(), xController.get() );
- xController->attachFrame( rFrame );
- xModel->setCurrentController( xController.get() );
-
- bSuccess = sal_True;
- }
- catch( const Exception& )
- {
- DBG_UNHANDLED_EXCEPTION();
- bSuccess = sal_False;
- }
- }
-
- if (bSuccess)
- {
- if ( rListener.is() )
- rListener->loadFinished(this);
-
- if ( nInitialSelection != -1 )
- {
- Reference< css::view::XSelectionSupplier > xDocView( xModel->getCurrentController(), UNO_QUERY );
- if ( xDocView.is() )
- {
- NamedDatabaseObject aSelection;
- aSelection.Type = nInitialSelection;
- xDocView->select( makeAny( aSelection ) );
- }
- }
-
- if ( bStartTableWizard )
- {
- // reset the data of the previous async drop (if any)
- if ( m_nStartWizard )
- Application::RemoveUserEvent(m_nStartWizard);
- m_sCurrentURL = xModel->getURL();
- m_xMySelf = this;
- m_nStartWizard = Application::PostUserEvent(LINK(this, DBContentLoader, OnStartTableWizard));
- }
- }
- else
- {
- if ( rListener.is() )
- rListener->loadCancelled( this );
- }
-
- if ( !bSuccess )
- ::comphelper::disposeComponent(xModel);
-}
-
-// -----------------------------------------------------------------------
-void DBContentLoader::cancel(void) throw()
-{
-}
-// -----------------------------------------------------------------------------
-IMPL_LINK( DBContentLoader, OnStartTableWizard, void*, /*NOTINTERESTEDIN*/ )
-{
- m_nStartWizard = 0;
- try
- {
- Sequence< Any > aWizArgs(1);
- PropertyValue aValue;
- aValue.Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("DatabaseLocation"));
- aValue.Value <<= m_sCurrentURL;
- aWizArgs[0] <<= aValue;
-
- SolarMutexGuard aGuard;
- Reference< XJobExecutor > xTableWizard;
- if ( m_aContext.createComponentWithArguments( "com.sun.star.wizards.table.CallTableWizard", aWizArgs, xTableWizard ) )
- xTableWizard->trigger(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("start")));
- }
- catch(const Exception&)
- {
- OSL_FAIL("caught an exception while starting the table wizard!");
- }
- m_xMySelf = NULL;
- return 0L;
-}
-}
-// -------------------------------------------------------------------------
-extern "C" void SAL_CALL createRegistryInfo_DBContentLoader2()
-{
- static ::dbaxml::OMultiInstanceAutoRegistration< ::dbaxml::DBContentLoader > aAutoRegistration;
-}
-// -------------------------------------------------------------------------
-extern "C" void SAL_CALL writeDBLoaderInfo2(void* pRegistryKey)
-{
- Reference< XRegistryKey> xKey(reinterpret_cast< XRegistryKey*>(pRegistryKey));
-
- // register content loader for dispatch
- ::rtl::OUString aImpl(RTL_CONSTASCII_USTRINGPARAM("/"));
- aImpl += ::dbaxml::DBContentLoader::getImplementationName_Static();
-
- ::rtl::OUString aImpltwo = aImpl;
- aImpltwo += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("/UNO/Loader"));
- Reference< XRegistryKey> xNewKey = xKey->createKey( aImpltwo );
- aImpltwo = aImpl;
- aImpltwo += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("/Loader"));
- Reference< XRegistryKey > xLoaderKey = xKey->createKey( aImpltwo );
- xNewKey = xLoaderKey->createKey( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Pattern")) );
- xNewKey->setAsciiValue( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("private:factory/sdatabase")) );
-}
-// -----------------------------------------------------------------------------
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */