LCOV - code coverage report
Current view: top level - xmlscript/source/xmlflat_imexp - xmlbas_import.cxx (source / functions) Hit Total Coverage
Test: commit 10e77ab3ff6f4314137acd6e2702a6e5c1ce1fae Lines: 115 292 39.4 %
Date: 2014-11-03 Functions: 24 62 38.7 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
       2             : /*
       3             :  * This file is part of the LibreOffice project.
       4             :  *
       5             :  * This Source Code Form is subject to the terms of the Mozilla Public
       6             :  * License, v. 2.0. If a copy of the MPL was not distributed with this
       7             :  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
       8             :  *
       9             :  * This file incorporates work covered by the following license notice:
      10             :  *
      11             :  *   Licensed to the Apache Software Foundation (ASF) under one or more
      12             :  *   contributor license agreements. See the NOTICE file distributed
      13             :  *   with this work for additional information regarding copyright
      14             :  *   ownership. The ASF licenses this file to you under the Apache
      15             :  *   License, Version 2.0 (the "License"); you may not use this file
      16             :  *   except in compliance with the License. You may obtain a copy of
      17             :  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
      18             :  */
      19             : 
      20             : #include <sal/config.h>
      21             : 
      22             : #include "unoservices.hxx"
      23             : #include "xmlbas_import.hxx"
      24             : #include <xmlscript/xmlns.h>
      25             : #include <xmlscript/xml_helper.hxx>
      26             : #include <com/sun/star/beans/XPropertySet.hpp>
      27             : #include <com/sun/star/lang/XMultiComponentFactory.hpp>
      28             : #include <com/sun/star/script/XLibraryContainerPassword.hpp>
      29             : #include <com/sun/star/document/XEmbeddedScripts.hpp>
      30             : #include <cppuhelper/implementationentry.hxx>
      31             : #include <cppuhelper/supportsservice.hxx>
      32             : 
      33             : using namespace ::com::sun::star;
      34             : using namespace ::com::sun::star::lang;
      35             : using namespace ::com::sun::star::uno;
      36             : 
      37             : namespace xmlscript
      38             : {
      39             : 
      40             :     // BasicElementBase
      41             : 
      42           2 :     BasicElementBase::BasicElementBase( const OUString& rLocalName,
      43             :             const Reference< xml::input::XAttributes >& xAttributes,
      44             :             BasicElementBase* pParent, BasicImport* pImport )
      45             :         :m_pImport( pImport )
      46             :         ,m_pParent( pParent )
      47             :         ,m_aLocalName( rLocalName )
      48           2 :         ,m_xAttributes( xAttributes )
      49             :     {
      50           2 :         if ( m_pImport )
      51           2 :             m_pImport->acquire();
      52           2 :         if ( m_pParent )
      53           0 :             m_pParent->acquire();
      54           2 :     }
      55             : 
      56           4 :     BasicElementBase::~BasicElementBase()
      57             :     {
      58           2 :         if ( m_pImport )
      59           2 :             m_pImport->release();
      60           2 :         if ( m_pParent )
      61           0 :             m_pParent->release();
      62           2 :     }
      63             : 
      64           0 :     bool BasicElementBase::getBoolAttr( sal_Bool* pRet, const OUString& rAttrName,
      65             :         const ::com::sun::star::uno::Reference< ::com::sun::star::xml::input::XAttributes >& xAttributes,
      66             :         sal_Int32 nUid )
      67             :     {
      68           0 :         if ( xAttributes.is() )
      69             :         {
      70           0 :             OUString aValue( xAttributes->getValueByUidName( nUid, rAttrName ) );
      71           0 :             if ( !aValue.isEmpty() )
      72             :             {
      73           0 :                 if ( aValue == "true" )
      74             :                 {
      75           0 :                     *pRet = sal_True;
      76           0 :                     return true;
      77             :                 }
      78           0 :                 else if ( aValue == "false" )
      79             :                 {
      80           0 :                     *pRet = sal_False;
      81           0 :                     return true;
      82             :                 }
      83             :                 else
      84             :                 {
      85           0 :                     throw xml::sax::SAXException(rAttrName + ": no boolean value (true|false)!", Reference< XInterface >(), Any() );
      86             :                 }
      87           0 :             }
      88             :         }
      89           0 :         return false;
      90             :     }
      91             : 
      92             :     // XElement
      93             : 
      94           0 :     Reference< xml::input::XElement > BasicElementBase::getParent()
      95             :         throw (RuntimeException, std::exception)
      96             :     {
      97           0 :         return static_cast< xml::input::XElement* >( m_pParent );
      98             :     }
      99             : 
     100           0 :     OUString BasicElementBase::getLocalName()
     101             :         throw (RuntimeException, std::exception)
     102             :     {
     103           0 :         return m_aLocalName;
     104             :     }
     105             : 
     106           0 :     sal_Int32 BasicElementBase::getUid()
     107             :         throw (RuntimeException, std::exception)
     108             :     {
     109           0 :         sal_Int32 nId = -1;
     110           0 :         if ( m_pImport )
     111           0 :             nId = m_pImport->XMLNS_UID;
     112           0 :         return nId;
     113             :     }
     114             : 
     115           0 :     Reference< xml::input::XAttributes > BasicElementBase::getAttributes()
     116             :         throw (RuntimeException, std::exception)
     117             :     {
     118           0 :         return m_xAttributes;
     119             :     }
     120             : 
     121           0 :     Reference< xml::input::XElement > BasicElementBase::startChildElement(
     122             :         sal_Int32 /*nUid*/, const OUString& /*rLocalName*/,
     123             :         const Reference< xml::input::XAttributes >& /*xAttributes*/ )
     124             :         throw (xml::sax::SAXException, RuntimeException, std::exception)
     125             :     {
     126           0 :         throw xml::sax::SAXException("unexpected element!", Reference< XInterface >(), Any() );
     127             :     }
     128             : 
     129           0 : void BasicElementBase::characters( const OUString& /*rChars*/ )
     130             :         throw (xml::sax::SAXException, RuntimeException, std::exception)
     131             :     {
     132             :         // not used, all characters ignored
     133           0 :     }
     134             : 
     135           0 : void BasicElementBase::ignorableWhitespace( const OUString& /*rWhitespaces*/ )
     136             :         throw (xml::sax::SAXException, RuntimeException, std::exception)
     137             :     {
     138           0 :     }
     139             : 
     140           0 : void BasicElementBase::processingInstruction( const OUString& /*rTarget*/, const OUString& /*rData*/ )
     141             :         throw (xml::sax::SAXException, RuntimeException, std::exception)
     142             :     {
     143           0 :     }
     144             : 
     145           0 :     void BasicElementBase::endElement()
     146             :         throw (xml::sax::SAXException, RuntimeException, std::exception)
     147             :     {
     148           0 :     }
     149             : 
     150             :     // BasicLibrariesElement
     151             : 
     152           2 :     BasicLibrariesElement::BasicLibrariesElement( const OUString& rLocalName,
     153             :             const Reference< xml::input::XAttributes >& xAttributes,
     154             :             BasicElementBase* pParent, BasicImport* pImport,
     155             :             const Reference< script::XLibraryContainer2 >& rxLibContainer )
     156             :         :BasicElementBase( rLocalName, xAttributes, pParent, pImport )
     157           2 :         ,m_xLibContainer( rxLibContainer )
     158             :     {
     159           2 :     }
     160             : 
     161             :     // XElement
     162             : 
     163           0 :     Reference< xml::input::XElement > BasicLibrariesElement::startChildElement(
     164             :             sal_Int32 nUid, const OUString& rLocalName,
     165             :             const Reference< xml::input::XAttributes >& xAttributes )
     166             :         throw (xml::sax::SAXException, RuntimeException, std::exception)
     167             :     {
     168           0 :         Reference< xml::input::XElement > xElement;
     169             : 
     170           0 :         if ( nUid != m_pImport->XMLNS_UID )
     171             :         {
     172           0 :             throw xml::sax::SAXException( "illegal namespace!", Reference< XInterface >(), Any() );
     173             :         }
     174           0 :         else if ( rLocalName == "library-linked" )
     175             :         {
     176           0 :             if ( xAttributes.is() )
     177             :             {
     178           0 :                 OUString aName = xAttributes->getValueByUidName( m_pImport->XMLNS_UID, "name" );
     179             : 
     180           0 :                 OUString aStorageURL = xAttributes->getValueByUidName(m_pImport->XMLNS_XLINK_UID, "href" );
     181             : 
     182           0 :                 sal_Bool bReadOnly = sal_False;
     183           0 :                 getBoolAttr( &bReadOnly,"readonly", xAttributes, m_pImport->XMLNS_UID );
     184             : 
     185           0 :                 if ( m_xLibContainer.is() )
     186             :                 {
     187             :                     try
     188             :                     {
     189             :                         Reference< container::XNameAccess > xLib(
     190           0 :                             m_xLibContainer->createLibraryLink( aName, aStorageURL, bReadOnly ) );
     191           0 :                         if ( xLib.is() )
     192           0 :                             xElement.set( new BasicElementBase( rLocalName, xAttributes, this, m_pImport ) );
     193             :                     }
     194           0 :                     catch ( const container::ElementExistException& e )
     195             :                     {
     196             :                         SAL_INFO("xmlscript.xmlflat", "BasicLibrariesElement::startChildElement: caught ElementExceptionExist reason " << e.Message );
     197             :                     }
     198           0 :                     catch ( const lang::IllegalArgumentException& e )
     199             :                     {
     200             :                         SAL_INFO("xmlscript.xmlflat", "BasicLibrariesElement::startChildElement: caught IllegalArgumentException reason " << e.Message );
     201             :                     }
     202           0 :                 }
     203             :             }
     204             :         }
     205           0 :         else if ( rLocalName == "library-embedded" )
     206             :         {
     207             :             // TODO: create password protected libraries
     208             : 
     209           0 :             if ( xAttributes.is() )
     210             :             {
     211           0 :                 OUString aName = xAttributes->getValueByUidName( m_pImport->XMLNS_UID, "name" );
     212             : 
     213           0 :                 sal_Bool bReadOnly = sal_False;
     214           0 :                 getBoolAttr( &bReadOnly, "readonly", xAttributes, m_pImport->XMLNS_UID );
     215             : 
     216           0 :                 if ( m_xLibContainer.is() )
     217             :                 {
     218             :                     try
     219             :                     {
     220           0 :                         Reference< container::XNameContainer > xLib;
     221           0 :                         if ( m_xLibContainer->hasByName( aName ) )
     222             :                         {
     223             :                             // Standard library
     224           0 :                             m_xLibContainer->getByName( aName ) >>= xLib;
     225             :                         }
     226             :                         else
     227             :                         {
     228           0 :                             xLib.set( m_xLibContainer->createLibrary( aName ) );
     229             :                         }
     230             : 
     231           0 :                         if ( xLib.is() )
     232           0 :                             xElement.set( new BasicEmbeddedLibraryElement( rLocalName, xAttributes, this, m_pImport, m_xLibContainer, aName, bReadOnly ) );
     233             :                     }
     234           0 :                     catch ( const lang::IllegalArgumentException& e )
     235             :                     {
     236             :                         SAL_INFO("xmlscript.xmlflat", "BasicLibrariesElement::startChildElement: caught IllegalArgumentException reason " << e.Message );
     237             :                     }
     238           0 :                 }
     239             :             }
     240             :         }
     241             :         else
     242             :         {
     243           0 :             throw xml::sax::SAXException( "expected library-linked or library-embedded element!", Reference< XInterface >(), Any() );
     244             :         }
     245             : 
     246           0 :         return xElement;
     247             :     }
     248             : 
     249           2 :     void BasicLibrariesElement::endElement()
     250             :         throw (xml::sax::SAXException, RuntimeException, std::exception)
     251             :     {
     252           2 :     }
     253             : 
     254             :     // BasicEmbeddedLibraryElement
     255             : 
     256           0 :     BasicEmbeddedLibraryElement::BasicEmbeddedLibraryElement( const OUString& rLocalName,
     257             :             const Reference< xml::input::XAttributes >& xAttributes,
     258             :             BasicElementBase* pParent, BasicImport* pImport,
     259             :             const Reference< script::XLibraryContainer2 >& rxLibContainer,
     260             :             const OUString& rLibName, bool bReadOnly )
     261             :         :BasicElementBase( rLocalName, xAttributes, pParent, pImport )
     262             :         ,m_xLibContainer( rxLibContainer )
     263             :         ,m_aLibName( rLibName )
     264           0 :         ,m_bReadOnly( bReadOnly )
     265             :     {
     266             :         try
     267             :         {
     268           0 :             if ( m_xLibContainer.is() && m_xLibContainer->hasByName( m_aLibName ) )
     269           0 :                 m_xLibContainer->getByName( m_aLibName ) >>= m_xLib;
     270             :         }
     271           0 :         catch ( const lang::WrappedTargetException& e )
     272             :         {
     273             :             SAL_INFO("xmlscript.xmlflat", "BasicEmbeddedLibraryElement CTOR: caught WrappedTargetException reason " << e.Message );
     274             :         }
     275           0 :     }
     276             : 
     277             :     // XElement
     278             : 
     279           0 :     Reference< xml::input::XElement > BasicEmbeddedLibraryElement::startChildElement(
     280             :             sal_Int32 nUid, const OUString& rLocalName,
     281             :             const Reference< xml::input::XAttributes >& xAttributes )
     282             :         throw (xml::sax::SAXException, RuntimeException, std::exception)
     283             :     {
     284           0 :         Reference< xml::input::XElement > xElement;
     285             : 
     286           0 :         if ( nUid != m_pImport->XMLNS_UID )
     287             :         {
     288           0 :             throw xml::sax::SAXException( "illegal namespace!", Reference< XInterface >(), Any() );
     289             :         }
     290           0 :         else if ( rLocalName == "module" )
     291             :         {
     292           0 :             if ( xAttributes.is() )
     293             :             {
     294           0 :                 OUString aName = xAttributes->getValueByUidName(m_pImport->XMLNS_UID, "name" );
     295             : 
     296           0 :                 if ( m_xLib.is() && !aName.isEmpty() )
     297           0 :                     xElement.set( new BasicModuleElement( rLocalName, xAttributes, this, m_pImport, m_xLib, aName ) );
     298             :             }
     299             :         }
     300             :         else
     301             :         {
     302           0 :             throw xml::sax::SAXException( "expected module element!", Reference< XInterface >(), Any() );
     303             :         }
     304             : 
     305           0 :         return xElement;
     306             :     }
     307             : 
     308           0 :     void BasicEmbeddedLibraryElement::endElement()
     309             :         throw (xml::sax::SAXException, RuntimeException, std::exception)
     310             :     {
     311           0 :         if ( m_xLibContainer.is() && m_xLibContainer->hasByName( m_aLibName ) && m_bReadOnly )
     312           0 :             m_xLibContainer->setLibraryReadOnly( m_aLibName, m_bReadOnly );
     313           0 :     }
     314             : 
     315             :     // BasicModuleElement
     316             : 
     317           0 :     BasicModuleElement::BasicModuleElement( const OUString& rLocalName,
     318             :             const Reference< xml::input::XAttributes >& xAttributes,
     319             :             BasicElementBase* pParent, BasicImport* pImport,
     320             :             const Reference< container::XNameContainer >& rxLib, const OUString& rName )
     321             :         :BasicElementBase( rLocalName, xAttributes, pParent, pImport )
     322             :         ,m_xLib( rxLib )
     323           0 :         ,m_aName( rName )
     324             :     {
     325           0 :     }
     326             : 
     327             :     // XElement
     328             : 
     329           0 :     Reference< xml::input::XElement > BasicModuleElement::startChildElement(
     330             :             sal_Int32 nUid, const OUString& rLocalName,
     331             :             const Reference< xml::input::XAttributes >& xAttributes )
     332             :         throw (xml::sax::SAXException, RuntimeException, std::exception)
     333             :     {
     334             :         // TODO: <byte-code>
     335             : 
     336           0 :         Reference< xml::input::XElement > xElement;
     337             : 
     338           0 :         if ( nUid != m_pImport->XMLNS_UID )
     339             :         {
     340           0 :             throw xml::sax::SAXException( "illegal namespace!", Reference< XInterface >(), Any() );
     341             :         }
     342           0 :         else if ( rLocalName == "source-code" )
     343             :         {
     344             :             // TODO: password protected libraries
     345             : 
     346           0 :             if ( xAttributes.is() )
     347             :             {
     348           0 :                 if ( m_xLib.is() && !m_aName.isEmpty() )
     349           0 :                     xElement.set( new BasicSourceCodeElement( rLocalName, xAttributes, this, m_pImport, m_xLib, m_aName ) );
     350             :             }
     351             :         }
     352             :         else
     353             :         {
     354           0 :             throw xml::sax::SAXException( "expected source-code element!", Reference< XInterface >(), Any() );
     355             :         }
     356             : 
     357           0 :         return xElement;
     358             :     }
     359             : 
     360           0 :     void BasicModuleElement::endElement()
     361             :         throw (xml::sax::SAXException, RuntimeException, std::exception)
     362             :     {
     363           0 :     }
     364             : 
     365             :     // BasicSourceCodeElement
     366             : 
     367           0 :     BasicSourceCodeElement::BasicSourceCodeElement( const OUString& rLocalName,
     368             :             const Reference< xml::input::XAttributes >& xAttributes,
     369             :             BasicElementBase* pParent, BasicImport* pImport,
     370             :             const Reference< container::XNameContainer >& rxLib, const OUString& rName )
     371             :         :BasicElementBase( rLocalName, xAttributes, pParent, pImport )
     372             :         ,m_xLib( rxLib )
     373           0 :         ,m_aName( rName )
     374             :     {
     375           0 :     }
     376             : 
     377             :     // XElement
     378             : 
     379           0 :     void BasicSourceCodeElement::characters( const OUString& rChars )
     380             :         throw (xml::sax::SAXException, RuntimeException, std::exception)
     381             :     {
     382           0 :         m_aBuffer.append( rChars );
     383           0 :     }
     384             : 
     385           0 :     void BasicSourceCodeElement::endElement()
     386             :         throw (xml::sax::SAXException, RuntimeException, std::exception)
     387             :     {
     388             :         try
     389             :         {
     390           0 :             if ( m_xLib.is() && !m_aName.isEmpty() )
     391             :             {
     392           0 :                 Any aElement;
     393           0 :                 aElement <<= m_aBuffer.makeStringAndClear();
     394           0 :                 m_xLib->insertByName( m_aName, aElement );
     395             :             }
     396             :         }
     397           0 :         catch ( const container::ElementExistException& e )
     398             :         {
     399             :             SAL_INFO("xmlscript.xmlflat", "BasicSourceCodeElement::endElement: caught ElementExceptionExist reason " << e.Message );
     400             :         }
     401           0 :         catch ( const lang::IllegalArgumentException& e )
     402             :         {
     403             :             SAL_INFO("xmlscript.xmlflat", "BasicSourceCodeElement::endElement: caught IllegalArgumentException reason " << e.Message );
     404             :         }
     405           0 :         catch ( const lang::WrappedTargetException& e )
     406             :         {
     407             :             SAL_INFO("xmlscript.xmlflat", "BasicSourceCodeElement::endElement: caught WrappedTargetException reason " << e.Message );
     408             :         }
     409           0 :     }
     410             : 
     411             :     // BasicImport
     412             : 
     413           2 :     BasicImport::BasicImport( const Reference< frame::XModel >& rxModel, bool bOasis )
     414             :         : XMLNS_UID(0)
     415             :         , XMLNS_XLINK_UID(0)
     416             :         , m_xModel(rxModel)
     417           2 :         , m_bOasis(bOasis)
     418             :     {
     419           2 :     }
     420             : 
     421           4 :     BasicImport::~BasicImport()
     422             :     {
     423           4 :     }
     424             : 
     425             :     // XRoot
     426             : 
     427           2 :     void BasicImport::startDocument( const Reference< xml::input::XNamespaceMapping >& xNamespaceMapping )
     428             :         throw (xml::sax::SAXException, RuntimeException, std::exception)
     429             :     {
     430           2 :         if ( xNamespaceMapping.is() )
     431             :         {
     432           2 :             OUString aURI;
     433           2 :             if ( m_bOasis )
     434           2 :                 aURI = XMLNS_OOO_URI;
     435             :             else
     436           0 :                 aURI = XMLNS_SCRIPT_URI;
     437           2 :             XMLNS_UID = xNamespaceMapping->getUidByUri( aURI );
     438           2 :             XMLNS_XLINK_UID = xNamespaceMapping->getUidByUri( XMLNS_XLINK_URI );
     439             :         }
     440           2 :     }
     441             : 
     442           2 :     void BasicImport::endDocument()
     443             :         throw (xml::sax::SAXException, RuntimeException, std::exception)
     444             :     {
     445           2 :     }
     446             : 
     447           0 : void BasicImport::processingInstruction( const OUString& /*rTarget*/, const OUString& /*rData*/ )
     448             :         throw (xml::sax::SAXException, RuntimeException, std::exception)
     449             :     {
     450           0 :     }
     451             : 
     452           0 : void BasicImport::setDocumentLocator( const Reference< xml::sax::XLocator >& /*xLocator*/ )
     453             :         throw (xml::sax::SAXException, RuntimeException, std::exception)
     454             :     {
     455           0 :     }
     456             : 
     457           2 :     Reference< xml::input::XElement > BasicImport::startRootElement( sal_Int32 nUid, const OUString& rLocalName,
     458             :             Reference< xml::input::XAttributes > const & xAttributes )
     459             :         throw (xml::sax::SAXException, RuntimeException, std::exception)
     460             :     {
     461           2 :         Reference< xml::input::XElement > xElement;
     462             : 
     463           2 :         if ( nUid != XMLNS_UID )
     464             :         {
     465           0 :             throw xml::sax::SAXException( "illegal namespace!", Reference< XInterface >(), Any() );
     466             :         }
     467           2 :         else if ( rLocalName == "libraries" )
     468             :         {
     469           2 :             Reference< script::XLibraryContainer2 > xLibContainer;
     470             : 
     471             :             // try the XEmbeddedScripts interface
     472           4 :             Reference< document::XEmbeddedScripts > xDocumentScripts( m_xModel, UNO_QUERY );
     473           2 :             if ( xDocumentScripts.is() )
     474           2 :                 xLibContainer.set( xDocumentScripts->getBasicLibraries().get() );
     475             : 
     476           2 :             if ( !xLibContainer.is() )
     477             :             {
     478             :                 // try the "BasicLibraries" property (old-style, for compatibility)
     479           0 :                 Reference< beans::XPropertySet > xPSet( m_xModel, UNO_QUERY );
     480           0 :                 if ( xPSet.is() )
     481           0 :                     xPSet->getPropertyValue("BasicLibraries" ) >>= xLibContainer;
     482             :             }
     483             : 
     484             :             SAL_WARN_IF( !xLibContainer.is(), "xmlscript.xmlflat", "BasicImport::startRootElement: nowhere to import to!" );
     485             : 
     486           2 :             if ( xLibContainer.is() )
     487             :             {
     488           2 :                 xElement.set( new BasicLibrariesElement( rLocalName, xAttributes, 0, this, xLibContainer ) );
     489           2 :             }
     490             :         }
     491             :         else
     492             :         {
     493           0 :             throw xml::sax::SAXException("illegal root element (expected libraries) given: " + rLocalName, Reference< XInterface >(), Any() );
     494             :         }
     495             : 
     496           2 :         return xElement;
     497             :     }
     498             : 
     499             :     // component operations
     500             : 
     501           8 :     OUString getImplementationName_XMLBasicImporter()
     502             :     {
     503             :         static OUString* pImplName = 0;
     504           8 :         if ( !pImplName )
     505             :         {
     506           6 :             ::osl::MutexGuard aGuard( ::osl::Mutex::getGlobalMutex() );
     507           6 :             if ( !pImplName )
     508             :             {
     509           6 :                 static OUString aImplName( "com.sun.star.comp.xmlscript.XMLBasicImporter" );
     510           6 :                 pImplName = &aImplName;
     511           6 :             }
     512             :         }
     513           8 :         return *pImplName;
     514             :     }
     515             : 
     516           0 :     Sequence< OUString > getSupportedServiceNames_XMLBasicImporter()
     517             :     {
     518             :         static Sequence< OUString >* pNames = 0;
     519           0 :         if ( !pNames )
     520             :         {
     521           0 :             ::osl::MutexGuard aGuard( ::osl::Mutex::getGlobalMutex() );
     522           0 :             if ( !pNames )
     523             :             {
     524           0 :                 static Sequence< OUString > aNames(1);
     525           0 :                 aNames.getArray()[0] = "com.sun.star.document.XMLBasicImporter";
     526           0 :                 pNames = &aNames;
     527           0 :             }
     528             :         }
     529           0 :         return *pNames;
     530             :     }
     531             : 
     532           8 :     OUString getImplementationName_XMLOasisBasicImporter()
     533             :     {
     534             :         static OUString* pImplName = 0;
     535           8 :         if ( !pImplName )
     536             :         {
     537           6 :             ::osl::MutexGuard aGuard( ::osl::Mutex::getGlobalMutex() );
     538           6 :             if ( !pImplName )
     539             :             {
     540           6 :                 static OUString aImplName( "com.sun.star.comp.xmlscript.XMLOasisBasicImporter" );
     541           6 :                 pImplName = &aImplName;
     542           6 :             }
     543             :         }
     544           8 :         return *pImplName;
     545             :     }
     546             : 
     547           4 :     Sequence< OUString > getSupportedServiceNames_XMLOasisBasicImporter()
     548             :     {
     549             :         static Sequence< OUString >* pNames = 0;
     550           4 :         if ( !pNames )
     551             :         {
     552           4 :             ::osl::MutexGuard aGuard( ::osl::Mutex::getGlobalMutex() );
     553           4 :             if ( !pNames )
     554             :             {
     555           4 :                 static Sequence< OUString > aNames(1);
     556           4 :                 aNames.getArray()[0] = "com.sun.star.document.XMLOasisBasicImporter";
     557           4 :                 pNames = &aNames;
     558           4 :             }
     559             :         }
     560           4 :         return *pNames;
     561             :     }
     562             : 
     563             :     // XMLBasicImporterBase
     564             : 
     565           4 :     XMLBasicImporterBase::XMLBasicImporterBase( const Reference< XComponentContext >& rxContext, bool bOasis )
     566             :         :m_xContext( rxContext )
     567           4 :         ,m_bOasis( bOasis )
     568             :     {
     569           4 :     }
     570             : 
     571           4 :     XMLBasicImporterBase::~XMLBasicImporterBase()
     572             :     {
     573           4 :     }
     574             : 
     575             :     // XServiceInfo
     576           0 :     sal_Bool XMLBasicImporterBase::supportsService( const OUString& rServiceName ) throw (RuntimeException, std::exception)
     577             :     {
     578           0 :         return cppu::supportsService(this, rServiceName);
     579             :     }
     580             : 
     581             :     // XImporter
     582           2 :     void XMLBasicImporterBase::setTargetDocument( const Reference< XComponent >& rxDoc )
     583             :         throw (IllegalArgumentException, RuntimeException, std::exception)
     584             :     {
     585           2 :         ::osl::MutexGuard aGuard( m_aMutex );
     586             : 
     587           2 :         m_xModel.set( rxDoc, UNO_QUERY );
     588             : 
     589           2 :         if ( !m_xModel.is() )
     590             :         {
     591           0 :             throw IllegalArgumentException( "XMLBasicExporter::setTargetDocument: no document model!", Reference< XInterface >(), 1 );
     592             :         }
     593             : 
     594           2 :         if ( m_xContext.is() )
     595             :         {
     596           2 :             Reference< XMultiComponentFactory > xSMgr( m_xContext->getServiceManager() );
     597           2 :             if ( xSMgr.is() )
     598             :             {
     599           2 :                 Reference < xml::input::XRoot > xRoot( new BasicImport( m_xModel, m_bOasis ) );
     600           4 :                 Sequence < Any > aArgs( 1 );
     601           2 :                 aArgs[0] <<= xRoot;
     602           4 :                 m_xHandler.set( xSMgr->createInstanceWithArgumentsAndContext("com.sun.star.xml.input.SaxDocumentHandler", aArgs, m_xContext ), UNO_QUERY );
     603           2 :             }
     604           2 :         }
     605           2 :     }
     606             : 
     607             :     // XDocumentHandler
     608             : 
     609           2 :     void XMLBasicImporterBase::startDocument()
     610             :         throw (xml::sax::SAXException, RuntimeException, std::exception)
     611             :     {
     612           2 :         ::osl::MutexGuard aGuard( m_aMutex );
     613             : 
     614           2 :         if ( m_xHandler.is() )
     615           2 :             m_xHandler->startDocument();
     616           2 :     }
     617             : 
     618           2 :     void XMLBasicImporterBase::endDocument()
     619             :         throw (xml::sax::SAXException, RuntimeException, std::exception)
     620             :     {
     621           2 :         ::osl::MutexGuard aGuard( m_aMutex );
     622             : 
     623           2 :         if ( m_xHandler.is() )
     624           2 :             m_xHandler->endDocument();
     625           2 :     }
     626             : 
     627           2 :     void XMLBasicImporterBase::startElement( const OUString& aName,
     628             :             const Reference< xml::sax::XAttributeList >& xAttribs )
     629             :         throw (xml::sax::SAXException, RuntimeException, std::exception)
     630             :     {
     631           2 :         ::osl::MutexGuard aGuard( m_aMutex );
     632             : 
     633           2 :         if ( m_xHandler.is() )
     634           2 :             m_xHandler->startElement( aName, xAttribs );
     635           2 :     }
     636             : 
     637           2 :     void XMLBasicImporterBase::endElement( const OUString& aName )
     638             :         throw (xml::sax::SAXException, RuntimeException, std::exception)
     639             :     {
     640           2 :         ::osl::MutexGuard aGuard( m_aMutex );
     641             : 
     642           2 :         if ( m_xHandler.is() )
     643           2 :             m_xHandler->endElement( aName );
     644           2 :     }
     645             : 
     646           0 :     void XMLBasicImporterBase::characters( const OUString& aChars )
     647             :         throw (xml::sax::SAXException, RuntimeException, std::exception)
     648             :     {
     649           0 :         ::osl::MutexGuard aGuard( m_aMutex );
     650             : 
     651           0 :         if ( m_xHandler.is() )
     652           0 :             m_xHandler->characters( aChars );
     653           0 :     }
     654             : 
     655           0 :     void XMLBasicImporterBase::ignorableWhitespace( const OUString& aWhitespaces )
     656             :         throw (xml::sax::SAXException, RuntimeException, std::exception)
     657             :     {
     658           0 :         ::osl::MutexGuard aGuard( m_aMutex );
     659             : 
     660           0 :         if ( m_xHandler.is() )
     661           0 :             m_xHandler->ignorableWhitespace( aWhitespaces );
     662           0 :     }
     663             : 
     664           0 :     void XMLBasicImporterBase::processingInstruction( const OUString& aTarget,
     665             :             const OUString& aData )
     666             :         throw (xml::sax::SAXException, RuntimeException, std::exception)
     667             :     {
     668           0 :         ::osl::MutexGuard aGuard( m_aMutex );
     669             : 
     670           0 :         if ( m_xHandler.is() )
     671           0 :             m_xHandler->processingInstruction( aTarget, aData );
     672           0 :     }
     673             : 
     674           0 :     void XMLBasicImporterBase::setDocumentLocator( const Reference< xml::sax::XLocator >& xLocator )
     675             :         throw (xml::sax::SAXException, RuntimeException, std::exception)
     676             :     {
     677           0 :         ::osl::MutexGuard aGuard( m_aMutex );
     678             : 
     679           0 :         if ( m_xHandler.is() )
     680           0 :             m_xHandler->setDocumentLocator( xLocator );
     681           0 :     }
     682             : 
     683             :     // XMLBasicImporter
     684             : 
     685           0 :     XMLBasicImporter::XMLBasicImporter( const Reference< XComponentContext >& rxContext )
     686           0 :         :XMLBasicImporterBase( rxContext, false )
     687             :     {
     688           0 :     }
     689             : 
     690           0 :     XMLBasicImporter::~XMLBasicImporter()
     691             :     {
     692           0 :     }
     693             : 
     694             :     // XServiceInfo
     695             : 
     696           0 :     OUString XMLBasicImporter::getImplementationName(  ) throw (RuntimeException, std::exception)
     697             :     {
     698           0 :         return getImplementationName_XMLBasicImporter();
     699             :     }
     700             : 
     701           0 :     Sequence< OUString > XMLBasicImporter::getSupportedServiceNames(  ) throw (RuntimeException, std::exception)
     702             :     {
     703           0 :         return getSupportedServiceNames_XMLBasicImporter();
     704             :     }
     705             : 
     706             :     // XMLOasisBasicImporter
     707             : 
     708           4 :     XMLOasisBasicImporter::XMLOasisBasicImporter( const Reference< XComponentContext >& rxContext )
     709           4 :         :XMLBasicImporterBase( rxContext, true )
     710             :     {
     711           4 :     }
     712             : 
     713           8 :     XMLOasisBasicImporter::~XMLOasisBasicImporter()
     714             :     {
     715           8 :     }
     716             : 
     717             :     // XServiceInfo
     718             : 
     719           0 :     OUString XMLOasisBasicImporter::getImplementationName(  ) throw (RuntimeException, std::exception)
     720             :     {
     721           0 :         return getImplementationName_XMLOasisBasicImporter();
     722             :     }
     723             : 
     724           0 :     Sequence< OUString > XMLOasisBasicImporter::getSupportedServiceNames(  ) throw (RuntimeException, std::exception)
     725             :     {
     726           0 :         return getSupportedServiceNames_XMLOasisBasicImporter();
     727             :     }
     728             : 
     729             :     // component operations
     730             : 
     731           0 :     Reference< XInterface > SAL_CALL create_XMLBasicImporter(
     732             :         Reference< XComponentContext > const & xContext )
     733             :     {
     734           0 :         return static_cast< lang::XTypeProvider * >( new XMLBasicImporter( xContext ) );
     735             :     }
     736             : 
     737           4 :     Reference< XInterface > SAL_CALL create_XMLOasisBasicImporter(
     738             :         Reference< XComponentContext > const & xContext )
     739             :     {
     740           4 :         return static_cast< lang::XTypeProvider * >( new XMLOasisBasicImporter( xContext ) );
     741             :     }
     742             : 
     743             : }   // namespace xmlscript
     744             : 
     745             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10