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