Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /*
3 : * This file is part of the LibreOffice project.
4 : *
5 : * This Source Code Form is subject to the terms of the Mozilla Public
6 : * License, v. 2.0. If a copy of the MPL was not distributed with this
7 : * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 : *
9 : * This file incorporates work covered by the following license notice:
10 : *
11 : * Licensed to the Apache Software Foundation (ASF) under one or more
12 : * contributor license agreements. See the NOTICE file distributed
13 : * with this work for additional information regarding copyright
14 : * ownership. The ASF licenses this file to you under the Apache
15 : * License, Version 2.0 (the "License"); you may not use this file
16 : * except in compliance with the License. You may obtain a copy of
17 : * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 : */
19 :
20 : #include <sal/config.h>
21 :
22 : #include "unoservices.hxx"
23 : #include "xmlbas_import.hxx"
24 : #include <sal/log.hxx>
25 : #include <xmlscript/xmlns.h>
26 : #include <xmlscript/xml_helper.hxx>
27 : #include <com/sun/star/beans/XPropertySet.hpp>
28 : #include <com/sun/star/lang/XMultiComponentFactory.hpp>
29 : #include <com/sun/star/script/XLibraryContainerPassword.hpp>
30 : #include <com/sun/star/document/XEmbeddedScripts.hpp>
31 : #include <cppuhelper/implementationentry.hxx>
32 : #include <cppuhelper/supportsservice.hxx>
33 :
34 : using namespace ::com::sun::star;
35 : using namespace ::com::sun::star::lang;
36 : using namespace ::com::sun::star::uno;
37 :
38 : namespace xmlscript
39 : {
40 :
41 : // BasicElementBase
42 :
43 1 : BasicElementBase::BasicElementBase( const OUString& rLocalName,
44 : const Reference< xml::input::XAttributes >& xAttributes,
45 : BasicElementBase* pParent, BasicImport* pImport )
46 : :m_pImport( pImport )
47 : ,m_pParent( pParent )
48 : ,m_aLocalName( rLocalName )
49 1 : ,m_xAttributes( xAttributes )
50 : {
51 1 : if ( m_pImport )
52 1 : m_pImport->acquire();
53 1 : if ( m_pParent )
54 0 : m_pParent->acquire();
55 1 : }
56 :
57 2 : BasicElementBase::~BasicElementBase()
58 : {
59 1 : if ( m_pImport )
60 1 : m_pImport->release();
61 1 : if ( m_pParent )
62 0 : m_pParent->release();
63 1 : }
64 :
65 0 : bool BasicElementBase::getBoolAttr( sal_Bool* pRet, const OUString& rAttrName,
66 : const ::com::sun::star::uno::Reference< ::com::sun::star::xml::input::XAttributes >& xAttributes,
67 : sal_Int32 nUid )
68 : {
69 0 : if ( xAttributes.is() )
70 : {
71 0 : OUString aValue( xAttributes->getValueByUidName( nUid, rAttrName ) );
72 0 : if ( !aValue.isEmpty() )
73 : {
74 0 : if ( aValue == "true" )
75 : {
76 0 : *pRet = sal_True;
77 0 : return true;
78 : }
79 0 : else if ( aValue == "false" )
80 : {
81 0 : *pRet = sal_False;
82 0 : return true;
83 : }
84 : else
85 : {
86 0 : throw xml::sax::SAXException(rAttrName + ": no boolean value (true|false)!", Reference< XInterface >(), Any() );
87 : }
88 0 : }
89 : }
90 0 : return false;
91 : }
92 :
93 : // XElement
94 :
95 0 : Reference< xml::input::XElement > BasicElementBase::getParent()
96 : throw (RuntimeException, std::exception)
97 : {
98 0 : return static_cast< xml::input::XElement* >( m_pParent );
99 : }
100 :
101 0 : OUString BasicElementBase::getLocalName()
102 : throw (RuntimeException, std::exception)
103 : {
104 0 : return m_aLocalName;
105 : }
106 :
107 0 : sal_Int32 BasicElementBase::getUid()
108 : throw (RuntimeException, std::exception)
109 : {
110 0 : sal_Int32 nId = -1;
111 0 : if ( m_pImport )
112 0 : nId = m_pImport->XMLNS_UID;
113 0 : return nId;
114 : }
115 :
116 0 : Reference< xml::input::XAttributes > BasicElementBase::getAttributes()
117 : throw (RuntimeException, std::exception)
118 : {
119 0 : return m_xAttributes;
120 : }
121 :
122 0 : Reference< xml::input::XElement > BasicElementBase::startChildElement(
123 : sal_Int32 /*nUid*/, const OUString& /*rLocalName*/,
124 : const Reference< xml::input::XAttributes >& /*xAttributes*/ )
125 : throw (xml::sax::SAXException, RuntimeException, std::exception)
126 : {
127 0 : throw xml::sax::SAXException("unexpected element!", Reference< XInterface >(), Any() );
128 : }
129 :
130 0 : void BasicElementBase::characters( const OUString& /*rChars*/ )
131 : throw (xml::sax::SAXException, RuntimeException, std::exception)
132 : {
133 : // not used, all characters ignored
134 0 : }
135 :
136 0 : void BasicElementBase::ignorableWhitespace( const OUString& /*rWhitespaces*/ )
137 : throw (xml::sax::SAXException, RuntimeException, std::exception)
138 : {
139 0 : }
140 :
141 0 : void BasicElementBase::processingInstruction( const OUString& /*rTarget*/, const OUString& /*rData*/ )
142 : throw (xml::sax::SAXException, RuntimeException, std::exception)
143 : {
144 0 : }
145 :
146 0 : void BasicElementBase::endElement()
147 : throw (xml::sax::SAXException, RuntimeException, std::exception)
148 : {
149 0 : }
150 :
151 : // BasicLibrariesElement
152 :
153 1 : BasicLibrariesElement::BasicLibrariesElement( const OUString& rLocalName,
154 : const Reference< xml::input::XAttributes >& xAttributes,
155 : BasicElementBase* pParent, BasicImport* pImport,
156 : const Reference< script::XLibraryContainer2 >& rxLibContainer )
157 : :BasicElementBase( rLocalName, xAttributes, pParent, pImport )
158 1 : ,m_xLibContainer( rxLibContainer )
159 : {
160 1 : }
161 :
162 : // XElement
163 :
164 0 : Reference< xml::input::XElement > BasicLibrariesElement::startChildElement(
165 : sal_Int32 nUid, const OUString& rLocalName,
166 : const Reference< xml::input::XAttributes >& xAttributes )
167 : throw (xml::sax::SAXException, RuntimeException, std::exception)
168 : {
169 0 : Reference< xml::input::XElement > xElement;
170 :
171 0 : if ( nUid != m_pImport->XMLNS_UID )
172 : {
173 0 : throw xml::sax::SAXException( "illegal namespace!", Reference< XInterface >(), Any() );
174 : }
175 0 : else if ( rLocalName == "library-linked" )
176 : {
177 0 : if ( xAttributes.is() )
178 : {
179 0 : OUString aName = xAttributes->getValueByUidName( m_pImport->XMLNS_UID, "name" );
180 :
181 0 : OUString aStorageURL = xAttributes->getValueByUidName(m_pImport->XMLNS_XLINK_UID, "href" );
182 :
183 0 : sal_Bool bReadOnly = sal_False;
184 0 : getBoolAttr( &bReadOnly,"readonly", xAttributes, m_pImport->XMLNS_UID );
185 :
186 0 : if ( m_xLibContainer.is() )
187 : {
188 : try
189 : {
190 : Reference< container::XNameAccess > xLib(
191 0 : m_xLibContainer->createLibraryLink( aName, aStorageURL, bReadOnly ) );
192 0 : if ( xLib.is() )
193 0 : xElement.set( new BasicElementBase( rLocalName, xAttributes, this, m_pImport ) );
194 : }
195 0 : catch ( const container::ElementExistException& e )
196 : {
197 : SAL_INFO("xmlscript.xmlflat", "BasicLibrariesElement::startChildElement: caught ElementExceptionExist reason " << e.Message );
198 : }
199 0 : catch ( const lang::IllegalArgumentException& e )
200 : {
201 : SAL_INFO("xmlscript.xmlflat", "BasicLibrariesElement::startChildElement: caught IllegalArgumentException reason " << e.Message );
202 : }
203 0 : }
204 : }
205 : }
206 0 : else if ( rLocalName == "library-embedded" )
207 : {
208 : // TODO: create password protected libraries
209 :
210 0 : if ( xAttributes.is() )
211 : {
212 0 : OUString aName = xAttributes->getValueByUidName( m_pImport->XMLNS_UID, "name" );
213 :
214 0 : sal_Bool bReadOnly = sal_False;
215 0 : getBoolAttr( &bReadOnly, "readonly", xAttributes, m_pImport->XMLNS_UID );
216 :
217 0 : if ( m_xLibContainer.is() )
218 : {
219 : try
220 : {
221 0 : Reference< container::XNameContainer > xLib;
222 0 : if ( m_xLibContainer->hasByName( aName ) )
223 : {
224 : // Standard library
225 0 : m_xLibContainer->getByName( aName ) >>= xLib;
226 : }
227 : else
228 : {
229 0 : xLib.set( m_xLibContainer->createLibrary( aName ) );
230 : }
231 :
232 0 : if ( xLib.is() )
233 0 : xElement.set( new BasicEmbeddedLibraryElement( rLocalName, xAttributes, this, m_pImport, m_xLibContainer, aName, bReadOnly ) );
234 : }
235 0 : catch ( const lang::IllegalArgumentException& e )
236 : {
237 : SAL_INFO("xmlscript.xmlflat", "BasicLibrariesElement::startChildElement: caught IllegalArgumentException reason " << e.Message );
238 : }
239 0 : }
240 : }
241 : }
242 : else
243 : {
244 0 : throw xml::sax::SAXException( "expected library-linked or library-embedded element!", Reference< XInterface >(), Any() );
245 : }
246 :
247 0 : return xElement;
248 : }
249 :
250 1 : void BasicLibrariesElement::endElement()
251 : throw (xml::sax::SAXException, RuntimeException, std::exception)
252 : {
253 1 : }
254 :
255 : // BasicEmbeddedLibraryElement
256 :
257 0 : BasicEmbeddedLibraryElement::BasicEmbeddedLibraryElement( const OUString& rLocalName,
258 : const Reference< xml::input::XAttributes >& xAttributes,
259 : BasicElementBase* pParent, BasicImport* pImport,
260 : const Reference< script::XLibraryContainer2 >& rxLibContainer,
261 : const OUString& rLibName, bool bReadOnly )
262 : :BasicElementBase( rLocalName, xAttributes, pParent, pImport )
263 : ,m_xLibContainer( rxLibContainer )
264 : ,m_aLibName( rLibName )
265 0 : ,m_bReadOnly( bReadOnly )
266 : {
267 : try
268 : {
269 0 : if ( m_xLibContainer.is() && m_xLibContainer->hasByName( m_aLibName ) )
270 0 : m_xLibContainer->getByName( m_aLibName ) >>= m_xLib;
271 : }
272 0 : catch ( const lang::WrappedTargetException& e )
273 : {
274 : SAL_INFO("xmlscript.xmlflat", "BasicEmbeddedLibraryElement CTOR: caught WrappedTargetException reason " << e.Message );
275 : }
276 0 : }
277 :
278 : // XElement
279 :
280 0 : Reference< xml::input::XElement > BasicEmbeddedLibraryElement::startChildElement(
281 : sal_Int32 nUid, const OUString& rLocalName,
282 : const Reference< xml::input::XAttributes >& xAttributes )
283 : throw (xml::sax::SAXException, RuntimeException, std::exception)
284 : {
285 0 : Reference< xml::input::XElement > xElement;
286 :
287 0 : if ( nUid != m_pImport->XMLNS_UID )
288 : {
289 0 : throw xml::sax::SAXException( "illegal namespace!", Reference< XInterface >(), Any() );
290 : }
291 0 : else if ( rLocalName == "module" )
292 : {
293 0 : if ( xAttributes.is() )
294 : {
295 0 : OUString aName = xAttributes->getValueByUidName(m_pImport->XMLNS_UID, "name" );
296 :
297 0 : if ( m_xLib.is() && !aName.isEmpty() )
298 0 : xElement.set( new BasicModuleElement( rLocalName, xAttributes, this, m_pImport, m_xLib, aName ) );
299 : }
300 : }
301 : else
302 : {
303 0 : throw xml::sax::SAXException( "expected module element!", Reference< XInterface >(), Any() );
304 : }
305 :
306 0 : return xElement;
307 : }
308 :
309 0 : void BasicEmbeddedLibraryElement::endElement()
310 : throw (xml::sax::SAXException, RuntimeException, std::exception)
311 : {
312 0 : if ( m_xLibContainer.is() && m_xLibContainer->hasByName( m_aLibName ) && m_bReadOnly )
313 0 : m_xLibContainer->setLibraryReadOnly( m_aLibName, m_bReadOnly );
314 0 : }
315 :
316 : // BasicModuleElement
317 :
318 0 : BasicModuleElement::BasicModuleElement( const OUString& rLocalName,
319 : const Reference< xml::input::XAttributes >& xAttributes,
320 : BasicElementBase* pParent, BasicImport* pImport,
321 : const Reference< container::XNameContainer >& rxLib, const OUString& rName )
322 : :BasicElementBase( rLocalName, xAttributes, pParent, pImport )
323 : ,m_xLib( rxLib )
324 0 : ,m_aName( rName )
325 : {
326 0 : }
327 :
328 : // XElement
329 :
330 0 : Reference< xml::input::XElement > BasicModuleElement::startChildElement(
331 : sal_Int32 nUid, const OUString& rLocalName,
332 : const Reference< xml::input::XAttributes >& xAttributes )
333 : throw (xml::sax::SAXException, RuntimeException, std::exception)
334 : {
335 : // TODO: <byte-code>
336 :
337 0 : Reference< xml::input::XElement > xElement;
338 :
339 0 : if ( nUid != m_pImport->XMLNS_UID )
340 : {
341 0 : throw xml::sax::SAXException( "illegal namespace!", Reference< XInterface >(), Any() );
342 : }
343 0 : else if ( rLocalName == "source-code" )
344 : {
345 : // TODO: password protected libraries
346 :
347 0 : if ( xAttributes.is() )
348 : {
349 0 : if ( m_xLib.is() && !m_aName.isEmpty() )
350 0 : xElement.set( new BasicSourceCodeElement( rLocalName, xAttributes, this, m_pImport, m_xLib, m_aName ) );
351 : }
352 : }
353 : else
354 : {
355 0 : throw xml::sax::SAXException( "expected source-code element!", Reference< XInterface >(), Any() );
356 : }
357 :
358 0 : return xElement;
359 : }
360 :
361 0 : void BasicModuleElement::endElement()
362 : throw (xml::sax::SAXException, RuntimeException, std::exception)
363 : {
364 0 : }
365 :
366 : // BasicSourceCodeElement
367 :
368 0 : BasicSourceCodeElement::BasicSourceCodeElement( const OUString& rLocalName,
369 : const Reference< xml::input::XAttributes >& xAttributes,
370 : BasicElementBase* pParent, BasicImport* pImport,
371 : const Reference< container::XNameContainer >& rxLib, const OUString& rName )
372 : :BasicElementBase( rLocalName, xAttributes, pParent, pImport )
373 : ,m_xLib( rxLib )
374 0 : ,m_aName( rName )
375 : {
376 0 : }
377 :
378 : // XElement
379 :
380 0 : void BasicSourceCodeElement::characters( const OUString& rChars )
381 : throw (xml::sax::SAXException, RuntimeException, std::exception)
382 : {
383 0 : m_aBuffer.append( rChars );
384 0 : }
385 :
386 0 : void BasicSourceCodeElement::endElement()
387 : throw (xml::sax::SAXException, RuntimeException, std::exception)
388 : {
389 : try
390 : {
391 0 : if ( m_xLib.is() && !m_aName.isEmpty() )
392 : {
393 0 : Any aElement;
394 0 : aElement <<= m_aBuffer.makeStringAndClear();
395 0 : m_xLib->insertByName( m_aName, aElement );
396 : }
397 : }
398 0 : catch ( const container::ElementExistException& e )
399 : {
400 : SAL_INFO("xmlscript.xmlflat", "BasicSourceCodeElement::endElement: caught ElementExceptionExist reason " << e.Message );
401 : }
402 0 : catch ( const lang::IllegalArgumentException& e )
403 : {
404 : SAL_INFO("xmlscript.xmlflat", "BasicSourceCodeElement::endElement: caught IllegalArgumentException reason " << e.Message );
405 : }
406 0 : catch ( const lang::WrappedTargetException& e )
407 : {
408 : SAL_INFO("xmlscript.xmlflat", "BasicSourceCodeElement::endElement: caught WrappedTargetException reason " << e.Message );
409 : }
410 0 : }
411 :
412 : // BasicImport
413 :
414 1 : BasicImport::BasicImport( const Reference< frame::XModel >& rxModel, bool bOasis )
415 : : XMLNS_UID(0)
416 : , XMLNS_XLINK_UID(0)
417 : , m_xModel(rxModel)
418 1 : , m_bOasis(bOasis)
419 : {
420 1 : }
421 :
422 2 : BasicImport::~BasicImport()
423 : {
424 2 : }
425 :
426 : // XRoot
427 :
428 1 : void BasicImport::startDocument( const Reference< xml::input::XNamespaceMapping >& xNamespaceMapping )
429 : throw (xml::sax::SAXException, RuntimeException, std::exception)
430 : {
431 1 : if ( xNamespaceMapping.is() )
432 : {
433 1 : OUString aURI;
434 1 : if ( m_bOasis )
435 1 : aURI = XMLNS_OOO_URI;
436 : else
437 0 : aURI = XMLNS_SCRIPT_URI;
438 1 : XMLNS_UID = xNamespaceMapping->getUidByUri( aURI );
439 1 : XMLNS_XLINK_UID = xNamespaceMapping->getUidByUri( XMLNS_XLINK_URI );
440 : }
441 1 : }
442 :
443 1 : void BasicImport::endDocument()
444 : throw (xml::sax::SAXException, RuntimeException, std::exception)
445 : {
446 1 : }
447 :
448 0 : void BasicImport::processingInstruction( const OUString& /*rTarget*/, const OUString& /*rData*/ )
449 : throw (xml::sax::SAXException, RuntimeException, std::exception)
450 : {
451 0 : }
452 :
453 0 : void BasicImport::setDocumentLocator( const Reference< xml::sax::XLocator >& /*xLocator*/ )
454 : throw (xml::sax::SAXException, RuntimeException, std::exception)
455 : {
456 0 : }
457 :
458 1 : Reference< xml::input::XElement > BasicImport::startRootElement( sal_Int32 nUid, const OUString& rLocalName,
459 : Reference< xml::input::XAttributes > const & xAttributes )
460 : throw (xml::sax::SAXException, RuntimeException, std::exception)
461 : {
462 1 : Reference< xml::input::XElement > xElement;
463 :
464 1 : if ( nUid != XMLNS_UID )
465 : {
466 0 : throw xml::sax::SAXException( "illegal namespace!", Reference< XInterface >(), Any() );
467 : }
468 1 : else if ( rLocalName == "libraries" )
469 : {
470 1 : Reference< script::XLibraryContainer2 > xLibContainer;
471 :
472 : // try the XEmbeddedScripts interface
473 2 : Reference< document::XEmbeddedScripts > xDocumentScripts( m_xModel, UNO_QUERY );
474 1 : if ( xDocumentScripts.is() )
475 1 : xLibContainer.set( xDocumentScripts->getBasicLibraries().get() );
476 :
477 1 : if ( !xLibContainer.is() )
478 : {
479 : // try the "BasicLibraries" property (old-style, for compatibility)
480 0 : Reference< beans::XPropertySet > xPSet( m_xModel, UNO_QUERY );
481 0 : if ( xPSet.is() )
482 0 : xPSet->getPropertyValue("BasicLibraries" ) >>= xLibContainer;
483 : }
484 :
485 : SAL_WARN_IF( !xLibContainer.is(), "xmlscript.xmlflat", "BasicImport::startRootElement: nowhere to import to!" );
486 :
487 1 : if ( xLibContainer.is() )
488 : {
489 1 : xElement.set( new BasicLibrariesElement( rLocalName, xAttributes, 0, this, xLibContainer ) );
490 1 : }
491 : }
492 : else
493 : {
494 0 : throw xml::sax::SAXException("illegal root element (expected libraries) given: " + rLocalName, Reference< XInterface >(), Any() );
495 : }
496 :
497 1 : return xElement;
498 : }
499 :
500 : // component operations
501 :
502 8 : OUString getImplementationName_XMLBasicImporter()
503 : {
504 8 : return OUString( "com.sun.star.comp.xmlscript.XMLBasicImporter" );
505 : }
506 :
507 2 : Sequence< OUString > getSupportedServiceNames_XMLBasicImporter()
508 : {
509 2 : Sequence< OUString > aNames(1);
510 2 : aNames.getArray()[0] = "com.sun.star.document.XMLBasicImporter";
511 2 : return aNames;
512 : }
513 :
514 8 : OUString getImplementationName_XMLOasisBasicImporter()
515 : {
516 8 : return OUString( "com.sun.star.comp.xmlscript.XMLOasisBasicImporter" );
517 : }
518 :
519 3 : Sequence< OUString > getSupportedServiceNames_XMLOasisBasicImporter()
520 : {
521 3 : Sequence< OUString > aNames(1);
522 3 : aNames.getArray()[0] = "com.sun.star.document.XMLOasisBasicImporter";
523 3 : return aNames;
524 : }
525 :
526 : // XMLBasicImporterBase
527 :
528 3 : XMLBasicImporterBase::XMLBasicImporterBase( const Reference< XComponentContext >& rxContext, bool bOasis )
529 : :m_xContext( rxContext )
530 3 : ,m_bOasis( bOasis )
531 : {
532 3 : }
533 :
534 3 : XMLBasicImporterBase::~XMLBasicImporterBase()
535 : {
536 3 : }
537 :
538 : // XServiceInfo
539 0 : sal_Bool XMLBasicImporterBase::supportsService( const OUString& rServiceName ) throw (RuntimeException, std::exception)
540 : {
541 0 : return cppu::supportsService(this, rServiceName);
542 : }
543 :
544 : // XImporter
545 1 : void XMLBasicImporterBase::setTargetDocument( const Reference< XComponent >& rxDoc )
546 : throw (IllegalArgumentException, RuntimeException, std::exception)
547 : {
548 1 : ::osl::MutexGuard aGuard( m_aMutex );
549 :
550 1 : m_xModel.set( rxDoc, UNO_QUERY );
551 :
552 1 : if ( !m_xModel.is() )
553 : {
554 0 : throw IllegalArgumentException( "XMLBasicExporter::setTargetDocument: no document model!", Reference< XInterface >(), 1 );
555 : }
556 :
557 1 : if ( m_xContext.is() )
558 : {
559 1 : Reference< XMultiComponentFactory > xSMgr( m_xContext->getServiceManager() );
560 1 : if ( xSMgr.is() )
561 : {
562 1 : Reference < xml::input::XRoot > xRoot( new BasicImport( m_xModel, m_bOasis ) );
563 2 : Sequence < Any > aArgs( 1 );
564 1 : aArgs[0] <<= xRoot;
565 2 : m_xHandler.set( xSMgr->createInstanceWithArgumentsAndContext("com.sun.star.xml.input.SaxDocumentHandler", aArgs, m_xContext ), UNO_QUERY );
566 1 : }
567 1 : }
568 1 : }
569 :
570 : // XDocumentHandler
571 :
572 1 : void XMLBasicImporterBase::startDocument()
573 : throw (xml::sax::SAXException, RuntimeException, std::exception)
574 : {
575 1 : ::osl::MutexGuard aGuard( m_aMutex );
576 :
577 1 : if ( m_xHandler.is() )
578 1 : m_xHandler->startDocument();
579 1 : }
580 :
581 1 : void XMLBasicImporterBase::endDocument()
582 : throw (xml::sax::SAXException, RuntimeException, std::exception)
583 : {
584 1 : ::osl::MutexGuard aGuard( m_aMutex );
585 :
586 1 : if ( m_xHandler.is() )
587 1 : m_xHandler->endDocument();
588 1 : }
589 :
590 1 : void XMLBasicImporterBase::startElement( const OUString& aName,
591 : const Reference< xml::sax::XAttributeList >& xAttribs )
592 : throw (xml::sax::SAXException, RuntimeException, std::exception)
593 : {
594 1 : ::osl::MutexGuard aGuard( m_aMutex );
595 :
596 1 : if ( m_xHandler.is() )
597 1 : m_xHandler->startElement( aName, xAttribs );
598 1 : }
599 :
600 1 : void XMLBasicImporterBase::endElement( const OUString& aName )
601 : throw (xml::sax::SAXException, RuntimeException, std::exception)
602 : {
603 1 : ::osl::MutexGuard aGuard( m_aMutex );
604 :
605 1 : if ( m_xHandler.is() )
606 1 : m_xHandler->endElement( aName );
607 1 : }
608 :
609 0 : void XMLBasicImporterBase::characters( const OUString& aChars )
610 : throw (xml::sax::SAXException, RuntimeException, std::exception)
611 : {
612 0 : ::osl::MutexGuard aGuard( m_aMutex );
613 :
614 0 : if ( m_xHandler.is() )
615 0 : m_xHandler->characters( aChars );
616 0 : }
617 :
618 0 : void XMLBasicImporterBase::ignorableWhitespace( const OUString& aWhitespaces )
619 : throw (xml::sax::SAXException, RuntimeException, std::exception)
620 : {
621 0 : ::osl::MutexGuard aGuard( m_aMutex );
622 :
623 0 : if ( m_xHandler.is() )
624 0 : m_xHandler->ignorableWhitespace( aWhitespaces );
625 0 : }
626 :
627 0 : void XMLBasicImporterBase::processingInstruction( const OUString& aTarget,
628 : const OUString& aData )
629 : throw (xml::sax::SAXException, RuntimeException, std::exception)
630 : {
631 0 : ::osl::MutexGuard aGuard( m_aMutex );
632 :
633 0 : if ( m_xHandler.is() )
634 0 : m_xHandler->processingInstruction( aTarget, aData );
635 0 : }
636 :
637 0 : void XMLBasicImporterBase::setDocumentLocator( const Reference< xml::sax::XLocator >& xLocator )
638 : throw (xml::sax::SAXException, RuntimeException, std::exception)
639 : {
640 0 : ::osl::MutexGuard aGuard( m_aMutex );
641 :
642 0 : if ( m_xHandler.is() )
643 0 : m_xHandler->setDocumentLocator( xLocator );
644 0 : }
645 :
646 : // XMLBasicImporter
647 :
648 1 : XMLBasicImporter::XMLBasicImporter( const Reference< XComponentContext >& rxContext )
649 1 : :XMLBasicImporterBase( rxContext, false )
650 : {
651 1 : }
652 :
653 2 : XMLBasicImporter::~XMLBasicImporter()
654 : {
655 2 : }
656 :
657 : // XServiceInfo
658 :
659 1 : OUString XMLBasicImporter::getImplementationName( ) throw (RuntimeException, std::exception)
660 : {
661 1 : return getImplementationName_XMLBasicImporter();
662 : }
663 :
664 1 : Sequence< OUString > XMLBasicImporter::getSupportedServiceNames( ) throw (RuntimeException, std::exception)
665 : {
666 1 : return getSupportedServiceNames_XMLBasicImporter();
667 : }
668 :
669 : // XMLOasisBasicImporter
670 :
671 2 : XMLOasisBasicImporter::XMLOasisBasicImporter( const Reference< XComponentContext >& rxContext )
672 2 : :XMLBasicImporterBase( rxContext, true )
673 : {
674 2 : }
675 :
676 4 : XMLOasisBasicImporter::~XMLOasisBasicImporter()
677 : {
678 4 : }
679 :
680 : // XServiceInfo
681 :
682 1 : OUString XMLOasisBasicImporter::getImplementationName( ) throw (RuntimeException, std::exception)
683 : {
684 1 : return getImplementationName_XMLOasisBasicImporter();
685 : }
686 :
687 1 : Sequence< OUString > XMLOasisBasicImporter::getSupportedServiceNames( ) throw (RuntimeException, std::exception)
688 : {
689 1 : return getSupportedServiceNames_XMLOasisBasicImporter();
690 : }
691 :
692 : // component operations
693 :
694 1 : Reference< XInterface > SAL_CALL create_XMLBasicImporter(
695 : Reference< XComponentContext > const & xContext )
696 : {
697 1 : return static_cast< lang::XTypeProvider * >( new XMLBasicImporter( xContext ) );
698 : }
699 :
700 2 : Reference< XInterface > SAL_CALL create_XMLOasisBasicImporter(
701 : Reference< XComponentContext > const & xContext )
702 : {
703 2 : return static_cast< lang::XTypeProvider * >( new XMLOasisBasicImporter( xContext ) );
704 : }
705 :
706 : } // namespace xmlscript
707 :
708 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|