LCOV - code coverage report
Current view: top level - libreoffice/dbaccess/source/filter/xml - xmlfilter.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 0 299 0.0 %
Date: 2012-12-27 Functions: 0 44 0.0 %
Legend: Lines: hit not hit

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

Generated by: LCOV version 1.10