LCOV - code coverage report
Current view: top level - libreoffice/reportdesign/source/filter/xml - xmlfilter.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 0 379 0.0 %
Date: 2012-12-27 Functions: 0 62 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             : #include <com/sun/star/packages/zip/ZipIOException.hpp>
      20             : #include <com/sun/star/embed/ElementModes.hpp>
      21             : #include <com/sun/star/beans/NamedValue.hpp>
      22             : #include <com/sun/star/sdb/XOfficeDatabaseDocument.hpp>
      23             : #include <com/sun/star/util/MeasureUnit.hpp>
      24             : #include <com/sun/star/xml/sax/Parser.hpp>
      25             : #include "xmlfilter.hxx"
      26             : #include "xmlGroup.hxx"
      27             : #include "xmlReport.hxx"
      28             : #include "xmlHelper.hxx"
      29             : #include <vcl/svapp.hxx>
      30             : #include <vcl/window.hxx>
      31             : #include <connectivity/dbtools.hxx>
      32             : #include <xmloff/xmlnmspe.hxx>
      33             : #include <xmloff/xmltoken.hxx>
      34             : #include <xmloff/txtimp.hxx>
      35             : #include <xmloff/nmspmap.hxx>
      36             : #include <xmloff/XMLFontStylesContext.hxx>
      37             : #include <rtl/logfile.hxx>
      38             : #include <com/sun/star/xml/sax/InputSource.hpp>
      39             : #include <com/sun/star/xml/sax/XParser.hpp>
      40             : #include <com/sun/star/beans/PropertyAttribute.hpp>
      41             : 
      42             : #include <comphelper/processfactory.hxx>
      43             : #include <comphelper/genericpropertyset.hxx>
      44             : #include <comphelper/mediadescriptor.hxx>
      45             : #include <xmloff/ProgressBarHelper.hxx>
      46             : #include <sfx2/docfile.hxx>
      47             : #include <com/sun/star/io/XInputStream.hpp>
      48             : #include <com/sun/star/uno/XNamingService.hpp>
      49             : #include <xmloff/DocumentSettingsContext.hxx>
      50             : #include <xmloff/xmluconv.hxx>
      51             : #include <xmloff/xmlmetai.hxx>
      52             : #include <com/sun/star/util/XModifiable.hpp>
      53             : #include <vcl/svapp.hxx>
      54             : #include <osl/mutex.hxx>
      55             : #include <svtools/sfxecode.hxx>
      56             : #include "xmlEnums.hxx"
      57             : #include "xmlStyleImport.hxx"
      58             : #include "xmlstrings.hrc"
      59             : #include "xmlPropertyHandler.hxx"
      60             : #include <xmloff/txtprmap.hxx>
      61             : #include "ReportDefinition.hxx"
      62             : 
      63             : 
      64             : #define MAP_LEN(x) x, sizeof(x) - 1
      65             : //--------------------------------------------------------------------------
      66             : namespace rptxml
      67             : {
      68             : using namespace ::com::sun::star::uno;
      69             : using ::com::sun::star::uno::Reference;
      70             : using namespace ::com::sun::star;
      71             : using namespace ::com::sun::star::container;
      72             : using namespace ::com::sun::star::lang;
      73             : using namespace ::com::sun::star::beans;
      74             : using namespace ::com::sun::star::document;
      75             : using namespace ::com::sun::star::text;
      76             : using namespace ::com::sun::star::io;
      77             : using namespace ::com::sun::star::report;
      78             : using namespace ::com::sun::star::xml::sax;
      79             : using namespace xmloff;
      80             :     sal_Char const sXML_np__rpt[] = "_report";
      81             :     sal_Char const sXML_np___rpt[] = "__report";
      82             : 
      83             :     using namespace ::com::sun::star::util;
      84             : 
      85             : class RptMLMasterStylesContext_Impl : public XMLTextMasterStylesContext
      86             : {
      87             :     ORptFilter& m_rImport;
      88             :     RptMLMasterStylesContext_Impl(const RptMLMasterStylesContext_Impl&);
      89             :     void operator =(const RptMLMasterStylesContext_Impl&);
      90             : public:
      91             : 
      92             :     TYPEINFO();
      93             : 
      94             :     RptMLMasterStylesContext_Impl(
      95             :             ORptFilter& rImport, sal_uInt16 nPrfx,
      96             :             const ::rtl::OUString& rLName ,
      97             :             const uno::Reference< xml::sax::XAttributeList > & xAttrList );
      98             :     virtual ~RptMLMasterStylesContext_Impl();
      99             :     virtual void EndElement();
     100             : };
     101             : 
     102           0 : TYPEINIT1( RptMLMasterStylesContext_Impl, XMLTextMasterStylesContext );
     103             : DBG_NAME(rpt_RptMLMasterStylesContext_Impl)
     104           0 : RptMLMasterStylesContext_Impl::RptMLMasterStylesContext_Impl(
     105             :         ORptFilter& rImport, sal_uInt16 nPrfx,
     106             :         const ::rtl::OUString& rLName ,
     107             :         const uno::Reference< xml::sax::XAttributeList > & xAttrList ) :
     108             :     XMLTextMasterStylesContext( rImport, nPrfx, rLName, xAttrList )
     109           0 :     ,m_rImport(rImport)
     110             : {
     111             :     DBG_CTOR(rpt_RptMLMasterStylesContext_Impl,NULL);
     112           0 : }
     113             : 
     114           0 : RptMLMasterStylesContext_Impl::~RptMLMasterStylesContext_Impl()
     115             : {
     116             :     DBG_DTOR(rpt_RptMLMasterStylesContext_Impl,NULL);
     117           0 : }
     118             : 
     119           0 : void RptMLMasterStylesContext_Impl::EndElement()
     120             : {
     121           0 :     FinishStyles( sal_True );
     122           0 :     m_rImport.FinishStyles();
     123           0 : }
     124             :     /// read a component (file + filter version)
     125           0 : sal_Int32 ReadThroughComponent(
     126             :     const uno::Reference<XInputStream>& xInputStream,
     127             :     const uno::Reference<XComponent>& xModelComponent,
     128             :     const sal_Char* /*pStreamName*/,
     129             :     const uno::Reference<XComponentContext> & rContext,
     130             :     const uno::Reference< XDocumentHandler >& _xFilter,
     131             :     sal_Bool /*bEncrypted*/ )
     132             : {
     133             :     OSL_ENSURE(xInputStream.is(), "input stream missing");
     134             :     OSL_ENSURE(xModelComponent.is(), "document missing");
     135             :     OSL_ENSURE(rContext.is(), "factory missing");
     136             : 
     137             :     RTL_LOGFILE_CONTEXT_AUTHOR( aLog, "rptxml", "oj", "ReadThroughComponent" );
     138             : 
     139             :     // prepare ParserInputSrouce
     140           0 :     InputSource aParserInput;
     141           0 :     aParserInput.aInputStream = xInputStream;
     142             : 
     143             :     // get parser
     144           0 :     uno::Reference< XParser > xParser = xml::sax::Parser::create(rContext);
     145             :     RTL_LOGFILE_CONTEXT_TRACE( aLog, "parser created" );
     146             : 
     147             :     // get filter
     148             :     OSL_ENSURE( _xFilter.is(), "Can't instantiate filter component." );
     149           0 :     if( !_xFilter.is() )
     150           0 :         return 1;
     151             : 
     152             :     // connect parser and filter
     153           0 :     xParser->setDocumentHandler( _xFilter );
     154             : 
     155             :     // connect model and filter
     156           0 :     uno::Reference < XImporter > xImporter( _xFilter, UNO_QUERY );
     157           0 :     xImporter->setTargetDocument( xModelComponent );
     158             : 
     159             : 
     160             : #ifdef TIMELOG
     161             :     // if we do profiling, we want to know the stream
     162             :     RTL_LOGFILE_TRACE_AUTHOR1( "rptxml", "oj",
     163             :                                "ReadThroughComponent : parsing \"%s\"", pStreamName );
     164             : #endif
     165             : 
     166             :     // finally, parser the stream
     167             :     try
     168             :     {
     169           0 :         xParser->parseStream( aParserInput );
     170             :     }
     171           0 :     catch (const SAXParseException& r)
     172             :     {
     173             : #if OSL_DEBUG_LEVEL > 1
     174             :         rtl::OStringBuffer aError(RTL_CONSTASCII_STRINGPARAM(
     175             :             "SAX parse exception caught while importing:\n"));
     176             :         aError.append(rtl::OUStringToOString(r.Message,
     177             :             RTL_TEXTENCODING_ASCII_US));
     178             :         aError.append(r.LineNumber);
     179             :         aError.append(',');
     180             :         aError.append(r.ColumnNumber);
     181             :         OSL_FAIL(aError.getStr());
     182             : #else
     183             :         (void)r;
     184             : #endif
     185           0 :         return 1;
     186             :     }
     187           0 :     catch (const SAXException&)
     188             :     {
     189           0 :         return 1;
     190             :     }
     191           0 :     catch (const packages::zip::ZipIOException&)
     192             :     {
     193           0 :         return ERRCODE_IO_BROKENPACKAGE;
     194             :     }
     195           0 :     catch (const IOException&)
     196             :     {
     197           0 :         return 1;
     198             :     }
     199           0 :     catch (const Exception&)
     200             :     {
     201           0 :         return 1;
     202             :     }
     203             : 
     204             :     // success!
     205           0 :     return 0;
     206             : }
     207             : 
     208             : /// read a component (storage version)
     209           0 : sal_Int32 ReadThroughComponent(
     210             :     uno::Reference< embed::XStorage > xStorage,
     211             :     const uno::Reference<XComponent>& xModelComponent,
     212             :     const sal_Char* pStreamName,
     213             :     const sal_Char* pCompatibilityStreamName,
     214             :     const uno::Reference<XMultiServiceFactory> & rFactory,
     215             :     const Reference< document::XGraphicObjectResolver > & _xGraphicObjectResolver,
     216             :     const Reference<document::XEmbeddedObjectResolver>& _xEmbeddedObjectResolver,
     217             :     const ::rtl::OUString& _sFilterName
     218             :     ,const uno::Reference<beans::XPropertySet>& _xProp)
     219             : {
     220             :     OSL_ENSURE( xStorage.is(), "Need storage!");
     221             :     OSL_ENSURE(NULL != pStreamName, "Please, please, give me a name!");
     222             : 
     223           0 :     if ( xStorage.is() )
     224             :     {
     225           0 :         uno::Reference< io::XStream > xDocStream;
     226           0 :         sal_Bool bEncrypted = sal_False;
     227             : 
     228             :         try
     229             :         {
     230             :             // open stream (and set parser input)
     231           0 :             ::rtl::OUString sStreamName = ::rtl::OUString::createFromAscii(pStreamName);
     232           0 :             if ( !xStorage->hasByName( sStreamName ) || !xStorage->isStreamElement( sStreamName ) )
     233             :             {
     234             :                 // stream name not found! Then try the compatibility name.
     235             :                 // if no stream can be opened, return immediatly with OK signal
     236             : 
     237             :                 // do we even have an alternative name?
     238           0 :                 if ( NULL == pCompatibilityStreamName )
     239           0 :                     return 0;
     240             : 
     241             :                 // if so, does the stream exist?
     242           0 :                 sStreamName = ::rtl::OUString::createFromAscii(pCompatibilityStreamName);
     243           0 :                 if ( !xStorage->hasByName( sStreamName ) || !xStorage->isStreamElement( sStreamName ) )
     244           0 :                     return 0;
     245             :             }
     246             : 
     247             :             // get input stream
     248           0 :             xDocStream = xStorage->openStreamElement( sStreamName, embed::ElementModes::READ );
     249             : 
     250           0 :             uno::Reference< beans::XPropertySet > xProps( xDocStream, uno::UNO_QUERY_THROW );
     251           0 :             xProps->getPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Encrypted") ) ) >>= bEncrypted;
     252             :         }
     253           0 :         catch (const packages::WrongPasswordException&)
     254             :         {
     255           0 :             return ERRCODE_SFX_WRONGPASSWORD;
     256             :         }
     257           0 :         catch (const uno::Exception&)
     258             :         {
     259           0 :             return 1; // TODO/LATER: error handling
     260             :         }
     261             : 
     262           0 :         sal_Int32 nArgs = 0;
     263           0 :         if( _xGraphicObjectResolver.is())
     264           0 :             nArgs++;
     265           0 :         if( _xEmbeddedObjectResolver.is())
     266           0 :             nArgs++;
     267           0 :         if ( _xProp.is() )
     268           0 :             nArgs++;
     269             : 
     270           0 :         uno::Sequence< uno::Any > aFilterCompArgs( nArgs );
     271             : 
     272           0 :         nArgs = 0;
     273           0 :         if( _xGraphicObjectResolver.is())
     274           0 :             aFilterCompArgs[nArgs++] <<= _xGraphicObjectResolver;
     275           0 :         if( _xEmbeddedObjectResolver.is())
     276           0 :             aFilterCompArgs[ nArgs++ ] <<= _xEmbeddedObjectResolver;
     277           0 :         if ( _xProp.is() )
     278           0 :             aFilterCompArgs[ nArgs++ ] <<= _xProp;
     279             : 
     280             :         Reference< xml::sax::XDocumentHandler > xDocHandler(
     281           0 :             rFactory->createInstanceWithArguments( _sFilterName, aFilterCompArgs ),
     282           0 :             uno::UNO_QUERY_THROW );
     283           0 :         uno::Reference< XInputStream > xInputStream = xDocStream->getInputStream();
     284             :         // read from the stream
     285             :         return ReadThroughComponent( xInputStream
     286             :                                     ,xModelComponent
     287             :                                     ,pStreamName
     288             :                                     ,comphelper::getComponentContext(rFactory)
     289             :                                     ,xDocHandler
     290           0 :                                     ,bEncrypted );
     291             :     }
     292             : 
     293             :     // TODO/LATER: better error handling
     294           0 :     return 1;
     295             : }
     296             : 
     297             : //---------------------------------------------------------------------
     298           0 : uno::Reference< uno::XInterface > ORptImportHelper::create(uno::Reference< uno::XComponentContext > const & xContext)
     299             : {
     300           0 :     return static_cast< XServiceInfo* >(new ORptFilter(Reference< XMultiServiceFactory >(xContext->getServiceManager(),UNO_QUERY),IMPORT_SETTINGS ));
     301             : }
     302             : //---------------------------------------------------------------------
     303           0 : ::rtl::OUString ORptImportHelper::getImplementationName_Static(  ) throw (RuntimeException)
     304             : {
     305           0 :     return ::rtl::OUString(SERVICE_SETTINGSIMPORTER);
     306             : }
     307             : //---------------------------------------------------------------------
     308           0 : Sequence< ::rtl::OUString > ORptImportHelper::getSupportedServiceNames_Static(  ) throw(RuntimeException)
     309             : {
     310           0 :     Sequence< ::rtl::OUString > aSupported(1);
     311           0 :     aSupported[0] = SERVICE_IMPORTFILTER;
     312           0 :     return aSupported;
     313             : }
     314             : //---------------------------------------------------------------------
     315           0 : Reference< XInterface > ORptContentImportHelper::create(const Reference< XComponentContext > & xContext)
     316             : {
     317           0 :     return static_cast< XServiceInfo* >(new ORptFilter(Reference< XMultiServiceFactory >(xContext->getServiceManager(),UNO_QUERY),IMPORT_AUTOSTYLES |   IMPORT_CONTENT | IMPORT_SCRIPTS |
     318           0 :         IMPORT_FONTDECLS ));
     319             : }
     320             : //---------------------------------------------------------------------
     321           0 : ::rtl::OUString ORptContentImportHelper::getImplementationName_Static(  ) throw (RuntimeException)
     322             : {
     323           0 :     return ::rtl::OUString(SERVICE_CONTENTIMPORTER);
     324             : }
     325             : //---------------------------------------------------------------------
     326           0 : Sequence< ::rtl::OUString > ORptContentImportHelper::getSupportedServiceNames_Static(  ) throw(RuntimeException)
     327             : {
     328           0 :     Sequence< ::rtl::OUString > aSupported(1);
     329           0 :     aSupported[0] = SERVICE_IMPORTFILTER;
     330           0 :     return aSupported;
     331             : }
     332             : 
     333             : //---------------------------------------------------------------------
     334           0 : Reference< XInterface > ORptStylesImportHelper::create(Reference< XComponentContext > const & xContext)
     335             : {
     336           0 :     return static_cast< XServiceInfo* >(new ORptFilter(Reference< XMultiServiceFactory >(xContext->getServiceManager(),UNO_QUERY),
     337             :         IMPORT_STYLES | IMPORT_MASTERSTYLES | IMPORT_AUTOSTYLES |
     338           0 :         IMPORT_FONTDECLS ));
     339             : }
     340             : //---------------------------------------------------------------------
     341           0 : ::rtl::OUString ORptStylesImportHelper::getImplementationName_Static(  ) throw (RuntimeException)
     342             : {
     343           0 :     return ::rtl::OUString(SERVICE_STYLESIMPORTER);
     344             : }
     345             : //---------------------------------------------------------------------
     346           0 : Sequence< ::rtl::OUString > ORptStylesImportHelper::getSupportedServiceNames_Static(  ) throw(RuntimeException)
     347             : {
     348           0 :     Sequence< ::rtl::OUString > aSupported(1);
     349           0 :     aSupported[0] = SERVICE_IMPORTFILTER;
     350           0 :     return aSupported;
     351             : }
     352             : 
     353             : //---------------------------------------------------------------------
     354           0 : Reference< XInterface > ORptMetaImportHelper::create(Reference< XComponentContext > const & xContext)
     355             : {
     356           0 :     return static_cast< XServiceInfo* >(new ORptFilter(Reference< XMultiServiceFactory >(xContext->getServiceManager(),UNO_QUERY),
     357           0 :         IMPORT_META));
     358             : }
     359             : //---------------------------------------------------------------------
     360           0 : ::rtl::OUString ORptMetaImportHelper::getImplementationName_Static(  ) throw (RuntimeException)
     361             : {
     362           0 :     return ::rtl::OUString(SERVICE_METAIMPORTER);
     363             : }
     364             : //---------------------------------------------------------------------
     365           0 : Sequence< ::rtl::OUString > ORptMetaImportHelper::getSupportedServiceNames_Static(  ) throw(RuntimeException)
     366             : {
     367           0 :     Sequence< ::rtl::OUString > aSupported(1);
     368           0 :     aSupported[0] = SERVICE_IMPORTFILTER;
     369           0 :     return aSupported;
     370             : }
     371             : 
     372             : // -------------
     373             : // - ORptFilter -
     374             : // -------------
     375             : DBG_NAME(rpt_ORptFilter)
     376           0 : ORptFilter::ORptFilter( const uno::Reference< XMultiServiceFactory >& _rxMSF,sal_uInt16 nImportFlags )
     377           0 :     :SvXMLImport(_rxMSF,nImportFlags)
     378             : {
     379             :     DBG_CTOR(rpt_ORptFilter,NULL);
     380           0 :     GetMM100UnitConverter().SetCoreMeasureUnit(util::MeasureUnit::MM_100TH);
     381           0 :     GetMM100UnitConverter().SetXMLMeasureUnit(util::MeasureUnit::CM);
     382           0 :     GetNamespaceMap().Add( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( sXML_np__rpt) ),
     383           0 :                         GetXMLToken(XML_N_RPT),
     384           0 :                         XML_NAMESPACE_REPORT );
     385             : 
     386           0 :     GetNamespaceMap().Add( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( sXML_np___rpt) ),
     387           0 :                         GetXMLToken(XML_N_RPT_OASIS),
     388           0 :                         XML_NAMESPACE_REPORT );
     389             : 
     390           0 :     m_xPropHdlFactory = new OXMLRptPropHdlFactory;
     391           0 :     m_xCellStylesPropertySetMapper = OXMLHelper::GetCellStylePropertyMap(true);
     392           0 :     m_xColumnStylesPropertySetMapper = new XMLPropertySetMapper(OXMLHelper::GetColumnStyleProps(), m_xPropHdlFactory);
     393           0 :     m_xRowStylesPropertySetMapper = new XMLPropertySetMapper(OXMLHelper::GetRowStyleProps(), m_xPropHdlFactory);
     394           0 :     m_xTableStylesPropertySetMapper = new XMLTextPropertySetMapper( TEXT_PROP_MAP_TABLE_DEFAULTS );
     395           0 : }
     396             : 
     397             : // -----------------------------------------------------------------------------
     398             : 
     399           0 : ORptFilter::~ORptFilter() throw()
     400             : {
     401             :     DBG_DTOR(rpt_ORptFilter,NULL);
     402           0 : }
     403             : //------------------------------------------------------------------------------
     404           0 : uno::Reference< XInterface > ORptFilter::create(uno::Reference< XComponentContext > const & xContext)
     405             : {
     406           0 :     return *(new ORptFilter(uno::Reference< XMultiServiceFactory >(xContext->getServiceManager(),UNO_QUERY)));
     407             : }
     408             : 
     409             : // -----------------------------------------------------------------------------
     410           0 : ::rtl::OUString ORptFilter::getImplementationName_Static(  ) throw(uno::RuntimeException)
     411             : {
     412           0 :     return ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.comp.report.OReportFilter"));
     413             : }
     414             : 
     415             : //--------------------------------------------------------------------------
     416           0 : ::rtl::OUString SAL_CALL ORptFilter::getImplementationName(  ) throw(uno::RuntimeException)
     417             : {
     418           0 :     return getImplementationName_Static();
     419             : }
     420             : //--------------------------------------------------------------------------
     421           0 : uno::Sequence< ::rtl::OUString > ORptFilter::getSupportedServiceNames_Static(  ) throw(uno::RuntimeException)
     422             : {
     423           0 :     uno::Sequence< ::rtl::OUString > aServices(1);
     424           0 :     aServices.getArray()[0] = SERVICE_IMPORTFILTER;
     425             : 
     426           0 :     return aServices;
     427             : }
     428             : 
     429             : //--------------------------------------------------------------------------
     430           0 : uno::Sequence< ::rtl::OUString > SAL_CALL ORptFilter::getSupportedServiceNames(  ) throw(uno::RuntimeException)
     431             : {
     432           0 :     return getSupportedServiceNames_Static();
     433             : }
     434             : //------------------------------------------------------------------------------
     435           0 : sal_Bool SAL_CALL ORptFilter::supportsService(const ::rtl::OUString& ServiceName) throw( uno::RuntimeException )
     436             : {
     437           0 :     return ::comphelper::existsValue(ServiceName,getSupportedServiceNames_Static());
     438             : }
     439             : // -----------------------------------------------------------------------------
     440           0 : sal_Bool SAL_CALL ORptFilter::filter( const Sequence< PropertyValue >& rDescriptor )
     441             :     throw (RuntimeException)
     442             : {
     443           0 :     Window*     pFocusWindow = Application::GetFocusWindow();
     444           0 :     sal_Bool    bRet = sal_False;
     445             : 
     446           0 :     if( pFocusWindow )
     447           0 :         pFocusWindow->EnterWait();
     448             : 
     449           0 :     if ( GetModel().is() )
     450           0 :         bRet = implImport( rDescriptor );
     451             : 
     452           0 :     if ( pFocusWindow )
     453           0 :         pFocusWindow->LeaveWait();
     454             : 
     455           0 :     return bRet;
     456             : }
     457             : // -----------------------------------------------------------------------------
     458           0 : sal_Bool ORptFilter::implImport( const Sequence< PropertyValue >& rDescriptor )
     459             :     throw (RuntimeException)
     460             : {
     461           0 :     ::rtl::OUString                     sFileName;
     462           0 :     uno::Reference< embed::XStorage >   xStorage;
     463           0 :     uno::Reference< util::XNumberFormatsSupplier > xNumberFormatsSupplier;
     464             : 
     465           0 :     const PropertyValue* pIter = rDescriptor.getConstArray();
     466           0 :     const PropertyValue* pEnd   = pIter + rDescriptor.getLength();
     467           0 :     for(;pIter != pEnd;++pIter)
     468             :     {
     469           0 :         if ( pIter->Name == "FileName" )
     470           0 :             pIter->Value >>= sFileName;
     471           0 :         else if ( pIter->Name == "Storage" )
     472           0 :             pIter->Value >>= xStorage;
     473           0 :         else if ( pIter->Name == "ComponentData" )
     474             :         {
     475           0 :             Sequence< PropertyValue > aComponent;
     476           0 :             pIter->Value >>= aComponent;
     477           0 :             const PropertyValue* pComponentIter = aComponent.getConstArray();
     478           0 :             const PropertyValue* pComponentEnd  = pComponentIter + aComponent.getLength();
     479           0 :             for(;pComponentIter != pComponentEnd;++pComponentIter)
     480             :             {
     481           0 :                 if ( pComponentIter->Name == "ActiveConnection" )
     482             :                 {
     483           0 :                     uno::Reference<sdbc::XConnection> xCon(pComponentIter->Value,uno::UNO_QUERY);
     484           0 :                     xNumberFormatsSupplier = ::dbtools::getNumberFormats(xCon);
     485           0 :                     break;
     486             :                 }
     487           0 :             }
     488             :         }
     489             :     }
     490             : 
     491           0 :     if ( !sFileName.isEmpty() )
     492             :     {
     493           0 :         uno::Reference<XComponent> xCom(GetModel(),UNO_QUERY);
     494             : 
     495             :         SfxMediumRef pMedium = new SfxMedium(
     496           0 :                 sFileName, ( STREAM_READ | STREAM_NOCREATE ) );
     497             : 
     498           0 :         if( pMedium )
     499             :         {
     500             :             try
     501             :             {
     502           0 :                 xStorage = pMedium->GetStorage();
     503             :             }
     504           0 :             catch (const Exception&)
     505             :             {
     506             :             }
     507           0 :         }
     508             :     }
     509           0 :     sal_Bool bRet = xStorage.is();
     510           0 :     if ( bRet )
     511             :     {
     512           0 :         m_xReportDefinition.set(GetModel(),UNO_QUERY_THROW);
     513             :         OSL_ENSURE(m_xReportDefinition.is(),"ReportDefinition is NULL!");
     514           0 :         if ( !m_xReportDefinition.is() )
     515           0 :             return sal_False;
     516             : 
     517             : #if OSL_DEBUG_LEVEL > 1
     518             :         uno::Reference < container::XNameAccess > xAccess( xStorage, uno::UNO_QUERY );
     519             :         uno::Sequence< ::rtl::OUString> aSeq = xAccess->getElementNames();
     520             :         const ::rtl::OUString* pDebugIter = aSeq.getConstArray();
     521             :         const ::rtl::OUString* pDebugEnd      = pDebugIter + aSeq.getLength();
     522             :         for(;pDebugIter != pDebugEnd;++pDebugIter)
     523             :         {
     524             :             (void)*pDebugIter;
     525             :         }
     526             : #endif
     527             : 
     528           0 :         Reference< document::XGraphicObjectResolver > xGraphicObjectResolver;
     529           0 :         uno::Reference<document::XEmbeddedObjectResolver> xEmbeddedObjectResolver;
     530           0 :         uno::Reference< lang::XMultiServiceFactory > xServiceFactory( getServiceFactory(), uno::UNO_QUERY);
     531           0 :         if( xServiceFactory.is())
     532             :         {
     533           0 :             uno::Sequence< uno::Any > aArgs(1);
     534           0 :             aArgs[0] <<= xStorage;
     535             :             xGraphicObjectResolver.set(
     536           0 :                 xServiceFactory->createInstanceWithArguments(
     537           0 :                 ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.comp.Svx.GraphicImportHelper")), aArgs ), uno::UNO_QUERY );
     538             : 
     539           0 :             uno::Reference< lang::XMultiServiceFactory > xReportServiceFactory( m_xReportDefinition, uno::UNO_QUERY);
     540           0 :             aArgs[0] <<= beans::NamedValue(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Storage")),uno::makeAny(xStorage));
     541           0 :             xEmbeddedObjectResolver.set( xReportServiceFactory->createInstanceWithArguments(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.document.ImportEmbeddedObjectResolver")),aArgs) , uno::UNO_QUERY);
     542             :         }
     543             : 
     544           0 :         static const ::rtl::OUString s_sOld(RTL_CONSTASCII_USTRINGPARAM("OldFormat"));
     545             :         static comphelper::PropertyMapEntry pMap[] =
     546             :         {
     547           0 :             { MAP_LEN( "OldFormat" ), 1,    &::getCppuType((const sal_Bool*)0),                 beans::PropertyAttribute::BOUND,     0 },
     548           0 :             { MAP_LEN( "StreamName"), 0,    &::getCppuType( (::rtl::OUString *)0 ),             beans::PropertyAttribute::MAYBEVOID, 0 },
     549           0 :             { MAP_LEN("PrivateData"), 0,    &::getCppuType( (uno::Reference<XInterface> *)0 ),  beans::PropertyAttribute::MAYBEVOID, 0 },
     550           0 :             { MAP_LEN( "BaseURI"),    0,    &::getCppuType( (::rtl::OUString *)0 ),             beans::PropertyAttribute::MAYBEVOID, 0 },
     551           0 :             { MAP_LEN( "StreamRelPath"), 0, &::getCppuType( (::rtl::OUString *)0 ),             beans::PropertyAttribute::MAYBEVOID, 0 },
     552             :             { NULL, 0, 0, NULL, 0, 0 }
     553           0 :         };
     554           0 :         ::comphelper::MediaDescriptor aDescriptor(rDescriptor);
     555           0 :         uno::Reference<beans::XPropertySet> xProp = comphelper::GenericPropertySet_CreateInstance(new comphelper::PropertySetInfo(pMap));
     556           0 :         const ::rtl::OUString sVal( aDescriptor.getUnpackedValueOrDefault(aDescriptor.PROP_DOCUMENTBASEURL(),::rtl::OUString()) );
     557           0 :         xProp->setPropertyValue(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("BaseURI")), uno::makeAny(sVal));
     558           0 :         const ::rtl::OUString sHierarchicalDocumentName( aDescriptor.getUnpackedValueOrDefault(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("HierarchicalDocumentName")),::rtl::OUString()) );
     559           0 :         xProp->setPropertyValue(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("StreamRelPath")), uno::makeAny(sHierarchicalDocumentName));
     560             : 
     561           0 :         uno::Reference<XComponent> xModel(GetModel(),UNO_QUERY);
     562           0 :         static const ::rtl::OUString s_sMeta(RTL_CONSTASCII_USTRINGPARAM("meta.xml"));
     563           0 :         static const rtl::OUString s_sStreamName(RTL_CONSTASCII_USTRINGPARAM("StreamName"));
     564           0 :         xProp->setPropertyValue(s_sStreamName, uno::makeAny(s_sMeta));
     565             :         sal_Int32 nRet = ReadThroughComponent( xStorage
     566             :                                     ,xModel
     567             :                                     ,"meta.xml"
     568             :                                     ,"Meta.xml"
     569             :                                     ,getServiceFactory()
     570             :                                     ,xGraphicObjectResolver
     571             :                                     ,xEmbeddedObjectResolver
     572             :                                     ,SERVICE_METAIMPORTER
     573             :                                     ,xProp
     574           0 :                                     );
     575             : 
     576             : 
     577             :         try
     578             :         {
     579           0 :             xProp->setPropertyValue(s_sOld,uno::makeAny(!(xStorage->hasByName(s_sMeta) || xStorage->isStreamElement( s_sMeta ))));
     580             :         }
     581           0 :         catch (const uno::Exception&)
     582             :         {
     583           0 :             xProp->setPropertyValue(s_sOld,uno::makeAny(sal_True));
     584             :         }
     585             : 
     586           0 :         if ( nRet == 0 )
     587             :         {
     588           0 :             xProp->setPropertyValue(s_sStreamName, uno::makeAny(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("settings.xml"))));
     589             :             nRet = ReadThroughComponent( xStorage
     590             :                                     ,xModel
     591             :                                     ,"settings.xml"
     592             :                                     ,"Settings.xml"
     593             :                                     ,getServiceFactory()
     594             :                                     ,xGraphicObjectResolver
     595             :                                     ,xEmbeddedObjectResolver
     596             :                                     ,SERVICE_SETTINGSIMPORTER
     597             :                                     ,xProp
     598           0 :                                     );
     599             :         }
     600           0 :         if ( nRet == 0 )
     601             :         {
     602           0 :             xProp->setPropertyValue(s_sStreamName, uno::makeAny(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("styles.xml"))));
     603             :             nRet = ReadThroughComponent(xStorage
     604             :                                     ,xModel
     605             :                                     ,"styles.xml"
     606             :                                     ,"Styles.xml"
     607             :                                     ,getServiceFactory()
     608             :                                     ,xGraphicObjectResolver
     609             :                                     ,xEmbeddedObjectResolver
     610             :                                     ,SERVICE_STYLESIMPORTER
     611           0 :                                     ,xProp);
     612             :         }
     613             : 
     614           0 :         if ( nRet == 0 )
     615             :         {
     616           0 :             xProp->setPropertyValue(s_sStreamName, uno::makeAny(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("content.xml"))));
     617             :             nRet = ReadThroughComponent( xStorage
     618             :                                     ,xModel
     619             :                                     ,"content.xml"
     620             :                                     ,"Content.xml"
     621             :                                     ,getServiceFactory()
     622             :                                     ,xGraphicObjectResolver
     623             :                                     ,xEmbeddedObjectResolver
     624             :                                     ,SERVICE_CONTENTIMPORTER
     625             :                                     ,xProp
     626           0 :                                     );
     627             :         }
     628             : 
     629             : 
     630           0 :         bRet = nRet == 0;
     631             : 
     632           0 :         if ( bRet )
     633             :         {
     634           0 :             m_xReportDefinition->setModified(sal_False);
     635             :         }
     636             :         else
     637             :         {
     638           0 :             switch( nRet )
     639             :             {
     640             :                 case ERRCODE_IO_BROKENPACKAGE:
     641           0 :                     if( xStorage.is() )
     642             :                     {
     643             :                         // TODO/LATER: no way to transport the error outside from the filter!
     644           0 :                         break;
     645             :                     }
     646             :                     // fall through intented
     647             :                 default:
     648             :                     {
     649             :                         // TODO/LATER: this is completely wrong! Filter code should never call ErrorHandler directly! But for now this is the only way!
     650           0 :                         ErrorHandler::HandleError( nRet );
     651           0 :                         if( nRet & ERRCODE_WARNING_MASK )
     652           0 :                             bRet = sal_True;
     653             :                     }
     654             :             }
     655           0 :         }
     656             :     }
     657             : 
     658           0 :     return bRet;
     659             : }
     660             : // -----------------------------------------------------------------------------
     661           0 : SvXMLImportContext* ORptFilter::CreateContext( sal_uInt16 nPrefix,
     662             :                                       const ::rtl::OUString& rLocalName,
     663             :                                       const uno::Reference< xml::sax::XAttributeList >& xAttrList )
     664             : {
     665           0 :     SvXMLImportContext *pContext = 0;
     666             : 
     667           0 :     const SvXMLTokenMap& rTokenMap = GetDocElemTokenMap();
     668           0 :     switch( rTokenMap.Get( nPrefix, rLocalName ) )
     669             :     {
     670             :         case XML_TOK_DOC_SETTINGS:
     671           0 :             GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP );
     672           0 :             pContext = new XMLDocumentSettingsContext( *this, nPrefix, rLocalName,xAttrList );
     673           0 :             break;
     674             :         case XML_TOK_DOC_REPORT:
     675           0 :             GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP );
     676             :             {
     677           0 :                 const SvXMLStylesContext* pAutoStyles = GetAutoStyles();
     678           0 :                 if ( pAutoStyles )
     679             :                 {
     680           0 :                     XMLPropStyleContext* pAutoStyle = PTR_CAST(XMLPropStyleContext,pAutoStyles->FindStyleChildContext(XML_STYLE_FAMILY_PAGE_MASTER,::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("pm1"))));
     681           0 :                     if ( pAutoStyle )
     682             :                     {
     683           0 :                         pAutoStyle->FillPropertySet(getReportDefinition().get());
     684             :                     }
     685             :                 }
     686           0 :                 pContext = new OXMLReport( *this, nPrefix, rLocalName,xAttrList,getReportDefinition(),NULL );
     687             :             }
     688           0 :             break;
     689             :         case XML_TOK_DOC_STYLES:
     690           0 :             GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP );
     691           0 :             pContext = CreateStylesContext( rLocalName, xAttrList, sal_False);
     692           0 :             break;
     693             :         case XML_TOK_DOC_AUTOSTYLES:
     694             :             // don't use the autostyles from the styles-document for the progress
     695           0 :             if ( ! IsXMLToken( rLocalName, XML_DOCUMENT_STYLES ) )
     696           0 :                 GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP );
     697           0 :             pContext = CreateStylesContext( rLocalName, xAttrList, sal_True);
     698           0 :             break;
     699             :         case XML_TOK_DOC_FONTDECLS:
     700           0 :             GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP );
     701           0 :             pContext = CreateFontDeclsContext( rLocalName,xAttrList );
     702           0 :             break;
     703             :         case XML_TOK_DOC_MASTERSTYLES:
     704             :             {
     705           0 :                 SvXMLStylesContext* pStyleContext = new RptMLMasterStylesContext_Impl(*this, nPrefix, rLocalName,xAttrList);//CreateMasterStylesContext( rLocalName,xAttrList );
     706           0 :                 pContext = pStyleContext;
     707           0 :                 SetMasterStyles( pStyleContext );
     708             :             }
     709           0 :             break;
     710             :         case XML_TOK_DOC_META:
     711           0 :             GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP );
     712           0 :             pContext = CreateMetaContext( rLocalName,xAttrList );
     713           0 :             break;
     714             :         default:
     715           0 :             break;
     716             :     }
     717             : 
     718           0 :     if ( !pContext )
     719           0 :         pContext = SvXMLImport::CreateContext( nPrefix, rLocalName, xAttrList );
     720             : 
     721           0 :     return pContext;
     722             : }
     723             : // -----------------------------------------------------------------------------
     724           0 : const SvXMLTokenMap& ORptFilter::GetDocElemTokenMap() const
     725             : {
     726           0 :     if ( !m_pDocElemTokenMap.get() )
     727             :     {
     728             :         static SvXMLTokenMapEntry aElemTokenMap[]=
     729             :         {
     730             :             { XML_NAMESPACE_OFFICE, XML_SETTINGS,           XML_TOK_DOC_SETTINGS    },
     731             :             { XML_NAMESPACE_OFFICE, XML_STYLES,             XML_TOK_DOC_STYLES      },
     732             :             { XML_NAMESPACE_OFFICE, XML_AUTOMATIC_STYLES,   XML_TOK_DOC_AUTOSTYLES  },
     733             :             { XML_NAMESPACE_OFFICE, XML_REPORT,             XML_TOK_DOC_REPORT      },
     734             :             { XML_NAMESPACE_OOO,    XML_REPORT,             XML_TOK_DOC_REPORT      },
     735             :             { XML_NAMESPACE_OFFICE, XML_FONT_FACE_DECLS,    XML_TOK_DOC_FONTDECLS   },
     736             :             { XML_NAMESPACE_OFFICE, XML_MASTER_STYLES,      XML_TOK_DOC_MASTERSTYLES    },
     737             :             { XML_NAMESPACE_OFFICE, XML_DOCUMENT_META,      XML_TOK_DOC_META        },
     738             :             XML_TOKEN_MAP_END
     739             :         };
     740           0 :         m_pDocElemTokenMap.reset(new SvXMLTokenMap( aElemTokenMap ));
     741             :     }
     742           0 :     return *m_pDocElemTokenMap;
     743             : }
     744             : // -----------------------------------------------------------------------------
     745           0 : const SvXMLTokenMap& ORptFilter::GetReportElemTokenMap() const
     746             : {
     747           0 :     if ( !m_pReportElemTokenMap.get() )
     748           0 :         m_pReportElemTokenMap.reset(OXMLHelper::GetReportElemTokenMap());
     749           0 :     return *m_pReportElemTokenMap;
     750             : }
     751             : // -----------------------------------------------------------------------------
     752           0 : const SvXMLTokenMap& ORptFilter::GetSubDocumentElemTokenMap() const
     753             : {
     754           0 :     if ( !m_pSubDocumentElemTokenMap.get() )
     755           0 :         m_pSubDocumentElemTokenMap.reset(OXMLHelper::GetSubDocumentElemTokenMap());
     756           0 :     return *m_pSubDocumentElemTokenMap;
     757             : }
     758             : // -----------------------------------------------------------------------------
     759           0 : const SvXMLTokenMap& ORptFilter::GetFunctionElemTokenMap() const
     760             : {
     761           0 :     if ( !m_pFunctionElemTokenMap.get() )
     762             :     {
     763             :         static SvXMLTokenMapEntry aElemTokenMap[]=
     764             :         {
     765             :             { XML_NAMESPACE_REPORT, XML_NAME,           XML_TOK_FUNCTION_NAME   },
     766             :             { XML_NAMESPACE_REPORT, XML_FORMULA,        XML_TOK_FUNCTION_FORMULA},
     767             :             { XML_NAMESPACE_REPORT, XML_PRE_EVALUATED,  XML_TOK_PRE_EVALUATED   },
     768             :             { XML_NAMESPACE_REPORT, XML_INITIAL_FORMULA,XML_TOK_INITIAL_FORMULA   },
     769             :             { XML_NAMESPACE_REPORT, XML_DEEP_TRAVERSING,XML_TOK_DEEP_TRAVERSING   },
     770             :             XML_TOKEN_MAP_END
     771             :         };
     772           0 :         m_pFunctionElemTokenMap.reset(new SvXMLTokenMap( aElemTokenMap ));
     773             :     }
     774           0 :     return *m_pFunctionElemTokenMap;
     775             : }
     776             : // -----------------------------------------------------------------------------
     777           0 : const SvXMLTokenMap& ORptFilter::GetFormatElemTokenMap() const
     778             : {
     779           0 :     if ( !m_pFormatElemTokenMap.get() )
     780             :     {
     781             :         static SvXMLTokenMapEntry aElemTokenMap[]=
     782             :         {
     783             :             { XML_NAMESPACE_REPORT, XML_ENABLED     , XML_TOK_ENABLED           },
     784             :             { XML_NAMESPACE_REPORT, XML_FORMULA     , XML_TOK_FORMULA           },
     785             :             { XML_NAMESPACE_REPORT, XML_STYLE_NAME  , XML_TOK_FORMAT_STYLE_NAME },
     786             :             XML_TOKEN_MAP_END
     787             :         };
     788           0 :         m_pFormatElemTokenMap.reset(new SvXMLTokenMap( aElemTokenMap ));
     789             :     }
     790           0 :     return *m_pFormatElemTokenMap;
     791             : }
     792             : // -----------------------------------------------------------------------------
     793           0 : const SvXMLTokenMap& ORptFilter::GetGroupElemTokenMap() const
     794             : {
     795           0 :     if ( !m_pGroupElemTokenMap.get() )
     796             :     {
     797             :         static SvXMLTokenMapEntry aElemTokenMap[]=
     798             :         {
     799             :             { XML_NAMESPACE_REPORT, XML_START_NEW_COLUMN            ,   XML_TOK_START_NEW_COLUMN            },
     800             :             { XML_NAMESPACE_REPORT, XML_RESET_PAGE_NUMBER           ,   XML_TOK_RESET_PAGE_NUMBER           },
     801             :             { XML_NAMESPACE_REPORT, XML_PRINT_HEADER_ON_EACH_PAGE   ,   XML_TOK_PRINT_HEADER_ON_EACH_PAGE   },
     802             :             { XML_NAMESPACE_REPORT, XML_RESET_PAGE_NUMBER           ,   XML_TOK_RESET_PAGE_NUMBER           },
     803             :             { XML_NAMESPACE_REPORT, XML_GROUP_EXPRESSION            ,   XML_TOK_GROUP_EXPRESSION            },
     804             :             { XML_NAMESPACE_REPORT, XML_GROUP_HEADER                ,   XML_TOK_GROUP_HEADER                },
     805             :             { XML_NAMESPACE_REPORT, XML_GROUP                       ,   XML_TOK_GROUP_GROUP                 },
     806             :             { XML_NAMESPACE_REPORT, XML_DETAIL                      ,   XML_TOK_GROUP_DETAIL                },
     807             :             { XML_NAMESPACE_REPORT, XML_GROUP_FOOTER                ,   XML_TOK_GROUP_FOOTER                },
     808             :             { XML_NAMESPACE_REPORT, XML_SORT_ASCENDING              ,   XML_TOK_SORT_ASCENDING              },
     809             :             { XML_NAMESPACE_REPORT, XML_KEEP_TOGETHER               ,   XML_TOK_GROUP_KEEP_TOGETHER         },
     810             :             { XML_NAMESPACE_REPORT, XML_FUNCTION                    ,   XML_TOK_GROUP_FUNCTION              },
     811             :             XML_TOKEN_MAP_END
     812             :         };
     813           0 :         m_pGroupElemTokenMap.reset(new SvXMLTokenMap( aElemTokenMap ));
     814             :     }
     815           0 :     return *m_pGroupElemTokenMap;
     816             : }
     817             : // -----------------------------------------------------------------------------
     818           0 : const SvXMLTokenMap& ORptFilter::GetReportElementElemTokenMap() const
     819             : {
     820           0 :     if ( !m_pElemTokenMap.get() )
     821             :     {
     822             :         static SvXMLTokenMapEntry aElemTokenMap[]=
     823             :         {
     824             :             { XML_NAMESPACE_REPORT, XML_PRINT_REPEATED_VALUES       ,XML_TOK_PRINT_REPEATED_VALUES              },
     825             :             { XML_NAMESPACE_REPORT, XML_PRINT_ONLY_WHEN_GROUP_CHANGE,XML_TOK_PRINT_ONLY_WHEN_GROUP_CHANGE       },
     826             :             { XML_NAMESPACE_REPORT, XML_CONDITIONAL_PRINT_EXPRESSION,XML_TOK_REP_CONDITIONAL_PRINT_EXPRESSION   },
     827             :             { XML_NAMESPACE_REPORT, XML_REPORT_COMPONENT            ,XML_TOK_COMPONENT                          },
     828             :             { XML_NAMESPACE_REPORT, XML_FORMAT_CONDITION            ,XML_TOK_FORMATCONDITION                    },
     829             :             XML_TOKEN_MAP_END
     830             :         };
     831           0 :         m_pElemTokenMap.reset(new SvXMLTokenMap( aElemTokenMap ));
     832             :     }
     833           0 :     return *m_pElemTokenMap;
     834             : }
     835             : // -----------------------------------------------------------------------------
     836           0 : const SvXMLTokenMap& ORptFilter::GetControlElemTokenMap() const
     837             : {
     838           0 :     if ( !m_pControlElemTokenMap.get() )
     839             :     {
     840             :         static SvXMLTokenMapEntry aElemTokenMap[]=
     841             :         {
     842             :             { XML_NAMESPACE_FORM,   XML_LABEL               ,XML_TOK_LABEL              },
     843             :             { XML_NAMESPACE_FORM,   XML_PROPERTIES          ,XML_TOK_PROPERTIES         },
     844             :             { XML_NAMESPACE_FORM,   XML_SIZE                ,XML_TOK_SIZE               },
     845             :             { XML_NAMESPACE_FORM,   XML_IMAGE_DATA          ,XML_TOK_IMAGE_DATA         },
     846             :             { XML_NAMESPACE_REPORT, XML_SCALE               ,XML_TOK_SCALE              },
     847             :             { XML_NAMESPACE_REPORT, XML_REPORT_ELEMENT      ,XML_TOK_REPORT_ELEMENT     },
     848             :             { XML_NAMESPACE_REPORT, XML_FORMULA             ,XML_TOK_DATA_FORMULA       },
     849             :             { XML_NAMESPACE_REPORT, XML_PRESERVE_IRI        ,XML_TOK_PRESERVE_IRI       },
     850             :             { XML_NAMESPACE_REPORT, XML_SELECT_PAGE         ,XML_TOK_SELECT_PAGE        },
     851             :             XML_TOKEN_MAP_END
     852             :         };
     853           0 :         m_pControlElemTokenMap.reset(new SvXMLTokenMap( aElemTokenMap ));
     854             :     }
     855           0 :     return *m_pControlElemTokenMap;
     856             : }
     857             : // -----------------------------------------------------------------------------
     858           0 : const SvXMLTokenMap& ORptFilter::GetControlPropertyElemTokenMap() const
     859             : {
     860           0 :     if ( !m_pControlElemTokenMap.get() )
     861             :     {
     862             :         static SvXMLTokenMapEntry aElemTokenMap[]=
     863             :         {
     864             :             { XML_NAMESPACE_FORM,   XML_PROPERTY_NAME   ,XML_TOK_PROPERTY_NAME          },
     865             :             { XML_NAMESPACE_OOO,    XML_VALUE_TYPE      ,XML_TOK_VALUE_TYPE             },
     866             :             { XML_NAMESPACE_FORM,   XML_LIST_PROPERTY   ,XML_TOK_LIST_PROPERTY          },
     867             :             { XML_NAMESPACE_OOO,    XML_VALUE           ,XML_TOK_VALUE                  },
     868             :             { XML_NAMESPACE_OOO,    XML_CURRENCY        ,XML_TOK_CURRENCY               },
     869             :             { XML_NAMESPACE_OOO,    XML_DATE_VALUE      ,XML_TOK_DATE_VALUE             },
     870             :             { XML_NAMESPACE_OOO,    XML_TIME_VALUE      ,XML_TOK_TIME_VALUE             },
     871             :             { XML_NAMESPACE_OOO,    XML_STRING_VALUE    ,XML_TOK_STRING_VALUE           },
     872             :             { XML_NAMESPACE_OOO,    XML_BOOLEAN_VALUE   ,XML_TOK_BOOLEAN_VALUE          },
     873             :             XML_TOKEN_MAP_END
     874             :         };
     875           0 :         m_pControlElemTokenMap.reset(new SvXMLTokenMap( aElemTokenMap ));
     876             :     }
     877           0 :     return *m_pControlElemTokenMap;
     878             : }
     879             : // -----------------------------------------------------------------------------
     880           0 : const SvXMLTokenMap& ORptFilter::GetComponentElemTokenMap() const
     881             : {
     882           0 :     if ( !m_pComponentElemTokenMap.get() )
     883             :     {
     884             :         static SvXMLTokenMapEntry aElemTokenMap[]=
     885             :         {
     886             :             { XML_NAMESPACE_DRAW,   XML_NAME                        ,   XML_TOK_NAME                        },
     887             :             { XML_NAMESPACE_DRAW,   XML_TEXT_STYLE_NAME             ,   XML_TOK_TEXT_STYLE_NAME             },
     888             :             { XML_NAMESPACE_REPORT, XML_TRANSFORM                   ,   XML_TOK_TRANSFORM                   },
     889             :             XML_TOKEN_MAP_END
     890             :         };
     891           0 :         m_pComponentElemTokenMap.reset(new SvXMLTokenMap( aElemTokenMap ));
     892             :     }
     893           0 :     return *m_pComponentElemTokenMap;
     894             : }
     895             : // -----------------------------------------------------------------------------
     896           0 : const SvXMLTokenMap& ORptFilter::GetColumnTokenMap() const
     897             : {
     898           0 :     if ( !m_pColumnTokenMap.get() )
     899             :     {
     900             :         static SvXMLTokenMapEntry aElemTokenMap[]=
     901             :         {
     902             :             { XML_NAMESPACE_TABLE,  XML_NAME                        ,   XML_TOK_NAME                        },
     903             :             { XML_NAMESPACE_TABLE,  XML_STYLE_NAME                  ,   XML_TOK_COLUMN_STYLE_NAME           },
     904             :             { XML_NAMESPACE_TABLE,  XML_TABLE_COLUMN                ,   XML_TOK_COLUMN                      },
     905             :             { XML_NAMESPACE_TABLE,  XML_TABLE_ROW                   ,   XML_TOK_ROW                         },
     906             :             { XML_NAMESPACE_TABLE,  XML_TABLE_CELL                  ,   XML_TOK_CELL                        },
     907             :             { XML_NAMESPACE_TABLE,  XML_TABLE_COLUMNS               ,   XML_TOK_TABLE_COLUMNS               },
     908             :             { XML_NAMESPACE_TABLE,  XML_TABLE_ROWS                  ,   XML_TOK_TABLE_ROWS                  },
     909             :             { XML_NAMESPACE_TABLE,  XML_COVERED_TABLE_CELL          ,   XML_TOK_COV_CELL                    },
     910             :             { XML_NAMESPACE_TABLE,  XML_NUMBER_COLUMNS_SPANNED      ,   XML_TOK_NUMBER_COLUMNS_SPANNED      },
     911             :             { XML_NAMESPACE_TABLE,  XML_NUMBER_ROWS_SPANNED         ,   XML_TOK_NUMBER_ROWS_SPANNED         },
     912             :             { XML_NAMESPACE_REPORT, XML_CONDITIONAL_PRINT_EXPRESSION,   XML_TOK_CONDITIONAL_PRINT_EXPRESSION},
     913             :             XML_TOKEN_MAP_END
     914             :         };
     915           0 :         m_pColumnTokenMap.reset(new SvXMLTokenMap( aElemTokenMap ));
     916             :     }
     917           0 :     return *m_pColumnTokenMap;
     918             : }
     919             : // -----------------------------------------------------------------------------
     920           0 : const SvXMLTokenMap& ORptFilter::GetSectionElemTokenMap() const
     921             : {
     922           0 :     if ( !m_pSectionElemTokenMap.get() )
     923             :     {
     924             :         static SvXMLTokenMapEntry aElemTokenMap[]=
     925             :         {
     926             :             { XML_NAMESPACE_TABLE,  XML_TABLE                       ,   XML_TOK_TABLE                       },
     927             :             { XML_NAMESPACE_TABLE,  XML_NAME                        ,   XML_TOK_SECTION_NAME                },
     928             :             { XML_NAMESPACE_REPORT, XML_VISIBLE                     ,   XML_TOK_VISIBLE                     },
     929             :             { XML_NAMESPACE_REPORT, XML_FORCE_NEW_PAGE              ,   XML_TOK_FORCE_NEW_PAGE              },
     930             :             { XML_NAMESPACE_REPORT, XML_FORCE_NEW_COLUMN            ,   XML_TOK_FORCE_NEW_COLUMN            },
     931             :             { XML_NAMESPACE_REPORT, XML_KEEP_TOGETHER               ,   XML_TOK_KEEP_TOGETHER               },
     932             :             { XML_NAMESPACE_REPORT, XML_REPEAT_SECTION              ,   XML_TOK_REPEAT_SECTION              },
     933             :             { XML_NAMESPACE_TABLE,  XML_STYLE_NAME                  ,   XML_TOK_SECT_STYLE_NAME             },
     934             :             { XML_NAMESPACE_REPORT, XML_PAGE_PRINT_OPTION           ,   XML_TOK_PAGE_PRINT_OPTION           },
     935             : 
     936             :             XML_TOKEN_MAP_END
     937             :         };
     938           0 :         m_pSectionElemTokenMap.reset(new SvXMLTokenMap( aElemTokenMap ));
     939             :     }
     940           0 :     return *m_pSectionElemTokenMap;
     941             : }
     942             : // -----------------------------------------------------------------------------
     943           0 : const SvXMLTokenMap& ORptFilter::GetCellElemTokenMap() const
     944             : {
     945           0 :     if ( !m_pCellElemTokenMap.get() )
     946             :     {
     947             :         static SvXMLTokenMapEntry aElemTokenMap[]=
     948             :         {
     949             :             { XML_NAMESPACE_TEXT,   XML_P                           ,   XML_TOK_P                           },
     950             :             { XML_NAMESPACE_REPORT, XML_FIXED_CONTENT               ,   XML_TOK_FIXED_CONTENT               },
     951             :             { XML_NAMESPACE_REPORT, XML_FORMATTED_TEXT              ,   XML_TOK_FORMATTED_TEXT              },
     952             :             { XML_NAMESPACE_REPORT, XML_IMAGE                       ,   XML_TOK_IMAGE                       },
     953             :             { XML_NAMESPACE_REPORT, XML_SUB_DOCUMENT                ,   XML_TOK_SUB_DOCUMENT                },
     954             :             { XML_NAMESPACE_DRAW,   XML_CUSTOM_SHAPE                ,   XML_TOK_CUSTOM_SHAPE                },
     955             :             { XML_NAMESPACE_DRAW,   XML_FRAME                       ,   XML_TOK_FRAME                       },
     956             :             { XML_NAMESPACE_TEXT,   XML_PAGE_NUMBER                 ,   XML_TOK_PAGE_NUMBER                 },
     957             :             { XML_NAMESPACE_TEXT,   XML_PAGE_COUNT                  ,   XML_TOK_PAGE_COUNT                  },
     958             :             { XML_NAMESPACE_TEXT,   XML_TAB                         ,   XML_TOK_TEXT_TAB_STOP               },
     959             :             { XML_NAMESPACE_TEXT,   XML_LINE_BREAK                  ,   XML_TOK_TEXT_LINE_BREAK             },
     960             :             { XML_NAMESPACE_TEXT,   XML_S                           ,   XML_TOK_TEXT_S                      },
     961             :             XML_TOKEN_MAP_END
     962             :         };
     963           0 :         m_pCellElemTokenMap.reset(new SvXMLTokenMap( aElemTokenMap ));
     964             :     }
     965           0 :     return *m_pCellElemTokenMap;
     966             : }
     967             : // -----------------------------------------------------------------------------
     968           0 : SvXMLImportContext* ORptFilter::CreateStylesContext(const ::rtl::OUString& rLocalName,
     969             :                                      const uno::Reference< XAttributeList>& xAttrList, sal_Bool bIsAutoStyle )
     970             : {
     971           0 :     SvXMLImportContext* pContext = bIsAutoStyle ? GetAutoStyles() : GetStyles();
     972           0 :     if ( !pContext )
     973             :     {
     974           0 :         pContext = new OReportStylesContext(*this, XML_NAMESPACE_OFFICE, rLocalName, xAttrList, bIsAutoStyle);
     975           0 :         if (bIsAutoStyle)
     976           0 :             SetAutoStyles((SvXMLStylesContext*)pContext);
     977             :         else
     978           0 :             SetStyles((SvXMLStylesContext*)pContext);
     979             :     }
     980           0 :     return pContext;
     981             : }
     982             : // -----------------------------------------------------------------------------
     983           0 : SvXMLImport&         ORptFilter::getGlobalContext()
     984             : {
     985           0 :     return *this;
     986             : }
     987             : // -----------------------------------------------------------------------------
     988           0 : void ORptFilter::enterEventContext()
     989             : {
     990           0 : }
     991             : // -----------------------------------------------------------------------------
     992           0 : void ORptFilter::leaveEventContext()
     993             : {
     994           0 : }
     995             : // -----------------------------------------------------------------------------
     996           0 : SvXMLImportContext *ORptFilter::CreateFontDeclsContext(
     997             :         const ::rtl::OUString& rLocalName,
     998             :         const uno::Reference< xml::sax::XAttributeList > & xAttrList )
     999             : {
    1000             :     XMLFontStylesContext *pFSContext =
    1001             :             new XMLFontStylesContext( *this, XML_NAMESPACE_OFFICE,
    1002             :                                       rLocalName, xAttrList,
    1003           0 :                                       osl_getThreadTextEncoding() );
    1004           0 :     SetFontDecls( pFSContext );
    1005           0 :     return pFSContext;
    1006             : }
    1007             : // -----------------------------------------------------------------------------
    1008           0 : XMLShapeImportHelper* ORptFilter::CreateShapeImport()
    1009             : {
    1010           0 :     return new XMLShapeImportHelper( *this,GetModel() );
    1011             : }
    1012             : // -----------------------------------------------------------------------------
    1013           0 : void ORptFilter::FinishStyles()
    1014             : {
    1015           0 :     if( GetStyles() )
    1016           0 :         GetStyles()->FinishStyles( sal_True );
    1017           0 : }
    1018             : // -----------------------------------------------------------------------------
    1019           0 : ::rtl::OUString ORptFilter::convertFormula(const ::rtl::OUString& _sFormula)
    1020             : {
    1021           0 :     return _sFormula;
    1022             : }
    1023             : // -----------------------------------------------------------------------------
    1024           0 : void SAL_CALL ORptFilter::startDocument( void )
    1025             :     throw( xml::sax::SAXException, uno::RuntimeException )
    1026             : {
    1027           0 :     m_xReportDefinition.set(GetModel(),UNO_QUERY_THROW);
    1028             :     OSL_ENSURE(m_xReportDefinition.is(),"ReportDefinition is NULL!");
    1029           0 :     if ( m_xReportDefinition.is() )
    1030             :     {
    1031           0 :         m_pReportModel = reportdesign::OReportDefinition::getSdrModel(m_xReportDefinition);
    1032             :         OSL_ENSURE(m_pReportModel,"Report model is NULL!");
    1033             : 
    1034           0 :         SvXMLImport::startDocument();
    1035             :     }
    1036           0 : }
    1037             : // -----------------------------------------------------------------------------
    1038           0 : void ORptFilter::endDocument( void )
    1039             :     throw( xml::sax::SAXException, uno::RuntimeException )
    1040             : {
    1041             :     OSL_ENSURE( GetModel().is(), "model missing; maybe startDocument wasn't called?" );
    1042           0 :     if( !GetModel().is() )
    1043           0 :         return;
    1044             : 
    1045             :     // this method will modify the document directly -> lock SolarMutex
    1046           0 :     SolarMutexGuard aGuard;
    1047             :     // Clear the shape import to sort the shapes  (and not in the
    1048             :     // destructor that might be called after the import has finished
    1049             :     // for Java filters.
    1050           0 :     if( HasShapeImport() )
    1051           0 :         ClearShapeImport();
    1052             : 
    1053             :     // delegate to parent: takes care of error handling
    1054           0 :     SvXMLImport::endDocument();
    1055             : }
    1056             : // -----------------------------------------------------------------------------
    1057           0 : void ORptFilter::removeFunction(const ::rtl::OUString& _sFunctionName)
    1058             : {
    1059           0 :     m_aFunctions.erase(_sFunctionName);
    1060           0 : }
    1061             : // -----------------------------------------------------------------------------
    1062           0 : void ORptFilter::insertFunction(const ::com::sun::star::uno::Reference< ::com::sun::star::report::XFunction > & _xFunction)
    1063             : {
    1064           0 :     m_aFunctions.insert(TGroupFunctionMap::value_type(_xFunction->getName(),_xFunction));
    1065           0 : }
    1066             : // -----------------------------------------------------------------------------
    1067           0 : SvXMLImportContext* ORptFilter::CreateMetaContext(const ::rtl::OUString& rLocalName,const uno::Reference<xml::sax::XAttributeList>&)
    1068             : {
    1069           0 :     SvXMLImportContext* pContext = NULL;
    1070             : 
    1071           0 :     if ( (getImportFlags() & IMPORT_META) )
    1072             :     {
    1073           0 :         uno::Reference<document::XDocumentPropertiesSupplier> xDPS(GetModel(), uno::UNO_QUERY_THROW);
    1074           0 :         pContext = new SvXMLMetaDocumentContext(*this,XML_NAMESPACE_OFFICE, rLocalName,xDPS->getDocumentProperties());
    1075             :     }
    1076           0 :     return pContext;
    1077             : }
    1078             : // -----------------------------------------------------------------------------
    1079           0 : sal_Bool ORptFilter::isOldFormat() const
    1080             : {
    1081           0 :     sal_Bool bOldFormat = sal_True;
    1082           0 :     uno::Reference<beans::XPropertySet> xProp = getImportInfo();
    1083           0 :     if ( xProp.is() )
    1084             :     {
    1085           0 :         const static ::rtl::OUString s_sOld(RTL_CONSTASCII_USTRINGPARAM("OldFormat"));
    1086           0 :         if ( xProp->getPropertySetInfo()->hasPropertyByName(s_sOld))
    1087             :         {
    1088           0 :             xProp->getPropertyValue(s_sOld) >>= bOldFormat;
    1089             :         }
    1090             :     }
    1091           0 :     return bOldFormat;
    1092             : }
    1093             : 
    1094             : // -----------------------------------------------------------------------------
    1095             : }// rptxml
    1096             : // -----------------------------------------------------------------------------
    1097             : 
    1098             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10