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 // MARKER(update_precomp.py): autogen include statement, do not remove 29*cdf0e10cSrcweir #include "precompiled_xmlsecurity.hxx" 30*cdf0e10cSrcweir 31*cdf0e10cSrcweir #include "xmldocumentwrapper_xmlsecimpl.hxx" 32*cdf0e10cSrcweir #include <com/sun/star/lang/XMultiServiceFactory.hpp> 33*cdf0e10cSrcweir 34*cdf0e10cSrcweir #include <xmloff/attrlist.hxx> 35*cdf0e10cSrcweir #include "xmlelementwrapper_xmlsecimpl.hxx" 36*cdf0e10cSrcweir 37*cdf0e10cSrcweir //#include <malloc.h> 38*cdf0e10cSrcweir #include <stdio.h> 39*cdf0e10cSrcweir #include <stdlib.h> 40*cdf0e10cSrcweir #include <string.h> 41*cdf0e10cSrcweir 42*cdf0e10cSrcweir /* 43*cdf0e10cSrcweir * Deleted by AF 44*cdf0e10cSrcweir #include <memory.h> 45*cdf0e10cSrcweir */ 46*cdf0e10cSrcweir 47*cdf0e10cSrcweir #include <sys/types.h> 48*cdf0e10cSrcweir #include <sys/stat.h> 49*cdf0e10cSrcweir 50*cdf0e10cSrcweir #ifndef INCLUDED_VECTOR 51*cdf0e10cSrcweir #include <vector> 52*cdf0e10cSrcweir #define INCLUDED_VECTOR 53*cdf0e10cSrcweir #endif 54*cdf0e10cSrcweir 55*cdf0e10cSrcweir #ifdef UNX 56*cdf0e10cSrcweir #define stricmp strcasecmp 57*cdf0e10cSrcweir #endif 58*cdf0e10cSrcweir 59*cdf0e10cSrcweir namespace cssu = com::sun::star::uno; 60*cdf0e10cSrcweir namespace cssl = com::sun::star::lang; 61*cdf0e10cSrcweir namespace cssxc = com::sun::star::xml::crypto; 62*cdf0e10cSrcweir namespace cssxcsax = com::sun::star::xml::csax; 63*cdf0e10cSrcweir namespace cssxs = com::sun::star::xml::sax; 64*cdf0e10cSrcweir namespace cssxw = com::sun::star::xml::wrapper; 65*cdf0e10cSrcweir 66*cdf0e10cSrcweir #define SERVICE_NAME "com.sun.star.xml.wrapper.XMLDocumentWrapper" 67*cdf0e10cSrcweir #define IMPLEMENTATION_NAME "com.sun.star.xml.security.bridge.xmlsec.XMLDocumentWrapper_XmlSecImpl" 68*cdf0e10cSrcweir 69*cdf0e10cSrcweir #define STRXMLNS "xmlns" 70*cdf0e10cSrcweir 71*cdf0e10cSrcweir #define RTL_ASCII_USTRINGPARAM( asciiStr ) asciiStr, strlen( asciiStr ), RTL_TEXTENCODING_ASCII_US 72*cdf0e10cSrcweir #define RTL_UTF8_USTRINGPARAM( asciiStr ) asciiStr, strlen( asciiStr ), RTL_TEXTENCODING_UTF8 73*cdf0e10cSrcweir 74*cdf0e10cSrcweir /* used by the recursiveDelete method */ 75*cdf0e10cSrcweir #define NODE_REMOVED 0 76*cdf0e10cSrcweir #define NODE_NOTREMOVED 1 77*cdf0e10cSrcweir #define NODE_STOPED 2 78*cdf0e10cSrcweir 79*cdf0e10cSrcweir XMLDocumentWrapper_XmlSecImpl::XMLDocumentWrapper_XmlSecImpl( ) 80*cdf0e10cSrcweir { 81*cdf0e10cSrcweir saxHelper.startDocument(); 82*cdf0e10cSrcweir m_pDocument = saxHelper.getDocument(); 83*cdf0e10cSrcweir 84*cdf0e10cSrcweir /* 85*cdf0e10cSrcweir * creates the virtual root element 86*cdf0e10cSrcweir */ 87*cdf0e10cSrcweir saxHelper.startElement(rtl::OUString(RTL_UTF8_USTRINGPARAM( "root" )), cssu::Sequence<cssxcsax::XMLAttribute>()); 88*cdf0e10cSrcweir 89*cdf0e10cSrcweir m_pRootElement = saxHelper.getCurrentNode(); 90*cdf0e10cSrcweir m_pCurrentElement = m_pRootElement; 91*cdf0e10cSrcweir } 92*cdf0e10cSrcweir 93*cdf0e10cSrcweir XMLDocumentWrapper_XmlSecImpl::~XMLDocumentWrapper_XmlSecImpl() 94*cdf0e10cSrcweir { 95*cdf0e10cSrcweir saxHelper.endDocument(); 96*cdf0e10cSrcweir xmlFreeDoc(m_pDocument); 97*cdf0e10cSrcweir } 98*cdf0e10cSrcweir 99*cdf0e10cSrcweir void XMLDocumentWrapper_XmlSecImpl::getNextSAXEvent() 100*cdf0e10cSrcweir /****** XMLDocumentWrapper_XmlSecImpl/getNextSAXEvent ************************* 101*cdf0e10cSrcweir * 102*cdf0e10cSrcweir * NAME 103*cdf0e10cSrcweir * getNextSAXEvent -- Prepares the next SAX event to be manipulate 104*cdf0e10cSrcweir * 105*cdf0e10cSrcweir * SYNOPSIS 106*cdf0e10cSrcweir * getNextSAXEvent(); 107*cdf0e10cSrcweir * 108*cdf0e10cSrcweir * FUNCTION 109*cdf0e10cSrcweir * When converting the document into SAX events, this method is used to 110*cdf0e10cSrcweir * decide the next SAX event to be generated. 111*cdf0e10cSrcweir * Two member variables are checked to make the decision, the 112*cdf0e10cSrcweir * m_pCurrentElement and the m_nCurrentPosition. 113*cdf0e10cSrcweir * The m_pCurrentElement represents the node which have been covered, and 114*cdf0e10cSrcweir * the m_nCurrentPosition represents the event which have been sent. 115*cdf0e10cSrcweir * For example, suppose that the m_pCurrentElement 116*cdf0e10cSrcweir * points to element A, and the m_nCurrentPosition equals to 117*cdf0e10cSrcweir * NODEPOSITION_STARTELEMENT, then the next SAX event should be the 118*cdf0e10cSrcweir * endElement for element A if A has no child, or startElement for the 119*cdf0e10cSrcweir * first child element of element A otherwise. 120*cdf0e10cSrcweir * The m_nCurrentPosition can be one of following values: 121*cdf0e10cSrcweir * NODEPOSITION_STARTELEMENT for startElement; 122*cdf0e10cSrcweir * NODEPOSITION_ENDELEMENT for endElement; 123*cdf0e10cSrcweir * NODEPOSITION_NORMAL for other SAX events; 124*cdf0e10cSrcweir * 125*cdf0e10cSrcweir * INPUTS 126*cdf0e10cSrcweir * empty 127*cdf0e10cSrcweir * 128*cdf0e10cSrcweir * RESULT 129*cdf0e10cSrcweir * empty 130*cdf0e10cSrcweir * 131*cdf0e10cSrcweir * HISTORY 132*cdf0e10cSrcweir * 05.01.2004 - implemented 133*cdf0e10cSrcweir * 134*cdf0e10cSrcweir * AUTHOR 135*cdf0e10cSrcweir * Michael Mi 136*cdf0e10cSrcweir * Email: michael.mi@sun.com 137*cdf0e10cSrcweir ******************************************************************************/ 138*cdf0e10cSrcweir { 139*cdf0e10cSrcweir OSL_ASSERT( m_pCurrentElement != NULL ); 140*cdf0e10cSrcweir 141*cdf0e10cSrcweir /* 142*cdf0e10cSrcweir * Get the next event through tree order. 143*cdf0e10cSrcweir * 144*cdf0e10cSrcweir * if the current event is a startElement, then the next 145*cdf0e10cSrcweir * event depends on whether or not the current node has 146*cdf0e10cSrcweir * children. 147*cdf0e10cSrcweir */ 148*cdf0e10cSrcweir if (m_nCurrentPosition == NODEPOSITION_STARTELEMENT) 149*cdf0e10cSrcweir { 150*cdf0e10cSrcweir /* 151*cdf0e10cSrcweir * If the current node has children, then its first child 152*cdf0e10cSrcweir * should be next current node, and the next event will be 153*cdf0e10cSrcweir * startElement or charaters(PI) based on that child's node 154*cdf0e10cSrcweir * type. Otherwise, the endElement of current node is the 155*cdf0e10cSrcweir * next event. 156*cdf0e10cSrcweir */ 157*cdf0e10cSrcweir if (m_pCurrentElement->children != NULL) 158*cdf0e10cSrcweir { 159*cdf0e10cSrcweir m_pCurrentElement = m_pCurrentElement->children; 160*cdf0e10cSrcweir m_nCurrentPosition 161*cdf0e10cSrcweir = (m_pCurrentElement->type == XML_ELEMENT_NODE)? 162*cdf0e10cSrcweir NODEPOSITION_STARTELEMENT:NODEPOSITION_NORMAL; 163*cdf0e10cSrcweir } 164*cdf0e10cSrcweir else 165*cdf0e10cSrcweir { 166*cdf0e10cSrcweir m_nCurrentPosition = NODEPOSITION_ENDELEMENT; 167*cdf0e10cSrcweir } 168*cdf0e10cSrcweir } 169*cdf0e10cSrcweir /* 170*cdf0e10cSrcweir * if the current event is a not startElement, then the next 171*cdf0e10cSrcweir * event depends on whether or not the current node has 172*cdf0e10cSrcweir * following sibling. 173*cdf0e10cSrcweir */ 174*cdf0e10cSrcweir else if (m_nCurrentPosition == NODEPOSITION_ENDELEMENT || m_nCurrentPosition == NODEPOSITION_NORMAL) 175*cdf0e10cSrcweir { 176*cdf0e10cSrcweir xmlNodePtr pNextSibling = m_pCurrentElement->next; 177*cdf0e10cSrcweir 178*cdf0e10cSrcweir /* 179*cdf0e10cSrcweir * If the current node has following sibling, that sibling 180*cdf0e10cSrcweir * should be next current node, and the next event will be 181*cdf0e10cSrcweir * startElement or charaters(PI) based on that sibling's node 182*cdf0e10cSrcweir * type. Otherwise, the endElement of current node's parent 183*cdf0e10cSrcweir * becomes the next event. 184*cdf0e10cSrcweir */ 185*cdf0e10cSrcweir if (pNextSibling != NULL) 186*cdf0e10cSrcweir { 187*cdf0e10cSrcweir m_pCurrentElement = pNextSibling; 188*cdf0e10cSrcweir m_nCurrentPosition 189*cdf0e10cSrcweir = (m_pCurrentElement->type == XML_ELEMENT_NODE)? 190*cdf0e10cSrcweir NODEPOSITION_STARTELEMENT:NODEPOSITION_NORMAL; 191*cdf0e10cSrcweir } 192*cdf0e10cSrcweir else 193*cdf0e10cSrcweir { 194*cdf0e10cSrcweir m_pCurrentElement = m_pCurrentElement->parent; 195*cdf0e10cSrcweir m_nCurrentPosition = NODEPOSITION_ENDELEMENT; 196*cdf0e10cSrcweir } 197*cdf0e10cSrcweir } 198*cdf0e10cSrcweir } 199*cdf0e10cSrcweir 200*cdf0e10cSrcweir void XMLDocumentWrapper_XmlSecImpl::sendStartElement( 201*cdf0e10cSrcweir const cssu::Reference< cssxs::XDocumentHandler >& xHandler, 202*cdf0e10cSrcweir const cssu::Reference< cssxs::XDocumentHandler >& xHandler2, 203*cdf0e10cSrcweir const xmlNodePtr pNode) const 204*cdf0e10cSrcweir throw (cssxs::SAXException) 205*cdf0e10cSrcweir /****** XMLDocumentWrapper_XmlSecImpl/sendStartElement ************************ 206*cdf0e10cSrcweir * 207*cdf0e10cSrcweir * NAME 208*cdf0e10cSrcweir * sendStartElement -- Constructs a startElement SAX event 209*cdf0e10cSrcweir * 210*cdf0e10cSrcweir * SYNOPSIS 211*cdf0e10cSrcweir * sendStartElement(xHandler, xHandler2, pNode); 212*cdf0e10cSrcweir * 213*cdf0e10cSrcweir * FUNCTION 214*cdf0e10cSrcweir * Used when converting the document into SAX event stream. 215*cdf0e10cSrcweir * This method constructs a startElement SAX event for a particular 216*cdf0e10cSrcweir * element, then calls the startElement methods of the XDocumentHandlers. 217*cdf0e10cSrcweir * 218*cdf0e10cSrcweir * INPUTS 219*cdf0e10cSrcweir * xHandler - the first XDocumentHandler interface to receive the 220*cdf0e10cSrcweir * startElement SAX event. It can be NULL. 221*cdf0e10cSrcweir * xHandler2 - the second XDocumentHandler interface to receive the 222*cdf0e10cSrcweir * startElement SAX event. It can't be NULL. 223*cdf0e10cSrcweir * pNode - the node on which the startElement should be generated. 224*cdf0e10cSrcweir * This node must be a element type. 225*cdf0e10cSrcweir * 226*cdf0e10cSrcweir * RESULT 227*cdf0e10cSrcweir * empty 228*cdf0e10cSrcweir * 229*cdf0e10cSrcweir * HISTORY 230*cdf0e10cSrcweir * 05.01.2004 - implemented 231*cdf0e10cSrcweir * 232*cdf0e10cSrcweir * AUTHOR 233*cdf0e10cSrcweir * Michael Mi 234*cdf0e10cSrcweir * Email: michael.mi@sun.com 235*cdf0e10cSrcweir ******************************************************************************/ 236*cdf0e10cSrcweir { 237*cdf0e10cSrcweir SvXMLAttributeList* pAttributeList = new SvXMLAttributeList(); 238*cdf0e10cSrcweir cssu::Reference < cssxs::XAttributeList > xAttrList = cssu::Reference< cssxs::XAttributeList > (pAttributeList); 239*cdf0e10cSrcweir 240*cdf0e10cSrcweir xmlNsPtr pNsDef = pNode->nsDef; 241*cdf0e10cSrcweir 242*cdf0e10cSrcweir while (pNsDef != NULL) 243*cdf0e10cSrcweir { 244*cdf0e10cSrcweir const xmlChar* pNsPrefix = pNsDef->prefix; 245*cdf0e10cSrcweir const xmlChar* pNsHref = pNsDef->href; 246*cdf0e10cSrcweir 247*cdf0e10cSrcweir if (pNsDef->prefix == NULL) 248*cdf0e10cSrcweir { 249*cdf0e10cSrcweir pAttributeList->AddAttribute( 250*cdf0e10cSrcweir rtl::OUString(RTL_UTF8_USTRINGPARAM( STRXMLNS )), 251*cdf0e10cSrcweir rtl::OUString(RTL_UTF8_USTRINGPARAM( (sal_Char*)pNsHref ))); 252*cdf0e10cSrcweir } 253*cdf0e10cSrcweir else 254*cdf0e10cSrcweir { 255*cdf0e10cSrcweir pAttributeList->AddAttribute( 256*cdf0e10cSrcweir rtl::OUString(RTL_UTF8_USTRINGPARAM( STRXMLNS )) 257*cdf0e10cSrcweir +rtl::OUString(RTL_UTF8_USTRINGPARAM( ":" )) 258*cdf0e10cSrcweir +rtl::OUString(RTL_UTF8_USTRINGPARAM( (sal_Char*)pNsPrefix )), 259*cdf0e10cSrcweir rtl::OUString(RTL_UTF8_USTRINGPARAM( (sal_Char*)pNsHref ))); 260*cdf0e10cSrcweir } 261*cdf0e10cSrcweir 262*cdf0e10cSrcweir pNsDef = pNsDef->next; 263*cdf0e10cSrcweir } 264*cdf0e10cSrcweir 265*cdf0e10cSrcweir xmlAttrPtr pAttr = pNode->properties; 266*cdf0e10cSrcweir 267*cdf0e10cSrcweir while (pAttr != NULL) 268*cdf0e10cSrcweir { 269*cdf0e10cSrcweir const xmlChar* pAttrName = pAttr->name; 270*cdf0e10cSrcweir xmlNsPtr pAttrNs = pAttr->ns; 271*cdf0e10cSrcweir 272*cdf0e10cSrcweir rtl::OUString ouAttrName; 273*cdf0e10cSrcweir if (pAttrNs == NULL) 274*cdf0e10cSrcweir { 275*cdf0e10cSrcweir ouAttrName = rtl::OUString(RTL_UTF8_USTRINGPARAM( (sal_Char*)pAttrName )); 276*cdf0e10cSrcweir } 277*cdf0e10cSrcweir else 278*cdf0e10cSrcweir { 279*cdf0e10cSrcweir ouAttrName = rtl::OUString(RTL_UTF8_USTRINGPARAM( (sal_Char*)pAttrNs->prefix)) 280*cdf0e10cSrcweir +rtl::OUString(RTL_UTF8_USTRINGPARAM( (sal_Char*)":" )) 281*cdf0e10cSrcweir +rtl::OUString(RTL_UTF8_USTRINGPARAM( (sal_Char*)pAttrName )); 282*cdf0e10cSrcweir } 283*cdf0e10cSrcweir 284*cdf0e10cSrcweir pAttributeList->AddAttribute( 285*cdf0e10cSrcweir ouAttrName, 286*cdf0e10cSrcweir rtl::OUString(RTL_UTF8_USTRINGPARAM( (sal_Char*)(pAttr->children->content)))); 287*cdf0e10cSrcweir pAttr = pAttr->next; 288*cdf0e10cSrcweir } 289*cdf0e10cSrcweir 290*cdf0e10cSrcweir rtl::OString sNodeName = getNodeQName(pNode); 291*cdf0e10cSrcweir 292*cdf0e10cSrcweir if (xHandler.is()) 293*cdf0e10cSrcweir { 294*cdf0e10cSrcweir xHandler->startElement( 295*cdf0e10cSrcweir rtl::OUString(RTL_UTF8_USTRINGPARAM ( ((sal_Char*)(sNodeName.getStr())) )), 296*cdf0e10cSrcweir xAttrList); 297*cdf0e10cSrcweir } 298*cdf0e10cSrcweir 299*cdf0e10cSrcweir xHandler2->startElement( 300*cdf0e10cSrcweir rtl::OUString(RTL_UTF8_USTRINGPARAM ( ((sal_Char*)(sNodeName.getStr())) )), 301*cdf0e10cSrcweir xAttrList); 302*cdf0e10cSrcweir } 303*cdf0e10cSrcweir 304*cdf0e10cSrcweir void XMLDocumentWrapper_XmlSecImpl::sendEndElement( 305*cdf0e10cSrcweir const cssu::Reference< cssxs::XDocumentHandler >& xHandler, 306*cdf0e10cSrcweir const cssu::Reference< cssxs::XDocumentHandler >& xHandler2, 307*cdf0e10cSrcweir const xmlNodePtr pNode) const 308*cdf0e10cSrcweir throw (cssxs::SAXException) 309*cdf0e10cSrcweir /****** XMLDocumentWrapper_XmlSecImpl/sendEndElement ************************** 310*cdf0e10cSrcweir * 311*cdf0e10cSrcweir * NAME 312*cdf0e10cSrcweir * sendEndElement -- Constructs a endElement SAX event 313*cdf0e10cSrcweir * 314*cdf0e10cSrcweir * SYNOPSIS 315*cdf0e10cSrcweir * sendEndElement(xHandler, xHandler2, pNode); 316*cdf0e10cSrcweir * 317*cdf0e10cSrcweir * FUNCTION 318*cdf0e10cSrcweir * Used when converting the document into SAX event stream. 319*cdf0e10cSrcweir * This method constructs a endElement SAX event for a particular 320*cdf0e10cSrcweir * element, then calls the endElement methods of the XDocumentHandlers. 321*cdf0e10cSrcweir * 322*cdf0e10cSrcweir * INPUTS 323*cdf0e10cSrcweir * xHandler - the first XDocumentHandler interface to receive the 324*cdf0e10cSrcweir * endElement SAX event. It can be NULL. 325*cdf0e10cSrcweir * xHandler2 - the second XDocumentHandler interface to receive the 326*cdf0e10cSrcweir * endElement SAX event. It can't be NULL. 327*cdf0e10cSrcweir * pNode - the node on which the endElement should be generated. 328*cdf0e10cSrcweir * This node must be a element type. 329*cdf0e10cSrcweir * 330*cdf0e10cSrcweir * RESULT 331*cdf0e10cSrcweir * empty 332*cdf0e10cSrcweir * 333*cdf0e10cSrcweir * HISTORY 334*cdf0e10cSrcweir * 05.01.2004 - implemented 335*cdf0e10cSrcweir * 336*cdf0e10cSrcweir * AUTHOR 337*cdf0e10cSrcweir * Michael Mi 338*cdf0e10cSrcweir * Email: michael.mi@sun.com 339*cdf0e10cSrcweir ******************************************************************************/ 340*cdf0e10cSrcweir { 341*cdf0e10cSrcweir rtl::OString sNodeName = getNodeQName(pNode); 342*cdf0e10cSrcweir 343*cdf0e10cSrcweir if (xHandler.is()) 344*cdf0e10cSrcweir { 345*cdf0e10cSrcweir xHandler->endElement(rtl::OUString(RTL_UTF8_USTRINGPARAM ( ((sal_Char*)(sNodeName.getStr())) ))); 346*cdf0e10cSrcweir } 347*cdf0e10cSrcweir 348*cdf0e10cSrcweir xHandler2->endElement(rtl::OUString(RTL_UTF8_USTRINGPARAM ( ((sal_Char*)(sNodeName.getStr())) ))); 349*cdf0e10cSrcweir } 350*cdf0e10cSrcweir 351*cdf0e10cSrcweir void XMLDocumentWrapper_XmlSecImpl::sendNode( 352*cdf0e10cSrcweir const cssu::Reference< cssxs::XDocumentHandler >& xHandler, 353*cdf0e10cSrcweir const cssu::Reference< cssxs::XDocumentHandler >& xHandler2, 354*cdf0e10cSrcweir const xmlNodePtr pNode) const 355*cdf0e10cSrcweir throw (cssxs::SAXException) 356*cdf0e10cSrcweir /****** XMLDocumentWrapper_XmlSecImpl/sendNode ******************************** 357*cdf0e10cSrcweir * 358*cdf0e10cSrcweir * NAME 359*cdf0e10cSrcweir * sendNode -- Constructs a characters SAX event or a 360*cdf0e10cSrcweir * processingInstruction SAX event 361*cdf0e10cSrcweir * 362*cdf0e10cSrcweir * SYNOPSIS 363*cdf0e10cSrcweir * sendNode(xHandler, xHandler2, pNode); 364*cdf0e10cSrcweir * 365*cdf0e10cSrcweir * FUNCTION 366*cdf0e10cSrcweir * Used when converting the document into SAX event stream. 367*cdf0e10cSrcweir * This method constructs a characters SAX event or a 368*cdf0e10cSrcweir * processingInstructionfor SAX event based on the type of a particular 369*cdf0e10cSrcweir * element, then calls the corresponding methods of the XDocumentHandlers. 370*cdf0e10cSrcweir * 371*cdf0e10cSrcweir * INPUTS 372*cdf0e10cSrcweir * xHandler - the first XDocumentHandler interface to receive the 373*cdf0e10cSrcweir * SAX event. It can be NULL. 374*cdf0e10cSrcweir * xHandler2 - the second XDocumentHandler interface to receive the 375*cdf0e10cSrcweir * SAX event. It can't be NULL. 376*cdf0e10cSrcweir * pNode - the node on which the endElement should be generated. 377*cdf0e10cSrcweir * If it is a text node, then a characters SAX event is 378*cdf0e10cSrcweir * generated; if it is a PI node, then a 379*cdf0e10cSrcweir * processingInstructionfor SAX event is generated. 380*cdf0e10cSrcweir * 381*cdf0e10cSrcweir * RESULT 382*cdf0e10cSrcweir * empty 383*cdf0e10cSrcweir * 384*cdf0e10cSrcweir * HISTORY 385*cdf0e10cSrcweir * 05.01.2004 - implemented 386*cdf0e10cSrcweir * 387*cdf0e10cSrcweir * AUTHOR 388*cdf0e10cSrcweir * Michael Mi 389*cdf0e10cSrcweir * Email: michael.mi@sun.com 390*cdf0e10cSrcweir ******************************************************************************/ 391*cdf0e10cSrcweir { 392*cdf0e10cSrcweir xmlElementType type = pNode->type; 393*cdf0e10cSrcweir 394*cdf0e10cSrcweir if (type == XML_TEXT_NODE) 395*cdf0e10cSrcweir { 396*cdf0e10cSrcweir if (xHandler.is()) 397*cdf0e10cSrcweir { 398*cdf0e10cSrcweir xHandler->characters(rtl::OUString(RTL_UTF8_USTRINGPARAM ( ((sal_Char*)(pNode->content)) ))); 399*cdf0e10cSrcweir } 400*cdf0e10cSrcweir 401*cdf0e10cSrcweir xHandler2->characters(rtl::OUString(RTL_UTF8_USTRINGPARAM ( ((sal_Char*)(pNode->content)) ))); 402*cdf0e10cSrcweir } 403*cdf0e10cSrcweir else if (type == XML_PI_NODE) 404*cdf0e10cSrcweir { 405*cdf0e10cSrcweir if (xHandler.is()) 406*cdf0e10cSrcweir { 407*cdf0e10cSrcweir xHandler->processingInstruction( 408*cdf0e10cSrcweir rtl::OUString(RTL_UTF8_USTRINGPARAM ( ((sal_Char*)(pNode->name)) )), 409*cdf0e10cSrcweir rtl::OUString(RTL_UTF8_USTRINGPARAM ( ((sal_Char*)(pNode->content)) ))); 410*cdf0e10cSrcweir } 411*cdf0e10cSrcweir 412*cdf0e10cSrcweir xHandler2->processingInstruction( 413*cdf0e10cSrcweir rtl::OUString(RTL_UTF8_USTRINGPARAM ( ((sal_Char*)(pNode->name)) )), 414*cdf0e10cSrcweir rtl::OUString(RTL_UTF8_USTRINGPARAM ( ((sal_Char*)(pNode->content)) ))); 415*cdf0e10cSrcweir } 416*cdf0e10cSrcweir } 417*cdf0e10cSrcweir 418*cdf0e10cSrcweir rtl::OString XMLDocumentWrapper_XmlSecImpl::getNodeQName(const xmlNodePtr pNode) const 419*cdf0e10cSrcweir /****** XMLDocumentWrapper_XmlSecImpl/getNodeQName **************************** 420*cdf0e10cSrcweir * 421*cdf0e10cSrcweir * NAME 422*cdf0e10cSrcweir * getNodeQName -- Retrives the qualified name of a node 423*cdf0e10cSrcweir * 424*cdf0e10cSrcweir * SYNOPSIS 425*cdf0e10cSrcweir * name = getNodeQName(pNode); 426*cdf0e10cSrcweir * 427*cdf0e10cSrcweir * FUNCTION 428*cdf0e10cSrcweir * see NAME 429*cdf0e10cSrcweir * 430*cdf0e10cSrcweir * INPUTS 431*cdf0e10cSrcweir * pNode - the node whose name will be retrived 432*cdf0e10cSrcweir * 433*cdf0e10cSrcweir * RESULT 434*cdf0e10cSrcweir * name - the node's qualified name 435*cdf0e10cSrcweir * 436*cdf0e10cSrcweir * HISTORY 437*cdf0e10cSrcweir * 05.01.2004 - implemented 438*cdf0e10cSrcweir * 439*cdf0e10cSrcweir * AUTHOR 440*cdf0e10cSrcweir * Michael Mi 441*cdf0e10cSrcweir * Email: michael.mi@sun.com 442*cdf0e10cSrcweir ******************************************************************************/ 443*cdf0e10cSrcweir { 444*cdf0e10cSrcweir rtl::OString sNodeName((const sal_Char*)pNode->name); 445*cdf0e10cSrcweir if (pNode->ns != NULL) 446*cdf0e10cSrcweir { 447*cdf0e10cSrcweir xmlNsPtr pNs = pNode->ns; 448*cdf0e10cSrcweir 449*cdf0e10cSrcweir if (pNs->prefix != NULL) 450*cdf0e10cSrcweir { 451*cdf0e10cSrcweir rtl::OString sPrefix((const sal_Char*)pNs->prefix); 452*cdf0e10cSrcweir sNodeName = sPrefix+rtl::OString(":")+sNodeName; 453*cdf0e10cSrcweir } 454*cdf0e10cSrcweir } 455*cdf0e10cSrcweir 456*cdf0e10cSrcweir return sNodeName; 457*cdf0e10cSrcweir } 458*cdf0e10cSrcweir 459*cdf0e10cSrcweir xmlNodePtr XMLDocumentWrapper_XmlSecImpl::checkElement( const cssu::Reference< cssxw::XXMLElementWrapper >& xXMLElement) const 460*cdf0e10cSrcweir /****** XMLDocumentWrapper_XmlSecImpl/checkElement **************************** 461*cdf0e10cSrcweir * 462*cdf0e10cSrcweir * NAME 463*cdf0e10cSrcweir * checkElement -- Retrives the node wrapped by an XXMLElementWrapper 464*cdf0e10cSrcweir * interface 465*cdf0e10cSrcweir * 466*cdf0e10cSrcweir * SYNOPSIS 467*cdf0e10cSrcweir * node = checkElement(xXMLElement); 468*cdf0e10cSrcweir * 469*cdf0e10cSrcweir * FUNCTION 470*cdf0e10cSrcweir * see NAME 471*cdf0e10cSrcweir * 472*cdf0e10cSrcweir * INPUTS 473*cdf0e10cSrcweir * xXMLElement - the XXMLElementWrapper interface wraping a node 474*cdf0e10cSrcweir * 475*cdf0e10cSrcweir * RESULT 476*cdf0e10cSrcweir * node - the node wrapped in the XXMLElementWrapper interface 477*cdf0e10cSrcweir * 478*cdf0e10cSrcweir * HISTORY 479*cdf0e10cSrcweir * 05.01.2004 - implemented 480*cdf0e10cSrcweir * 481*cdf0e10cSrcweir * AUTHOR 482*cdf0e10cSrcweir * Michael Mi 483*cdf0e10cSrcweir * Email: michael.mi@sun.com 484*cdf0e10cSrcweir ******************************************************************************/ 485*cdf0e10cSrcweir { 486*cdf0e10cSrcweir xmlNodePtr rc = NULL; 487*cdf0e10cSrcweir 488*cdf0e10cSrcweir if (xXMLElement.is()) 489*cdf0e10cSrcweir { 490*cdf0e10cSrcweir cssu::Reference< cssl::XUnoTunnel > xNodTunnel( xXMLElement, cssu::UNO_QUERY ) ; 491*cdf0e10cSrcweir if( !xNodTunnel.is() ) 492*cdf0e10cSrcweir { 493*cdf0e10cSrcweir throw cssu::RuntimeException() ; 494*cdf0e10cSrcweir } 495*cdf0e10cSrcweir 496*cdf0e10cSrcweir XMLElementWrapper_XmlSecImpl* pElement 497*cdf0e10cSrcweir = reinterpret_cast<XMLElementWrapper_XmlSecImpl*>( 498*cdf0e10cSrcweir sal::static_int_cast<sal_uIntPtr>( 499*cdf0e10cSrcweir xNodTunnel->getSomething( 500*cdf0e10cSrcweir XMLElementWrapper_XmlSecImpl::getUnoTunnelImplementationId() ))) ; 501*cdf0e10cSrcweir 502*cdf0e10cSrcweir if( pElement == NULL ) { 503*cdf0e10cSrcweir throw cssu::RuntimeException() ; 504*cdf0e10cSrcweir } 505*cdf0e10cSrcweir 506*cdf0e10cSrcweir rc = pElement->getNativeElement(); 507*cdf0e10cSrcweir } 508*cdf0e10cSrcweir 509*cdf0e10cSrcweir return rc; 510*cdf0e10cSrcweir } 511*cdf0e10cSrcweir 512*cdf0e10cSrcweir sal_Int32 XMLDocumentWrapper_XmlSecImpl::recursiveDelete( 513*cdf0e10cSrcweir const xmlNodePtr pNode) 514*cdf0e10cSrcweir /****** XMLDocumentWrapper_XmlSecImpl/recursiveDelete ************************* 515*cdf0e10cSrcweir * 516*cdf0e10cSrcweir * NAME 517*cdf0e10cSrcweir * recursiveDelete -- Deletes a paticular node with its branch. 518*cdf0e10cSrcweir * 519*cdf0e10cSrcweir * SYNOPSIS 520*cdf0e10cSrcweir * result = recursiveDelete(pNode); 521*cdf0e10cSrcweir * 522*cdf0e10cSrcweir * FUNCTION 523*cdf0e10cSrcweir * Deletes a paticular node with its branch, while reserving the nodes 524*cdf0e10cSrcweir * (and their brance) listed in the m_aReservedNodes. 525*cdf0e10cSrcweir * The deletion process is preformed in the tree order, that is, a node 526*cdf0e10cSrcweir * is deleted after its previous sibling node is deleted, a parent node 527*cdf0e10cSrcweir * is deleted after its branch is deleted. 528*cdf0e10cSrcweir * During the deletion process when the m_pStopAtNode is reached, the 529*cdf0e10cSrcweir * progress is interrupted at once. 530*cdf0e10cSrcweir * 531*cdf0e10cSrcweir * INPUTS 532*cdf0e10cSrcweir * pNode - the node to be deleted 533*cdf0e10cSrcweir * 534*cdf0e10cSrcweir * RESULT 535*cdf0e10cSrcweir * result - the result of the deletion process, can be one of following 536*cdf0e10cSrcweir * values: 537*cdf0e10cSrcweir * NODE_STOPED - the process is interrupted by meeting the 538*cdf0e10cSrcweir * m_pStopAtNode 539*cdf0e10cSrcweir * NODE_NOTREMOVED - the pNode is not completely removed 540*cdf0e10cSrcweir * because there is its descendant in the 541*cdf0e10cSrcweir * m_aReservedNodes list 542*cdf0e10cSrcweir * NODE_REMOVED - the pNode and its branch are completely 543*cdf0e10cSrcweir * removed 544*cdf0e10cSrcweir * 545*cdf0e10cSrcweir * NOTES 546*cdf0e10cSrcweir * The node in the m_aReservedNodes list must be in the tree order, otherwise 547*cdf0e10cSrcweir * the result is unpredictable. 548*cdf0e10cSrcweir * 549*cdf0e10cSrcweir * HISTORY 550*cdf0e10cSrcweir * 05.01.2004 - implemented 551*cdf0e10cSrcweir * 552*cdf0e10cSrcweir * AUTHOR 553*cdf0e10cSrcweir * Michael Mi 554*cdf0e10cSrcweir * Email: michael.mi@sun.com 555*cdf0e10cSrcweir ******************************************************************************/ 556*cdf0e10cSrcweir { 557*cdf0e10cSrcweir if (pNode == m_pStopAtNode) 558*cdf0e10cSrcweir { 559*cdf0e10cSrcweir return NODE_STOPED; 560*cdf0e10cSrcweir } 561*cdf0e10cSrcweir 562*cdf0e10cSrcweir if (pNode != m_pCurrentReservedNode) 563*cdf0e10cSrcweir { 564*cdf0e10cSrcweir xmlNodePtr pChild = pNode->children; 565*cdf0e10cSrcweir 566*cdf0e10cSrcweir xmlNodePtr pNextSibling; 567*cdf0e10cSrcweir bool bIsRemoved = true; 568*cdf0e10cSrcweir sal_Int32 nResult; 569*cdf0e10cSrcweir 570*cdf0e10cSrcweir while( pChild != NULL ) 571*cdf0e10cSrcweir { 572*cdf0e10cSrcweir pNextSibling = pChild->next; 573*cdf0e10cSrcweir nResult = recursiveDelete(pChild); 574*cdf0e10cSrcweir 575*cdf0e10cSrcweir switch (nResult) 576*cdf0e10cSrcweir { 577*cdf0e10cSrcweir case NODE_STOPED: 578*cdf0e10cSrcweir return NODE_STOPED; 579*cdf0e10cSrcweir case NODE_NOTREMOVED: 580*cdf0e10cSrcweir bIsRemoved = false; 581*cdf0e10cSrcweir break; 582*cdf0e10cSrcweir case NODE_REMOVED: 583*cdf0e10cSrcweir removeNode(pChild); 584*cdf0e10cSrcweir break; 585*cdf0e10cSrcweir default: 586*cdf0e10cSrcweir throw cssu::RuntimeException(); 587*cdf0e10cSrcweir } 588*cdf0e10cSrcweir 589*cdf0e10cSrcweir pChild = pNextSibling; 590*cdf0e10cSrcweir } 591*cdf0e10cSrcweir 592*cdf0e10cSrcweir if (pNode == m_pCurrentElement) 593*cdf0e10cSrcweir { 594*cdf0e10cSrcweir bIsRemoved = false; 595*cdf0e10cSrcweir } 596*cdf0e10cSrcweir 597*cdf0e10cSrcweir return bIsRemoved?NODE_REMOVED:NODE_NOTREMOVED; 598*cdf0e10cSrcweir } 599*cdf0e10cSrcweir else 600*cdf0e10cSrcweir { 601*cdf0e10cSrcweir getNextReservedNode(); 602*cdf0e10cSrcweir return NODE_NOTREMOVED; 603*cdf0e10cSrcweir } 604*cdf0e10cSrcweir } 605*cdf0e10cSrcweir 606*cdf0e10cSrcweir void XMLDocumentWrapper_XmlSecImpl::getNextReservedNode() 607*cdf0e10cSrcweir /****** XMLDocumentWrapper_XmlSecImpl/getNextReservedNode ********************* 608*cdf0e10cSrcweir * 609*cdf0e10cSrcweir * NAME 610*cdf0e10cSrcweir * getNextReservedNode -- Highlights the next reserved node in the 611*cdf0e10cSrcweir * reserved node list 612*cdf0e10cSrcweir * 613*cdf0e10cSrcweir * SYNOPSIS 614*cdf0e10cSrcweir * getNextReservedNode(); 615*cdf0e10cSrcweir * 616*cdf0e10cSrcweir * FUNCTION 617*cdf0e10cSrcweir * The m_aReservedNodes array holds a node list, while the 618*cdf0e10cSrcweir * m_pCurrentReservedNode points to the one currently highlighted. 619*cdf0e10cSrcweir * This method is used to highlight the next node in the node list. 620*cdf0e10cSrcweir * This method is called at the time when the current highlighted node 621*cdf0e10cSrcweir * has been already processed, and the next node should be ready. 622*cdf0e10cSrcweir * 623*cdf0e10cSrcweir * INPUTS 624*cdf0e10cSrcweir * empty 625*cdf0e10cSrcweir * 626*cdf0e10cSrcweir * RESULT 627*cdf0e10cSrcweir * empty 628*cdf0e10cSrcweir * 629*cdf0e10cSrcweir * HISTORY 630*cdf0e10cSrcweir * 05.01.2004 - implemented 631*cdf0e10cSrcweir * 632*cdf0e10cSrcweir * AUTHOR 633*cdf0e10cSrcweir * Michael Mi 634*cdf0e10cSrcweir * Email: michael.mi@sun.com 635*cdf0e10cSrcweir ******************************************************************************/ 636*cdf0e10cSrcweir { 637*cdf0e10cSrcweir if (m_nReservedNodeIndex < m_aReservedNodes.getLength()) 638*cdf0e10cSrcweir { 639*cdf0e10cSrcweir m_pCurrentReservedNode = checkElement( m_aReservedNodes[m_nReservedNodeIndex] ); 640*cdf0e10cSrcweir m_nReservedNodeIndex ++; 641*cdf0e10cSrcweir } 642*cdf0e10cSrcweir else 643*cdf0e10cSrcweir { 644*cdf0e10cSrcweir m_pCurrentReservedNode = NULL; 645*cdf0e10cSrcweir } 646*cdf0e10cSrcweir } 647*cdf0e10cSrcweir 648*cdf0e10cSrcweir void XMLDocumentWrapper_XmlSecImpl::removeNode(const xmlNodePtr pNode) const 649*cdf0e10cSrcweir /****** XMLDocumentWrapper_XmlSecImpl/removeNode ****************************** 650*cdf0e10cSrcweir * 651*cdf0e10cSrcweir * NAME 652*cdf0e10cSrcweir * removeNode -- Deletes a node with its branch unconditionaly 653*cdf0e10cSrcweir * 654*cdf0e10cSrcweir * SYNOPSIS 655*cdf0e10cSrcweir * removeNode( pNode ); 656*cdf0e10cSrcweir * 657*cdf0e10cSrcweir * FUNCTION 658*cdf0e10cSrcweir * Delete the node along with its branch from the document. 659*cdf0e10cSrcweir * 660*cdf0e10cSrcweir * INPUTS 661*cdf0e10cSrcweir * pNode - the node to be deleted 662*cdf0e10cSrcweir * 663*cdf0e10cSrcweir * RESULT 664*cdf0e10cSrcweir * empty 665*cdf0e10cSrcweir * 666*cdf0e10cSrcweir * HISTORY 667*cdf0e10cSrcweir * 05.01.2004 - implemented 668*cdf0e10cSrcweir * 669*cdf0e10cSrcweir * AUTHOR 670*cdf0e10cSrcweir * Michael Mi 671*cdf0e10cSrcweir * Email: michael.mi@sun.com 672*cdf0e10cSrcweir ******************************************************************************/ 673*cdf0e10cSrcweir { 674*cdf0e10cSrcweir /* you can't remove the current node */ 675*cdf0e10cSrcweir OSL_ASSERT( m_pCurrentElement != pNode ); 676*cdf0e10cSrcweir 677*cdf0e10cSrcweir xmlAttrPtr pAttr = pNode->properties; 678*cdf0e10cSrcweir 679*cdf0e10cSrcweir while (pAttr != NULL) 680*cdf0e10cSrcweir { 681*cdf0e10cSrcweir if (!stricmp((sal_Char*)pAttr->name,"id")) 682*cdf0e10cSrcweir { 683*cdf0e10cSrcweir xmlRemoveID(m_pDocument, pAttr); 684*cdf0e10cSrcweir } 685*cdf0e10cSrcweir 686*cdf0e10cSrcweir pAttr = pAttr->next; 687*cdf0e10cSrcweir } 688*cdf0e10cSrcweir 689*cdf0e10cSrcweir xmlUnlinkNode(pNode); 690*cdf0e10cSrcweir xmlFreeNode(pNode); 691*cdf0e10cSrcweir } 692*cdf0e10cSrcweir 693*cdf0e10cSrcweir void XMLDocumentWrapper_XmlSecImpl::buildIDAttr(xmlNodePtr pNode) const 694*cdf0e10cSrcweir /****** XMLDocumentWrapper_XmlSecImpl/buildIDAttr ***************************** 695*cdf0e10cSrcweir * 696*cdf0e10cSrcweir * NAME 697*cdf0e10cSrcweir * buildIDAttr -- build the ID attribute of a node 698*cdf0e10cSrcweir * 699*cdf0e10cSrcweir * SYNOPSIS 700*cdf0e10cSrcweir * buildIDAttr( pNode ); 701*cdf0e10cSrcweir * 702*cdf0e10cSrcweir * FUNCTION 703*cdf0e10cSrcweir * see NAME 704*cdf0e10cSrcweir * 705*cdf0e10cSrcweir * INPUTS 706*cdf0e10cSrcweir * pNode - the node whose id attribute will be built 707*cdf0e10cSrcweir * 708*cdf0e10cSrcweir * RESULT 709*cdf0e10cSrcweir * empty 710*cdf0e10cSrcweir * 711*cdf0e10cSrcweir * HISTORY 712*cdf0e10cSrcweir * 14.06.2004 - implemented 713*cdf0e10cSrcweir * 714*cdf0e10cSrcweir * AUTHOR 715*cdf0e10cSrcweir * Michael Mi 716*cdf0e10cSrcweir * Email: michael.mi@sun.com 717*cdf0e10cSrcweir ******************************************************************************/ 718*cdf0e10cSrcweir { 719*cdf0e10cSrcweir xmlAttrPtr idAttr = xmlHasProp( pNode, (const unsigned char *)"id" ); 720*cdf0e10cSrcweir if (idAttr == NULL) 721*cdf0e10cSrcweir { 722*cdf0e10cSrcweir idAttr = xmlHasProp( pNode, (const unsigned char *)"Id" ); 723*cdf0e10cSrcweir } 724*cdf0e10cSrcweir 725*cdf0e10cSrcweir if (idAttr != NULL) 726*cdf0e10cSrcweir { 727*cdf0e10cSrcweir xmlChar* idValue = xmlNodeListGetString( m_pDocument, idAttr->children, 1 ) ; 728*cdf0e10cSrcweir xmlAddID( NULL, m_pDocument, idValue, idAttr ); 729*cdf0e10cSrcweir } 730*cdf0e10cSrcweir } 731*cdf0e10cSrcweir 732*cdf0e10cSrcweir void XMLDocumentWrapper_XmlSecImpl::rebuildIDLink(xmlNodePtr pNode) const 733*cdf0e10cSrcweir /****** XMLDocumentWrapper_XmlSecImpl/rebuildIDLink *************************** 734*cdf0e10cSrcweir * 735*cdf0e10cSrcweir * NAME 736*cdf0e10cSrcweir * rebuildIDLink -- rebuild the ID link for the branch 737*cdf0e10cSrcweir * 738*cdf0e10cSrcweir * SYNOPSIS 739*cdf0e10cSrcweir * rebuildIDLink( pNode ); 740*cdf0e10cSrcweir * 741*cdf0e10cSrcweir * FUNCTION 742*cdf0e10cSrcweir * see NAME 743*cdf0e10cSrcweir * 744*cdf0e10cSrcweir * INPUTS 745*cdf0e10cSrcweir * pNode - the node, from which the branch will be rebuilt 746*cdf0e10cSrcweir * 747*cdf0e10cSrcweir * RESULT 748*cdf0e10cSrcweir * empty 749*cdf0e10cSrcweir * 750*cdf0e10cSrcweir * HISTORY 751*cdf0e10cSrcweir * 14.06.2004 - implemented 752*cdf0e10cSrcweir * 753*cdf0e10cSrcweir * AUTHOR 754*cdf0e10cSrcweir * Michael Mi 755*cdf0e10cSrcweir * Email: michael.mi@sun.com 756*cdf0e10cSrcweir ******************************************************************************/ 757*cdf0e10cSrcweir { 758*cdf0e10cSrcweir if (pNode != NULL && pNode->type == XML_ELEMENT_NODE) 759*cdf0e10cSrcweir { 760*cdf0e10cSrcweir buildIDAttr( pNode ); 761*cdf0e10cSrcweir 762*cdf0e10cSrcweir xmlNodePtr child = pNode->children; 763*cdf0e10cSrcweir while (child != NULL) 764*cdf0e10cSrcweir { 765*cdf0e10cSrcweir rebuildIDLink(child); 766*cdf0e10cSrcweir child = child->next; 767*cdf0e10cSrcweir } 768*cdf0e10cSrcweir } 769*cdf0e10cSrcweir } 770*cdf0e10cSrcweir 771*cdf0e10cSrcweir /* XXMLDocumentWrapper */ 772*cdf0e10cSrcweir cssu::Reference< cssxw::XXMLElementWrapper > SAL_CALL XMLDocumentWrapper_XmlSecImpl::getCurrentElement( ) 773*cdf0e10cSrcweir throw (cssu::RuntimeException) 774*cdf0e10cSrcweir { 775*cdf0e10cSrcweir XMLElementWrapper_XmlSecImpl* pElement = new XMLElementWrapper_XmlSecImpl(m_pCurrentElement); 776*cdf0e10cSrcweir return (cssu::Reference< cssxw::XXMLElementWrapper >)pElement; 777*cdf0e10cSrcweir } 778*cdf0e10cSrcweir 779*cdf0e10cSrcweir void SAL_CALL XMLDocumentWrapper_XmlSecImpl::setCurrentElement( const cssu::Reference< cssxw::XXMLElementWrapper >& element ) 780*cdf0e10cSrcweir throw (cssu::RuntimeException) 781*cdf0e10cSrcweir { 782*cdf0e10cSrcweir m_pCurrentElement = checkElement( element ); 783*cdf0e10cSrcweir saxHelper.setCurrentNode( m_pCurrentElement ); 784*cdf0e10cSrcweir } 785*cdf0e10cSrcweir 786*cdf0e10cSrcweir void SAL_CALL XMLDocumentWrapper_XmlSecImpl::removeCurrentElement( ) 787*cdf0e10cSrcweir throw (cssu::RuntimeException) 788*cdf0e10cSrcweir { 789*cdf0e10cSrcweir OSL_ASSERT( m_pCurrentElement != NULL ); 790*cdf0e10cSrcweir 791*cdf0e10cSrcweir xmlNodePtr pOldCurrentElement = m_pCurrentElement; 792*cdf0e10cSrcweir 793*cdf0e10cSrcweir /* 794*cdf0e10cSrcweir * pop the top node in the parser context's 795*cdf0e10cSrcweir * nodeTab stack, then the parent of that node will 796*cdf0e10cSrcweir * automatically become the new stack top, and 797*cdf0e10cSrcweir * the current node as well. 798*cdf0e10cSrcweir */ 799*cdf0e10cSrcweir saxHelper.endElement( 800*cdf0e10cSrcweir rtl::OUString( 801*cdf0e10cSrcweir RTL_UTF8_USTRINGPARAM ( 802*cdf0e10cSrcweir (sal_Char*)(pOldCurrentElement->name) 803*cdf0e10cSrcweir ))); 804*cdf0e10cSrcweir m_pCurrentElement = saxHelper.getCurrentNode(); 805*cdf0e10cSrcweir 806*cdf0e10cSrcweir /* 807*cdf0e10cSrcweir * remove the node 808*cdf0e10cSrcweir */ 809*cdf0e10cSrcweir removeNode(pOldCurrentElement); 810*cdf0e10cSrcweir } 811*cdf0e10cSrcweir 812*cdf0e10cSrcweir sal_Bool SAL_CALL XMLDocumentWrapper_XmlSecImpl::isCurrent( const cssu::Reference< cssxw::XXMLElementWrapper >& node ) 813*cdf0e10cSrcweir throw (cssu::RuntimeException) 814*cdf0e10cSrcweir { 815*cdf0e10cSrcweir xmlNodePtr pNode = checkElement(node); 816*cdf0e10cSrcweir return (pNode == m_pCurrentElement); 817*cdf0e10cSrcweir } 818*cdf0e10cSrcweir 819*cdf0e10cSrcweir sal_Bool SAL_CALL XMLDocumentWrapper_XmlSecImpl::isCurrentElementEmpty( ) 820*cdf0e10cSrcweir throw (cssu::RuntimeException) 821*cdf0e10cSrcweir { 822*cdf0e10cSrcweir sal_Bool rc = sal_False; 823*cdf0e10cSrcweir 824*cdf0e10cSrcweir if (m_pCurrentElement->children == NULL) 825*cdf0e10cSrcweir { 826*cdf0e10cSrcweir rc = sal_True; 827*cdf0e10cSrcweir } 828*cdf0e10cSrcweir 829*cdf0e10cSrcweir return rc; 830*cdf0e10cSrcweir } 831*cdf0e10cSrcweir 832*cdf0e10cSrcweir rtl::OUString SAL_CALL XMLDocumentWrapper_XmlSecImpl::getNodeName( const cssu::Reference< cssxw::XXMLElementWrapper >& node ) 833*cdf0e10cSrcweir throw (cssu::RuntimeException) 834*cdf0e10cSrcweir { 835*cdf0e10cSrcweir xmlNodePtr pNode = checkElement(node); 836*cdf0e10cSrcweir return rtl::OUString(RTL_UTF8_USTRINGPARAM ( (sal_Char*)pNode->name )); 837*cdf0e10cSrcweir } 838*cdf0e10cSrcweir 839*cdf0e10cSrcweir void SAL_CALL XMLDocumentWrapper_XmlSecImpl::clearUselessData( 840*cdf0e10cSrcweir const cssu::Reference< cssxw::XXMLElementWrapper >& node, 841*cdf0e10cSrcweir const cssu::Sequence< cssu::Reference< cssxw::XXMLElementWrapper > >& reservedDescendants, 842*cdf0e10cSrcweir const cssu::Reference< cssxw::XXMLElementWrapper >& stopAtNode ) 843*cdf0e10cSrcweir throw (cssu::RuntimeException) 844*cdf0e10cSrcweir { 845*cdf0e10cSrcweir xmlNodePtr pTargetNode = checkElement(node); 846*cdf0e10cSrcweir 847*cdf0e10cSrcweir m_pStopAtNode = checkElement(stopAtNode); 848*cdf0e10cSrcweir m_aReservedNodes = reservedDescendants; 849*cdf0e10cSrcweir m_nReservedNodeIndex = 0; 850*cdf0e10cSrcweir 851*cdf0e10cSrcweir getNextReservedNode(); 852*cdf0e10cSrcweir 853*cdf0e10cSrcweir recursiveDelete(pTargetNode); 854*cdf0e10cSrcweir } 855*cdf0e10cSrcweir 856*cdf0e10cSrcweir void SAL_CALL XMLDocumentWrapper_XmlSecImpl::collapse( const cssu::Reference< cssxw::XXMLElementWrapper >& node ) 857*cdf0e10cSrcweir throw (cssu::RuntimeException) 858*cdf0e10cSrcweir { 859*cdf0e10cSrcweir xmlNodePtr pTargetNode = checkElement(node); 860*cdf0e10cSrcweir xmlNodePtr pParent; 861*cdf0e10cSrcweir 862*cdf0e10cSrcweir while (pTargetNode != NULL) 863*cdf0e10cSrcweir { 864*cdf0e10cSrcweir if (pTargetNode->children != NULL || pTargetNode == m_pCurrentElement) 865*cdf0e10cSrcweir { 866*cdf0e10cSrcweir break; 867*cdf0e10cSrcweir } 868*cdf0e10cSrcweir 869*cdf0e10cSrcweir pParent = pTargetNode->parent; 870*cdf0e10cSrcweir removeNode(pTargetNode); 871*cdf0e10cSrcweir pTargetNode = pParent; 872*cdf0e10cSrcweir } 873*cdf0e10cSrcweir } 874*cdf0e10cSrcweir 875*cdf0e10cSrcweir void SAL_CALL XMLDocumentWrapper_XmlSecImpl::getTree( const cssu::Reference< cssxs::XDocumentHandler >& handler ) 876*cdf0e10cSrcweir throw (cssxs::SAXException, cssu::RuntimeException) 877*cdf0e10cSrcweir { 878*cdf0e10cSrcweir if (m_pRootElement != NULL) 879*cdf0e10cSrcweir { 880*cdf0e10cSrcweir xmlNodePtr pTempCurrentElement = m_pCurrentElement; 881*cdf0e10cSrcweir sal_Int32 nTempCurrentPosition = m_nCurrentPosition; 882*cdf0e10cSrcweir 883*cdf0e10cSrcweir m_pCurrentElement = m_pRootElement; 884*cdf0e10cSrcweir 885*cdf0e10cSrcweir m_nCurrentPosition = NODEPOSITION_STARTELEMENT; 886*cdf0e10cSrcweir cssu::Reference< cssxs::XDocumentHandler > xHandler = handler; 887*cdf0e10cSrcweir 888*cdf0e10cSrcweir while(true) 889*cdf0e10cSrcweir { 890*cdf0e10cSrcweir switch (m_nCurrentPosition) 891*cdf0e10cSrcweir { 892*cdf0e10cSrcweir case NODEPOSITION_STARTELEMENT: 893*cdf0e10cSrcweir sendStartElement(NULL, xHandler, m_pCurrentElement); 894*cdf0e10cSrcweir break; 895*cdf0e10cSrcweir case NODEPOSITION_ENDELEMENT: 896*cdf0e10cSrcweir sendEndElement(NULL, xHandler, m_pCurrentElement); 897*cdf0e10cSrcweir break; 898*cdf0e10cSrcweir case NODEPOSITION_NORMAL: 899*cdf0e10cSrcweir sendNode(NULL, xHandler, m_pCurrentElement); 900*cdf0e10cSrcweir break; 901*cdf0e10cSrcweir } 902*cdf0e10cSrcweir 903*cdf0e10cSrcweir if ( (m_pCurrentElement == m_pRootElement) && (m_nCurrentPosition == NODEPOSITION_ENDELEMENT )) 904*cdf0e10cSrcweir { 905*cdf0e10cSrcweir break; 906*cdf0e10cSrcweir } 907*cdf0e10cSrcweir 908*cdf0e10cSrcweir getNextSAXEvent(); 909*cdf0e10cSrcweir } 910*cdf0e10cSrcweir 911*cdf0e10cSrcweir m_pCurrentElement = pTempCurrentElement; 912*cdf0e10cSrcweir m_nCurrentPosition = nTempCurrentPosition; 913*cdf0e10cSrcweir } 914*cdf0e10cSrcweir } 915*cdf0e10cSrcweir 916*cdf0e10cSrcweir void SAL_CALL XMLDocumentWrapper_XmlSecImpl::generateSAXEvents( 917*cdf0e10cSrcweir const cssu::Reference< cssxs::XDocumentHandler >& handler, 918*cdf0e10cSrcweir const cssu::Reference< cssxs::XDocumentHandler >& xEventKeeperHandler, 919*cdf0e10cSrcweir const cssu::Reference< cssxw::XXMLElementWrapper >& startNode, 920*cdf0e10cSrcweir const cssu::Reference< cssxw::XXMLElementWrapper >& endNode ) 921*cdf0e10cSrcweir throw (cssxs::SAXException, cssu::RuntimeException) 922*cdf0e10cSrcweir { 923*cdf0e10cSrcweir /* 924*cdf0e10cSrcweir * The first SAX event is the startElement of the startNode 925*cdf0e10cSrcweir * element. 926*cdf0e10cSrcweir */ 927*cdf0e10cSrcweir bool bHasCurrentElementChild = (m_pCurrentElement->children != NULL); 928*cdf0e10cSrcweir 929*cdf0e10cSrcweir xmlNodePtr pTempCurrentElement = m_pCurrentElement; 930*cdf0e10cSrcweir 931*cdf0e10cSrcweir m_pCurrentElement = checkElement(startNode); 932*cdf0e10cSrcweir 933*cdf0e10cSrcweir if (m_pCurrentElement->type == XML_ELEMENT_NODE) 934*cdf0e10cSrcweir { 935*cdf0e10cSrcweir m_nCurrentPosition = NODEPOSITION_STARTELEMENT; 936*cdf0e10cSrcweir } 937*cdf0e10cSrcweir else 938*cdf0e10cSrcweir { 939*cdf0e10cSrcweir m_nCurrentPosition = NODEPOSITION_NORMAL; 940*cdf0e10cSrcweir } 941*cdf0e10cSrcweir 942*cdf0e10cSrcweir xmlNodePtr pEndNode = checkElement(endNode); 943*cdf0e10cSrcweir 944*cdf0e10cSrcweir cssu::Reference < cssxc::sax::XSAXEventKeeper > xSAXEventKeeper( xEventKeeperHandler, cssu::UNO_QUERY ); 945*cdf0e10cSrcweir 946*cdf0e10cSrcweir cssu::Reference< cssxs::XDocumentHandler > xHandler = handler; 947*cdf0e10cSrcweir 948*cdf0e10cSrcweir while(true) 949*cdf0e10cSrcweir { 950*cdf0e10cSrcweir switch (m_nCurrentPosition) 951*cdf0e10cSrcweir { 952*cdf0e10cSrcweir case NODEPOSITION_STARTELEMENT: 953*cdf0e10cSrcweir sendStartElement(xHandler, xEventKeeperHandler, m_pCurrentElement); 954*cdf0e10cSrcweir break; 955*cdf0e10cSrcweir case NODEPOSITION_ENDELEMENT: 956*cdf0e10cSrcweir sendEndElement(xHandler, xEventKeeperHandler, m_pCurrentElement); 957*cdf0e10cSrcweir break; 958*cdf0e10cSrcweir case NODEPOSITION_NORMAL: 959*cdf0e10cSrcweir sendNode(xHandler, xEventKeeperHandler, m_pCurrentElement); 960*cdf0e10cSrcweir break; 961*cdf0e10cSrcweir default: 962*cdf0e10cSrcweir throw cssu::RuntimeException(); 963*cdf0e10cSrcweir } 964*cdf0e10cSrcweir 965*cdf0e10cSrcweir if (xSAXEventKeeper->isBlocking()) 966*cdf0e10cSrcweir { 967*cdf0e10cSrcweir xHandler = NULL; 968*cdf0e10cSrcweir } 969*cdf0e10cSrcweir 970*cdf0e10cSrcweir if (pEndNode == NULL && 971*cdf0e10cSrcweir ((bHasCurrentElementChild && m_pCurrentElement == xmlGetLastChild(pTempCurrentElement) && m_nCurrentPosition != NODEPOSITION_STARTELEMENT) || 972*cdf0e10cSrcweir (!bHasCurrentElementChild && m_pCurrentElement == pTempCurrentElement && m_nCurrentPosition == NODEPOSITION_STARTELEMENT))) 973*cdf0e10cSrcweir { 974*cdf0e10cSrcweir break; 975*cdf0e10cSrcweir } 976*cdf0e10cSrcweir 977*cdf0e10cSrcweir getNextSAXEvent(); 978*cdf0e10cSrcweir 979*cdf0e10cSrcweir /* 980*cdf0e10cSrcweir * If there is an end point specified, then check whether 981*cdf0e10cSrcweir * the current node equals to the end point. If so, stop 982*cdf0e10cSrcweir * generating. 983*cdf0e10cSrcweir */ 984*cdf0e10cSrcweir if (pEndNode != NULL && m_pCurrentElement == pEndNode) 985*cdf0e10cSrcweir { 986*cdf0e10cSrcweir break; 987*cdf0e10cSrcweir } 988*cdf0e10cSrcweir } 989*cdf0e10cSrcweir 990*cdf0e10cSrcweir m_pCurrentElement = pTempCurrentElement; 991*cdf0e10cSrcweir } 992*cdf0e10cSrcweir 993*cdf0e10cSrcweir void SAL_CALL XMLDocumentWrapper_XmlSecImpl::rebuildIDLink( 994*cdf0e10cSrcweir const com::sun::star::uno::Reference< com::sun::star::xml::wrapper::XXMLElementWrapper >& node ) 995*cdf0e10cSrcweir throw (com::sun::star::uno::RuntimeException) 996*cdf0e10cSrcweir { 997*cdf0e10cSrcweir xmlNodePtr pNode = checkElement( node ); 998*cdf0e10cSrcweir rebuildIDLink(pNode); 999*cdf0e10cSrcweir } 1000*cdf0e10cSrcweir 1001*cdf0e10cSrcweir 1002*cdf0e10cSrcweir /* cssxs::XDocumentHandler */ 1003*cdf0e10cSrcweir void SAL_CALL XMLDocumentWrapper_XmlSecImpl::startDocument( ) 1004*cdf0e10cSrcweir throw (cssxs::SAXException, cssu::RuntimeException) 1005*cdf0e10cSrcweir { 1006*cdf0e10cSrcweir } 1007*cdf0e10cSrcweir 1008*cdf0e10cSrcweir void SAL_CALL XMLDocumentWrapper_XmlSecImpl::endDocument( ) 1009*cdf0e10cSrcweir throw (cssxs::SAXException, cssu::RuntimeException) 1010*cdf0e10cSrcweir { 1011*cdf0e10cSrcweir } 1012*cdf0e10cSrcweir 1013*cdf0e10cSrcweir void SAL_CALL XMLDocumentWrapper_XmlSecImpl::startElement( const rtl::OUString& aName, const cssu::Reference< cssxs::XAttributeList >& xAttribs ) 1014*cdf0e10cSrcweir throw (cssxs::SAXException, cssu::RuntimeException) 1015*cdf0e10cSrcweir { 1016*cdf0e10cSrcweir sal_Int32 nLength = xAttribs->getLength(); 1017*cdf0e10cSrcweir cssu::Sequence< cssxcsax::XMLAttribute > aAttributes (nLength); 1018*cdf0e10cSrcweir 1019*cdf0e10cSrcweir for (int i = 0; i < nLength; ++i) 1020*cdf0e10cSrcweir { 1021*cdf0e10cSrcweir aAttributes[i].sName = xAttribs->getNameByIndex((short)i); 1022*cdf0e10cSrcweir aAttributes[i].sValue =xAttribs->getValueByIndex((short)i); 1023*cdf0e10cSrcweir } 1024*cdf0e10cSrcweir 1025*cdf0e10cSrcweir _startElement(aName, aAttributes); 1026*cdf0e10cSrcweir } 1027*cdf0e10cSrcweir 1028*cdf0e10cSrcweir void SAL_CALL XMLDocumentWrapper_XmlSecImpl::endElement( const rtl::OUString& aName ) 1029*cdf0e10cSrcweir throw (cssxs::SAXException, cssu::RuntimeException) 1030*cdf0e10cSrcweir { 1031*cdf0e10cSrcweir saxHelper.endElement(aName); 1032*cdf0e10cSrcweir m_pCurrentElement = saxHelper.getCurrentNode(); 1033*cdf0e10cSrcweir } 1034*cdf0e10cSrcweir 1035*cdf0e10cSrcweir void SAL_CALL XMLDocumentWrapper_XmlSecImpl::characters( const rtl::OUString& aChars ) 1036*cdf0e10cSrcweir throw (cssxs::SAXException, cssu::RuntimeException) 1037*cdf0e10cSrcweir { 1038*cdf0e10cSrcweir saxHelper.characters(aChars); 1039*cdf0e10cSrcweir } 1040*cdf0e10cSrcweir 1041*cdf0e10cSrcweir void SAL_CALL XMLDocumentWrapper_XmlSecImpl::ignorableWhitespace( const rtl::OUString& aWhitespaces ) 1042*cdf0e10cSrcweir throw (cssxs::SAXException, cssu::RuntimeException) 1043*cdf0e10cSrcweir { 1044*cdf0e10cSrcweir saxHelper.ignorableWhitespace(aWhitespaces); 1045*cdf0e10cSrcweir } 1046*cdf0e10cSrcweir 1047*cdf0e10cSrcweir void SAL_CALL XMLDocumentWrapper_XmlSecImpl::processingInstruction( const rtl::OUString& aTarget, const rtl::OUString& aData ) 1048*cdf0e10cSrcweir throw (cssxs::SAXException, cssu::RuntimeException) 1049*cdf0e10cSrcweir { 1050*cdf0e10cSrcweir saxHelper.processingInstruction(aTarget, aData); 1051*cdf0e10cSrcweir } 1052*cdf0e10cSrcweir 1053*cdf0e10cSrcweir void SAL_CALL XMLDocumentWrapper_XmlSecImpl::setDocumentLocator( const cssu::Reference< cssxs::XLocator >& xLocator ) 1054*cdf0e10cSrcweir throw (cssxs::SAXException, cssu::RuntimeException) 1055*cdf0e10cSrcweir { 1056*cdf0e10cSrcweir saxHelper.setDocumentLocator(xLocator); 1057*cdf0e10cSrcweir } 1058*cdf0e10cSrcweir 1059*cdf0e10cSrcweir /* XCompressedDocumentHandler */ 1060*cdf0e10cSrcweir void SAL_CALL XMLDocumentWrapper_XmlSecImpl::_startDocument( ) 1061*cdf0e10cSrcweir throw (cssxs::SAXException, cssu::RuntimeException) 1062*cdf0e10cSrcweir { 1063*cdf0e10cSrcweir } 1064*cdf0e10cSrcweir 1065*cdf0e10cSrcweir void SAL_CALL XMLDocumentWrapper_XmlSecImpl::_endDocument( ) 1066*cdf0e10cSrcweir throw (cssxs::SAXException, cssu::RuntimeException) 1067*cdf0e10cSrcweir { 1068*cdf0e10cSrcweir } 1069*cdf0e10cSrcweir 1070*cdf0e10cSrcweir void SAL_CALL XMLDocumentWrapper_XmlSecImpl::_startElement( const rtl::OUString& aName, const cssu::Sequence< cssxcsax::XMLAttribute >& aAttributes ) 1071*cdf0e10cSrcweir throw (cssxs::SAXException, cssu::RuntimeException) 1072*cdf0e10cSrcweir { 1073*cdf0e10cSrcweir saxHelper.startElement(aName, aAttributes); 1074*cdf0e10cSrcweir m_pCurrentElement = saxHelper.getCurrentNode(); 1075*cdf0e10cSrcweir 1076*cdf0e10cSrcweir buildIDAttr( m_pCurrentElement ); 1077*cdf0e10cSrcweir } 1078*cdf0e10cSrcweir 1079*cdf0e10cSrcweir void SAL_CALL XMLDocumentWrapper_XmlSecImpl::_endElement( const rtl::OUString& aName ) 1080*cdf0e10cSrcweir throw (cssxs::SAXException, cssu::RuntimeException) 1081*cdf0e10cSrcweir { 1082*cdf0e10cSrcweir endElement( aName ); 1083*cdf0e10cSrcweir } 1084*cdf0e10cSrcweir 1085*cdf0e10cSrcweir void SAL_CALL XMLDocumentWrapper_XmlSecImpl::_characters( const rtl::OUString& aChars ) 1086*cdf0e10cSrcweir throw (cssxs::SAXException, cssu::RuntimeException) 1087*cdf0e10cSrcweir { 1088*cdf0e10cSrcweir characters( aChars ); 1089*cdf0e10cSrcweir } 1090*cdf0e10cSrcweir 1091*cdf0e10cSrcweir void SAL_CALL XMLDocumentWrapper_XmlSecImpl::_ignorableWhitespace( const rtl::OUString& aWhitespaces ) 1092*cdf0e10cSrcweir throw (cssxs::SAXException, cssu::RuntimeException) 1093*cdf0e10cSrcweir { 1094*cdf0e10cSrcweir ignorableWhitespace( aWhitespaces ); 1095*cdf0e10cSrcweir } 1096*cdf0e10cSrcweir 1097*cdf0e10cSrcweir void SAL_CALL XMLDocumentWrapper_XmlSecImpl::_processingInstruction( const rtl::OUString& aTarget, const rtl::OUString& aData ) 1098*cdf0e10cSrcweir throw (cssxs::SAXException, cssu::RuntimeException) 1099*cdf0e10cSrcweir { 1100*cdf0e10cSrcweir processingInstruction( aTarget, aData ); 1101*cdf0e10cSrcweir } 1102*cdf0e10cSrcweir 1103*cdf0e10cSrcweir void SAL_CALL XMLDocumentWrapper_XmlSecImpl::_setDocumentLocator( sal_Int32 /*columnNumber*/, sal_Int32 /*lineNumber*/, const rtl::OUString& /*publicId*/, const rtl::OUString& /*systemId*/ ) 1104*cdf0e10cSrcweir throw (cssxs::SAXException, cssu::RuntimeException) 1105*cdf0e10cSrcweir { 1106*cdf0e10cSrcweir } 1107*cdf0e10cSrcweir 1108*cdf0e10cSrcweir rtl::OUString XMLDocumentWrapper_XmlSecImpl_getImplementationName () 1109*cdf0e10cSrcweir throw (cssu::RuntimeException) 1110*cdf0e10cSrcweir { 1111*cdf0e10cSrcweir return rtl::OUString ( RTL_ASCII_USTRINGPARAM ( IMPLEMENTATION_NAME ) ); 1112*cdf0e10cSrcweir } 1113*cdf0e10cSrcweir 1114*cdf0e10cSrcweir sal_Bool SAL_CALL XMLDocumentWrapper_XmlSecImpl_supportsService( const rtl::OUString& ServiceName ) 1115*cdf0e10cSrcweir throw (cssu::RuntimeException) 1116*cdf0e10cSrcweir { 1117*cdf0e10cSrcweir return ServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM ( SERVICE_NAME )); 1118*cdf0e10cSrcweir } 1119*cdf0e10cSrcweir 1120*cdf0e10cSrcweir cssu::Sequence< rtl::OUString > SAL_CALL XMLDocumentWrapper_XmlSecImpl_getSupportedServiceNames( ) 1121*cdf0e10cSrcweir throw (cssu::RuntimeException) 1122*cdf0e10cSrcweir { 1123*cdf0e10cSrcweir cssu::Sequence < rtl::OUString > aRet(1); 1124*cdf0e10cSrcweir rtl::OUString* pArray = aRet.getArray(); 1125*cdf0e10cSrcweir pArray[0] = rtl::OUString ( RTL_ASCII_USTRINGPARAM ( SERVICE_NAME ) ); 1126*cdf0e10cSrcweir return aRet; 1127*cdf0e10cSrcweir } 1128*cdf0e10cSrcweir #undef SERVICE_NAME 1129*cdf0e10cSrcweir 1130*cdf0e10cSrcweir cssu::Reference< cssu::XInterface > SAL_CALL XMLDocumentWrapper_XmlSecImpl_createInstance( 1131*cdf0e10cSrcweir const cssu::Reference< cssl::XMultiServiceFactory > &) 1132*cdf0e10cSrcweir throw( cssu::Exception ) 1133*cdf0e10cSrcweir { 1134*cdf0e10cSrcweir return (cppu::OWeakObject*) new XMLDocumentWrapper_XmlSecImpl( ); 1135*cdf0e10cSrcweir } 1136*cdf0e10cSrcweir 1137*cdf0e10cSrcweir /* XServiceInfo */ 1138*cdf0e10cSrcweir rtl::OUString SAL_CALL XMLDocumentWrapper_XmlSecImpl::getImplementationName( ) 1139*cdf0e10cSrcweir throw (cssu::RuntimeException) 1140*cdf0e10cSrcweir { 1141*cdf0e10cSrcweir return XMLDocumentWrapper_XmlSecImpl_getImplementationName(); 1142*cdf0e10cSrcweir } 1143*cdf0e10cSrcweir sal_Bool SAL_CALL XMLDocumentWrapper_XmlSecImpl::supportsService( const rtl::OUString& rServiceName ) 1144*cdf0e10cSrcweir throw (cssu::RuntimeException) 1145*cdf0e10cSrcweir { 1146*cdf0e10cSrcweir return XMLDocumentWrapper_XmlSecImpl_supportsService( rServiceName ); 1147*cdf0e10cSrcweir } 1148*cdf0e10cSrcweir cssu::Sequence< rtl::OUString > SAL_CALL XMLDocumentWrapper_XmlSecImpl::getSupportedServiceNames( ) 1149*cdf0e10cSrcweir throw (cssu::RuntimeException) 1150*cdf0e10cSrcweir { 1151*cdf0e10cSrcweir return XMLDocumentWrapper_XmlSecImpl_getSupportedServiceNames(); 1152*cdf0e10cSrcweir } 1153*cdf0e10cSrcweir 1154