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