1*cdf0e10cSrcweir /************************************************************************* 2*cdf0e10cSrcweir * 3*cdf0e10cSrcweir * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4*cdf0e10cSrcweir * 5*cdf0e10cSrcweir * Copyright 2000, 2010 Oracle and/or its affiliates. 6*cdf0e10cSrcweir * 7*cdf0e10cSrcweir * OpenOffice.org - a multi-platform office productivity suite 8*cdf0e10cSrcweir * 9*cdf0e10cSrcweir * This file is part of OpenOffice.org. 10*cdf0e10cSrcweir * 11*cdf0e10cSrcweir * OpenOffice.org is free software: you can redistribute it and/or modify 12*cdf0e10cSrcweir * it under the terms of the GNU Lesser General Public License version 3 13*cdf0e10cSrcweir * only, as published by the Free Software Foundation. 14*cdf0e10cSrcweir * 15*cdf0e10cSrcweir * OpenOffice.org is distributed in the hope that it will be useful, 16*cdf0e10cSrcweir * but WITHOUT ANY WARRANTY; without even the implied warranty of 17*cdf0e10cSrcweir * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18*cdf0e10cSrcweir * GNU Lesser General Public License version 3 for more details 19*cdf0e10cSrcweir * (a copy is included in the LICENSE file that accompanied this code). 20*cdf0e10cSrcweir * 21*cdf0e10cSrcweir * You should have received a copy of the GNU Lesser General Public License 22*cdf0e10cSrcweir * version 3 along with OpenOffice.org. If not, see 23*cdf0e10cSrcweir * <http://www.openoffice.org/license.html> 24*cdf0e10cSrcweir * for a copy of the LGPLv3 License. 25*cdf0e10cSrcweir * 26*cdf0e10cSrcweir ************************************************************************/ 27*cdf0e10cSrcweir 28*cdf0e10cSrcweir #ifndef _SAXEVENTKEEPERIMPL_HXX 29*cdf0e10cSrcweir #define _SAXEVENTKEEPERIMPL_HXX 30*cdf0e10cSrcweir 31*cdf0e10cSrcweir #include <com/sun/star/xml/crypto/sax/XSecuritySAXEventKeeper.hpp> 32*cdf0e10cSrcweir #include <com/sun/star/xml/crypto/sax/XReferenceResolvedBroadcaster.hpp> 33*cdf0e10cSrcweir #include <com/sun/star/xml/crypto/sax/XSAXEventKeeperStatusChangeBroadcaster.hpp> 34*cdf0e10cSrcweir #include <com/sun/star/xml/crypto/sax/XSAXEventKeeperStatusChangeListener.hpp> 35*cdf0e10cSrcweir #include <com/sun/star/xml/csax/XCompressedDocumentHandler.hpp> 36*cdf0e10cSrcweir #include <com/sun/star/xml/wrapper/XXMLDocumentWrapper.hpp> 37*cdf0e10cSrcweir #include <com/sun/star/xml/sax/XDocumentHandler.hpp> 38*cdf0e10cSrcweir #include <com/sun/star/lang/XInitialization.hpp> 39*cdf0e10cSrcweir #include <com/sun/star/lang/XServiceInfo.hpp> 40*cdf0e10cSrcweir #include <cppuhelper/implbase6.hxx> 41*cdf0e10cSrcweir 42*cdf0e10cSrcweir #include "buffernode.hxx" 43*cdf0e10cSrcweir #include "elementmark.hxx" 44*cdf0e10cSrcweir #include "elementcollector.hxx" 45*cdf0e10cSrcweir 46*cdf0e10cSrcweir #ifndef INCLUDED_VECTOR 47*cdf0e10cSrcweir #include <vector> 48*cdf0e10cSrcweir #define INCLUDED_VECTOR 49*cdf0e10cSrcweir #endif 50*cdf0e10cSrcweir 51*cdf0e10cSrcweir class SAXEventKeeperImpl : public cppu::WeakImplHelper6 52*cdf0e10cSrcweir < 53*cdf0e10cSrcweir com::sun::star::xml::crypto::sax::XSecuritySAXEventKeeper, 54*cdf0e10cSrcweir com::sun::star::xml::crypto::sax::XReferenceResolvedBroadcaster, 55*cdf0e10cSrcweir com::sun::star::xml::crypto::sax::XSAXEventKeeperStatusChangeBroadcaster, 56*cdf0e10cSrcweir com::sun::star::xml::sax::XDocumentHandler, 57*cdf0e10cSrcweir com::sun::star::lang::XInitialization, 58*cdf0e10cSrcweir com::sun::star::lang::XServiceInfo 59*cdf0e10cSrcweir > 60*cdf0e10cSrcweir /****** SAXEventKeeperImpl.hxx/CLASS SAXEventKeeperImpl *********************** 61*cdf0e10cSrcweir * 62*cdf0e10cSrcweir * NAME 63*cdf0e10cSrcweir * SAXEventKeeperImpl -- SAX events buffer controller 64*cdf0e10cSrcweir * 65*cdf0e10cSrcweir * FUNCTION 66*cdf0e10cSrcweir * Controls SAX events to be bufferred, and controls bufferred SAX events 67*cdf0e10cSrcweir * to be released. 68*cdf0e10cSrcweir * 69*cdf0e10cSrcweir * HISTORY 70*cdf0e10cSrcweir * 05.01.2004 - Interface supported: XSecuritySAXEventKeeper, 71*cdf0e10cSrcweir * XReferenceResolvedBroadcaster, 72*cdf0e10cSrcweir * XSAXEventKeeperStatusChangeBroadcaster, 73*cdf0e10cSrcweir * XDocumentHandler, XInitialization, XServiceInfo 74*cdf0e10cSrcweir * 75*cdf0e10cSrcweir * AUTHOR 76*cdf0e10cSrcweir * Michael Mi 77*cdf0e10cSrcweir * Email: michael.mi@sun.com 78*cdf0e10cSrcweir ******************************************************************************/ 79*cdf0e10cSrcweir { 80*cdf0e10cSrcweir private: 81*cdf0e10cSrcweir /* 82*cdf0e10cSrcweir * the XMLDocumentWrapper component which maintains all bufferred SAX 83*cdf0e10cSrcweir * in DOM format. 84*cdf0e10cSrcweir */ 85*cdf0e10cSrcweir com::sun::star::uno::Reference< 86*cdf0e10cSrcweir com::sun::star::xml::wrapper::XXMLDocumentWrapper > 87*cdf0e10cSrcweir m_xXMLDocument; 88*cdf0e10cSrcweir 89*cdf0e10cSrcweir /* 90*cdf0e10cSrcweir * the document handler provided by the XMLDocumentWrapper component. 91*cdf0e10cSrcweir */ 92*cdf0e10cSrcweir com::sun::star::uno::Reference< 93*cdf0e10cSrcweir com::sun::star::xml::sax::XDocumentHandler > m_xDocumentHandler; 94*cdf0e10cSrcweir 95*cdf0e10cSrcweir /* 96*cdf0e10cSrcweir * the compressed document handler provided by the XMLDocumentWrapper 97*cdf0e10cSrcweir * component, the handler has more effient method definition that the 98*cdf0e10cSrcweir * normal document handler. 99*cdf0e10cSrcweir */ 100*cdf0e10cSrcweir com::sun::star::uno::Reference< 101*cdf0e10cSrcweir com::sun::star::xml::csax::XCompressedDocumentHandler > 102*cdf0e10cSrcweir m_xCompressedDocumentHandler; 103*cdf0e10cSrcweir 104*cdf0e10cSrcweir /* 105*cdf0e10cSrcweir * a listener which receives this SAXEventKeeper's status change 106*cdf0e10cSrcweir * notification. 107*cdf0e10cSrcweir * Based on the status changes, the listener can decide whether the 108*cdf0e10cSrcweir * SAXEventKeeper should chain on/chain off the SAX chain, or whether 109*cdf0e10cSrcweir * the SAXEventKeeper is useless any long. 110*cdf0e10cSrcweir */ 111*cdf0e10cSrcweir com::sun::star::uno::Reference< 112*cdf0e10cSrcweir com::sun::star::xml::crypto::sax::XSAXEventKeeperStatusChangeListener > 113*cdf0e10cSrcweir m_xSAXEventKeeperStatusChangeListener; 114*cdf0e10cSrcweir 115*cdf0e10cSrcweir /* 116*cdf0e10cSrcweir * the root node of the BufferNode tree. 117*cdf0e10cSrcweir * the BufferNode tree is used to keep track of all bufferred elements, 118*cdf0e10cSrcweir * it has the same structure with the document which maintains those 119*cdf0e10cSrcweir * elements physically. 120*cdf0e10cSrcweir */ 121*cdf0e10cSrcweir BufferNode* m_pRootBufferNode; 122*cdf0e10cSrcweir 123*cdf0e10cSrcweir /* 124*cdf0e10cSrcweir * the current active BufferNode. 125*cdf0e10cSrcweir * this is used to keep track the current location in the BufferNode tree, 126*cdf0e10cSrcweir * the next generated BufferNode will become a child BufferNode of it. 127*cdf0e10cSrcweir */ 128*cdf0e10cSrcweir BufferNode* m_pCurrentBufferNode; 129*cdf0e10cSrcweir 130*cdf0e10cSrcweir /* 131*cdf0e10cSrcweir * the next Id for a coming ElementMark. 132*cdf0e10cSrcweir * the variable is increased by 1 when an new ElementMark is generated, 133*cdf0e10cSrcweir * in this way, we can promise the Id of any ElementMark is unique. 134*cdf0e10cSrcweir */ 135*cdf0e10cSrcweir sal_Int32 m_nNextElementMarkId; 136*cdf0e10cSrcweir 137*cdf0e10cSrcweir /* 138*cdf0e10cSrcweir * maintains a collection of all ElementMarks. 139*cdf0e10cSrcweir */ 140*cdf0e10cSrcweir std::vector< const ElementMark* > m_vElementMarkBuffers; 141*cdf0e10cSrcweir 142*cdf0e10cSrcweir /* 143*cdf0e10cSrcweir * maintains a list of new ElementCollectors that will be created 144*cdf0e10cSrcweir * on the element represented by the next incoming startElement SAX 145*cdf0e10cSrcweir * event. 146*cdf0e10cSrcweir * The reason that such the m_vNewElementCollectors is necessary 147*cdf0e10cSrcweir * is: when an ElementCollector is asked to create, it can't be 148*cdf0e10cSrcweir * created completely at once, because the BufferNode it will be 149*cdf0e10cSrcweir * working on has not been created until the next startElement 150*cdf0e10cSrcweir * SAX event comes. 151*cdf0e10cSrcweir */ 152*cdf0e10cSrcweir std::vector< const ElementCollector* > m_vNewElementCollectors; 153*cdf0e10cSrcweir 154*cdf0e10cSrcweir /* 155*cdf0e10cSrcweir * maintains the new Blocker that will be created 156*cdf0e10cSrcweir * on the element represented by the next incoming startElement SAX 157*cdf0e10cSrcweir * event. 158*cdf0e10cSrcweir */ 159*cdf0e10cSrcweir ElementMark* m_pNewBlocker; 160*cdf0e10cSrcweir 161*cdf0e10cSrcweir /* 162*cdf0e10cSrcweir * the document handler to which all received SAX events will be 163*cdf0e10cSrcweir * forwarded. 164*cdf0e10cSrcweir */ 165*cdf0e10cSrcweir com::sun::star::uno::Reference< 166*cdf0e10cSrcweir com::sun::star::xml::sax::XDocumentHandler > m_xNextHandler; 167*cdf0e10cSrcweir 168*cdf0e10cSrcweir /* 169*cdf0e10cSrcweir * the current BufferNode which prevents the SAX events to be 170*cdf0e10cSrcweir * forwarded to the m_xNextHandler. 171*cdf0e10cSrcweir */ 172*cdf0e10cSrcweir BufferNode* m_pCurrentBlockingBufferNode; 173*cdf0e10cSrcweir 174*cdf0e10cSrcweir /* 175*cdf0e10cSrcweir * maintains a list of ElementMark that has been asked to release. 176*cdf0e10cSrcweir * Because during processing a request of releasing an ElementMark, 177*cdf0e10cSrcweir * another releasing ElementMark request can be invoked. To avoid 178*cdf0e10cSrcweir * reentering the same method, a such request only add that ElementMark 179*cdf0e10cSrcweir * into this ElementMark list, then all ElementMarks will be processed in 180*cdf0e10cSrcweir * order. 181*cdf0e10cSrcweir */ 182*cdf0e10cSrcweir std::vector< sal_Int32 > m_vReleasedElementMarkBuffers; 183*cdf0e10cSrcweir 184*cdf0e10cSrcweir /* 185*cdf0e10cSrcweir * a flag to indicate whether the ElementMark releasing process is runing. 186*cdf0e10cSrcweir * When a releasing request comes, the assigned ElementMark is added to 187*cdf0e10cSrcweir * the m_vReleasedElementMarkBuffers first, then this flag is checked. 188*cdf0e10cSrcweir * If the ElementMark releasing process is not running, then call that 189*cdf0e10cSrcweir * method. 190*cdf0e10cSrcweir */ 191*cdf0e10cSrcweir bool m_bIsReleasing; 192*cdf0e10cSrcweir 193*cdf0e10cSrcweir /* 194*cdf0e10cSrcweir * a flag to indicate whether it is the "Forwarding" mode now. 195*cdf0e10cSrcweir * A "Forwarding" mode means that all received SAX events are from the 196*cdf0e10cSrcweir * XMLDocumentWrapper component, instead of up-stream component in the 197*cdf0e10cSrcweir * SAX chain. 198*cdf0e10cSrcweir * The difference between "Forwarding" mode and normal mode is that: 199*cdf0e10cSrcweir * no SAX events need to be transferred to the XMLDocumentWrapper component 200*cdf0e10cSrcweir * again even if a buffer request happens. 201*cdf0e10cSrcweir */ 202*cdf0e10cSrcweir bool m_bIsForwarding; 203*cdf0e10cSrcweir 204*cdf0e10cSrcweir void setCurrentBufferNode(BufferNode* pBufferNode); 205*cdf0e10cSrcweir 206*cdf0e10cSrcweir BufferNode* addNewElementMarkBuffers(); 207*cdf0e10cSrcweir 208*cdf0e10cSrcweir ElementMark* findElementMarkBuffer(sal_Int32 nId) const; 209*cdf0e10cSrcweir 210*cdf0e10cSrcweir void removeElementMarkBuffer(sal_Int32 nId); 211*cdf0e10cSrcweir 212*cdf0e10cSrcweir rtl::OUString printBufferNode( 213*cdf0e10cSrcweir BufferNode* pBufferNode, sal_Int32 nIndent) const; 214*cdf0e10cSrcweir 215*cdf0e10cSrcweir com::sun::star::uno::Sequence< com::sun::star::uno::Reference< 216*cdf0e10cSrcweir com::sun::star::xml::wrapper::XXMLElementWrapper > > 217*cdf0e10cSrcweir collectChildWorkingElement(BufferNode* pBufferNode) const; 218*cdf0e10cSrcweir 219*cdf0e10cSrcweir void smashBufferNode( 220*cdf0e10cSrcweir BufferNode* pBufferNode, bool bClearRoot) const; 221*cdf0e10cSrcweir 222*cdf0e10cSrcweir BufferNode* findNextBlockingBufferNode( 223*cdf0e10cSrcweir BufferNode* pStartBufferNode) const; 224*cdf0e10cSrcweir 225*cdf0e10cSrcweir void diffuse(BufferNode* pBufferNode) const; 226*cdf0e10cSrcweir 227*cdf0e10cSrcweir void releaseElementMarkBuffer(); 228*cdf0e10cSrcweir 229*cdf0e10cSrcweir void markElementMarkBuffer(sal_Int32 nId); 230*cdf0e10cSrcweir 231*cdf0e10cSrcweir sal_Int32 createElementCollector( 232*cdf0e10cSrcweir sal_Int32 nSecurityId, 233*cdf0e10cSrcweir com::sun::star::xml::crypto::sax::ElementMarkPriority nPriority, 234*cdf0e10cSrcweir bool bModifyElement, 235*cdf0e10cSrcweir const com::sun::star::uno::Reference< 236*cdf0e10cSrcweir com::sun::star::xml::crypto::sax::XReferenceResolvedListener>& 237*cdf0e10cSrcweir xReferenceResolvedListener); 238*cdf0e10cSrcweir 239*cdf0e10cSrcweir sal_Int32 createBlocker(sal_Int32 nSecurityId); 240*cdf0e10cSrcweir 241*cdf0e10cSrcweir public: 242*cdf0e10cSrcweir SAXEventKeeperImpl(); 243*cdf0e10cSrcweir virtual ~SAXEventKeeperImpl(); 244*cdf0e10cSrcweir 245*cdf0e10cSrcweir /* XSAXEventKeeper */ 246*cdf0e10cSrcweir virtual sal_Int32 SAL_CALL addElementCollector( ) 247*cdf0e10cSrcweir throw (com::sun::star::uno::RuntimeException); 248*cdf0e10cSrcweir virtual void SAL_CALL removeElementCollector( sal_Int32 id ) 249*cdf0e10cSrcweir throw (com::sun::star::uno::RuntimeException); 250*cdf0e10cSrcweir virtual sal_Int32 SAL_CALL addBlocker( ) 251*cdf0e10cSrcweir throw (com::sun::star::uno::RuntimeException); 252*cdf0e10cSrcweir virtual void SAL_CALL removeBlocker( sal_Int32 id ) 253*cdf0e10cSrcweir throw (com::sun::star::uno::RuntimeException); 254*cdf0e10cSrcweir virtual sal_Bool SAL_CALL isBlocking( ) 255*cdf0e10cSrcweir throw (com::sun::star::uno::RuntimeException); 256*cdf0e10cSrcweir virtual com::sun::star::uno::Reference< 257*cdf0e10cSrcweir com::sun::star::xml::wrapper::XXMLElementWrapper > SAL_CALL 258*cdf0e10cSrcweir getElement( sal_Int32 id ) 259*cdf0e10cSrcweir throw (com::sun::star::uno::RuntimeException); 260*cdf0e10cSrcweir virtual void SAL_CALL setElement( 261*cdf0e10cSrcweir sal_Int32 id, 262*cdf0e10cSrcweir const com::sun::star::uno::Reference< 263*cdf0e10cSrcweir com::sun::star::xml::wrapper::XXMLElementWrapper >& 264*cdf0e10cSrcweir aElement ) 265*cdf0e10cSrcweir throw (com::sun::star::uno::RuntimeException); 266*cdf0e10cSrcweir virtual com::sun::star::uno::Reference< 267*cdf0e10cSrcweir com::sun::star::xml::sax::XDocumentHandler > SAL_CALL 268*cdf0e10cSrcweir setNextHandler( const com::sun::star::uno::Reference< 269*cdf0e10cSrcweir com::sun::star::xml::sax::XDocumentHandler >& xNewHandler ) 270*cdf0e10cSrcweir throw (com::sun::star::uno::RuntimeException); 271*cdf0e10cSrcweir virtual rtl::OUString SAL_CALL printBufferNodeTree() 272*cdf0e10cSrcweir throw (com::sun::star::uno::RuntimeException); 273*cdf0e10cSrcweir virtual com::sun::star::uno::Reference< 274*cdf0e10cSrcweir com::sun::star::xml::wrapper::XXMLElementWrapper > SAL_CALL 275*cdf0e10cSrcweir getCurrentBlockingNode() 276*cdf0e10cSrcweir throw (com::sun::star::uno::RuntimeException); 277*cdf0e10cSrcweir 278*cdf0e10cSrcweir /* XSecuritySAXEventKeeper */ 279*cdf0e10cSrcweir virtual sal_Int32 SAL_CALL addSecurityElementCollector( 280*cdf0e10cSrcweir com::sun::star::xml::crypto::sax::ElementMarkPriority priority, 281*cdf0e10cSrcweir sal_Bool modifyElement ) 282*cdf0e10cSrcweir throw (com::sun::star::uno::RuntimeException); 283*cdf0e10cSrcweir virtual sal_Int32 SAL_CALL cloneElementCollector( 284*cdf0e10cSrcweir sal_Int32 referenceId, 285*cdf0e10cSrcweir com::sun::star::xml::crypto::sax::ElementMarkPriority priority ) 286*cdf0e10cSrcweir throw (com::sun::star::uno::RuntimeException); 287*cdf0e10cSrcweir virtual void SAL_CALL setSecurityId( sal_Int32 id, sal_Int32 securityId ) 288*cdf0e10cSrcweir throw (com::sun::star::uno::RuntimeException); 289*cdf0e10cSrcweir 290*cdf0e10cSrcweir /* XReferenceResolvedBroadcaster */ 291*cdf0e10cSrcweir virtual void SAL_CALL addReferenceResolvedListener( 292*cdf0e10cSrcweir sal_Int32 referenceId, 293*cdf0e10cSrcweir const com::sun::star::uno::Reference< 294*cdf0e10cSrcweir com::sun::star::xml::crypto::sax::XReferenceResolvedListener >& 295*cdf0e10cSrcweir listener ) 296*cdf0e10cSrcweir throw (com::sun::star::uno::RuntimeException); 297*cdf0e10cSrcweir virtual void SAL_CALL removeReferenceResolvedListener( 298*cdf0e10cSrcweir sal_Int32 referenceId, 299*cdf0e10cSrcweir const com::sun::star::uno::Reference< 300*cdf0e10cSrcweir com::sun::star::xml::crypto::sax::XReferenceResolvedListener >& 301*cdf0e10cSrcweir listener ) 302*cdf0e10cSrcweir throw (com::sun::star::uno::RuntimeException); 303*cdf0e10cSrcweir 304*cdf0e10cSrcweir /* XSAXEventKeeperStatusChangeBroadcaster */ 305*cdf0e10cSrcweir virtual void SAL_CALL addSAXEventKeeperStatusChangeListener( 306*cdf0e10cSrcweir const com::sun::star::uno::Reference< 307*cdf0e10cSrcweir com::sun::star::xml::crypto::sax::XSAXEventKeeperStatusChangeListener >& 308*cdf0e10cSrcweir listener ) 309*cdf0e10cSrcweir throw (com::sun::star::uno::RuntimeException); 310*cdf0e10cSrcweir virtual void SAL_CALL removeSAXEventKeeperStatusChangeListener( 311*cdf0e10cSrcweir const com::sun::star::uno::Reference< 312*cdf0e10cSrcweir com::sun::star::xml::crypto::sax::XSAXEventKeeperStatusChangeListener >& 313*cdf0e10cSrcweir listener ) 314*cdf0e10cSrcweir throw (com::sun::star::uno::RuntimeException); 315*cdf0e10cSrcweir 316*cdf0e10cSrcweir /* XDocumentHandler */ 317*cdf0e10cSrcweir virtual void SAL_CALL startDocument( ) 318*cdf0e10cSrcweir throw (com::sun::star::xml::sax::SAXException, com::sun::star::uno::RuntimeException); 319*cdf0e10cSrcweir virtual void SAL_CALL endDocument( ) 320*cdf0e10cSrcweir throw (com::sun::star::xml::sax::SAXException, com::sun::star::uno::RuntimeException); 321*cdf0e10cSrcweir virtual void SAL_CALL startElement( 322*cdf0e10cSrcweir const rtl::OUString& aName, 323*cdf0e10cSrcweir const com::sun::star::uno::Reference< com::sun::star::xml::sax::XAttributeList >& 324*cdf0e10cSrcweir xAttribs ) 325*cdf0e10cSrcweir throw (com::sun::star::xml::sax::SAXException, com::sun::star::uno::RuntimeException); 326*cdf0e10cSrcweir virtual void SAL_CALL endElement( const rtl::OUString& aName ) 327*cdf0e10cSrcweir throw (com::sun::star::xml::sax::SAXException, com::sun::star::uno::RuntimeException); 328*cdf0e10cSrcweir virtual void SAL_CALL characters( const rtl::OUString& aChars ) 329*cdf0e10cSrcweir throw (com::sun::star::xml::sax::SAXException, com::sun::star::uno::RuntimeException); 330*cdf0e10cSrcweir virtual void SAL_CALL ignorableWhitespace( const rtl::OUString& aWhitespaces ) 331*cdf0e10cSrcweir throw (com::sun::star::xml::sax::SAXException, com::sun::star::uno::RuntimeException); 332*cdf0e10cSrcweir virtual void SAL_CALL processingInstruction( 333*cdf0e10cSrcweir const rtl::OUString& aTarget, const rtl::OUString& aData ) 334*cdf0e10cSrcweir throw (com::sun::star::xml::sax::SAXException, com::sun::star::uno::RuntimeException); 335*cdf0e10cSrcweir virtual void SAL_CALL setDocumentLocator( 336*cdf0e10cSrcweir const com::sun::star::uno::Reference< com::sun::star::xml::sax::XLocator >& xLocator ) 337*cdf0e10cSrcweir throw (com::sun::star::xml::sax::SAXException, com::sun::star::uno::RuntimeException); 338*cdf0e10cSrcweir 339*cdf0e10cSrcweir /* XInitialization */ 340*cdf0e10cSrcweir virtual void SAL_CALL initialize( 341*cdf0e10cSrcweir const com::sun::star::uno::Sequence< com::sun::star::uno::Any >& aArguments ) 342*cdf0e10cSrcweir throw (com::sun::star::uno::Exception, com::sun::star::uno::RuntimeException); 343*cdf0e10cSrcweir 344*cdf0e10cSrcweir /* XServiceInfo */ 345*cdf0e10cSrcweir virtual rtl::OUString SAL_CALL getImplementationName( ) 346*cdf0e10cSrcweir throw (com::sun::star::uno::RuntimeException); 347*cdf0e10cSrcweir virtual sal_Bool SAL_CALL supportsService( const rtl::OUString& ServiceName ) 348*cdf0e10cSrcweir throw (com::sun::star::uno::RuntimeException); 349*cdf0e10cSrcweir virtual com::sun::star::uno::Sequence< rtl::OUString > SAL_CALL getSupportedServiceNames( ) 350*cdf0e10cSrcweir throw (com::sun::star::uno::RuntimeException); 351*cdf0e10cSrcweir }; 352*cdf0e10cSrcweir 353*cdf0e10cSrcweir rtl::OUString SAXEventKeeperImpl_getImplementationName() 354*cdf0e10cSrcweir throw ( com::sun::star::uno::RuntimeException ); 355*cdf0e10cSrcweir 356*cdf0e10cSrcweir sal_Bool SAL_CALL SAXEventKeeperImpl_supportsService( const rtl::OUString& ServiceName ) 357*cdf0e10cSrcweir throw ( com::sun::star::uno::RuntimeException ); 358*cdf0e10cSrcweir 359*cdf0e10cSrcweir com::sun::star::uno::Sequence< rtl::OUString > SAL_CALL SAXEventKeeperImpl_getSupportedServiceNames( ) 360*cdf0e10cSrcweir throw ( com::sun::star::uno::RuntimeException ); 361*cdf0e10cSrcweir 362*cdf0e10cSrcweir com::sun::star::uno::Reference< com::sun::star::uno::XInterface > 363*cdf0e10cSrcweir SAL_CALL SAXEventKeeperImpl_createInstance( const com::sun::star::uno::Reference< com::sun::star::lang::XMultiServiceFactory > & rSMgr) 364*cdf0e10cSrcweir throw ( com::sun::star::uno::Exception ); 365*cdf0e10cSrcweir 366*cdf0e10cSrcweir #endif 367*cdf0e10cSrcweir 368*cdf0e10cSrcweir 369*cdf0e10cSrcweir 370