LCOV - code coverage report
Current view: top level - dbaccess/source/filter/xml - xmlfilter.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 184 305 60.3 %
Date: 2012-08-25 Functions: 31 44 70.5 %
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 204 622 32.8 %

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

Generated by: LCOV version 1.10