LCOV - code coverage report
Current view: top level - dbaccess/source/filter/xml - xmlfilter.cxx (source / functions) Hit Total Coverage
Test: commit 10e77ab3ff6f4314137acd6e2702a6e5c1ce1fae Lines: 228 308 74.0 %
Date: 2014-11-03 Functions: 41 43 95.3 %
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             : #include <sal/config.h>
      21             : 
      22             : #include <boost/noncopyable.hpp>
      23             : #include <config_features.h>
      24             : #include <com/sun/star/util/MeasureUnit.hpp>
      25             : #include <com/sun/star/packages/zip/ZipIOException.hpp>
      26             : #include <com/sun/star/embed/ElementModes.hpp>
      27             : #include <com/sun/star/sdb/XOfficeDatabaseDocument.hpp>
      28             : #if HAVE_FEATURE_JAVA
      29             : #include <jvmaccess/virtualmachine.hxx>
      30             : #endif
      31             : #include "xmlfilter.hxx"
      32             : #include "xmlservices.hxx"
      33             : #include "flt_reghelper.hxx"
      34             : #include <vcl/svapp.hxx>
      35             : #include <vcl/window.hxx>
      36             : #include <xmloff/xmlnmspe.hxx>
      37             : #include <xmloff/xmlscripti.hxx>
      38             : #include <xmloff/xmltoken.hxx>
      39             : #include <xmloff/txtimp.hxx>
      40             : #include <xmloff/nmspmap.hxx>
      41             : #include <com/sun/star/xml/sax/InputSource.hpp>
      42             : #include <com/sun/star/xml/sax/Parser.hpp>
      43             : #include <xmloff/ProgressBarHelper.hxx>
      44             : #include <sfx2/docfile.hxx>
      45             : #include <com/sun/star/io/XInputStream.hpp>
      46             : #include <com/sun/star/uno/XNamingService.hpp>
      47             : #include "xmlDatabase.hxx"
      48             : #include "xmlEnums.hxx"
      49             : #include "xmlstrings.hrc"
      50             : #include <xmloff/DocumentSettingsContext.hxx>
      51             : #include "xmlStyleImport.hxx"
      52             : #include <xmloff/xmluconv.hxx>
      53             : #include "xmlHelper.hxx"
      54             : #include <com/sun/star/util/XModifiable.hpp>
      55             : #include <com/sun/star/frame/Desktop.hpp>
      56             : #include <com/sun/star/frame/XComponentLoader.hpp>
      57             : #include <com/sun/star/frame/FrameSearchFlag.hpp>
      58             : #include <com/sun/star/lang/WrappedTargetRuntimeException.hpp>
      59             : #include <osl/mutex.hxx>
      60             : #include <svtools/sfxecode.hxx>
      61             : #include <unotools/moduleoptions.hxx>
      62             : #include <toolkit/helper/vclunohelper.hxx>
      63             : #include <tools/diagnose_ex.h>
      64             : #include <osl/diagnose.h>
      65             : #include <comphelper/processfactory.hxx>
      66             : #include <comphelper/namedvaluecollection.hxx>
      67             : #include <comphelper/mimeconfighelper.hxx>
      68             : #include <comphelper/documentconstants.hxx>
      69             : #include <comphelper/uno3.hxx>
      70             : #include <cppuhelper/exc_hlp.hxx>
      71             : #include <osl/thread.hxx>
      72             : #include <connectivity/CommonTools.hxx>
      73             : #include <connectivity/DriversConfig.hxx>
      74             : #include "dsntypes.hxx"
      75             : #include <rtl/strbuf.hxx>
      76             : 
      77             : using namespace ::com::sun::star;
      78             : 
      79          28 : extern "C" void SAL_CALL createRegistryInfo_ODBFilter( )
      80             : {
      81          28 :     static ::dbaxml::OMultiInstanceAutoRegistration< ::dbaxml::ODBFilter > aAutoRegistration;
      82          28 : }
      83             : 
      84             : namespace dbaxml
      85             : {
      86             :     namespace
      87             :     {
      88             :         class FastLoader : public ::osl::Thread
      89             :         {
      90             :         public:
      91             :             typedef enum { E_JAVA, E_CALC } StartType;
      92          12 :             FastLoader(uno::Reference< uno::XComponentContext > const & _xContext,StartType _eType)
      93             :                 :m_xContext(_xContext)
      94          12 :                 ,m_eWhat(_eType)
      95          12 :             {}
      96             : 
      97             :         protected:
      98          24 :             virtual ~FastLoader(){}
      99             : 
     100             :             /// Working method which should be overridden.
     101             :             virtual void SAL_CALL run() SAL_OVERRIDE;
     102             :             virtual void SAL_CALL onTerminated() SAL_OVERRIDE;
     103             :         private:
     104             :             uno::Reference< uno::XComponentContext > m_xContext;
     105             :             StartType m_eWhat;
     106             :         };
     107             : 
     108          12 :         void SAL_CALL FastLoader::run()
     109             :         {
     110          12 :             osl_setThreadName("dbaxml::FastLoader");
     111             : 
     112          12 :             if ( m_eWhat == E_JAVA )
     113             :             {
     114             : #if HAVE_FEATURE_JAVA
     115             :                 static bool s_bFirstTime = true;
     116          12 :                 if ( s_bFirstTime )
     117             :                 {
     118          12 :                     s_bFirstTime = false;
     119             :                     try
     120             :                     {
     121          12 :                         ::rtl::Reference< jvmaccess::VirtualMachine > xJVM = ::connectivity::getJavaVM(m_xContext);
     122             :                     }
     123           0 :                     catch (const uno::Exception&)
     124             :                     {
     125             :                         OSL_ASSERT(false);
     126             :                     }
     127             :                 }
     128             : #endif
     129             :             }
     130           0 :             else if ( m_eWhat == E_CALC )
     131             :             {
     132             :                 static bool s_bFirstTime = true;
     133           0 :                 if ( s_bFirstTime )
     134             :                 {
     135           0 :                     s_bFirstTime = false;
     136             :                     try
     137             :                     {
     138           0 :                         uno::Reference<frame::XDesktop2> xDesktop = frame::Desktop::create( m_xContext );
     139           0 :                         const OUString sTarget("_blank");
     140           0 :                         sal_Int32 nFrameSearchFlag = frame::FrameSearchFlag::TASKS | frame::FrameSearchFlag::CREATE;
     141           0 :                         uno::Reference< frame::XFrame> xFrame = xDesktop->findFrame(sTarget,nFrameSearchFlag);
     142           0 :                         uno::Reference<frame::XComponentLoader> xFrameLoad(xFrame,uno::UNO_QUERY);
     143             : 
     144           0 :                         if ( xFrameLoad.is() )
     145             :                         {
     146           0 :                             uno::Sequence < beans::PropertyValue > aArgs( 3);
     147           0 :                             sal_Int32 nLen = 0;
     148           0 :                             aArgs[nLen].Name = "AsTemplate";
     149           0 :                             aArgs[nLen++].Value <<= sal_False;
     150             : 
     151           0 :                             aArgs[nLen].Name = "ReadOnly";
     152           0 :                             aArgs[nLen++].Value <<= sal_True;
     153             : 
     154           0 :                             aArgs[nLen].Name = "Hidden";
     155           0 :                             aArgs[nLen++].Value <<= sal_True;
     156             : 
     157           0 :                             ::comphelper::MimeConfigurationHelper aHelper( m_xContext );
     158           0 :                             SvtModuleOptions aModuleOptions;
     159             :                             // This looks like it makes no sense,
     160             :                             // but is probably used to lower latency
     161             :                             // of the user interface for the user:
     162             :                             // when the user will do anything that requires
     163             :                             // the data connection to be established,
     164             :                             // calc will already have been loaded, initialised, etc
     165             :                             // so establishing the data connection (to a Calc sheet)
     166             :                             // will be "faster".
     167           0 :                             uno::Reference< frame::XModel > xModel(xFrameLoad->loadComponentFromURL(
     168             :                                 aModuleOptions.GetFactoryEmptyDocumentURL( SvtModuleOptions::ClassifyFactoryByServiceName( aHelper.GetDocServiceNameFromMediaType(MIMETYPE_OASIS_OPENDOCUMENT_SPREADSHEET) )),
     169             :                                 OUString(), // empty frame name
     170             :                                 0,
     171             :                                 aArgs
     172           0 :                                 ),uno::UNO_QUERY);
     173           0 :                             ::comphelper::disposeComponent(xModel);
     174           0 :                         }
     175             :                     }
     176           0 :                     catch (const uno::Exception&)
     177             :                     {
     178             :                         OSL_ASSERT(false);
     179             :                     }
     180             :                 }
     181             :             }
     182          12 :         }
     183          12 :         void SAL_CALL FastLoader::onTerminated()
     184             :         {
     185          12 :             delete this;
     186          12 :         }
     187             : 
     188             :         class DatasourceURLListener:
     189             :             public cppu::WeakImplHelper1<beans::XPropertyChangeListener>,
     190             :             private boost::noncopyable
     191             :         {
     192             :             uno::Reference< uno::XComponentContext > m_xContext;
     193             :             ::dbaccess::ODsnTypeCollection m_aTypeCollection;
     194             :         protected:
     195          68 :             virtual ~DatasourceURLListener(){}
     196             :         public:
     197          34 :             DatasourceURLListener(uno::Reference< uno::XComponentContext > const & _xContext) : m_xContext(_xContext), m_aTypeCollection(_xContext){}
     198             :             // XPropertyChangeListener
     199          34 :             virtual void SAL_CALL propertyChange( const beans::PropertyChangeEvent& _rEvent ) throw (uno::RuntimeException, std::exception) SAL_OVERRIDE
     200             :             {
     201          34 :                 OUString sURL;
     202          34 :                 _rEvent.NewValue >>= sURL;
     203          34 :                 FastLoader* pCreatorThread = NULL;
     204             : 
     205          34 :                 if ( m_aTypeCollection.needsJVM(sURL) )
     206             :                 {
     207             : #if HAVE_FEATURE_JAVA
     208          12 :                     pCreatorThread = new FastLoader(m_xContext, FastLoader::E_JAVA);
     209             : #endif
     210             :                 }
     211          22 :                 else if ( sURL.matchIgnoreAsciiCaseAsciiL("sdbc:calc:",10,0) )
     212             :                 {
     213           0 :                     pCreatorThread = new FastLoader(m_xContext, FastLoader::E_CALC);
     214             :                 }
     215          34 :                 if ( pCreatorThread )
     216             :                 {
     217          12 :                     pCreatorThread->createSuspended();
     218          12 :                     pCreatorThread->setPriority(osl_Thread_PriorityBelowNormal);
     219          12 :                     pCreatorThread->resume();
     220          34 :                 }
     221          34 :             }
     222             :             // XEventListener
     223          34 :             virtual void SAL_CALL disposing( const lang::EventObject& /*_rSource*/ ) throw (uno::RuntimeException, std::exception) SAL_OVERRIDE
     224             :             {
     225          34 :             }
     226             :         };
     227             :     }
     228             :     sal_Char const sXML_np__db[] = "_db";
     229             :     sal_Char const sXML_np___db[] = "__db";
     230             : 
     231             :     using namespace ::com::sun::star::util;
     232             :     /// read a component (file + filter version)
     233          68 : sal_Int32 ReadThroughComponent(
     234             :     const uno::Reference<XInputStream>& xInputStream,
     235             :     const uno::Reference<XComponent>& xModelComponent,
     236             :     const uno::Reference<XComponentContext> & rxContext,
     237             :     const uno::Reference< XDocumentHandler >& _xFilter )
     238             : {
     239             :     OSL_ENSURE(xInputStream.is(), "input stream missing");
     240             :     OSL_ENSURE(xModelComponent.is(), "document missing");
     241             :     OSL_ENSURE(rxContext.is(), "factory missing");
     242             : 
     243             :     // prepare ParserInputSrouce
     244          68 :     InputSource aParserInput;
     245          68 :     aParserInput.aInputStream = xInputStream;
     246             : 
     247             :     // get parser
     248         136 :     uno::Reference< XParser > xParser = Parser::create(rxContext);
     249             :     SAL_INFO("dbaccess", "parser created" );
     250             : 
     251             :     // get filter
     252             :     OSL_ENSURE( _xFilter.is(), "Can't instantiate filter component." );
     253          68 :     if( !_xFilter.is() )
     254           0 :         return 1;
     255             : 
     256             :     // connect parser and filter
     257          68 :     xParser->setDocumentHandler( _xFilter );
     258             : 
     259             :     // connect model and filter
     260         136 :     uno::Reference < XImporter > xImporter( _xFilter, UNO_QUERY );
     261          68 :     xImporter->setTargetDocument( xModelComponent );
     262             : 
     263             :     // finally, parser the stream
     264             :     try
     265             :     {
     266          68 :         xParser->parseStream( aParserInput );
     267             :     }
     268           0 :     catch (const SAXParseException& r)
     269             :     {
     270             : #if OSL_DEBUG_LEVEL > 1
     271             :         SAL_WARN("dbaccess", "SAX parse exception catched while importing:\n" << r.Message << r.LineNumber << "," << r.ColumnNumber);
     272             : #else
     273             :         (void)r;
     274             : #endif
     275           0 :         return 1;
     276             :     }
     277           0 :     catch (const SAXException&)
     278             :     {
     279           0 :         return 1;
     280             :     }
     281           0 :     catch (const packages::zip::ZipIOException&)
     282             :     {
     283           0 :         return ERRCODE_IO_BROKENPACKAGE;
     284             :     }
     285           0 :     catch (const Exception&)
     286             :     {
     287             :         DBG_UNHANDLED_EXCEPTION();
     288             :     }
     289             : 
     290             :     // success!
     291         136 :     return 0;
     292             : }
     293             : 
     294             : /// read a component (storage version)
     295          68 : sal_Int32 ReadThroughComponent(
     296             :     uno::Reference< embed::XStorage > xStorage,
     297             :     const uno::Reference<XComponent>& xModelComponent,
     298             :     const sal_Char* pStreamName,
     299             :     const sal_Char* pCompatibilityStreamName,
     300             :     const uno::Reference<XComponentContext> & rxContext,
     301             :     const uno::Reference< XDocumentHandler >& _xFilter)
     302             : {
     303             :     OSL_ENSURE( xStorage.is(), "Need storage!");
     304             :     OSL_ENSURE(NULL != pStreamName, "Please, please, give me a name!");
     305             : 
     306          68 :     if ( xStorage.is() )
     307             :     {
     308          68 :         uno::Reference< io::XStream > xDocStream;
     309          68 :         bool bEncrypted = false;
     310             : 
     311             :         try
     312             :         {
     313             :             // open stream (and set parser input)
     314          68 :         OUString sStreamName = OUString::createFromAscii(pStreamName);
     315          68 :             if ( !xStorage->hasByName( sStreamName ) || !xStorage->isStreamElement( sStreamName ) )
     316             :             {
     317             :                 // stream name not found! Then try the compatibility name.
     318             :                 // if no stream can be opened, return immediately with OK signal
     319             : 
     320             :                 // do we even have an alternative name?
     321           0 :                 if ( NULL == pCompatibilityStreamName )
     322           0 :                     return 0;
     323             : 
     324             :                 // if so, does the stream exist?
     325           0 :                 sStreamName = OUString::createFromAscii(pCompatibilityStreamName);
     326           0 :                 if ( !xStorage->hasByName( sStreamName ) || !xStorage->isStreamElement( sStreamName ) )
     327           0 :                     return 0;
     328             :             }
     329             : 
     330             :             // get input stream
     331          68 :             xDocStream = xStorage->openStreamElement( sStreamName, embed::ElementModes::READ );
     332             : 
     333         136 :             uno::Reference< beans::XPropertySet > xProps( xDocStream, uno::UNO_QUERY_THROW );
     334         136 :             uno::Any aAny = xProps->getPropertyValue("Encrypted");
     335         136 :             aAny >>= bEncrypted;
     336             :         }
     337           0 :         catch (const packages::WrongPasswordException&)
     338             :         {
     339           0 :             return ERRCODE_SFX_WRONGPASSWORD;
     340             :         }
     341           0 :         catch (const uno::Exception&)
     342             :         {
     343           0 :             return 1; // TODO/LATER: error handling
     344             :         }
     345             : 
     346         136 :         uno::Reference< XInputStream > xInputStream = xDocStream->getInputStream();
     347             :         // read from the stream
     348             :         return ReadThroughComponent( xInputStream
     349             :                                     ,xModelComponent
     350             :                                     ,rxContext
     351         136 :                                     ,_xFilter );
     352             :     }
     353             : 
     354             :     // TODO/LATER: better error handling
     355           0 :     return 1;
     356             : }
     357             : 
     358             : // - ODBFilter -
     359             : 
     360          34 : ODBFilter::ODBFilter( const uno::Reference< XComponentContext >& _rxContext )
     361             :     : SvXMLImport(_rxContext, getImplementationName_Static())
     362             :     , m_nPreviewMode(0)
     363          34 :     , m_bNewFormat(false)
     364             : {
     365             : 
     366          34 :     GetMM100UnitConverter().SetCoreMeasureUnit(util::MeasureUnit::MM_10TH);
     367          34 :     GetMM100UnitConverter().SetXMLMeasureUnit(util::MeasureUnit::CM);
     368          34 :     GetNamespaceMap().Add( OUString ( sXML_np__db ),
     369          34 :                         GetXMLToken(XML_N_DB),
     370          68 :                         XML_NAMESPACE_DB );
     371             : 
     372          34 :     GetNamespaceMap().Add( OUString ( sXML_np___db ),
     373          34 :                         GetXMLToken(XML_N_DB_OASIS),
     374          68 :                         XML_NAMESPACE_DB );
     375          34 : }
     376             : 
     377          68 : ODBFilter::~ODBFilter() throw()
     378             : {
     379             : 
     380          68 : }
     381             : 
     382          90 : OUString ODBFilter::getImplementationName_Static()
     383             :     throw (css::uno::RuntimeException)
     384             : {
     385          90 :     return OUString("com.sun.star.comp.sdb.DBFilter");
     386             : }
     387             : 
     388          28 : css::uno::Sequence<OUString> ODBFilter::getSupportedServiceNames_Static()
     389             :     throw (css::uno::RuntimeException)
     390             : {
     391          28 :     css::uno::Sequence<OUString> s(1);
     392          28 :     s[0] = "com.sun.star.document.ImportFilter";
     393          28 :     return s;
     394             : }
     395             : 
     396             : ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >
     397          34 :     SAL_CALL ODBFilter::Create(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rxORB)
     398             : {
     399          34 :     return static_cast< XServiceInfo* >(new ODBFilter( comphelper::getComponentContext(_rxORB)));
     400             : }
     401             : 
     402          34 : sal_Bool SAL_CALL ODBFilter::filter( const Sequence< PropertyValue >& rDescriptor )
     403             :     throw (RuntimeException, std::exception)
     404             : {
     405          34 :     uno::Reference< ::com::sun::star::awt::XWindow > xWindow;
     406             :     {
     407          34 :         SolarMutexGuard aGuard;
     408          34 :         vcl::Window*     pFocusWindow = Application::GetFocusWindow();
     409          34 :         xWindow = VCLUnoHelper::GetInterface( pFocusWindow );
     410          34 :         if( pFocusWindow )
     411          10 :             pFocusWindow->EnterWait();
     412             :     }
     413          34 :     bool    bRet = false;
     414             : 
     415          34 :     if ( GetModel().is() )
     416          34 :         bRet = implImport( rDescriptor );
     417             : 
     418          34 :     if ( xWindow.is() )
     419             :     {
     420          10 :         SolarMutexGuard aGuard;
     421          10 :         vcl::Window* pFocusWindow = VCLUnoHelper::GetWindow( xWindow );
     422          10 :         if ( pFocusWindow )
     423          10 :             pFocusWindow->LeaveWait();
     424             :     }
     425             : 
     426          34 :     return bRet;
     427             : }
     428             : 
     429          34 : bool ODBFilter::implImport( const Sequence< PropertyValue >& rDescriptor )
     430             :     throw (RuntimeException)
     431             : {
     432          34 :     OUString sFileName;
     433          68 :     ::comphelper::NamedValueCollection aMediaDescriptor( rDescriptor );
     434          34 :     if ( aMediaDescriptor.has( "URL" ) )
     435          34 :         sFileName = aMediaDescriptor.getOrDefault( "URL", OUString() );
     436          34 :     if ( sFileName.isEmpty() && aMediaDescriptor.has( "FileName" ) )
     437           0 :         sFileName = aMediaDescriptor.getOrDefault( "FileName", sFileName );
     438             : 
     439             :     OSL_ENSURE( !sFileName.isEmpty(), "ODBFilter::implImport: no URL given!" );
     440          34 :     bool bRet = !sFileName.isEmpty();
     441             : 
     442          34 :     if ( bRet )
     443             :     {
     444          34 :         uno::Reference<XComponent> xCom(GetModel(),UNO_QUERY);
     445             : 
     446             :         SfxMediumRef pMedium = new SfxMedium(
     447          68 :                 sFileName, ( STREAM_READ | STREAM_NOCREATE ) );
     448          68 :         uno::Reference< embed::XStorage > xStorage;
     449             :         try
     450             :         {
     451          34 :             xStorage.set( pMedium->GetStorage( false ), UNO_QUERY_THROW );
     452             :         }
     453           0 :         catch (const Exception&)
     454             :         {
     455           0 :             Any aError = ::cppu::getCaughtException();
     456           0 :             if  ( aError.isExtractableTo( ::cppu::UnoType< RuntimeException >::get() ) )
     457           0 :                 throw;
     458           0 :             throw lang::WrappedTargetRuntimeException( OUString(), *this, aError );
     459             :         }
     460             : 
     461          68 :         uno::Reference<sdb::XOfficeDatabaseDocument> xOfficeDoc(GetModel(),UNO_QUERY_THROW);
     462          34 :         m_xDataSource.set(xOfficeDoc->getDataSource(),UNO_QUERY_THROW);
     463          68 :         uno::Reference<beans::XPropertyChangeListener> xListener = new DatasourceURLListener( GetComponentContext());
     464          34 :         m_xDataSource->addPropertyChangeListener(PROPERTY_URL,xListener);
     465          68 :         uno::Reference< XNumberFormatsSupplier > xNum(m_xDataSource->getPropertyValue(PROPERTY_NUMBERFORMATSSUPPLIER),UNO_QUERY);
     466          34 :         SetNumberFormatsSupplier(xNum);
     467             : 
     468          68 :         uno::Reference<XComponent> xModel(GetModel(),UNO_QUERY);
     469             :         sal_Int32 nRet = ReadThroughComponent( xStorage
     470             :                                     ,xModel
     471             :                                     ,"settings.xml"
     472             :                                     ,"Settings.xml"
     473             :                                     ,GetComponentContext()
     474             :                                     ,this
     475          34 :                                     );
     476             : 
     477          34 :         if ( nRet == 0 )
     478             :             nRet = ReadThroughComponent( xStorage
     479             :                                     ,xModel
     480             :                                     ,"content.xml"
     481             :                                     ,"Content.xml"
     482             :                                     ,GetComponentContext()
     483             :                                     ,this
     484          34 :                                     );
     485             : 
     486          34 :         bRet = nRet == 0;
     487             : 
     488          34 :         if ( bRet )
     489             :         {
     490          34 :             uno::Reference< XModifiable > xModi(GetModel(),UNO_QUERY);
     491          34 :             if ( xModi.is() )
     492          34 :                 xModi->setModified(sal_False);
     493             :         }
     494             :         else
     495             :         {
     496           0 :             switch( nRet )
     497             :             {
     498             :                 case ERRCODE_IO_BROKENPACKAGE:
     499             :                     // TODO/LATER: no way to transport the error outside from the filter!
     500           0 :                     break;
     501             :                 default:
     502             :                 {
     503             :                     // TODO/LATER: this is completely wrong! Filter code should never call ErrorHandler directly! But for now this is the only way!
     504           0 :                     ErrorHandler::HandleError( nRet );
     505           0 :                     if( nRet & ERRCODE_WARNING_MASK )
     506           0 :                         bRet = true;
     507             :                 }
     508             :             }
     509          34 :         }
     510             :     }
     511             : 
     512          68 :     return bRet;
     513             : }
     514             : 
     515         270 : SvXMLImportContext* ODBFilter::CreateContext( sal_uInt16 nPrefix,
     516             :                                       const OUString& rLocalName,
     517             :                                       const uno::Reference< ::com::sun::star::xml::sax::XAttributeList >& xAttrList )
     518             : {
     519         270 :     SvXMLImportContext *pContext = 0;
     520             : 
     521         270 :     const SvXMLTokenMap& rTokenMap = GetDocElemTokenMap();
     522         270 :     switch( rTokenMap.Get( nPrefix, rLocalName ) )
     523             :     {
     524             :         case XML_TOK_DOC_SETTINGS:
     525           6 :             GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP );
     526           6 :             pContext = new XMLDocumentSettingsContext( *this, nPrefix, rLocalName,xAttrList );
     527           6 :             break;
     528             :         case XML_TOK_DOC_DATABASE:
     529          34 :             GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP );
     530          34 :             pContext = new OXMLDatabase( *this, nPrefix, rLocalName );
     531          34 :             break;
     532             :         case XML_TOK_DOC_STYLES:
     533           0 :             GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP );
     534           0 :             pContext = CreateStylesContext(nPrefix, rLocalName, xAttrList, false);
     535           0 :             break;
     536             :         case XML_TOK_DOC_AUTOSTYLES:
     537          34 :             GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP );
     538          34 :             pContext = CreateStylesContext(nPrefix, rLocalName, xAttrList, true);
     539          34 :             break;
     540             :         case XML_TOK_DOC_SCRIPT:
     541          34 :             pContext = CreateScriptContext( rLocalName );
     542          34 :             break;
     543             :     }
     544             : 
     545         270 :     if ( !pContext )
     546         162 :         pContext = SvXMLImport::CreateContext( nPrefix, rLocalName, xAttrList );
     547             : 
     548         270 :     return pContext;
     549             : }
     550             : 
     551           6 : void ODBFilter::SetViewSettings(const Sequence<PropertyValue>& aViewProps)
     552             : {
     553           6 :     const PropertyValue *pIter = aViewProps.getConstArray();
     554           6 :     const PropertyValue *pEnd = pIter + aViewProps.getLength();
     555          12 :     for (; pIter != pEnd; ++pIter)
     556             :     {
     557           6 :         if ( pIter->Name == "Queries" )
     558             :         {
     559           6 :             fillPropertyMap(pIter->Value,m_aQuerySettings);
     560             :         }
     561           0 :         else if ( pIter->Name == "Tables" )
     562             :         {
     563           0 :             fillPropertyMap(pIter->Value,m_aTablesSettings);
     564             :         }
     565             :     }
     566           6 : }
     567             : 
     568           0 : void ODBFilter::SetConfigurationSettings(const Sequence<PropertyValue>& aConfigProps)
     569             : {
     570           0 :     const PropertyValue *pIter = aConfigProps.getConstArray();
     571           0 :     const PropertyValue *pEnd = pIter + aConfigProps.getLength();
     572           0 :     for (; pIter != pEnd; ++pIter)
     573             :     {
     574           0 :         if ( pIter->Name == "layout-settings" )
     575             :         {
     576           0 :             Sequence<PropertyValue> aWindows;
     577           0 :             pIter->Value >>= aWindows;
     578           0 :             uno::Reference<XPropertySet> xProp(getDataSource());
     579           0 :             if ( xProp.is() )
     580           0 :                 xProp->setPropertyValue(PROPERTY_LAYOUTINFORMATION,makeAny(aWindows));
     581             :         }
     582             :     }
     583           0 : }
     584             : 
     585           6 : void ODBFilter::fillPropertyMap(const Any& _rValue,TPropertyNameMap& _rMap)
     586             : {
     587           6 :     Sequence<PropertyValue> aWindows;
     588           6 :     _rValue >>= aWindows;
     589           6 :     const PropertyValue *pIter = aWindows.getConstArray();
     590           6 :     const PropertyValue *pEnd = pIter + aWindows.getLength();
     591           6 :     for (; pIter != pEnd; ++pIter)
     592             :     {
     593           0 :         Sequence<PropertyValue> aValue;
     594           0 :         pIter->Value >>= aValue;
     595           0 :         _rMap.insert(TPropertyNameMap::value_type(pIter->Name,aValue));
     596           6 :     }
     597             : 
     598           6 : }
     599             : 
     600         270 : const SvXMLTokenMap& ODBFilter::GetDocElemTokenMap() const
     601             : {
     602         270 :     if ( !m_pDocElemTokenMap.get() )
     603             :     {
     604             :         static const SvXMLTokenMapEntry aElemTokenMap[]=
     605             :         {
     606             :             { XML_NAMESPACE_OFFICE, XML_SETTINGS,           XML_TOK_DOC_SETTINGS    },
     607             :             { XML_NAMESPACE_OOO,    XML_SETTINGS,           XML_TOK_DOC_SETTINGS    },
     608             :             { XML_NAMESPACE_OFFICE, XML_STYLES,             XML_TOK_DOC_STYLES      },
     609             :             { XML_NAMESPACE_OOO,    XML_STYLES,             XML_TOK_DOC_STYLES      },
     610             :             { XML_NAMESPACE_OFFICE, XML_AUTOMATIC_STYLES,   XML_TOK_DOC_AUTOSTYLES  },
     611             :             { XML_NAMESPACE_OOO,    XML_AUTOMATIC_STYLES,   XML_TOK_DOC_AUTOSTYLES  },
     612             :             { XML_NAMESPACE_OFFICE, XML_DATABASE,           XML_TOK_DOC_DATABASE    },
     613             :             { XML_NAMESPACE_OOO,    XML_DATABASE,           XML_TOK_DOC_DATABASE    },
     614             :             { XML_NAMESPACE_OFFICE, XML_SCRIPTS,            XML_TOK_DOC_SCRIPT      },
     615             :             XML_TOKEN_MAP_END
     616             :         };
     617          34 :         m_pDocElemTokenMap.reset(new SvXMLTokenMap( aElemTokenMap ));
     618             :     }
     619         270 :     return *m_pDocElemTokenMap;
     620             : }
     621             : 
     622          72 : const SvXMLTokenMap& ODBFilter::GetDatabaseElemTokenMap() const
     623             : {
     624          72 :     if ( !m_pDatabaseElemTokenMap.get() )
     625             :     {
     626             :         static const SvXMLTokenMapEntry aElemTokenMap[]=
     627             :         {
     628             :             { XML_NAMESPACE_DB, XML_DATASOURCE,             XML_TOK_DATASOURCE  },
     629             :             { XML_NAMESPACE_DB, XML_FORMS,                  XML_TOK_FORMS},
     630             :             { XML_NAMESPACE_DB, XML_REPORTS,                XML_TOK_REPORTS},
     631             :             { XML_NAMESPACE_DB, XML_QUERIES,                XML_TOK_QUERIES},
     632             :             { XML_NAMESPACE_DB, XML_TABLES,                 XML_TOK_TABLES},
     633             :             { XML_NAMESPACE_DB, XML_TABLE_REPRESENTATIONS,  XML_TOK_TABLES},
     634             :             { XML_NAMESPACE_DB, XML_SCHEMA_DEFINITION,      XML_TOK_SCHEMA_DEFINITION},
     635             :             XML_TOKEN_MAP_END
     636             :         };
     637          34 :         m_pDatabaseElemTokenMap.reset(new SvXMLTokenMap( aElemTokenMap ));
     638             :     }
     639          72 :     return *m_pDatabaseElemTokenMap;
     640             : }
     641             : 
     642         340 : const SvXMLTokenMap& ODBFilter::GetDataSourceElemTokenMap() const
     643             : {
     644         340 :     if ( !m_pDataSourceElemTokenMap.get() )
     645             :     {
     646             :         static const SvXMLTokenMapEntry aElemTokenMap[]=
     647             :         {
     648             :             { XML_NAMESPACE_DB,     XML_CONNECTION_RESOURCE,            XML_TOK_CONNECTION_RESOURCE},
     649             :             { XML_NAMESPACE_DB,     XML_SUPPRESS_VERSION_COLUMNS,       XML_TOK_SUPPRESS_VERSION_COLUMNS},
     650             :             { XML_NAMESPACE_DB,     XML_JAVA_DRIVER_CLASS,              XML_TOK_JAVA_DRIVER_CLASS},
     651             :             { XML_NAMESPACE_DB,     XML_EXTENSION,                      XML_TOK_EXTENSION},
     652             :             { XML_NAMESPACE_DB,     XML_IS_FIRST_ROW_HEADER_LINE,       XML_TOK_IS_FIRST_ROW_HEADER_LINE},
     653             :             { XML_NAMESPACE_DB,     XML_SHOW_DELETED,                   XML_TOK_SHOW_DELETED},
     654             :             { XML_NAMESPACE_DB,     XML_IS_TABLE_NAME_LENGTH_LIMITED,   XML_TOK_IS_TABLE_NAME_LENGTH_LIMITED},
     655             :             { XML_NAMESPACE_DB,     XML_SYSTEM_DRIVER_SETTINGS,         XML_TOK_SYSTEM_DRIVER_SETTINGS},
     656             :             { XML_NAMESPACE_DB,     XML_ENABLE_SQL92_CHECK,             XML_TOK_ENABLE_SQL92_CHECK},
     657             :             { XML_NAMESPACE_DB,     XML_APPEND_TABLE_ALIAS_NAME,        XML_TOK_APPEND_TABLE_ALIAS_NAME},
     658             :             { XML_NAMESPACE_DB,     XML_PARAMETER_NAME_SUBSTITUTION,    XML_TOK_PARAMETER_NAME_SUBSTITUTION},
     659             :             { XML_NAMESPACE_DB,     XML_IGNORE_DRIVER_PRIVILEGES,       XML_TOK_IGNORE_DRIVER_PRIVILEGES},
     660             :             { XML_NAMESPACE_DB,     XML_BOOLEAN_COMPARISON_MODE,        XML_TOK_BOOLEAN_COMPARISON_MODE},
     661             :             { XML_NAMESPACE_DB,     XML_USE_CATALOG,                    XML_TOK_USE_CATALOG},
     662             :             { XML_NAMESPACE_DB,     XML_BASE_DN,                        XML_TOK_BASE_DN},
     663             :             { XML_NAMESPACE_DB,     XML_MAX_ROW_COUNT,                  XML_TOK_MAX_ROW_COUNT},
     664             :             { XML_NAMESPACE_DB,     XML_LOGIN,                          XML_TOK_LOGIN},
     665             :             { XML_NAMESPACE_DB,     XML_TABLE_FILTER,                   XML_TOK_TABLE_FILTER},
     666             :             { XML_NAMESPACE_DB,     XML_TABLE_TYPE_FILTER,              XML_TOK_TABLE_TYPE_FILTER},
     667             :             { XML_NAMESPACE_DB,     XML_AUTO_INCREMENT,                 XML_TOK_AUTO_INCREMENT},
     668             :             { XML_NAMESPACE_DB,     XML_DELIMITER,                      XML_TOK_DELIMITER},
     669             :             { XML_NAMESPACE_DB,     XML_DATA_SOURCE_SETTINGS,           XML_TOK_DATA_SOURCE_SETTINGS},
     670             :             { XML_NAMESPACE_DB,     XML_FONT_CHARSET,                   XML_TOK_FONT_CHARSET},
     671             :             // db odf 12
     672             :             { XML_NAMESPACE_DB,     XML_CONNECTION_DATA,                XML_TOK_CONNECTION_DATA},
     673             :             { XML_NAMESPACE_DB,     XML_DATABASE_DESCRIPTION,           XML_TOK_DATABASE_DESCRIPTION},
     674             :             { XML_NAMESPACE_DB,     XML_COMPOUND_DATABASE,              XML_TOK_COMPOUND_DATABASE},
     675             :             { XML_NAMESPACE_XLINK,  XML_HREF,                           XML_TOK_DB_HREF},
     676             :             { XML_NAMESPACE_DB,     XML_MEDIA_TYPE,                     XML_TOK_MEDIA_TYPE},
     677             :             { XML_NAMESPACE_DB,     XML_TYPE,                           XML_TOK_DB_TYPE},
     678             :             { XML_NAMESPACE_DB,     XML_HOSTNAME,                       XML_TOK_HOSTNAME},
     679             :             { XML_NAMESPACE_DB,     XML_PORT,                           XML_TOK_PORT},
     680             :             { XML_NAMESPACE_DB,     XML_LOCAL_SOCKET,                   XML_TOK_LOCAL_SOCKET},
     681             :             { XML_NAMESPACE_DB,     XML_DATABASE_NAME,                  XML_TOK_DATABASE_NAME},
     682             :             { XML_NAMESPACE_DB,     XML_DRIVER_SETTINGS,                XML_TOK_DRIVER_SETTINGS},
     683             :             { XML_NAMESPACE_DB,     XML_JAVA_CLASSPATH,                 XML_TOK_JAVA_CLASSPATH},
     684             :             { XML_NAMESPACE_DB,     XML_CHARACTER_SET,                  XML_TOK_CHARACTER_SET},
     685             :             { XML_NAMESPACE_DB,     XML_APPLICATION_CONNECTION_SETTINGS,XML_TOK_APPLICATION_CONNECTION_SETTINGS},
     686             :             XML_TOKEN_MAP_END
     687             :         };
     688          34 :         m_pDataSourceElemTokenMap.reset(new SvXMLTokenMap( aElemTokenMap ));
     689             :     }
     690         340 :     return *m_pDataSourceElemTokenMap;
     691             : }
     692             : 
     693          34 : const SvXMLTokenMap& ODBFilter::GetLoginElemTokenMap() const
     694             : {
     695          34 :     if ( !m_pLoginElemTokenMap.get() )
     696             :     {
     697             :         static const SvXMLTokenMapEntry aElemTokenMap[]=
     698             :         {
     699             :             { XML_NAMESPACE_DB, XML_USER_NAME,              XML_TOK_USER_NAME},
     700             :             { XML_NAMESPACE_DB, XML_IS_PASSWORD_REQUIRED,   XML_TOK_IS_PASSWORD_REQUIRED},
     701             :             { XML_NAMESPACE_DB, XML_USE_SYSTEM_USER,        XML_TOK_USE_SYSTEM_USER},
     702             :             { XML_NAMESPACE_DB, XML_LOGIN_TIMEOUT,          XML_TOK_LOGIN_TIMEOUT},
     703             :             XML_TOKEN_MAP_END
     704             :         };
     705          34 :         m_pLoginElemTokenMap.reset(new SvXMLTokenMap( aElemTokenMap ));
     706             :     }
     707          34 :     return *m_pLoginElemTokenMap;
     708             : }
     709             : 
     710          18 : const SvXMLTokenMap& ODBFilter::GetDatabaseDescriptionElemTokenMap() const
     711             : {
     712          18 :     if ( !m_pDatabaseDescriptionElemTokenMap.get() )
     713             :     {
     714             :         static const SvXMLTokenMapEntry aElemTokenMap[]=
     715             :         {
     716             :             { XML_NAMESPACE_DB, XML_FILE_BASED_DATABASE,    XML_TOK_FILE_BASED_DATABASE},
     717             :             { XML_NAMESPACE_DB, XML_SERVER_DATABASE,        XML_TOK_SERVER_DATABASE},
     718             :             XML_TOKEN_MAP_END
     719             :         };
     720          18 :         m_pDatabaseDescriptionElemTokenMap.reset(new SvXMLTokenMap( aElemTokenMap ));
     721             :     }
     722          18 :     return *m_pDatabaseDescriptionElemTokenMap;
     723             : }
     724             : 
     725          16 : const SvXMLTokenMap& ODBFilter::GetDataSourceInfoElemTokenMap() const
     726             : {
     727          16 :     if ( !m_pDataSourceInfoElemTokenMap.get() )
     728             :     {
     729             :         static const SvXMLTokenMapEntry aElemTokenMap[]=
     730             :         {
     731             :             { XML_NAMESPACE_DB, XML_ADDITIONAL_COLUMN_STATEMENT,XML_TOK_ADDITIONAL_COLUMN_STATEMENT},
     732             :             { XML_NAMESPACE_DB, XML_ROW_RETRIEVING_STATEMENT,   XML_TOK_ROW_RETRIEVING_STATEMENT},
     733             :             { XML_NAMESPACE_DB, XML_STRING,                     XML_TOK_STRING},
     734             :             { XML_NAMESPACE_DB, XML_FIELD,                      XML_TOK_FIELD},
     735             :             { XML_NAMESPACE_DB, XML_DECIMAL,                    XML_TOK_DECIMAL},
     736             :             { XML_NAMESPACE_DB, XML_THOUSAND,                   XML_TOK_THOUSAND},
     737             :             { XML_NAMESPACE_DB, XML_DATA_SOURCE_SETTING,        XML_TOK_DATA_SOURCE_SETTING},
     738             :             { XML_NAMESPACE_DB, XML_DATA_SOURCE_SETTING_VALUE,  XML_TOK_DATA_SOURCE_SETTING_VALUE},
     739             :             { XML_NAMESPACE_DB, XML_DATA_SOURCE_SETTING_IS_LIST,XML_TOK_DATA_SOURCE_SETTING_IS_LIST},
     740             :             { XML_NAMESPACE_DB, XML_DATA_SOURCE_SETTING_TYPE,   XML_TOK_DATA_SOURCE_SETTING_TYPE},
     741             :             { XML_NAMESPACE_DB, XML_DATA_SOURCE_SETTING_NAME,   XML_TOK_DATA_SOURCE_SETTING_NAME},
     742             :             { XML_NAMESPACE_DB, XML_FONT_CHARSET,               XML_TOK_FONT_CHARSET},
     743             :             { XML_NAMESPACE_DB, XML_ENCODING,                   XML_TOK_ENCODING},
     744             :             XML_TOKEN_MAP_END
     745             :         };
     746          16 :         m_pDataSourceInfoElemTokenMap.reset(new SvXMLTokenMap( aElemTokenMap ));
     747             :     }
     748          16 :     return *m_pDataSourceInfoElemTokenMap;
     749             : }
     750             : 
     751         556 : const SvXMLTokenMap& ODBFilter::GetDocumentsElemTokenMap() const
     752             : {
     753         556 :     if ( !m_pDocumentsElemTokenMap.get() )
     754             :     {
     755             :         static const SvXMLTokenMapEntry aElemTokenMap[]=
     756             :         {
     757             :             { XML_NAMESPACE_DB, XML_COMPONENT,              XML_TOK_COMPONENT},
     758             :             { XML_NAMESPACE_DB, XML_COMPONENT_COLLECTION,   XML_TOK_COMPONENT_COLLECTION},
     759             :             { XML_NAMESPACE_DB, XML_QUERY_COLLECTION,       XML_TOK_QUERY_COLLECTION},
     760             :             { XML_NAMESPACE_DB, XML_QUERY,                  XML_TOK_QUERY},
     761             :             { XML_NAMESPACE_DB, XML_TABLE,                  XML_TOK_TABLE},
     762             :             { XML_NAMESPACE_DB, XML_TABLE_REPRESENTATION,   XML_TOK_TABLE},
     763             :             { XML_NAMESPACE_DB, XML_COLUMN,                 XML_TOK_COLUMN},
     764             :             XML_TOKEN_MAP_END
     765             :         };
     766          26 :         m_pDocumentsElemTokenMap.reset(new SvXMLTokenMap( aElemTokenMap ));
     767             :     }
     768         556 :     return *m_pDocumentsElemTokenMap;
     769             : }
     770             : 
     771          28 : const SvXMLTokenMap& ODBFilter::GetComponentElemTokenMap() const
     772             : {
     773          28 :     if ( !m_pComponentElemTokenMap.get() )
     774             :     {
     775             :         static const SvXMLTokenMapEntry aElemTokenMap[]=
     776             :         {
     777             :             { XML_NAMESPACE_XLINK,  XML_HREF,           XML_TOK_HREF    },
     778             :             { XML_NAMESPACE_XLINK,  XML_TYPE,           XML_TOK_TYPE    },
     779             :             { XML_NAMESPACE_XLINK,  XML_SHOW,           XML_TOK_SHOW    },
     780             :             { XML_NAMESPACE_XLINK,  XML_ACTUATE,        XML_TOK_ACTUATE},
     781             :             { XML_NAMESPACE_DB, XML_AS_TEMPLATE,    XML_TOK_AS_TEMPLATE },
     782             :             { XML_NAMESPACE_DB, XML_NAME,           XML_TOK_COMPONENT_NAME  },
     783             :             XML_TOKEN_MAP_END
     784             :         };
     785          16 :         m_pComponentElemTokenMap.reset(new SvXMLTokenMap( aElemTokenMap ));
     786             :     }
     787          28 :     return *m_pComponentElemTokenMap;
     788             : }
     789             : 
     790         106 : const SvXMLTokenMap& ODBFilter::GetQueryElemTokenMap() const
     791             : {
     792         106 :     if ( !m_pQueryElemTokenMap.get() )
     793             :     {
     794             :         static const SvXMLTokenMapEntry aElemTokenMap[]=
     795             :         {
     796             :             { XML_NAMESPACE_DB, XML_COMMAND,            XML_TOK_COMMAND },
     797             :             { XML_NAMESPACE_DB, XML_ESCAPE_PROCESSING,  XML_TOK_ESCAPE_PROCESSING   },
     798             :             { XML_NAMESPACE_DB, XML_NAME,               XML_TOK_QUERY_NAME  },
     799             :             { XML_NAMESPACE_DB, XML_FILTER_STATEMENT,   XML_TOK_FILTER_STATEMENT    },
     800             :             { XML_NAMESPACE_DB, XML_ORDER_STATEMENT,    XML_TOK_ORDER_STATEMENT },
     801             :             { XML_NAMESPACE_DB, XML_CATALOG_NAME,       XML_TOK_CATALOG_NAME    },
     802             :             { XML_NAMESPACE_DB, XML_SCHEMA_NAME,        XML_TOK_SCHEMA_NAME },
     803             :             { XML_NAMESPACE_DB, XML_STYLE_NAME,         XML_TOK_STYLE_NAME},
     804             :             { XML_NAMESPACE_DB, XML_APPLY_FILTER,       XML_TOK_APPLY_FILTER},
     805             :             { XML_NAMESPACE_DB, XML_APPLY_ORDER,        XML_TOK_APPLY_ORDER},
     806             :             { XML_NAMESPACE_DB, XML_COLUMNS,            XML_TOK_COLUMNS},
     807             :             XML_TOKEN_MAP_END
     808             :         };
     809          26 :         m_pQueryElemTokenMap.reset(new SvXMLTokenMap( aElemTokenMap ));
     810             :     }
     811         106 :     return *m_pQueryElemTokenMap;
     812             : }
     813             : 
     814         496 : const SvXMLTokenMap& ODBFilter::GetColumnElemTokenMap() const
     815             : {
     816         496 :     if ( !m_pColumnElemTokenMap.get() )
     817             :     {
     818             :         static const SvXMLTokenMapEntry aElemTokenMap[]=
     819             :         {
     820             :             { XML_NAMESPACE_DB, XML_NAME,                       XML_TOK_COLUMN_NAME             },
     821             :             { XML_NAMESPACE_DB, XML_STYLE_NAME,                 XML_TOK_COLUMN_STYLE_NAME       },
     822             :             { XML_NAMESPACE_DB, XML_HELP_MESSAGE,               XML_TOK_COLUMN_HELP_MESSAGE     },
     823             :             { XML_NAMESPACE_DB, XML_VISIBILITY,                 XML_TOK_COLUMN_VISIBILITY       },
     824             :             { XML_NAMESPACE_DB, XML_DEFAULT_VALUE,              XML_TOK_COLUMN_DEFAULT_VALUE    },
     825             :             { XML_NAMESPACE_DB, XML_TYPE_NAME,                  XML_TOK_COLUMN_TYPE_NAME        },
     826             :             { XML_NAMESPACE_DB, XML_VISIBLE,                    XML_TOK_COLUMN_VISIBLE          },
     827             :             { XML_NAMESPACE_DB, XML_DEFAULT_CELL_STYLE_NAME,    XML_TOK_DEFAULT_CELL_STYLE_NAME },
     828             :             XML_TOKEN_MAP_END
     829             :         };
     830          20 :         m_pColumnElemTokenMap.reset(new SvXMLTokenMap( aElemTokenMap ));
     831             :     }
     832         496 :     return *m_pColumnElemTokenMap;
     833             : }
     834             : 
     835          34 : SvXMLImportContext* ODBFilter::CreateStylesContext(sal_uInt16 _nPrefix,const OUString& rLocalName,
     836             :                                      const uno::Reference< XAttributeList>& xAttrList, bool bIsAutoStyle )
     837             : {
     838          34 :     SvXMLImportContext *pContext = NULL;
     839          34 :     if (!pContext)
     840             :     {
     841          34 :         pContext = new OTableStylesContext(*this, _nPrefix, rLocalName, xAttrList, bIsAutoStyle);
     842          34 :         if (bIsAutoStyle)
     843          34 :             SetAutoStyles(static_cast<SvXMLStylesContext*>(pContext));
     844             :         else
     845           0 :             SetStyles(static_cast<SvXMLStylesContext*>(pContext));
     846             :     }
     847          34 :     return pContext;
     848             : }
     849             : 
     850          34 : SvXMLImportContext* ODBFilter::CreateScriptContext( const OUString& _rLocalName )
     851             : {
     852          34 :     return new XMLScriptContext( *this, XML_NAMESPACE_OFFICE, _rLocalName, GetModel() );
     853             : }
     854             : 
     855           0 : rtl::Reference < XMLPropertySetMapper > ODBFilter::GetTableStylesPropertySetMapper() const
     856             : {
     857           0 :     if ( !m_xTableStylesPropertySetMapper.is() )
     858             :     {
     859           0 :         m_xTableStylesPropertySetMapper = OXMLHelper::GetTableStylesPropertySetMapper( false);
     860             :     }
     861           0 :     return m_xTableStylesPropertySetMapper;
     862             : }
     863             : 
     864          20 : rtl::Reference < XMLPropertySetMapper > ODBFilter::GetColumnStylesPropertySetMapper() const
     865             : {
     866          20 :     if ( !m_xColumnStylesPropertySetMapper.is() )
     867             :     {
     868          20 :         m_xColumnStylesPropertySetMapper = OXMLHelper::GetColumnStylesPropertySetMapper( false);
     869             :     }
     870          20 :     return m_xColumnStylesPropertySetMapper;
     871             : }
     872             : 
     873          20 : rtl::Reference < XMLPropertySetMapper > ODBFilter::GetCellStylesPropertySetMapper() const
     874             : {
     875          20 :     if ( !m_xCellStylesPropertySetMapper.is() )
     876             :     {
     877          20 :         m_xCellStylesPropertySetMapper = OXMLHelper::GetCellStylesPropertySetMapper( false);
     878             :     }
     879          20 :     return m_xCellStylesPropertySetMapper;
     880             : }
     881             : 
     882          34 : void ODBFilter::setPropertyInfo()
     883             : {
     884          34 :     Reference<XPropertySet> xDataSource(getDataSource());
     885          34 :     if ( !xDataSource.is() )
     886          34 :         return;
     887             : 
     888          68 :     ::connectivity::DriversConfig aDriverConfig(GetComponentContext());
     889          68 :     const OUString sURL = ::comphelper::getString(xDataSource->getPropertyValue(PROPERTY_URL));
     890          68 :     ::comphelper::NamedValueCollection aDataSourceSettings = aDriverConfig.getProperties( sURL );
     891             : 
     892          68 :     Sequence<PropertyValue> aInfo;
     893          34 :     if ( !m_aInfoSequence.empty() )
     894          34 :         aInfo = Sequence<PropertyValue>(&(*m_aInfoSequence.begin()),m_aInfoSequence.size());
     895          34 :     aDataSourceSettings.merge( ::comphelper::NamedValueCollection( aInfo ), true );
     896             : 
     897          34 :     aDataSourceSettings >>= aInfo;
     898          34 :     if ( aInfo.getLength() )
     899             :     {
     900             :         try
     901             :         {
     902          34 :             xDataSource->setPropertyValue(PROPERTY_INFO,makeAny(aInfo));
     903             :         }
     904           0 :         catch (const Exception&)
     905             :         {
     906             :             DBG_UNHANDLED_EXCEPTION();
     907             :         }
     908          34 :     }
     909             : }
     910             : 
     911          90 : }// dbaxml
     912             : 
     913             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10