1 /************************************************************************* 2 * 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * Copyright 2000, 2010 Oracle and/or its affiliates. 6 * 7 * OpenOffice.org - a multi-platform office productivity suite 8 * 9 * This file is part of OpenOffice.org. 10 * 11 * OpenOffice.org is free software: you can redistribute it and/or modify 12 * it under the terms of the GNU Lesser General Public License version 3 13 * only, as published by the Free Software Foundation. 14 * 15 * OpenOffice.org is distributed in the hope that it will be useful, 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 * GNU Lesser General Public License version 3 for more details 19 * (a copy is included in the LICENSE file that accompanied this code). 20 * 21 * You should have received a copy of the GNU Lesser General Public License 22 * version 3 along with OpenOffice.org. If not, see 23 * <http://www.openoffice.org/license.html> 24 * for a copy of the LGPLv3 License. 25 * 26 ************************************************************************/ 27 28 #ifndef XMLSCRIPT_XMLBAS_IMPORT_HXX 29 #define XMLSCRIPT_XMLBAS_IMPORT_HXX 30 31 #include <com/sun/star/xml/sax/XDocumentHandler.hpp> 32 #include <com/sun/star/document/XImporter.hpp> 33 #include <com/sun/star/frame/XModel.hpp> 34 #include <com/sun/star/lang/XServiceInfo.hpp> 35 #ifndef _COM_SUN_STAR_SCRIPT_XLIBRYARYCONTAINER2_HPP_ 36 #include <com/sun/star/script/XLibraryContainer2.hpp> 37 #endif 38 #include <com/sun/star/uno/XComponentContext.hpp> 39 #include <com/sun/star/xml/input/XRoot.hpp> 40 #include <cppuhelper/implbase1.hxx> 41 #include <cppuhelper/implbase3.hxx> 42 #include <osl/mutex.hxx> 43 #include <rtl/ustrbuf.hxx> 44 45 46 //......................................................................... 47 namespace xmlscript 48 { 49 //......................................................................... 50 51 // ============================================================================= 52 // class BasicElementBase 53 // ============================================================================= 54 55 class BasicImport; 56 57 typedef ::cppu::WeakImplHelper1< 58 ::com::sun::star::xml::input::XElement > BasicElementBase_BASE; 59 60 class BasicElementBase : public BasicElementBase_BASE 61 { 62 protected: 63 BasicImport* m_pImport; 64 BasicElementBase* m_pParent; 65 ::rtl::OUString m_aLocalName; 66 ::com::sun::star::uno::Reference< ::com::sun::star::xml::input::XAttributes > m_xAttributes; 67 68 bool getBoolAttr( sal_Bool* pRet, const ::rtl::OUString& rAttrName, 69 const ::com::sun::star::uno::Reference< ::com::sun::star::xml::input::XAttributes >& xAttributes, 70 sal_Int32 nUid ); 71 72 public: 73 BasicElementBase( const ::rtl::OUString& rLocalName, 74 const ::com::sun::star::uno::Reference< ::com::sun::star::xml::input::XAttributes >& xAttributes, 75 BasicElementBase* pParent, BasicImport* pImport ); 76 virtual ~BasicElementBase(); 77 78 // XElement 79 virtual ::com::sun::star::uno::Reference< ::com::sun::star::xml::input::XElement > SAL_CALL getParent() 80 throw (::com::sun::star::uno::RuntimeException); 81 virtual ::rtl::OUString SAL_CALL getLocalName() 82 throw (::com::sun::star::uno::RuntimeException); 83 virtual sal_Int32 SAL_CALL getUid() 84 throw (::com::sun::star::uno::RuntimeException); 85 virtual ::com::sun::star::uno::Reference< ::com::sun::star::xml::input::XAttributes > SAL_CALL getAttributes() 86 throw (::com::sun::star::uno::RuntimeException); 87 virtual ::com::sun::star::uno::Reference< ::com::sun::star::xml::input::XElement > SAL_CALL startChildElement( 88 sal_Int32 nUid, const ::rtl::OUString& rLocalName, 89 const ::com::sun::star::uno::Reference< ::com::sun::star::xml::input::XAttributes >& xAttributes ) 90 throw (::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException); 91 virtual void SAL_CALL characters( const ::rtl::OUString& rChars ) 92 throw (::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException); 93 virtual void SAL_CALL ignorableWhitespace( 94 const ::rtl::OUString& rWhitespaces ) 95 throw (::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException); 96 virtual void SAL_CALL processingInstruction( 97 const ::rtl::OUString& rTarget, const ::rtl::OUString& rData ) 98 throw (::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException); 99 virtual void SAL_CALL endElement() 100 throw (::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException); 101 }; 102 103 104 // ============================================================================= 105 // class BasicLibrariesElement 106 // ============================================================================= 107 108 class BasicLibrariesElement : public BasicElementBase 109 { 110 private: 111 ::com::sun::star::uno::Reference< ::com::sun::star::script::XLibraryContainer2 > m_xLibContainer; 112 113 public: 114 BasicLibrariesElement( const ::rtl::OUString& rLocalName, 115 const ::com::sun::star::uno::Reference< ::com::sun::star::xml::input::XAttributes >& xAttributes, 116 BasicElementBase* pParent, BasicImport* pImport, 117 const ::com::sun::star::uno::Reference< ::com::sun::star::script::XLibraryContainer2 >& rxLibContainer ); 118 119 // XElement 120 virtual ::com::sun::star::uno::Reference< ::com::sun::star::xml::input::XElement > SAL_CALL startChildElement( 121 sal_Int32 nUid, const ::rtl::OUString& rLocalName, 122 const ::com::sun::star::uno::Reference< ::com::sun::star::xml::input::XAttributes >& xAttributes ) 123 throw (::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException); 124 virtual void SAL_CALL endElement() 125 throw (::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException); 126 }; 127 128 129 // ============================================================================= 130 // class BasicEmbeddedLibraryElement 131 // ============================================================================= 132 133 class BasicEmbeddedLibraryElement : public BasicElementBase 134 { 135 private: 136 ::com::sun::star::uno::Reference< ::com::sun::star::script::XLibraryContainer2 > m_xLibContainer; 137 ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer > m_xLib; 138 ::rtl::OUString m_aLibName; 139 bool m_bReadOnly; 140 141 public: 142 BasicEmbeddedLibraryElement( const ::rtl::OUString& rLocalName, 143 const ::com::sun::star::uno::Reference< ::com::sun::star::xml::input::XAttributes >& xAttributes, 144 BasicElementBase* pParent, BasicImport* pImport, 145 const ::com::sun::star::uno::Reference< ::com::sun::star::script::XLibraryContainer2 >& rxLibContainer, 146 const ::rtl::OUString& rLibName, bool bReadOnly ); 147 148 // XElement 149 virtual ::com::sun::star::uno::Reference< ::com::sun::star::xml::input::XElement > SAL_CALL startChildElement( 150 sal_Int32 nUid, const ::rtl::OUString& rLocalName, 151 const ::com::sun::star::uno::Reference< ::com::sun::star::xml::input::XAttributes >& xAttributes ) 152 throw (::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException); 153 virtual void SAL_CALL endElement() 154 throw (::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException); 155 }; 156 157 158 // ============================================================================= 159 // class BasicModuleElement 160 // ============================================================================= 161 162 class BasicModuleElement : public BasicElementBase 163 { 164 private: 165 ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer > m_xLib; 166 ::rtl::OUString m_aName; 167 168 public: 169 BasicModuleElement( const ::rtl::OUString& rLocalName, 170 const ::com::sun::star::uno::Reference< ::com::sun::star::xml::input::XAttributes >& xAttributes, 171 BasicElementBase* pParent, BasicImport* pImport, 172 const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer >& rxLib, 173 const ::rtl::OUString& rName ); 174 175 // XElement 176 virtual ::com::sun::star::uno::Reference< ::com::sun::star::xml::input::XElement > SAL_CALL startChildElement( 177 sal_Int32 nUid, const ::rtl::OUString& rLocalName, 178 const ::com::sun::star::uno::Reference< ::com::sun::star::xml::input::XAttributes >& xAttributes ) 179 throw (::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException); 180 virtual void SAL_CALL endElement() 181 throw (::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException); 182 }; 183 184 185 // ============================================================================= 186 // class BasicSourceCodeElement 187 // ============================================================================= 188 189 class BasicSourceCodeElement : public BasicElementBase 190 { 191 private: 192 ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer > m_xLib; 193 ::rtl::OUString m_aName; 194 ::rtl::OUStringBuffer m_aBuffer; 195 196 public: 197 BasicSourceCodeElement( const ::rtl::OUString& rLocalName, 198 const ::com::sun::star::uno::Reference< ::com::sun::star::xml::input::XAttributes >& xAttributes, 199 BasicElementBase* pParent, BasicImport* pImport, 200 const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer >& rxLib, 201 const ::rtl::OUString& rName ); 202 203 // XElement 204 virtual void SAL_CALL characters( const ::rtl::OUString& rChars ) 205 throw (::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException); 206 virtual void SAL_CALL endElement() 207 throw (::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException); 208 }; 209 210 211 // ============================================================================= 212 // class BasicImport 213 // ============================================================================= 214 215 typedef ::cppu::WeakImplHelper1< 216 ::com::sun::star::xml::input::XRoot > BasicImport_BASE; 217 218 class BasicImport : public BasicImport_BASE 219 { 220 friend class BasicElementBase; 221 friend class BasicLibrariesElement; 222 friend class BasicEmbeddedLibraryElement; 223 friend class BasicModuleElement; 224 225 private: 226 sal_Int32 XMLNS_UID; 227 sal_Int32 XMLNS_XLINK_UID; 228 ::com::sun::star::uno::Reference< ::com::sun::star::frame::XModel > m_xModel; 229 sal_Bool m_bOasis; 230 231 public: 232 BasicImport( const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XModel >& rxModel, sal_Bool bOasis ); 233 virtual ~BasicImport(); 234 235 // XRoot 236 virtual void SAL_CALL startDocument( 237 const ::com::sun::star::uno::Reference< ::com::sun::star::xml::input::XNamespaceMapping >& xNamespaceMapping ) 238 throw (::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException); 239 virtual void SAL_CALL endDocument() 240 throw (::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException); 241 virtual void SAL_CALL processingInstruction( 242 const ::rtl::OUString& rTarget, const ::rtl::OUString& rData ) 243 throw (::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException); 244 virtual void SAL_CALL setDocumentLocator( 245 const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XLocator >& xLocator ) 246 throw (::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException); 247 virtual ::com::sun::star::uno::Reference< ::com::sun::star::xml::input::XElement > SAL_CALL startRootElement( 248 sal_Int32 nUid, const ::rtl::OUString& rLocalName, 249 const ::com::sun::star::uno::Reference< ::com::sun::star::xml::input::XAttributes >& xAttributes ) 250 throw (::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException); 251 }; 252 253 254 // ============================================================================= 255 // class XMLBasicImporterBase 256 // ============================================================================= 257 258 typedef ::cppu::WeakImplHelper3< 259 ::com::sun::star::lang::XServiceInfo, 260 ::com::sun::star::document::XImporter, 261 ::com::sun::star::xml::sax::XDocumentHandler > XMLBasicImporterBase_BASE; 262 263 class XMLBasicImporterBase : public XMLBasicImporterBase_BASE 264 { 265 private: 266 ::osl::Mutex m_aMutex; 267 ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext > m_xContext; 268 ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XDocumentHandler > m_xHandler; 269 ::com::sun::star::uno::Reference< ::com::sun::star::frame::XModel > m_xModel; 270 sal_Bool m_bOasis; 271 272 public: 273 XMLBasicImporterBase( 274 const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >& rxContext, sal_Bool bOasis ); 275 virtual ~XMLBasicImporterBase(); 276 277 // XServiceInfo 278 virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) 279 throw (::com::sun::star::uno::RuntimeException); 280 281 // XImporter 282 virtual void SAL_CALL setTargetDocument( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XComponent >& rxDoc ) 283 throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException); 284 285 // XDocumentHandler 286 virtual void SAL_CALL startDocument() 287 throw (::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException); 288 virtual void SAL_CALL endDocument() 289 throw (::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException); 290 virtual void SAL_CALL startElement( const ::rtl::OUString& aName, 291 const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList >& xAttribs ) 292 throw (::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException); 293 virtual void SAL_CALL endElement( const ::rtl::OUString& aName ) 294 throw (::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException); 295 virtual void SAL_CALL characters( const ::rtl::OUString& aChars ) 296 throw (::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException); 297 virtual void SAL_CALL ignorableWhitespace( const ::rtl::OUString& aWhitespaces ) 298 throw (::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException); 299 virtual void SAL_CALL processingInstruction( const ::rtl::OUString& aTarget, const ::rtl::OUString& aData ) 300 throw (::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException); 301 virtual void SAL_CALL setDocumentLocator( const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XLocator >& xLocator ) 302 throw (::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException); 303 }; 304 305 306 // ============================================================================= 307 // class XMLBasicImporter 308 // ============================================================================= 309 310 class XMLBasicImporter : public XMLBasicImporterBase 311 { 312 public: 313 XMLBasicImporter( 314 const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >& rxContext ); 315 virtual ~XMLBasicImporter(); 316 317 // XServiceInfo 318 virtual ::rtl::OUString SAL_CALL getImplementationName( ) 319 throw (::com::sun::star::uno::RuntimeException); 320 virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames( ) 321 throw (::com::sun::star::uno::RuntimeException); 322 }; 323 324 325 // ============================================================================= 326 // class XMLOasisBasicImporter 327 // ============================================================================= 328 329 class XMLOasisBasicImporter : public XMLBasicImporterBase 330 { 331 public: 332 XMLOasisBasicImporter( 333 const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >& rxContext ); 334 virtual ~XMLOasisBasicImporter(); 335 336 // XServiceInfo 337 virtual ::rtl::OUString SAL_CALL getImplementationName( ) 338 throw (::com::sun::star::uno::RuntimeException); 339 virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames( ) 340 throw (::com::sun::star::uno::RuntimeException); 341 }; 342 343 //......................................................................... 344 } // namespace xmlscript 345 //......................................................................... 346 347 #endif // XMLSCRIPT_XMLBAS_IMPORT_HXX 348