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

Generated by: LCOV version 1.10