summaryrefslogtreecommitdiff
path: root/dbaccess/source/filter/xml/xmlfilter.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'dbaccess/source/filter/xml/xmlfilter.cxx')
-rw-r--r--dbaccess/source/filter/xml/xmlfilter.cxx981
1 files changed, 981 insertions, 0 deletions
diff --git a/dbaccess/source/filter/xml/xmlfilter.cxx b/dbaccess/source/filter/xml/xmlfilter.cxx
new file mode 100644
index 000000000000..73ed237f534e
--- /dev/null
+++ b/dbaccess/source/filter/xml/xmlfilter.cxx
@@ -0,0 +1,981 @@
+ /*************************************************************************
+ *
+ * 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"
+
+#ifndef _COM_SUN_STAR_PACKAGES_ZIP_ZIPIOEXCEPTION_HPP_
+#include <com/sun/star/packages/zip/ZipIOException.hpp>
+#endif
+#ifndef _COM_SUN_STAR_EMBED_ELEMENTMODES_HPP_
+#include <com/sun/star/embed/ElementModes.hpp>
+#endif
+#ifndef _COM_SUN_STAR_SDB_XOFFICEDATABASEDOCUMENT_HPP_
+#include <com/sun/star/sdb/XOfficeDatabaseDocument.hpp>
+#endif
+#ifndef DBA_XMLFILTER_HXX
+#include "xmlfilter.hxx"
+#endif
+#ifndef _FLT_REGHELPER_HXX_
+#include "flt_reghelper.hxx"
+#endif
+#ifndef _SV_SVAPP_HXX
+#include <vcl/svapp.hxx>
+#endif
+#ifndef _SV_WINDOW_HXX
+#include <vcl/window.hxx>
+#endif
+#ifndef _XMLOFF_XMLNMSPE_HXX
+#include <xmloff/xmlnmspe.hxx>
+#endif
+#ifndef _XMLOFF_XMLSCRIPTI_HXX
+#include <xmloff/xmlscripti.hxx>
+#endif
+#ifndef _XMLOFF_XMLTOKEN_HXX
+#include <xmloff/xmltoken.hxx>
+#endif
+#ifndef _XMLOFF_TEXTIMP_HXX_
+#include <xmloff/txtimp.hxx>
+#endif
+#ifndef _XMLOFF_NMSPMAP_HXX
+#include <xmloff/nmspmap.hxx>
+#endif
+#ifndef _RTL_LOGFILE_HXX_
+#include <rtl/logfile.hxx>
+#endif
+#ifndef _COM_SUN_STAR_XML_SAX_INPUTSOURCE_HPP_
+#include <com/sun/star/xml/sax/InputSource.hpp>
+#endif
+#ifndef _COM_SUN_STAR_XML_SAX_XPARSER_HPP_
+#include <com/sun/star/xml/sax/XParser.hpp>
+#endif
+#ifndef _XMLOFF_PROGRESSBARHELPER_HXX
+#include <xmloff/ProgressBarHelper.hxx>
+#endif
+#ifndef _SFXDOCFILE_HXX //autogen wg. SfxMedium
+#include <sfx2/docfile.hxx>
+#endif
+#ifndef _COM_SUN_STAR_IO_XINPUTSTREAM_HPP_
+#include <com/sun/star/io/XInputStream.hpp>
+#endif
+#ifndef _COM_SUN_STAR_UNO_XNAMINGSERVICE_HPP_
+#include <com/sun/star/uno/XNamingService.hpp>
+#endif
+#ifndef DBA_XMLDATABASE_HXX
+#include "xmlDatabase.hxx"
+#endif
+#ifndef DBA_XMLENUMS_HXX
+#include "xmlEnums.hxx"
+#endif
+#ifndef _URLOBJ_HXX //autogen wg. INetURLObject
+#include <tools/urlobj.hxx>
+#endif
+#ifndef DBACCESS_SHARED_XMLSTRINGS_HRC
+#include "xmlstrings.hrc"
+#endif
+#ifndef _XMLOFF_DOCUMENTSETTINGSCONTEXT_HXX
+#include <xmloff/DocumentSettingsContext.hxx>
+#endif
+#ifndef DBA_XMLSTYLEIMPORT_HXX
+#include "xmlStyleImport.hxx"
+#endif
+#ifndef _XMLOFF_XMLUCONV_HXX
+#include <xmloff/xmluconv.hxx>
+#endif
+#ifndef DBA_XMLHELPER_HXX
+#include "xmlHelper.hxx"
+#endif
+#ifndef _COM_SUN_STAR_UTIL_XMODIFIABLE_HPP_
+#include <com/sun/star/util/XModifiable.hpp>
+#endif
+#include <com/sun/star/frame/XComponentLoader.hpp>
+#include <com/sun/star/frame/FrameSearchFlag.hpp>
+#include <com/sun/star/lang/WrappedTargetRuntimeException.hpp>
+#ifndef _SV_SVAPP_HXX //autogen
+#include <vcl/svapp.hxx>
+#endif
+#ifndef _VOS_MUTEX_HXX_
+#include <vos/mutex.hxx>
+#endif
+#include <svtools/sfxecode.hxx>
+#include <unotools/moduleoptions.hxx>
+#ifndef _TOOLKIT_HELPER_VCLUNOHELPER_HXX_
+#include <toolkit/helper/vclunohelper.hxx>
+#endif
+#include <tools/diagnose_ex.h>
+#include <comphelper/namedvaluecollection.hxx>
+#include <comphelper/mimeconfighelper.hxx>
+#include <comphelper/documentconstants.hxx>
+#include <comphelper/uno3.hxx>
+#include <cppuhelper/exc_hlp.hxx>
+#include <osl/thread.hxx>
+#include <connectivity/CommonTools.hxx>
+#include <connectivity/DriversConfig.hxx>
+#include "dsntypes.hxx"
+
+using namespace ::com::sun::star;
+
+extern "C" void SAL_CALL createRegistryInfo_ODBFilter( )
+{
+ static ::dbaxml::OMultiInstanceAutoRegistration< ::dbaxml::ODBFilter > aAutoRegistration;
+}
+//--------------------------------------------------------------------------
+namespace dbaxml
+{
+ namespace
+ {
+ class FastLoader : public ::osl::Thread
+ {
+ public:
+ typedef enum { E_JAVA, E_CALC } StartType;
+ FastLoader(uno::Reference< lang::XMultiServiceFactory > const & _xFactory,StartType _eType)
+ :m_xFactory(_xFactory)
+ ,m_eWhat(_eType)
+ {}
+
+ protected:
+ virtual ~FastLoader(){}
+
+ /// Working method which should be overridden.
+ virtual void SAL_CALL run();
+ virtual void SAL_CALL onTerminated();
+ private:
+ uno::Reference< lang::XMultiServiceFactory > m_xFactory;
+ StartType m_eWhat;
+ };
+
+ void SAL_CALL FastLoader::run()
+ {
+ if ( m_eWhat == E_JAVA )
+ {
+ static bool s_bFirstTime = true;
+ if ( s_bFirstTime )
+ {
+ s_bFirstTime = false;
+ try
+ {
+ ::rtl::Reference< jvmaccess::VirtualMachine > xJVM = ::connectivity::getJavaVM(m_xFactory);
+ }
+ catch(uno::Exception& ex)
+ {
+ (void)ex;
+ OSL_ASSERT(0);
+ }
+ } // if ( s_bFirstTime )
+ } // if ( m_eWhat == E_JAVA )
+ else if ( m_eWhat == E_CALC )
+ {
+ static bool s_bFirstTime = true;
+ if ( s_bFirstTime )
+ {
+ s_bFirstTime = false;
+ try
+ {
+ uno::Reference<frame::XComponentLoader> xFrameLoad( m_xFactory->createInstance(
+ ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.frame.Desktop")))
+ ,uno::UNO_QUERY);
+ const ::rtl::OUString sTarget(RTL_CONSTASCII_USTRINGPARAM("_blank"));
+ sal_Int32 nFrameSearchFlag = frame::FrameSearchFlag::TASKS | frame::FrameSearchFlag::CREATE;
+ uno::Reference< frame::XFrame> xFrame = uno::Reference< frame::XFrame>(xFrameLoad,uno::UNO_QUERY_THROW)->findFrame(sTarget,nFrameSearchFlag);
+ xFrameLoad.set( xFrame,uno::UNO_QUERY);
+
+ if ( xFrameLoad.is() )
+ {
+ uno::Sequence < beans::PropertyValue > aArgs( 3);
+ sal_Int32 nLen = 0;
+ aArgs[nLen].Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("AsTemplate"));
+ aArgs[nLen++].Value <<= sal_False;
+
+ aArgs[nLen].Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ReadOnly"));
+ aArgs[nLen++].Value <<= sal_True;
+
+ aArgs[nLen].Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Hidden"));
+ aArgs[nLen++].Value <<= sal_True;
+
+ ::comphelper::MimeConfigurationHelper aHelper(m_xFactory);
+ SvtModuleOptions aModuleOptions;
+ uno::Reference< frame::XModel > xModel(xFrameLoad->loadComponentFromURL(
+ aModuleOptions.GetFactoryEmptyDocumentURL( aModuleOptions.ClassifyFactoryByServiceName( aHelper.GetDocServiceNameFromMediaType(MIMETYPE_OASIS_OPENDOCUMENT_SPREADSHEET) )),
+ ::rtl::OUString(), // empty frame name
+ 0,
+ aArgs
+ ),uno::UNO_QUERY);
+ ::comphelper::disposeComponent(xModel);
+ }
+ }
+ catch(uno::Exception& ex)
+ {
+ (void)ex;
+ OSL_ASSERT(0);
+ }
+ }
+ }
+ }
+ void SAL_CALL FastLoader::onTerminated()
+ {
+ delete this;
+ }
+
+ class DatasourceURLListener : public ::cppu::WeakImplHelper1< beans::XPropertyChangeListener >
+ {
+ uno::Reference< lang::XMultiServiceFactory > m_xFactory;
+ ::dbaccess::ODsnTypeCollection m_aTypeCollection;
+ DatasourceURLListener(const DatasourceURLListener&);
+ void operator =(const DatasourceURLListener&);
+ protected:
+ virtual ~DatasourceURLListener(){}
+ public:
+ DatasourceURLListener(uno::Reference< lang::XMultiServiceFactory > const & _xFactory) : m_xFactory(_xFactory),m_aTypeCollection(_xFactory){}
+ // XPropertyChangeListener
+ virtual void SAL_CALL propertyChange( const beans::PropertyChangeEvent& _rEvent ) throw (uno::RuntimeException)
+ {
+ ::rtl::OUString sURL;
+ _rEvent.NewValue >>= sURL;
+ FastLoader* pCreatorThread = NULL;
+
+ if ( m_aTypeCollection.needsJVM(sURL) )
+ {
+ pCreatorThread = new FastLoader(m_xFactory,FastLoader::E_JAVA);
+ } // if ( m_aTypeCollection.needsJVM(sURL) )
+ else if ( sURL.matchIgnoreAsciiCaseAsciiL("sdbc:calc:",10,0) )
+ {
+ pCreatorThread = new FastLoader(m_xFactory,FastLoader::E_CALC);
+ }
+ if ( pCreatorThread )
+ {
+ pCreatorThread->createSuspended();
+ pCreatorThread->setPriority(osl_Thread_PriorityBelowNormal);
+ pCreatorThread->resume();
+ }
+ }
+ // XEventListener
+ virtual void SAL_CALL disposing( const lang::EventObject& /*_rSource*/ ) throw (uno::RuntimeException)
+ {
+ }
+ };
+ }
+ sal_Char __READONLY_DATA sXML_np__db[] = "_db";
+ sal_Char __READONLY_DATA sXML_np___db[] = "__db";
+
+ using namespace ::com::sun::star::util;
+ /// read a component (file + filter version)
+sal_Int32 ReadThroughComponent(
+ const uno::Reference<XInputStream>& xInputStream,
+ const uno::Reference<XComponent>& xModelComponent,
+ const uno::Reference<XMultiServiceFactory> & rFactory,
+ const uno::Reference< XDocumentHandler >& _xFilter )
+{
+ DBG_ASSERT(xInputStream.is(), "input stream missing");
+ DBG_ASSERT(xModelComponent.is(), "document missing");
+ DBG_ASSERT(rFactory.is(), "factory missing");
+
+ RTL_LOGFILE_CONTEXT_AUTHOR( aLog, "dbaxml", "oj", "ReadThroughComponent" );
+
+ // prepare ParserInputSrouce
+ InputSource aParserInput;
+ aParserInput.aInputStream = xInputStream;
+
+ // get parser
+ uno::Reference< XParser > xParser(
+ rFactory->createInstance(
+ ::rtl::OUString::createFromAscii("com.sun.star.xml.sax.Parser") ),
+ UNO_QUERY );
+ DBG_ASSERT( xParser.is(), "Can't create parser" );
+ if( !xParser.is() )
+ return 1;
+ RTL_LOGFILE_CONTEXT_TRACE( aLog, "parser created" );
+
+ // get filter
+ DBG_ASSERT( _xFilter.is(), "Can't instantiate filter component." );
+ if( !_xFilter.is() )
+ return 1;
+
+ // connect parser and filter
+ xParser->setDocumentHandler( _xFilter );
+
+ // connect model and filter
+ uno::Reference < XImporter > xImporter( _xFilter, UNO_QUERY );
+ xImporter->setTargetDocument( xModelComponent );
+
+
+
+ // finally, parser the stream
+ try
+ {
+ xParser->parseStream( aParserInput );
+ }
+#if OSL_DEBUG_LEVEL > 1
+ catch( SAXParseException& r )
+ {
+ ByteString aError( "SAX parse exception catched while importing:\n" );
+ aError += ByteString( String( r.Message), RTL_TEXTENCODING_ASCII_US );
+ aError += ByteString::CreateFromInt32( r.LineNumber );
+ aError += ',';
+ aError += ByteString::CreateFromInt32( r.ColumnNumber );
+
+ DBG_ERROR( aError.GetBuffer() );
+ return 1;
+ }
+#else
+ catch( SAXParseException& )
+ {
+ return 1;
+ }
+#endif
+ catch( SAXException& )
+ {
+ return 1;
+ }
+ catch( packages::zip::ZipIOException& )
+ {
+ return ERRCODE_IO_BROKENPACKAGE;
+ }
+ catch( Exception& )
+ {
+ DBG_UNHANDLED_EXCEPTION();
+ }
+
+ // success!
+ return 0;
+}
+
+/// read a component (storage version)
+sal_Int32 ReadThroughComponent(
+ uno::Reference< embed::XStorage > xStorage,
+ const uno::Reference<XComponent>& xModelComponent,
+ const sal_Char* pStreamName,
+ const sal_Char* pCompatibilityStreamName,
+ const uno::Reference<XMultiServiceFactory> & rFactory,
+ const uno::Reference< XDocumentHandler >& _xFilter)
+{
+ DBG_ASSERT( xStorage.is(), "Need storage!");
+ DBG_ASSERT(NULL != pStreamName, "Please, please, give me a name!");
+
+ if ( xStorage.is() )
+ {
+ uno::Reference< io::XStream > xDocStream;
+ sal_Bool bEncrypted = sal_False;
+
+ try
+ {
+ // open stream (and set parser input)
+ ::rtl::OUString sStreamName = ::rtl::OUString::createFromAscii(pStreamName);
+ if ( !xStorage->hasByName( sStreamName ) || !xStorage->isStreamElement( sStreamName ) )
+ {
+ // stream name not found! Then try the compatibility name.
+ // if no stream can be opened, return immediatly with OK signal
+
+ // do we even have an alternative name?
+ if ( NULL == pCompatibilityStreamName )
+ return 0;
+
+ // if so, does the stream exist?
+ sStreamName = ::rtl::OUString::createFromAscii(pCompatibilityStreamName);
+ if ( !xStorage->hasByName( sStreamName ) || !xStorage->isStreamElement( sStreamName ) )
+ return 0;
+ }
+
+ // get input stream
+ xDocStream = xStorage->openStreamElement( sStreamName, embed::ElementModes::READ );
+
+ uno::Reference< beans::XPropertySet > xProps( xDocStream, uno::UNO_QUERY_THROW );
+ uno::Any aAny = xProps->getPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Encrypted") ) );
+ aAny >>= bEncrypted;
+ }
+ catch( packages::WrongPasswordException& )
+ {
+ return ERRCODE_SFX_WRONGPASSWORD;
+ }
+ catch ( uno::Exception& )
+ {
+ return 1; // TODO/LATER: error handling
+ }
+
+#ifdef TIMELOG
+ // if we do profiling, we want to know the stream
+ RTL_LOGFILE_TRACE_AUTHOR1( "dbaxml", "oj",
+ "ReadThroughComponent : parsing \"%s\"", pStreamName );
+#endif
+
+ uno::Reference< XInputStream > xInputStream = xDocStream->getInputStream();
+ // read from the stream
+ return ReadThroughComponent( xInputStream
+ ,xModelComponent
+ ,rFactory
+ ,_xFilter );
+ }
+
+ // TODO/LATER: better error handling
+ return 1;
+}
+
+// -------------
+// - ODBFilter -
+// -------------
+DBG_NAME(ODBFilter)
+
+ODBFilter::ODBFilter( const uno::Reference< XMultiServiceFactory >& _rxMSF )
+ :SvXMLImport(_rxMSF)
+ ,m_bNewFormat(false)
+{
+ DBG_CTOR(ODBFilter,NULL);
+
+ GetMM100UnitConverter().setCoreMeasureUnit(MAP_10TH_MM);
+ GetMM100UnitConverter().setXMLMeasureUnit(MAP_CM);
+ GetNamespaceMap().Add( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( sXML_np__db) ),
+ GetXMLToken(XML_N_DB),
+ XML_NAMESPACE_DB );
+
+ GetNamespaceMap().Add( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( sXML_np___db) ),
+ GetXMLToken(XML_N_DB_OASIS),
+ XML_NAMESPACE_DB );
+}
+
+// -----------------------------------------------------------------------------
+
+ODBFilter::~ODBFilter() throw()
+{
+
+ DBG_DTOR(ODBFilter,NULL);
+}
+// -----------------------------------------------------------------------------
+IMPLEMENT_SERVICE_INFO1_STATIC( ODBFilter, "com.sun.star.comp.sdb.DBFilter", "com.sun.star.document.ImportFilter")
+// -----------------------------------------------------------------------------
+sal_Bool SAL_CALL ODBFilter::filter( const Sequence< PropertyValue >& rDescriptor )
+ throw (RuntimeException)
+{
+ uno::Reference< ::com::sun::star::awt::XWindow > xWindow;
+ {
+ ::vos::OGuard aGuard(Application::GetSolarMutex());
+ Window* pFocusWindow = Application::GetFocusWindow();
+ xWindow = VCLUnoHelper::GetInterface( pFocusWindow );
+ if( pFocusWindow )
+ pFocusWindow->EnterWait();
+ }
+ sal_Bool bRet = sal_False;
+
+ if ( GetModel().is() )
+ bRet = implImport( rDescriptor );
+
+ if ( xWindow.is() )
+ {
+ ::vos::OGuard aGuard(Application::GetSolarMutex());
+ Window* pFocusWindow = VCLUnoHelper::GetWindow( xWindow );
+ if ( pFocusWindow )
+ pFocusWindow->LeaveWait();
+ }
+
+
+ return bRet;
+}
+// -----------------------------------------------------------------------------
+sal_Bool ODBFilter::implImport( const Sequence< PropertyValue >& rDescriptor )
+ throw (RuntimeException)
+{
+ ::rtl::OUString sFileName;
+ ::comphelper::NamedValueCollection aMediaDescriptor( rDescriptor );
+ if ( aMediaDescriptor.has( "URL" ) )
+ sFileName = aMediaDescriptor.getOrDefault( "URL", ::rtl::OUString() );
+ if ( !sFileName.getLength() && aMediaDescriptor.has( "FileName" ) )
+ sFileName = aMediaDescriptor.getOrDefault( "FileName", sFileName );
+
+ OSL_ENSURE( sFileName.getLength(), "ODBFilter::implImport: no URL given!" );
+ sal_Bool bRet = ( sFileName.getLength() != 0 );
+
+ if ( bRet )
+ {
+ uno::Reference<XComponent> xCom(GetModel(),UNO_QUERY);
+
+ SfxMediumRef pMedium = new SfxMedium(
+ sFileName, ( STREAM_READ | STREAM_NOCREATE ), FALSE, 0 );
+ uno::Reference< embed::XStorage > xStorage;
+ try
+ {
+ xStorage.set( pMedium->GetStorage( sal_False ), UNO_QUERY_THROW );
+ }
+ catch( const Exception& )
+ {
+ Any aError = ::cppu::getCaughtException();
+ if ( aError.isExtractableTo( ::cppu::UnoType< RuntimeException >::get() ) )
+ throw;
+ throw lang::WrappedTargetRuntimeException( ::rtl::OUString(), *this, aError );
+ }
+
+ uno::Reference<sdb::XOfficeDatabaseDocument> xOfficeDoc(GetModel(),UNO_QUERY_THROW);
+ m_xDataSource.set(xOfficeDoc->getDataSource(),UNO_QUERY_THROW);
+ uno::Reference<beans::XPropertyChangeListener> xListener = new DatasourceURLListener(getServiceFactory());
+ m_xDataSource->addPropertyChangeListener(PROPERTY_URL,xListener);
+ uno::Reference< XNumberFormatsSupplier > xNum(m_xDataSource->getPropertyValue(PROPERTY_NUMBERFORMATSSUPPLIER),UNO_QUERY);
+ SetNumberFormatsSupplier(xNum);
+
+ uno::Reference<XComponent> xModel(GetModel(),UNO_QUERY);
+ sal_Int32 nRet = ReadThroughComponent( xStorage
+ ,xModel
+ ,"settings.xml"
+ ,"Settings.xml"
+ ,getServiceFactory()
+ ,this
+ );
+
+ if ( nRet == 0 )
+ nRet = ReadThroughComponent( xStorage
+ ,xModel
+ ,"content.xml"
+ ,"Content.xml"
+ ,getServiceFactory()
+ ,this
+ );
+
+ bRet = nRet == 0;
+
+ if ( bRet )
+ {
+ uno::Reference< XModifiable > xModi(GetModel(),UNO_QUERY);
+ if ( xModi.is() )
+ xModi->setModified(sal_False);
+ }
+ else
+ {
+ switch( nRet )
+ {
+ case ERRCODE_IO_BROKENPACKAGE:
+ // TODO/LATER: no way to transport the error outside from the filter!
+ break;
+ default:
+ {
+ // TODO/LATER: this is completely wrong! Filter code should never call ErrorHandler directly! But for now this is the only way!
+ ErrorHandler::HandleError( nRet );
+ if( nRet & ERRCODE_WARNING_MASK )
+ bRet = sal_True;
+ }
+ }
+ }
+ }
+
+ return bRet;
+}
+// -----------------------------------------------------------------------------
+SvXMLImportContext* ODBFilter::CreateContext( sal_uInt16 nPrefix,
+ const ::rtl::OUString& rLocalName,
+ const uno::Reference< ::com::sun::star::xml::sax::XAttributeList >& xAttrList )
+{
+ SvXMLImportContext *pContext = 0;
+
+ const SvXMLTokenMap& rTokenMap = GetDocElemTokenMap();
+ switch( rTokenMap.Get( nPrefix, rLocalName ) )
+ {
+ case XML_TOK_DOC_SETTINGS:
+ GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP );
+ pContext = new XMLDocumentSettingsContext( *this, nPrefix, rLocalName,xAttrList );
+ break;
+ case XML_TOK_DOC_DATABASE:
+ GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP );
+ pContext = new OXMLDatabase( *this, nPrefix, rLocalName );
+ break;
+ case XML_TOK_DOC_STYLES:
+ GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP );
+ pContext = CreateStylesContext(nPrefix, rLocalName, xAttrList, sal_False);
+ break;
+ case XML_TOK_DOC_AUTOSTYLES:
+ GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP );
+ pContext = CreateStylesContext(nPrefix, rLocalName, xAttrList, sal_True);
+ break;
+ case XML_TOK_DOC_SCRIPT:
+ pContext = CreateScriptContext( rLocalName );
+ break;
+ }
+
+ if ( !pContext )
+ pContext = SvXMLImport::CreateContext( nPrefix, rLocalName, xAttrList );
+
+ return pContext;
+}
+// -----------------------------------------------------------------------------
+void ODBFilter::SetViewSettings(const Sequence<PropertyValue>& aViewProps)
+{
+ const PropertyValue *pIter = aViewProps.getConstArray();
+ const PropertyValue *pEnd = pIter + aViewProps.getLength();
+ for (; pIter != pEnd; ++pIter)
+ {
+ if ( pIter->Name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM ( "Queries" ) ) )
+ {
+ fillPropertyMap(pIter->Value,m_aQuerySettings);
+ }
+ else if ( pIter->Name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM ( "Tables" ) ) )
+ {
+ fillPropertyMap(pIter->Value,m_aTablesSettings);
+ }
+ }
+}
+// -----------------------------------------------------------------------------
+void ODBFilter::SetConfigurationSettings(const Sequence<PropertyValue>& aConfigProps)
+{
+ const PropertyValue *pIter = aConfigProps.getConstArray();
+ const PropertyValue *pEnd = pIter + aConfigProps.getLength();
+ for (; pIter != pEnd; ++pIter)
+ {
+ if ( pIter->Name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM ( "layout-settings" ) ) )
+ {
+ Sequence<PropertyValue> aWindows;
+ pIter->Value >>= aWindows;
+ uno::Reference<XPropertySet> xProp(getDataSource());
+ if ( xProp.is() )
+ xProp->setPropertyValue(PROPERTY_LAYOUTINFORMATION,makeAny(aWindows));
+ }
+ }
+}
+// -----------------------------------------------------------------------------
+void ODBFilter::fillPropertyMap(const Any& _rValue,TPropertyNameMap& _rMap)
+{
+ Sequence<PropertyValue> aWindows;
+ _rValue >>= aWindows;
+ const PropertyValue *pIter = aWindows.getConstArray();
+ const PropertyValue *pEnd = pIter + aWindows.getLength();
+ for (; pIter != pEnd; ++pIter)
+ {
+ Sequence<PropertyValue> aValue;
+ pIter->Value >>= aValue;
+ _rMap.insert(TPropertyNameMap::value_type(pIter->Name,aValue));
+ }
+
+}
+// -----------------------------------------------------------------------------
+const SvXMLTokenMap& ODBFilter::GetDocElemTokenMap() const
+{
+ if ( !m_pDocElemTokenMap.get() )
+ {
+ static __FAR_DATA SvXMLTokenMapEntry aElemTokenMap[]=
+ {
+ { XML_NAMESPACE_OFFICE, XML_SETTINGS, XML_TOK_DOC_SETTINGS },
+ { XML_NAMESPACE_OOO, XML_SETTINGS, XML_TOK_DOC_SETTINGS },
+ { XML_NAMESPACE_OFFICE, XML_STYLES, XML_TOK_DOC_STYLES },
+ { XML_NAMESPACE_OOO, XML_STYLES, XML_TOK_DOC_STYLES },
+ { XML_NAMESPACE_OFFICE, XML_AUTOMATIC_STYLES, XML_TOK_DOC_AUTOSTYLES },
+ { XML_NAMESPACE_OOO, XML_AUTOMATIC_STYLES, XML_TOK_DOC_AUTOSTYLES },
+ { XML_NAMESPACE_OFFICE, XML_DATABASE, XML_TOK_DOC_DATABASE },
+ { XML_NAMESPACE_OOO, XML_DATABASE, XML_TOK_DOC_DATABASE },
+ { XML_NAMESPACE_OFFICE, XML_SCRIPTS, XML_TOK_DOC_SCRIPT },
+ XML_TOKEN_MAP_END
+ };
+ m_pDocElemTokenMap.reset(new SvXMLTokenMap( aElemTokenMap ));
+ }
+ return *m_pDocElemTokenMap;
+}
+// -----------------------------------------------------------------------------
+const SvXMLTokenMap& ODBFilter::GetDatabaseElemTokenMap() const
+{
+ if ( !m_pDatabaseElemTokenMap.get() )
+ {
+ static __FAR_DATA SvXMLTokenMapEntry aElemTokenMap[]=
+ {
+ { XML_NAMESPACE_DB, XML_DATASOURCE, XML_TOK_DATASOURCE },
+ { XML_NAMESPACE_DB, XML_FORMS, XML_TOK_FORMS},
+ { XML_NAMESPACE_DB, XML_REPORTS, XML_TOK_REPORTS},
+ { XML_NAMESPACE_DB, XML_QUERIES, XML_TOK_QUERIES},
+ { XML_NAMESPACE_DB, XML_TABLES, XML_TOK_TABLES},
+ { XML_NAMESPACE_DB, XML_TABLE_REPRESENTATIONS, XML_TOK_TABLES},
+ { XML_NAMESPACE_DB, XML_SCHEMA_DEFINITION, XML_TOK_SCHEMA_DEFINITION},
+ XML_TOKEN_MAP_END
+ };
+ m_pDatabaseElemTokenMap.reset(new SvXMLTokenMap( aElemTokenMap ));
+ }
+ return *m_pDatabaseElemTokenMap;
+}
+// -----------------------------------------------------------------------------
+const SvXMLTokenMap& ODBFilter::GetDataSourceElemTokenMap() const
+{
+ if ( !m_pDataSourceElemTokenMap.get() )
+ {
+ static __FAR_DATA SvXMLTokenMapEntry aElemTokenMap[]=
+ {
+ { XML_NAMESPACE_DB, XML_CONNECTION_RESOURCE, XML_TOK_CONNECTION_RESOURCE},
+ { XML_NAMESPACE_DB, XML_SUPPRESS_VERSION_COLUMNS, XML_TOK_SUPPRESS_VERSION_COLUMNS},
+ { XML_NAMESPACE_DB, XML_JAVA_DRIVER_CLASS, XML_TOK_JAVA_DRIVER_CLASS},
+ { XML_NAMESPACE_DB, XML_EXTENSION, XML_TOK_EXTENSION},
+ { XML_NAMESPACE_DB, XML_IS_FIRST_ROW_HEADER_LINE, XML_TOK_IS_FIRST_ROW_HEADER_LINE},
+ { XML_NAMESPACE_DB, XML_SHOW_DELETED, XML_TOK_SHOW_DELETED},
+ { XML_NAMESPACE_DB, XML_IS_TABLE_NAME_LENGTH_LIMITED, XML_TOK_IS_TABLE_NAME_LENGTH_LIMITED},
+ { XML_NAMESPACE_DB, XML_SYSTEM_DRIVER_SETTINGS, XML_TOK_SYSTEM_DRIVER_SETTINGS},
+ { XML_NAMESPACE_DB, XML_ENABLE_SQL92_CHECK, XML_TOK_ENABLE_SQL92_CHECK},
+ { XML_NAMESPACE_DB, XML_APPEND_TABLE_ALIAS_NAME, XML_TOK_APPEND_TABLE_ALIAS_NAME},
+ { XML_NAMESPACE_DB, XML_PARAMETER_NAME_SUBSTITUTION, XML_TOK_PARAMETER_NAME_SUBSTITUTION},
+ { XML_NAMESPACE_DB, XML_IGNORE_DRIVER_PRIVILEGES, XML_TOK_IGNORE_DRIVER_PRIVILEGES},
+ { XML_NAMESPACE_DB, XML_BOOLEAN_COMPARISON_MODE, XML_TOK_BOOLEAN_COMPARISON_MODE},
+ { XML_NAMESPACE_DB, XML_USE_CATALOG, XML_TOK_USE_CATALOG},
+ { XML_NAMESPACE_DB, XML_BASE_DN, XML_TOK_BASE_DN},
+ { XML_NAMESPACE_DB, XML_MAX_ROW_COUNT, XML_TOK_MAX_ROW_COUNT},
+ { XML_NAMESPACE_DB, XML_LOGIN, XML_TOK_LOGIN},
+ { XML_NAMESPACE_DB, XML_TABLE_FILTER, XML_TOK_TABLE_FILTER},
+ { XML_NAMESPACE_DB, XML_TABLE_TYPE_FILTER, XML_TOK_TABLE_TYPE_FILTER},
+ { XML_NAMESPACE_DB, XML_AUTO_INCREMENT, XML_TOK_AUTO_INCREMENT},
+ { XML_NAMESPACE_DB, XML_DELIMITER, XML_TOK_DELIMITER},
+ { XML_NAMESPACE_DB, XML_DATA_SOURCE_SETTINGS, XML_TOK_DATA_SOURCE_SETTINGS},
+ { XML_NAMESPACE_DB, XML_FONT_CHARSET, XML_TOK_FONT_CHARSET},
+ // db odf 12
+ { XML_NAMESPACE_DB, XML_CONNECTION_DATA, XML_TOK_CONNECTION_DATA},
+ { XML_NAMESPACE_DB, XML_DATABASE_DESCRIPTION, XML_TOK_DATABASE_DESCRIPTION},
+ { XML_NAMESPACE_DB, XML_COMPOUND_DATABASE, XML_TOK_COMPOUND_DATABASE},
+ { XML_NAMESPACE_XLINK, XML_HREF, XML_TOK_DB_HREF},
+ { XML_NAMESPACE_DB, XML_MEDIA_TYPE, XML_TOK_MEDIA_TYPE},
+ { XML_NAMESPACE_DB, XML_TYPE, XML_TOK_DB_TYPE},
+ { XML_NAMESPACE_DB, XML_HOSTNAME, XML_TOK_HOSTNAME},
+ { XML_NAMESPACE_DB, XML_PORT, XML_TOK_PORT},
+ { XML_NAMESPACE_DB, XML_LOCAL_SOCKET, XML_TOK_LOCAL_SOCKET},
+ { XML_NAMESPACE_DB, XML_DATABASE_NAME, XML_TOK_DATABASE_NAME},
+ { XML_NAMESPACE_DB, XML_DRIVER_SETTINGS, XML_TOK_DRIVER_SETTINGS},
+ { XML_NAMESPACE_DB, XML_JAVA_CLASSPATH, XML_TOK_JAVA_CLASSPATH},
+ { XML_NAMESPACE_DB, XML_CHARACTER_SET, XML_TOK_CHARACTER_SET},
+ { XML_NAMESPACE_DB, XML_APPLICATION_CONNECTION_SETTINGS,XML_TOK_APPLICATION_CONNECTION_SETTINGS},
+ XML_TOKEN_MAP_END
+ };
+ m_pDataSourceElemTokenMap.reset(new SvXMLTokenMap( aElemTokenMap ));
+ }
+ return *m_pDataSourceElemTokenMap;
+}
+// -----------------------------------------------------------------------------
+const SvXMLTokenMap& ODBFilter::GetLoginElemTokenMap() const
+{
+ if ( !m_pLoginElemTokenMap.get() )
+ {
+ static __FAR_DATA SvXMLTokenMapEntry aElemTokenMap[]=
+ {
+ { XML_NAMESPACE_DB, XML_USER_NAME, XML_TOK_USER_NAME},
+ { XML_NAMESPACE_DB, XML_IS_PASSWORD_REQUIRED, XML_TOK_IS_PASSWORD_REQUIRED},
+ { XML_NAMESPACE_DB, XML_USE_SYSTEM_USER, XML_TOK_USE_SYSTEM_USER},
+ { XML_NAMESPACE_DB, XML_LOGIN_TIMEOUT, XML_TOK_LOGIN_TIMEOUT},
+ XML_TOKEN_MAP_END
+ };
+ m_pLoginElemTokenMap.reset(new SvXMLTokenMap( aElemTokenMap ));
+ }
+ return *m_pLoginElemTokenMap;
+}
+// -----------------------------------------------------------------------------
+const SvXMLTokenMap& ODBFilter::GetDatabaseDescriptionElemTokenMap() const
+{
+ if ( !m_pDatabaseDescriptionElemTokenMap.get() )
+ {
+ static __FAR_DATA SvXMLTokenMapEntry aElemTokenMap[]=
+ {
+ { XML_NAMESPACE_DB, XML_FILE_BASED_DATABASE, XML_TOK_FILE_BASED_DATABASE},
+ { XML_NAMESPACE_DB, XML_SERVER_DATABASE, XML_TOK_SERVER_DATABASE},
+ XML_TOKEN_MAP_END
+ };
+ m_pDatabaseDescriptionElemTokenMap.reset(new SvXMLTokenMap( aElemTokenMap ));
+ }
+ return *m_pDatabaseDescriptionElemTokenMap;
+}
+// -----------------------------------------------------------------------------
+const SvXMLTokenMap& ODBFilter::GetDataSourceInfoElemTokenMap() const
+{
+ if ( !m_pDataSourceInfoElemTokenMap.get() )
+ {
+ static __FAR_DATA SvXMLTokenMapEntry aElemTokenMap[]=
+ {
+ { XML_NAMESPACE_DB, XML_ADDITIONAL_COLUMN_STATEMENT,XML_TOK_ADDITIONAL_COLUMN_STATEMENT},
+ { XML_NAMESPACE_DB, XML_ROW_RETRIEVING_STATEMENT, XML_TOK_ROW_RETRIEVING_STATEMENT},
+ { XML_NAMESPACE_DB, XML_STRING, XML_TOK_STRING},
+ { XML_NAMESPACE_DB, XML_FIELD, XML_TOK_FIELD},
+ { XML_NAMESPACE_DB, XML_DECIMAL, XML_TOK_DECIMAL},
+ { XML_NAMESPACE_DB, XML_THOUSAND, XML_TOK_THOUSAND},
+ { XML_NAMESPACE_DB, XML_DATA_SOURCE_SETTING, XML_TOK_DATA_SOURCE_SETTING},
+ { XML_NAMESPACE_DB, XML_DATA_SOURCE_SETTING_VALUE, XML_TOK_DATA_SOURCE_SETTING_VALUE},
+ { XML_NAMESPACE_DB, XML_DATA_SOURCE_SETTING_IS_LIST,XML_TOK_DATA_SOURCE_SETTING_IS_LIST},
+ { XML_NAMESPACE_DB, XML_DATA_SOURCE_SETTING_TYPE, XML_TOK_DATA_SOURCE_SETTING_TYPE},
+ { XML_NAMESPACE_DB, XML_DATA_SOURCE_SETTING_NAME, XML_TOK_DATA_SOURCE_SETTING_NAME},
+ { XML_NAMESPACE_DB, XML_FONT_CHARSET, XML_TOK_FONT_CHARSET},
+ { XML_NAMESPACE_DB, XML_ENCODING, XML_TOK_ENCODING},
+ XML_TOKEN_MAP_END
+ };
+ m_pDataSourceInfoElemTokenMap.reset(new SvXMLTokenMap( aElemTokenMap ));
+ }
+ return *m_pDataSourceInfoElemTokenMap;
+}
+// -----------------------------------------------------------------------------
+const SvXMLTokenMap& ODBFilter::GetDocumentsElemTokenMap() const
+{
+ if ( !m_pDocumentsElemTokenMap.get() )
+ {
+ static __FAR_DATA SvXMLTokenMapEntry aElemTokenMap[]=
+ {
+ { XML_NAMESPACE_DB, XML_COMPONENT, XML_TOK_COMPONENT},
+ { XML_NAMESPACE_DB, XML_COMPONENT_COLLECTION, XML_TOK_COMPONENT_COLLECTION},
+ { XML_NAMESPACE_DB, XML_QUERY_COLLECTION, XML_TOK_QUERY_COLLECTION},
+ { XML_NAMESPACE_DB, XML_QUERY, XML_TOK_QUERY},
+ { XML_NAMESPACE_DB, XML_TABLE, XML_TOK_TABLE},
+ { XML_NAMESPACE_DB, XML_TABLE_REPRESENTATION, XML_TOK_TABLE},
+ { XML_NAMESPACE_DB, XML_COLUMN, XML_TOK_COLUMN},
+ XML_TOKEN_MAP_END
+ };
+ m_pDocumentsElemTokenMap.reset(new SvXMLTokenMap( aElemTokenMap ));
+ }
+ return *m_pDocumentsElemTokenMap;
+}
+// -----------------------------------------------------------------------------
+const SvXMLTokenMap& ODBFilter::GetComponentElemTokenMap() const
+{
+ if ( !m_pComponentElemTokenMap.get() )
+ {
+ static __FAR_DATA SvXMLTokenMapEntry aElemTokenMap[]=
+ {
+ { XML_NAMESPACE_XLINK, XML_HREF, XML_TOK_HREF },
+ { XML_NAMESPACE_XLINK, XML_TYPE, XML_TOK_TYPE },
+ { XML_NAMESPACE_XLINK, XML_SHOW, XML_TOK_SHOW },
+ { XML_NAMESPACE_XLINK, XML_ACTUATE, XML_TOK_ACTUATE},
+ { XML_NAMESPACE_DB, XML_AS_TEMPLATE, XML_TOK_AS_TEMPLATE },
+ { XML_NAMESPACE_DB, XML_NAME, XML_TOK_COMPONENT_NAME },
+ XML_TOKEN_MAP_END
+ };
+ m_pComponentElemTokenMap.reset(new SvXMLTokenMap( aElemTokenMap ));
+ }
+ return *m_pComponentElemTokenMap;
+}
+// -----------------------------------------------------------------------------
+const SvXMLTokenMap& ODBFilter::GetQueryElemTokenMap() const
+{
+ if ( !m_pQueryElemTokenMap.get() )
+ {
+ static __FAR_DATA SvXMLTokenMapEntry aElemTokenMap[]=
+ {
+ { XML_NAMESPACE_DB, XML_COMMAND, XML_TOK_COMMAND },
+ { XML_NAMESPACE_DB, XML_ESCAPE_PROCESSING, XML_TOK_ESCAPE_PROCESSING },
+ { XML_NAMESPACE_DB, XML_NAME, XML_TOK_QUERY_NAME },
+ { XML_NAMESPACE_DB, XML_FILTER_STATEMENT, XML_TOK_FILTER_STATEMENT },
+ { XML_NAMESPACE_DB, XML_ORDER_STATEMENT, XML_TOK_ORDER_STATEMENT },
+ { XML_NAMESPACE_DB, XML_CATALOG_NAME, XML_TOK_CATALOG_NAME },
+ { XML_NAMESPACE_DB, XML_SCHEMA_NAME, XML_TOK_SCHEMA_NAME },
+ { XML_NAMESPACE_DB, XML_STYLE_NAME, XML_TOK_STYLE_NAME},
+ { XML_NAMESPACE_DB, XML_APPLY_FILTER, XML_TOK_APPLY_FILTER},
+ { XML_NAMESPACE_DB, XML_APPLY_ORDER, XML_TOK_APPLY_ORDER},
+ { XML_NAMESPACE_DB, XML_COLUMNS, XML_TOK_COLUMNS},
+ XML_TOKEN_MAP_END
+ };
+ m_pQueryElemTokenMap.reset(new SvXMLTokenMap( aElemTokenMap ));
+ }
+ return *m_pQueryElemTokenMap;
+}
+// -----------------------------------------------------------------------------
+const SvXMLTokenMap& ODBFilter::GetColumnElemTokenMap() const
+{
+ if ( !m_pColumnElemTokenMap.get() )
+ {
+ static __FAR_DATA SvXMLTokenMapEntry aElemTokenMap[]=
+ {
+ { XML_NAMESPACE_DB, XML_NAME, XML_TOK_COLUMN_NAME },
+ { XML_NAMESPACE_DB, XML_STYLE_NAME, XML_TOK_COLUMN_STYLE_NAME },
+ { XML_NAMESPACE_DB, XML_HELP_MESSAGE, XML_TOK_COLUMN_HELP_MESSAGE },
+ { XML_NAMESPACE_DB, XML_VISIBILITY, XML_TOK_COLUMN_VISIBILITY },
+ { XML_NAMESPACE_DB, XML_DEFAULT_VALUE, XML_TOK_COLUMN_DEFAULT_VALUE },
+ { XML_NAMESPACE_DB, XML_TYPE_NAME, XML_TOK_COLUMN_TYPE_NAME },
+ { XML_NAMESPACE_DB, XML_VISIBLE, XML_TOK_COLUMN_VISIBLE },
+ { XML_NAMESPACE_DB, XML_DEFAULT_CELL_STYLE_NAME, XML_TOK_DEFAULT_CELL_STYLE_NAME },
+ XML_TOKEN_MAP_END
+ };
+ m_pColumnElemTokenMap.reset(new SvXMLTokenMap( aElemTokenMap ));
+ }
+ return *m_pColumnElemTokenMap;
+}
+// -----------------------------------------------------------------------------
+SvXMLImportContext* ODBFilter::CreateStylesContext(sal_uInt16 _nPrefix,const ::rtl::OUString& rLocalName,
+ const uno::Reference< XAttributeList>& xAttrList, sal_Bool bIsAutoStyle )
+{
+ SvXMLImportContext *pContext = NULL;
+ if (!pContext)
+ {
+ pContext = new OTableStylesContext(*this, _nPrefix, rLocalName, xAttrList, bIsAutoStyle);
+ if (bIsAutoStyle)
+ //xAutoStyles = pContext;
+ SetAutoStyles((SvXMLStylesContext*)pContext);
+ else
+ //xStyles = pContext;
+ SetStyles((SvXMLStylesContext*)pContext);
+ }
+ return pContext;
+}
+// -----------------------------------------------------------------------------
+SvXMLImportContext* ODBFilter::CreateScriptContext( const ::rtl::OUString& _rLocalName )
+{
+ return new XMLScriptContext( *this, XML_NAMESPACE_OFFICE, _rLocalName, GetModel() );
+}
+// -----------------------------------------------------------------------------
+UniReference < XMLPropertySetMapper > ODBFilter::GetTableStylesPropertySetMapper() const
+{
+ if ( !m_xTableStylesPropertySetMapper.is() )
+ {
+ m_xTableStylesPropertySetMapper = OXMLHelper::GetTableStylesPropertySetMapper();
+ }
+ return m_xTableStylesPropertySetMapper;
+}
+// -----------------------------------------------------------------------------
+UniReference < XMLPropertySetMapper > ODBFilter::GetColumnStylesPropertySetMapper() const
+{
+ if ( !m_xColumnStylesPropertySetMapper.is() )
+ {
+ m_xColumnStylesPropertySetMapper = OXMLHelper::GetColumnStylesPropertySetMapper();
+ }
+ return m_xColumnStylesPropertySetMapper;
+}
+// -----------------------------------------------------------------------------
+UniReference < XMLPropertySetMapper > ODBFilter::GetCellStylesPropertySetMapper() const
+{
+ if ( !m_xCellStylesPropertySetMapper.is() )
+ {
+ m_xCellStylesPropertySetMapper = OXMLHelper::GetCellStylesPropertySetMapper();
+ }
+ return m_xCellStylesPropertySetMapper;
+}
+// -----------------------------------------------------------------------------
+void ODBFilter::setPropertyInfo()
+{
+ Reference<XPropertySet> xDataSource(getDataSource());
+ if ( !xDataSource.is() )
+ return;
+
+ ::connectivity::DriversConfig aDriverConfig(getServiceFactory());
+ const ::rtl::OUString sURL = ::comphelper::getString(xDataSource->getPropertyValue(PROPERTY_URL));
+ ::comphelper::NamedValueCollection aDataSourceSettings = aDriverConfig.getProperties( sURL );
+
+ Sequence<PropertyValue> aInfo;
+ if ( !m_aInfoSequence.empty() )
+ aInfo = Sequence<PropertyValue>(&(*m_aInfoSequence.begin()),m_aInfoSequence.size());
+ aDataSourceSettings.merge( ::comphelper::NamedValueCollection( aInfo ), true );
+
+ aDataSourceSettings >>= aInfo;
+ if ( aInfo.getLength() )
+ {
+ try
+ {
+ xDataSource->setPropertyValue(PROPERTY_INFO,makeAny(aInfo));
+ }
+ catch(Exception)
+ {
+ DBG_UNHANDLED_EXCEPTION();
+ }
+ }
+}
+// -----------------------------------------------------------------------------
+}// dbaxml
+// -----------------------------------------------------------------------------