1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 24 // MARKER(update_precomp.py): autogen include statement, do not remove 25 #include "precompiled_xmlscript.hxx" 26 #include "imp_share.hxx" 27 28 #include <osl/diagnose.h> 29 30 #include <rtl/ustrbuf.hxx> 31 32 #include <xmlscript/xml_import.hxx> 33 #include <comphelper/processfactory.hxx> 34 35 36 namespace xmlscript 37 { 38 39 //################################################################################################## 40 41 //__________________________________________________________________________________________________ 42 Reference< xml::input::XElement > ModuleElement::getParent() 43 throw (RuntimeException) 44 { 45 return static_cast< xml::input::XElement * >( _pParent ); 46 } 47 //__________________________________________________________________________________________________ 48 OUString ModuleElement::getLocalName() 49 throw (RuntimeException) 50 { 51 return _aLocalName; 52 } 53 //__________________________________________________________________________________________________ 54 sal_Int32 ModuleElement::getUid() 55 throw (RuntimeException) 56 { 57 return _pImport->XMLNS_SCRIPT_UID; 58 } 59 //__________________________________________________________________________________________________ 60 Reference< xml::input::XAttributes > ModuleElement::getAttributes() 61 throw (RuntimeException) 62 { 63 return _xAttributes; 64 } 65 //__________________________________________________________________________________________________ 66 void ModuleElement::ignorableWhitespace( 67 OUString const & /*rWhitespaces*/ ) 68 throw (xml::sax::SAXException, RuntimeException) 69 { 70 // not used 71 } 72 //__________________________________________________________________________________________________ 73 void ModuleElement::characters( OUString const & rChars ) 74 throw (xml::sax::SAXException, RuntimeException) 75 { 76 _StrBuffer.append( rChars ); 77 } 78 //__________________________________________________________________________________________________ 79 void ModuleElement::processingInstruction( 80 OUString const & /*rTarget*/, OUString const & /*rData*/ ) 81 throw (xml::sax::SAXException, RuntimeException) 82 { 83 } 84 //__________________________________________________________________________________________________ 85 void ModuleElement::endElement() 86 throw (xml::sax::SAXException, RuntimeException) 87 { 88 _pImport->mrModuleDesc.aCode = _StrBuffer.makeStringAndClear(); 89 } 90 //__________________________________________________________________________________________________ 91 Reference< xml::input::XElement > ModuleElement::startChildElement( 92 sal_Int32 /*nUid*/, OUString const & /*rLocalName*/, 93 Reference< xml::input::XAttributes > const & /*xAttributes*/ ) 94 throw (xml::sax::SAXException, RuntimeException) 95 { 96 throw xml::sax::SAXException( 97 OUString( RTL_CONSTASCII_USTRINGPARAM("unexpected element!") ), 98 Reference< XInterface >(), Any() ); 99 } 100 101 //__________________________________________________________________________________________________ 102 ModuleElement::ModuleElement( 103 OUString const & rLocalName, 104 Reference< xml::input::XAttributes > const & xAttributes, 105 ModuleElement * pParent, ModuleImport * pImport ) 106 SAL_THROW( () ) 107 : _pImport( pImport ) 108 , _pParent( pParent ) 109 , _aLocalName( rLocalName ) 110 , _xAttributes( xAttributes ) 111 { 112 _pImport->acquire(); 113 114 if (_pParent) 115 { 116 _pParent->acquire(); 117 } 118 } 119 //__________________________________________________________________________________________________ 120 ModuleElement::~ModuleElement() 121 SAL_THROW( () ) 122 { 123 _pImport->release(); 124 125 if (_pParent) 126 { 127 _pParent->release(); 128 } 129 130 #if OSL_DEBUG_LEVEL > 1 131 OString aStr( OUStringToOString( _aLocalName, RTL_TEXTENCODING_ASCII_US ) ); 132 OSL_TRACE( "ModuleElement::~ModuleElement(): %s\n", aStr.getStr() ); 133 #endif 134 } 135 136 //################################################################################################## 137 138 // XRoot 139 140 //______________________________________________________________________________ 141 void ModuleImport::startDocument( 142 Reference< xml::input::XNamespaceMapping > const & xNamespaceMapping ) 143 throw (xml::sax::SAXException, RuntimeException) 144 { 145 XMLNS_SCRIPT_UID = xNamespaceMapping->getUidByUri( 146 OUSTR(XMLNS_SCRIPT_URI) ); 147 XMLNS_LIBRARY_UID = xNamespaceMapping->getUidByUri( 148 OUSTR(XMLNS_LIBRARY_URI) ); 149 XMLNS_XLINK_UID = xNamespaceMapping->getUidByUri( 150 OUSTR(XMLNS_XLINK_URI) ); 151 } 152 153 //__________________________________________________________________________________________________ 154 void ModuleImport::endDocument() 155 throw (xml::sax::SAXException, RuntimeException) 156 { 157 // ignored 158 } 159 //__________________________________________________________________________________________________ 160 void ModuleImport::processingInstruction( 161 OUString const & /*rTarget*/, OUString const & /*rData*/ ) 162 throw (xml::sax::SAXException, RuntimeException) 163 { 164 } 165 //__________________________________________________________________________________________________ 166 void ModuleImport::setDocumentLocator( 167 Reference< xml::sax::XLocator > const & /*xLocator*/ ) 168 throw (xml::sax::SAXException, RuntimeException) 169 { 170 } 171 //__________________________________________________________________________________________________ 172 Reference< xml::input::XElement > ModuleImport::startRootElement( 173 sal_Int32 nUid, OUString const & rLocalName, 174 Reference< xml::input::XAttributes > const & xAttributes ) 175 throw (xml::sax::SAXException, RuntimeException) 176 { 177 if (XMLNS_SCRIPT_UID != nUid) 178 { 179 throw xml::sax::SAXException( 180 OUString( RTL_CONSTASCII_USTRINGPARAM("illegal namespace!") ), 181 Reference< XInterface >(), Any() ); 182 } 183 // window 184 else if (rLocalName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("module") )) 185 { 186 mrModuleDesc.aName = xAttributes->getValueByUidName( 187 XMLNS_SCRIPT_UID, 188 OUString( RTL_CONSTASCII_USTRINGPARAM("name") ) ); 189 mrModuleDesc.aLanguage = xAttributes->getValueByUidName( 190 XMLNS_SCRIPT_UID, 191 OUString( RTL_CONSTASCII_USTRINGPARAM("language") ) ); 192 mrModuleDesc.aModuleType = xAttributes->getValueByUidName( 193 XMLNS_SCRIPT_UID, 194 OUString( RTL_CONSTASCII_USTRINGPARAM("moduleType") ) ); 195 196 return new ModuleElement( rLocalName, xAttributes, 0, this ); 197 } 198 else 199 { 200 throw xml::sax::SAXException( 201 OUString( RTL_CONSTASCII_USTRINGPARAM( 202 "illegal root element (expected module) given: ") ) + 203 rLocalName, Reference< XInterface >(), Any() ); 204 } 205 } 206 //__________________________________________________________________________________________________ 207 ModuleImport::~ModuleImport() 208 SAL_THROW( () ) 209 { 210 #if OSL_DEBUG_LEVEL > 1 211 OSL_TRACE( "ModuleImport::~ModuleImport().\n" ); 212 #endif 213 } 214 215 //################################################################################################## 216 217 Reference< xml::sax::XDocumentHandler > 218 SAL_CALL importScriptModule( ModuleDescriptor& rMod ) 219 SAL_THROW( (Exception) ) 220 { 221 return ::xmlscript::createDocumentHandler( 222 static_cast< xml::input::XRoot * >( new ModuleImport( rMod ) ) ); 223 } 224 225 } 226 227