xref: /trunk/main/xmloff/source/draw/sdxmlimp.cxx (revision cdf0e10c)
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 // MARKER(update_precomp.py): autogen include statement, do not remove
29 #include "precompiled_xmloff.hxx"
30 
31 #include <tools/string.hxx>
32 
33 #include <xmloff/xmlscripti.hxx>
34 #include "sdxmlimp_impl.hxx"
35 #include "ximpbody.hxx"
36 
37 #include <xmloff/xmlmetai.hxx>
38 #include "ximpstyl.hxx"
39 #include "xmloff/xmlnmspe.hxx"
40 #include <xmloff/xmltoken.hxx>
41 #include <xmloff/xmluconv.hxx>
42 #include <xmloff/DocumentSettingsContext.hxx>
43 #include <com/sun/star/form/XFormsSupplier.hpp>
44 #include <com/sun/star/task/XStatusIndicatorSupplier.hpp>
45 #include <com/sun/star/style/XStyleFamiliesSupplier.hpp>
46 #include <com/sun/star/drawing/XMasterPagesSupplier.hpp>
47 #include <com/sun/star/drawing/XDrawPagesSupplier.hpp>
48 #include "sdpropls.hxx"
49 #include <xmloff/xmlexppr.hxx>
50 #include "xmloff/xmlerror.hxx"
51 #include <tools/debug.hxx>
52 #include <com/sun/star/style/XStyle.hpp>
53 
54 #include <xmloff/XMLFontStylesContext.hxx>
55 
56 #include <com/sun/star/document/XDocumentProperties.hpp>
57 #include <com/sun/star/document/XDocumentPropertiesSupplier.hpp>
58 
59 using ::rtl::OUString;
60 using ::rtl::OUStringBuffer;
61 
62 using namespace ::com::sun::star;
63 using namespace ::xmloff::token;
64 
65 //////////////////////////////////////////////////////////////////////////////
66 
67 
68 
69 
70 
71 
72 
73 
74 
75 
76 
77 //////////////////////////////////////////////////////////////////////////////
78 
79 class SdXMLBodyContext_Impl : public SvXMLImportContext
80 {
81 	const SdXMLImport& GetSdImport() const
82 		{ return (const SdXMLImport&)GetImport(); }
83 	SdXMLImport& GetSdImport() { return (SdXMLImport&)GetImport(); }
84 
85 public:
86 
87 	SdXMLBodyContext_Impl( SdXMLImport& rImport, sal_uInt16 nPrfx,
88 				const OUString& rLName,
89 				const uno::Reference< xml::sax::XAttributeList > & xAttrList );
90 	virtual ~SdXMLBodyContext_Impl();
91 
92 	virtual SvXMLImportContext *CreateChildContext( sal_uInt16 nPrefix,
93 				const OUString& rLocalName,
94 				const uno::Reference< xml::sax::XAttributeList > & xAttrList );
95 };
96 
97 SdXMLBodyContext_Impl::SdXMLBodyContext_Impl( SdXMLImport& rImport,
98 				sal_uInt16 nPrfx, const OUString& rLName,
99 				const uno::Reference< xml::sax::XAttributeList > & ) :
100 	SvXMLImportContext( rImport, nPrfx, rLName )
101 {
102 }
103 
104 SdXMLBodyContext_Impl::~SdXMLBodyContext_Impl()
105 {
106 }
107 
108 SvXMLImportContext *SdXMLBodyContext_Impl::CreateChildContext(
109 		sal_uInt16 /*nPrefix*/,
110 		const OUString& rLocalName,
111 		const uno::Reference< xml::sax::XAttributeList > & xAttrList )
112 {
113 	return GetSdImport().CreateBodyContext(rLocalName, xAttrList);
114 }
115 
116 //////////////////////////////////////////////////////////////////////////////
117 
118 // NB: virtually inherit so we can multiply inherit properly
119 //     in SdXMLFlatDocContext_Impl
120 class SdXMLDocContext_Impl : public virtual SvXMLImportContext
121 {
122 protected:
123 	const SdXMLImport& GetSdImport() const { return (const SdXMLImport&)GetImport(); }
124 	SdXMLImport& GetSdImport() { return (SdXMLImport&)GetImport(); }
125 
126 public:
127 	SdXMLDocContext_Impl(
128 		SdXMLImport& rImport,
129 		sal_uInt16 nPrfx,
130 		const OUString& rLName,
131 		const uno::Reference<xml::sax::XAttributeList>& xAttrList);
132 	virtual ~SdXMLDocContext_Impl();
133 
134 	TYPEINFO();
135 
136 	virtual SvXMLImportContext *CreateChildContext(sal_uInt16 nPrefix,
137 		const OUString& rLocalName,
138 		const uno::Reference<xml::sax::XAttributeList>& xAttrList);
139 };
140 
141 //////////////////////////////////////////////////////////////////////////////
142 
143 SdXMLDocContext_Impl::SdXMLDocContext_Impl(
144 	SdXMLImport& rImport,
145 	sal_uInt16 nPrfx,
146 	const OUString& rLName,
147 	const uno::Reference<xml::sax::XAttributeList>&)
148 :	SvXMLImportContext(rImport, nPrfx, rLName)
149 {
150 }
151 
152 //////////////////////////////////////////////////////////////////////////////
153 
154 SdXMLDocContext_Impl::~SdXMLDocContext_Impl()
155 {
156 }
157 
158 TYPEINIT1( SdXMLDocContext_Impl, SvXMLImportContext );
159 
160 //////////////////////////////////////////////////////////////////////////////
161 
162 SvXMLImportContext *SdXMLDocContext_Impl::CreateChildContext(
163 	sal_uInt16 nPrefix,
164 	const OUString& rLocalName,
165 	const uno::Reference<xml::sax::XAttributeList>& xAttrList)
166 {
167 	SvXMLImportContext* pContext = 0L;
168 
169 	const SvXMLTokenMap& rTokenMap = GetSdImport().GetDocElemTokenMap();
170 	switch(rTokenMap.Get(nPrefix, rLocalName))
171 	{
172 		case XML_TOK_DOC_FONTDECLS:
173 		{
174 			pContext = GetSdImport().CreateFontDeclsContext( rLocalName, xAttrList );
175 			break;
176 		}
177 		case XML_TOK_DOC_SETTINGS:
178 		{
179 			if( GetImport().getImportFlags() & IMPORT_SETTINGS )
180 			{
181 				pContext = new XMLDocumentSettingsContext(GetImport(), nPrefix, rLocalName, xAttrList );
182 			}
183 			break;
184 		}
185 		case XML_TOK_DOC_STYLES:
186 		{
187 			if( GetImport().getImportFlags() & IMPORT_STYLES )
188 			{
189 				// office:styles inside office:document
190 				pContext = GetSdImport().CreateStylesContext(rLocalName, xAttrList);
191 			}
192 			break;
193 		}
194 		case XML_TOK_DOC_AUTOSTYLES:
195 		{
196 			if( GetImport().getImportFlags() & IMPORT_AUTOSTYLES )
197 			{
198 				// office:automatic-styles inside office:document
199 				pContext = GetSdImport().CreateAutoStylesContext(rLocalName, xAttrList);
200 			}
201 			break;
202 		}
203 		case XML_TOK_DOC_MASTERSTYLES:
204 		{
205 			if( GetImport().getImportFlags() & IMPORT_MASTERSTYLES )
206 			{
207 				// office:master-styles inside office:document
208 				pContext = GetSdImport().CreateMasterStylesContext(rLocalName, xAttrList);
209 			}
210 			break;
211 		}
212 		case XML_TOK_DOC_META:
213 		{
214             DBG_WARNING("XML_TOK_DOC_META: should not have come here, maybe document is invalid?");
215 			break;
216 		}
217 		case XML_TOK_DOC_SCRIPT:
218 		{
219 			if( GetImport().getImportFlags() & IMPORT_SCRIPTS )
220 			{
221 				// office:script inside office:document
222 				pContext = GetSdImport().CreateScriptContext( rLocalName );
223 			}
224 			break;
225 		}
226 		case XML_TOK_DOC_BODY:
227 		{
228 			if( GetImport().getImportFlags() & IMPORT_CONTENT )
229 			{
230 				// office:body inside office:document
231 				pContext = new SdXMLBodyContext_Impl(GetSdImport(),nPrefix,
232 													 rLocalName, xAttrList);
233 			}
234 			break;
235 		}
236 	}
237 
238 	// call parent when no own context was created
239 	if(!pContext)
240 		pContext = SvXMLImportContext::CreateChildContext(nPrefix, rLocalName, xAttrList);
241 
242 	return pContext;
243 }
244 
245 //////////////////////////////////////////////////////////////////////////////
246 
247 // context for flat file xml format
248 class SdXMLFlatDocContext_Impl
249     : public SdXMLDocContext_Impl, public SvXMLMetaDocumentContext
250 {
251 public:
252     SdXMLFlatDocContext_Impl( SdXMLImport& i_rImport,
253         sal_uInt16 i_nPrefix, const OUString & i_rLName,
254         const uno::Reference<xml::sax::XAttributeList>& i_xAttrList,
255         const uno::Reference<document::XDocumentProperties>& i_xDocProps,
256         const uno::Reference<xml::sax::XDocumentHandler>& i_xDocBuilder);
257 
258     virtual ~SdXMLFlatDocContext_Impl();
259 
260     virtual SvXMLImportContext *CreateChildContext(
261         sal_uInt16 i_nPrefix, const OUString& i_rLocalName,
262         const uno::Reference<xml::sax::XAttributeList>& i_xAttrList);
263 };
264 
265 SdXMLFlatDocContext_Impl::SdXMLFlatDocContext_Impl( SdXMLImport& i_rImport,
266         sal_uInt16 i_nPrefix, const OUString & i_rLName,
267         const uno::Reference<xml::sax::XAttributeList>& i_xAttrList,
268         const uno::Reference<document::XDocumentProperties>& i_xDocProps,
269         const uno::Reference<xml::sax::XDocumentHandler>& i_xDocBuilder) :
270     SvXMLImportContext(i_rImport, i_nPrefix, i_rLName),
271     SdXMLDocContext_Impl(i_rImport, i_nPrefix, i_rLName, i_xAttrList),
272     SvXMLMetaDocumentContext(i_rImport, i_nPrefix, i_rLName,
273         i_xDocProps, i_xDocBuilder)
274 {
275 }
276 
277 SdXMLFlatDocContext_Impl::~SdXMLFlatDocContext_Impl() { }
278 
279 SvXMLImportContext *SdXMLFlatDocContext_Impl::CreateChildContext(
280     sal_uInt16 i_nPrefix, const OUString& i_rLocalName,
281     const uno::Reference<xml::sax::XAttributeList>& i_xAttrList)
282 {
283     // behave like meta base class iff we encounter office:meta
284     const SvXMLTokenMap& rTokenMap = GetSdImport().GetDocElemTokenMap();
285 	if ( XML_TOK_DOC_META == rTokenMap.Get( i_nPrefix, i_rLocalName ) ) {
286         return SvXMLMetaDocumentContext::CreateChildContext(
287                     i_nPrefix, i_rLocalName, i_xAttrList );
288     } else {
289         return SdXMLDocContext_Impl::CreateChildContext(
290                     i_nPrefix, i_rLocalName, i_xAttrList );
291     }
292 }
293 
294 //////////////////////////////////////////////////////////////////////////////
295 
296 #define SERVICE(classname,servicename,implementationname,draw,flags)\
297 uno::Sequence< OUString > SAL_CALL classname##_getSupportedServiceNames() throw()\
298 {\
299 	const OUString aServiceName( RTL_CONSTASCII_USTRINGPARAM( servicename ) );\
300 	const uno::Sequence< OUString > aSeq( &aServiceName, 1 );\
301 	return aSeq;\
302 }\
303 OUString SAL_CALL classname##_getImplementationName() throw()\
304 {\
305 	return OUString( RTL_CONSTASCII_USTRINGPARAM( implementationname ) );\
306 }\
307 uno::Reference< uno::XInterface > SAL_CALL classname##_createInstance(const uno::Reference< lang::XMultiServiceFactory > & rSMgr) throw( uno::Exception )\
308 {\
309 	return (cppu::OWeakObject*)new SdXMLImport( rSMgr, draw, flags );\
310 }
311 
312 SERVICE( XMLImpressImportOasis, "com.sun.star.comp.Impress.XMLOasisImporter", "XMLImpressImportOasis", sal_False, IMPORT_ALL )
313 SERVICE( XMLDrawImportOasis, "com.sun.star.comp.Draw.XMLOasisImporter", "XMLDrawImportOasis", sal_True, IMPORT_ALL )
314 
315 SERVICE( XMLImpressStylesImportOasis, "com.sun.star.comp.Impress.XMLOasisStylesImporter", "XMLImpressStylesImportOasis", sal_False, IMPORT_STYLES|IMPORT_AUTOSTYLES|IMPORT_MASTERSTYLES )
316 SERVICE( XMLDrawStylesImportOasis, "com.sun.star.comp.Draw.XMLOasisStylesImporter", "XMLImpressStylesImportOasis", sal_True, IMPORT_STYLES|IMPORT_AUTOSTYLES|IMPORT_MASTERSTYLES )
317 
318 SERVICE( XMLImpressContentImportOasis, "com.sun.star.comp.Impress.XMLOasisContentImporter", "XMLImpressContentImportOasis", sal_False, IMPORT_AUTOSTYLES|IMPORT_CONTENT|IMPORT_SCRIPTS|IMPORT_FONTDECLS )
319 SERVICE( XMLDrawContentImportOasis, "com.sun.star.comp.Draw.XMLOasisContentImporter", "XMLImpressContentImportOasis", sal_True, IMPORT_AUTOSTYLES|IMPORT_CONTENT|IMPORT_SCRIPTS|IMPORT_FONTDECLS )
320 
321 SERVICE( XMLImpressMetaImportOasis, "com.sun.star.comp.Impress.XMLOasisMetaImporter", "XMLImpressMetaImportOasis", sal_False, IMPORT_META )
322 SERVICE( XMLDrawMetaImportOasis, "com.sun.star.comp.Draw.XMLOasisMetaImporter", "XMLImpressMetaImportOasis", sal_True, IMPORT_META )
323 
324 SERVICE( XMLImpressSettingsImportOasis, "com.sun.star.comp.Impress.XMLOasisSettingsImporter", "XMLImpressSettingsImportOasis", sal_False, IMPORT_SETTINGS )
325 SERVICE( XMLDrawSettingsImportOasis, "com.sun.star.comp.Draw.XMLOasisSettingsImporter", "XMLImpressSettingsImportOasis", sal_True, IMPORT_SETTINGS )
326 
327 //////////////////////////////////////////////////////////////////////////////
328 
329 // #110680#
330 SdXMLImport::SdXMLImport(
331 	const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& xServiceFactory,
332 	sal_Bool bIsDraw, sal_uInt16 nImportFlags )
333 :	SvXMLImport( xServiceFactory, nImportFlags ),
334 	mpMasterStylesContext(0L),
335 	mpDocElemTokenMap(0L),
336 	mpBodyElemTokenMap(0L),
337 	mpStylesElemTokenMap(0L),
338 	mpMasterPageElemTokenMap(0L),
339 	mpMasterPageAttrTokenMap(0L),
340 	mpPageMasterAttrTokenMap(0L),
341 	mpPageMasterStyleAttrTokenMap(0L),
342 	mpDrawPageAttrTokenMap(0L),
343 	mpDrawPageElemTokenMap(0L),
344 	mpPresentationPlaceholderAttrTokenMap(0L),
345 	mnStyleFamilyMask(0),
346 	mnNewPageCount(0L),
347 	mnNewMasterPageCount(0L),
348 	mbIsDraw(bIsDraw),
349 	mbLoadDoc(sal_True),
350 	mbPreview(sal_False),
351 	msPageLayouts( RTL_CONSTASCII_USTRINGPARAM( "PageLayouts" ) ),
352 	msPreview( RTL_CONSTASCII_USTRINGPARAM( "Preview" ) )
353 {
354 	// add namespaces
355 	GetNamespaceMap().Add(
356 		GetXMLToken(XML_NP_PRESENTATION),
357         GetXMLToken(XML_N_PRESENTATION),
358 		XML_NAMESPACE_PRESENTATION);
359 
360 	GetNamespaceMap().Add(
361 		GetXMLToken(XML_NP_SMIL),
362         GetXMLToken(XML_N_SMIL_COMPAT),
363 		XML_NAMESPACE_SMIL);
364 
365 	GetNamespaceMap().Add(
366 		GetXMLToken(XML_NP_ANIMATION),
367         GetXMLToken(XML_N_ANIMATION),
368 		XML_NAMESPACE_ANIMATION);
369 }
370 
371 // XImporter
372 void SAL_CALL SdXMLImport::setTargetDocument( const uno::Reference< lang::XComponent >& xDoc )
373 	throw(lang::IllegalArgumentException, uno::RuntimeException)
374 {
375 	SvXMLImport::setTargetDocument( xDoc );
376 
377 	uno::Reference< lang::XServiceInfo > xDocServices( GetModel(), uno::UNO_QUERY );
378 	if( !xDocServices.is() )
379 		throw lang::IllegalArgumentException();
380 
381 	mbIsDraw = !xDocServices->supportsService( OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.presentation.PresentationDocument" ) ) );
382 
383 	// prepare access to styles
384 	uno::Reference< style::XStyleFamiliesSupplier > xFamSup( GetModel(), uno::UNO_QUERY );
385 	if(xFamSup.is())
386 		mxDocStyleFamilies = xFamSup->getStyleFamilies();
387 
388 	// prepare access to master pages
389 	uno::Reference < drawing::XMasterPagesSupplier > xMasterPagesSupplier(GetModel(), uno::UNO_QUERY);
390 	if(xMasterPagesSupplier.is())
391 		mxDocMasterPages = mxDocMasterPages.query( xMasterPagesSupplier->getMasterPages() );
392 
393 	// prepare access to draw pages
394 	uno::Reference <drawing::XDrawPagesSupplier> xDrawPagesSupplier(GetModel(), uno::UNO_QUERY);
395 	if(!xDrawPagesSupplier.is())
396 		throw lang::IllegalArgumentException();
397 
398 	mxDocDrawPages = mxDocDrawPages.query( xDrawPagesSupplier->getDrawPages() );
399 	if(!mxDocDrawPages.is())
400 		throw lang::IllegalArgumentException();
401 
402 	if( mxDocDrawPages.is() && mxDocDrawPages->getCount() > 0 )
403 	{
404 		uno::Reference< form::XFormsSupplier > xFormsSupp;
405 		mxDocDrawPages->getByIndex(0) >>= xFormsSupp;
406 		mbIsFormsSupported = xFormsSupp.is();
407 	}
408 
409 	// #88546# enable progress bar increments, SdXMLImport is only used for
410 	// draw/impress import
411 	GetShapeImport()->enableHandleProgressBar();
412 
413 	uno::Reference< lang::XMultiServiceFactory > xFac( GetModel(), uno::UNO_QUERY );
414 	if( xFac.is() )
415 	{
416 		uno::Sequence< OUString > sSNS( xFac->getAvailableServiceNames() );
417 		sal_Int32 n = sSNS.getLength();
418 		const OUString* pSNS( sSNS.getConstArray() );
419 		while( --n > 0 )
420 		{
421 			if( (*pSNS++).equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("com.sun.star.drawing.TableShape") ) )
422 			{
423 				mbIsTableShapeSupported = true;
424 				break;
425 			}
426 		}
427 	}
428 }
429 
430 // XInitialization
431 void SAL_CALL SdXMLImport::initialize( const uno::Sequence< uno::Any >& aArguments )
432 	throw( uno::Exception, uno::RuntimeException)
433 {
434 	SvXMLImport::initialize( aArguments );
435 
436 	uno::Reference< beans::XPropertySet > xInfoSet( getImportInfo() );
437 	if( xInfoSet.is() )
438 	{
439 		uno::Reference< beans::XPropertySetInfo > xInfoSetInfo( xInfoSet->getPropertySetInfo() );
440 
441 		if( xInfoSetInfo->hasPropertyByName( msPageLayouts ) )
442 			xInfoSet->getPropertyValue( msPageLayouts ) >>= mxPageLayouts;
443 
444 		if( xInfoSetInfo->hasPropertyByName( msPreview ) )
445 			xInfoSet->getPropertyValue( msPreview ) >>= mbPreview;
446 
447         ::rtl::OUString const sOrganizerMode(
448             RTL_CONSTASCII_USTRINGPARAM("OrganizerMode"));
449         if (xInfoSetInfo->hasPropertyByName(sOrganizerMode))
450         {
451             sal_Bool bStyleOnly(sal_False);
452             if (xInfoSet->getPropertyValue(sOrganizerMode) >>= bStyleOnly)
453             {
454                 mbLoadDoc = !bStyleOnly;
455             }
456         }
457     }
458 }
459 
460 //////////////////////////////////////////////////////////////////////////////
461 
462 SdXMLImport::~SdXMLImport() throw ()
463 {
464 // #80365# removed ending of progress bar here, this was an old implementation
465 // and maybe removed on demand
466 //	// stop progress view
467 //	if(mxStatusIndicator.is())
468 //	{
469 //		mxStatusIndicator->end();
470 //		mxStatusIndicator->reset();
471 //	}
472 
473 	// Styles or AutoStyles context?
474 	if(mpMasterStylesContext)
475 		mpMasterStylesContext->ReleaseRef();
476 
477 	// delete all token maps
478 	if(mpDocElemTokenMap)
479 		delete mpDocElemTokenMap;
480 	if(mpBodyElemTokenMap)
481 		delete mpBodyElemTokenMap;
482 	if(mpStylesElemTokenMap)
483 		delete mpStylesElemTokenMap;
484 	if(mpMasterPageElemTokenMap)
485 		delete mpMasterPageElemTokenMap;
486 	if(mpMasterPageAttrTokenMap)
487 		delete mpMasterPageAttrTokenMap;
488 	if(mpPageMasterAttrTokenMap)
489 		delete mpPageMasterAttrTokenMap;
490 	if(mpPageMasterStyleAttrTokenMap)
491 		delete mpPageMasterStyleAttrTokenMap;
492 	if(mpDrawPageAttrTokenMap)
493 		delete mpDrawPageAttrTokenMap;
494 	if(mpDrawPageElemTokenMap)
495 		delete mpDrawPageElemTokenMap;
496 	if(mpPresentationPlaceholderAttrTokenMap)
497 		delete mpPresentationPlaceholderAttrTokenMap;
498 }
499 
500 //////////////////////////////////////////////////////////////////////////////
501 
502 void SdXMLImport::SetProgress(sal_Int32 nProg)
503 {
504 	// set progress view
505 	if(mxStatusIndicator.is())
506 		mxStatusIndicator->setValue(nProg);
507 }
508 
509 //////////////////////////////////////////////////////////////////////////////
510 
511 const SvXMLTokenMap& SdXMLImport::GetDocElemTokenMap()
512 {
513 	if(!mpDocElemTokenMap)
514     {
515         static __FAR_DATA SvXMLTokenMapEntry aDocElemTokenMap[] =
516 {
517 	{ XML_NAMESPACE_OFFICE, XML_FONT_FACE_DECLS,	XML_TOK_DOC_FONTDECLS		},
518 	{ XML_NAMESPACE_OFFICE, XML_STYLES,			    XML_TOK_DOC_STYLES			},
519 	{ XML_NAMESPACE_OFFICE, XML_AUTOMATIC_STYLES,	XML_TOK_DOC_AUTOSTYLES		},
520 	{ XML_NAMESPACE_OFFICE, XML_MASTER_STYLES,		XML_TOK_DOC_MASTERSTYLES	},
521 	{ XML_NAMESPACE_OFFICE, XML_META, 				XML_TOK_DOC_META			},
522 	{ XML_NAMESPACE_OFFICE, XML_SCRIPTS,		    XML_TOK_DOC_SCRIPT			},
523 	{ XML_NAMESPACE_OFFICE, XML_BODY, 				XML_TOK_DOC_BODY			},
524 	{ XML_NAMESPACE_OFFICE, XML_SETTINGS,			XML_TOK_DOC_SETTINGS		},
525 	XML_TOKEN_MAP_END
526 };
527 
528 		mpDocElemTokenMap = new SvXMLTokenMap(aDocElemTokenMap);
529     } // if(!mpDocElemTokenMap)
530 
531 	return *mpDocElemTokenMap;
532 }
533 
534 //////////////////////////////////////////////////////////////////////////////
535 
536 const SvXMLTokenMap& SdXMLImport::GetBodyElemTokenMap()
537 {
538 	if(!mpBodyElemTokenMap)
539     {
540         static __FAR_DATA SvXMLTokenMapEntry aBodyElemTokenMap[] =
541 {
542 	{ XML_NAMESPACE_DRAW,	XML_PAGE,				XML_TOK_BODY_PAGE	},
543 	{ XML_NAMESPACE_PRESENTATION, XML_SETTINGS, 	XML_TOK_BODY_SETTINGS	},
544 	{ XML_NAMESPACE_PRESENTATION, XML_HEADER_DECL, 	XML_TOK_BODY_HEADER_DECL	},
545 	{ XML_NAMESPACE_PRESENTATION, XML_FOOTER_DECL, 	XML_TOK_BODY_FOOTER_DECL	},
546 	{ XML_NAMESPACE_PRESENTATION, XML_DATE_TIME_DECL,XML_TOK_BODY_DATE_TIME_DECL	},
547 
548 	XML_TOKEN_MAP_END
549 };
550 
551 		mpBodyElemTokenMap = new SvXMLTokenMap(aBodyElemTokenMap);
552     } // if(!mpBodyElemTokenMap)
553 
554 	return *mpBodyElemTokenMap;
555 }
556 
557 //////////////////////////////////////////////////////////////////////////////
558 
559 const SvXMLTokenMap& SdXMLImport::GetStylesElemTokenMap()
560 {
561 	if(!mpStylesElemTokenMap)
562     {
563         static __FAR_DATA SvXMLTokenMapEntry aStylesElemTokenMap[] =
564 {
565 	{ XML_NAMESPACE_STYLE,	XML_PAGE_LAYOUT,				XML_TOK_STYLES_PAGE_MASTER				},
566 	{ XML_NAMESPACE_STYLE,	XML_PRESENTATION_PAGE_LAYOUT,	XML_TOK_STYLES_PRESENTATION_PAGE_LAYOUT	},
567 	{ XML_NAMESPACE_STYLE,	XML_STYLE,						XML_TOK_STYLES_STYLE	},
568 	XML_TOKEN_MAP_END
569 };
570 
571 		mpStylesElemTokenMap = new SvXMLTokenMap(aStylesElemTokenMap);
572     } // if(!mpStylesElemTokenMap)
573 
574 	return *mpStylesElemTokenMap;
575 }
576 
577 //////////////////////////////////////////////////////////////////////////////
578 
579 const SvXMLTokenMap& SdXMLImport::GetMasterPageElemTokenMap()
580 {
581 	if(!mpMasterPageElemTokenMap)
582     {
583         static __FAR_DATA SvXMLTokenMapEntry aMasterPageElemTokenMap[] =
584 {
585 	{ XML_NAMESPACE_STYLE,			XML_STYLE,		XML_TOK_MASTERPAGE_STYLE	},
586 	{ XML_NAMESPACE_PRESENTATION,	XML_NOTES,		XML_TOK_MASTERPAGE_NOTES	},
587 	XML_TOKEN_MAP_END
588 };
589 
590 		mpMasterPageElemTokenMap = new SvXMLTokenMap(aMasterPageElemTokenMap);
591     } // if(!mpMasterPageElemTokenMap)
592 
593 	return *mpMasterPageElemTokenMap;
594 }
595 
596 //////////////////////////////////////////////////////////////////////////////
597 
598 const SvXMLTokenMap& SdXMLImport::GetMasterPageAttrTokenMap()
599 {
600 	if(!mpMasterPageAttrTokenMap)
601     {
602         static __FAR_DATA SvXMLTokenMapEntry aMasterPageAttrTokenMap[] =
603 {
604 	{ XML_NAMESPACE_STYLE,	XML_NAME,						XML_TOK_MASTERPAGE_NAME	},
605 	{ XML_NAMESPACE_STYLE,	XML_DISPLAY_NAME,				XML_TOK_MASTERPAGE_DISPLAY_NAME	},
606 	{ XML_NAMESPACE_STYLE,	XML_PAGE_LAYOUT_NAME,			XML_TOK_MASTERPAGE_PAGE_MASTER_NAME	},
607 	{ XML_NAMESPACE_DRAW,	XML_STYLE_NAME, 				XML_TOK_MASTERPAGE_STYLE_NAME		},
608 	{ XML_NAMESPACE_PRESENTATION,	XML_PRESENTATION_PAGE_LAYOUT_NAME,	XML_TOK_MASTERPAGE_PAGE_LAYOUT_NAME },
609 	{ XML_NAMESPACE_PRESENTATION,	XML_USE_HEADER_NAME,				XML_TOK_MASTERPAGE_USE_HEADER_NAME	},
610 	{ XML_NAMESPACE_PRESENTATION,	XML_USE_FOOTER_NAME,				XML_TOK_MASTERPAGE_USE_FOOTER_NAME	},
611 	{ XML_NAMESPACE_PRESENTATION,	XML_USE_DATE_TIME_NAME,				XML_TOK_MASTERPAGE_USE_DATE_TIME_NAME	},
612 	XML_TOKEN_MAP_END
613 };
614 
615 		mpMasterPageAttrTokenMap = new SvXMLTokenMap(aMasterPageAttrTokenMap);
616     } // if(!mpMasterPageAttrTokenMap)
617 
618 	return *mpMasterPageAttrTokenMap;
619 }
620 
621 //////////////////////////////////////////////////////////////////////////////
622 
623 const SvXMLTokenMap& SdXMLImport::GetPageMasterAttrTokenMap()
624 {
625 	if(!mpPageMasterAttrTokenMap)
626     {
627         static __FAR_DATA SvXMLTokenMapEntry aPageMasterAttrTokenMap[] =
628 {
629 	{ XML_NAMESPACE_STYLE,			XML_NAME,				XML_TOK_PAGEMASTER_NAME					},
630 	XML_TOKEN_MAP_END
631 };
632 
633 		mpPageMasterAttrTokenMap = new SvXMLTokenMap(aPageMasterAttrTokenMap);
634     } // if(!mpPageMasterAttrTokenMap)
635 
636 	return *mpPageMasterAttrTokenMap;
637 }
638 
639 //////////////////////////////////////////////////////////////////////////////
640 
641 const SvXMLTokenMap& SdXMLImport::GetPageMasterStyleAttrTokenMap()
642 {
643 	if(!mpPageMasterStyleAttrTokenMap)
644     {
645         static __FAR_DATA SvXMLTokenMapEntry aPageMasterStyleAttrTokenMap[] =
646 {
647 	{ XML_NAMESPACE_FO,				XML_MARGIN_TOP,		    XML_TOK_PAGEMASTERSTYLE_MARGIN_TOP			},
648 	{ XML_NAMESPACE_FO,				XML_MARGIN_BOTTOM,		XML_TOK_PAGEMASTERSTYLE_MARGIN_BOTTOM		},
649 	{ XML_NAMESPACE_FO,				XML_MARGIN_LEFT,		XML_TOK_PAGEMASTERSTYLE_MARGIN_LEFT			},
650 	{ XML_NAMESPACE_FO,				XML_MARGIN_RIGHT,		XML_TOK_PAGEMASTERSTYLE_MARGIN_RIGHT		},
651 	{ XML_NAMESPACE_FO,				XML_PAGE_WIDTH,	    	XML_TOK_PAGEMASTERSTYLE_PAGE_WIDTH			},
652 	{ XML_NAMESPACE_FO,				XML_PAGE_HEIGHT,		XML_TOK_PAGEMASTERSTYLE_PAGE_HEIGHT			},
653 	{ XML_NAMESPACE_STYLE,			XML_PRINT_ORIENTATION,	XML_TOK_PAGEMASTERSTYLE_PAGE_ORIENTATION	},
654 	XML_TOKEN_MAP_END
655 };
656 
657 		mpPageMasterStyleAttrTokenMap = new SvXMLTokenMap(aPageMasterStyleAttrTokenMap);
658     } // if(!mpPageMasterStyleAttrTokenMap)
659 
660 	return *mpPageMasterStyleAttrTokenMap;
661 }
662 
663 //////////////////////////////////////////////////////////////////////////////
664 
665 const SvXMLTokenMap& SdXMLImport::GetDrawPageAttrTokenMap()
666 {
667 	if(!mpDrawPageAttrTokenMap)
668     {
669         static __FAR_DATA SvXMLTokenMapEntry aDrawPageAttrTokenMap[] =
670 {
671 	{ XML_NAMESPACE_DRAW,			XML_NAME,							XML_TOK_DRAWPAGE_NAME				},
672 	{ XML_NAMESPACE_DRAW,			XML_STYLE_NAME, 					XML_TOK_DRAWPAGE_STYLE_NAME			},
673 	{ XML_NAMESPACE_DRAW,			XML_MASTER_PAGE_NAME,				XML_TOK_DRAWPAGE_MASTER_PAGE_NAME	},
674 	{ XML_NAMESPACE_PRESENTATION,	XML_PRESENTATION_PAGE_LAYOUT_NAME,	XML_TOK_DRAWPAGE_PAGE_LAYOUT_NAME	},
675     { XML_NAMESPACE_DRAW,           XML_ID,                             XML_TOK_DRAWPAGE_DRAWID                 },
676     { XML_NAMESPACE_XML,            XML_ID,                             XML_TOK_DRAWPAGE_XMLID                  },
677 	{ XML_NAMESPACE_XLINK,			XML_HREF,							XML_TOK_DRAWPAGE_HREF				},
678 	{ XML_NAMESPACE_PRESENTATION,	XML_USE_HEADER_NAME,				XML_TOK_DRAWPAGE_USE_HEADER_NAME	},
679 	{ XML_NAMESPACE_PRESENTATION,	XML_USE_FOOTER_NAME,				XML_TOK_DRAWPAGE_USE_FOOTER_NAME	},
680 	{ XML_NAMESPACE_PRESENTATION,	XML_USE_DATE_TIME_NAME,				XML_TOK_DRAWPAGE_USE_DATE_TIME_NAME	},
681 
682 	XML_TOKEN_MAP_END
683 };
684 
685 		mpDrawPageAttrTokenMap = new SvXMLTokenMap(aDrawPageAttrTokenMap);
686     } // if(!mpDrawPageAttrTokenMap)
687 
688 	return *mpDrawPageAttrTokenMap;
689 }
690 
691 //////////////////////////////////////////////////////////////////////////////
692 
693 const SvXMLTokenMap& SdXMLImport::GetDrawPageElemTokenMap()
694 {
695 	if(!mpDrawPageElemTokenMap)
696     {
697         static __FAR_DATA SvXMLTokenMapEntry aDrawPageElemTokenMap[] =
698 {
699 	{ XML_NAMESPACE_PRESENTATION,	XML_NOTES,				XML_TOK_DRAWPAGE_NOTES		},
700 	{ XML_NAMESPACE_ANIMATION,		XML_PAR,				XML_TOK_DRAWPAGE_PAR		},
701 	{ XML_NAMESPACE_ANIMATION,		XML_SEQ,				XML_TOK_DRAWPAGE_SEQ		},
702 	XML_TOKEN_MAP_END
703 };
704 
705 		mpDrawPageElemTokenMap = new SvXMLTokenMap(aDrawPageElemTokenMap);
706     } // if(!mpDrawPageElemTokenMap)
707 
708 	return *mpDrawPageElemTokenMap;
709 }
710 
711 //////////////////////////////////////////////////////////////////////////////
712 
713 const SvXMLTokenMap& SdXMLImport::GetPresentationPlaceholderAttrTokenMap()
714 {
715 	if(!mpPresentationPlaceholderAttrTokenMap)
716     {
717         static __FAR_DATA SvXMLTokenMapEntry aPresentationPlaceholderAttrTokenMap[] =
718 {
719 	{ XML_NAMESPACE_PRESENTATION,	XML_OBJECT, 	XML_TOK_PRESENTATIONPLACEHOLDER_OBJECTNAME	},
720 	{ XML_NAMESPACE_SVG,			XML_X,			XML_TOK_PRESENTATIONPLACEHOLDER_X			},
721 	{ XML_NAMESPACE_SVG,			XML_Y,			XML_TOK_PRESENTATIONPLACEHOLDER_Y			},
722 	{ XML_NAMESPACE_SVG,			XML_WIDTH,		XML_TOK_PRESENTATIONPLACEHOLDER_WIDTH		},
723 	{ XML_NAMESPACE_SVG,			XML_HEIGHT, 	XML_TOK_PRESENTATIONPLACEHOLDER_HEIGHT		},
724 	XML_TOKEN_MAP_END
725 };
726 
727 		mpPresentationPlaceholderAttrTokenMap = new SvXMLTokenMap(aPresentationPlaceholderAttrTokenMap);
728     } // if(!mpPresentationPlaceholderAttrTokenMap)
729 
730 	return *mpPresentationPlaceholderAttrTokenMap;
731 }
732 
733 //////////////////////////////////////////////////////////////////////////////
734 
735 SvXMLImportContext *SdXMLImport::CreateContext(sal_uInt16 nPrefix,
736 	const OUString& rLocalName,
737 	const uno::Reference<xml::sax::XAttributeList>& xAttrList)
738 {
739 	SvXMLImportContext* pContext = 0;
740 
741 	if(XML_NAMESPACE_OFFICE == nPrefix &&
742 		( IsXMLToken( rLocalName, XML_DOCUMENT_STYLES ) ||
743 		  IsXMLToken( rLocalName, XML_DOCUMENT_CONTENT ) ||
744 		  IsXMLToken( rLocalName, XML_DOCUMENT_SETTINGS )   ))
745 	{
746 		 pContext = new SdXMLDocContext_Impl(*this, nPrefix, rLocalName, xAttrList);
747 	} else if ( (XML_NAMESPACE_OFFICE == nPrefix) &&
748 		        ( IsXMLToken(rLocalName, XML_DOCUMENT_META)) ) {
749         pContext = CreateMetaContext(rLocalName, xAttrList);
750     } else if ( (XML_NAMESPACE_OFFICE == nPrefix) &&
751 		        ( IsXMLToken(rLocalName, XML_DOCUMENT)) ) {
752         uno::Reference<xml::sax::XDocumentHandler> xDocBuilder(
753             mxServiceFactory->createInstance(::rtl::OUString::createFromAscii(
754                 "com.sun.star.xml.dom.SAXDocumentBuilder")),
755                 uno::UNO_QUERY_THROW);
756         uno::Reference<document::XDocumentPropertiesSupplier> xDPS(
757             GetModel(), uno::UNO_QUERY_THROW);
758         // flat OpenDocument file format
759         pContext = new SdXMLFlatDocContext_Impl( *this, nPrefix, rLocalName,
760                         xAttrList, xDPS->getDocumentProperties(), xDocBuilder);
761     } else {
762 		pContext = SvXMLImport::CreateContext(nPrefix, rLocalName, xAttrList);
763 	}
764 
765 	return pContext;
766 }
767 
768 //////////////////////////////////////////////////////////////////////////////
769 
770 SvXMLImportContext *SdXMLImport::CreateMetaContext(const OUString& rLocalName,
771 	const uno::Reference<xml::sax::XAttributeList>&)
772 {
773 	SvXMLImportContext* pContext = 0L;
774 
775     if (getImportFlags() & IMPORT_META)
776     {
777         uno::Reference<xml::sax::XDocumentHandler> xDocBuilder(
778             mxServiceFactory->createInstance(::rtl::OUString::createFromAscii(
779                 "com.sun.star.xml.dom.SAXDocumentBuilder")),
780                 uno::UNO_QUERY_THROW);
781         uno::Reference<document::XDocumentPropertiesSupplier> xDPS(
782             GetModel(), uno::UNO_QUERY_THROW);
783         uno::Reference<document::XDocumentProperties> const xDocProps(
784             (IsStylesOnlyMode()) ? 0 : xDPS->getDocumentProperties());
785         pContext = new SvXMLMetaDocumentContext(*this,
786                         XML_NAMESPACE_OFFICE, rLocalName,
787                         xDocProps, xDocBuilder);
788 	}
789 
790 	if(!pContext)
791 	{
792 		pContext = new SvXMLImportContext(*this, XML_NAMESPACE_OFFICE, rLocalName);
793 	}
794 
795 	return pContext;
796 }
797 
798 //////////////////////////////////////////////////////////////////////////////
799 
800 SvXMLImportContext *SdXMLImport::CreateBodyContext(const OUString& rLocalName,
801 	const uno::Reference<xml::sax::XAttributeList>&)
802 {
803 	SvXMLImportContext *pContext = 0;
804 	pContext = new SdXMLBodyContext(*this, XML_NAMESPACE_OFFICE, rLocalName);
805 	return pContext;
806 }
807 
808 //////////////////////////////////////////////////////////////////////////////
809 
810 SvXMLStylesContext *SdXMLImport::CreateStylesContext(const OUString& rLocalName,
811 	const uno::Reference<xml::sax::XAttributeList>& xAttrList)
812 {
813 	if(GetShapeImport()->GetStylesContext())
814 		return GetShapeImport()->GetStylesContext();
815 
816 	GetShapeImport()->SetStylesContext(new SdXMLStylesContext(
817 		*this, XML_NAMESPACE_OFFICE, rLocalName, xAttrList, sal_False));
818 
819 	return GetShapeImport()->GetStylesContext();
820 }
821 
822 //////////////////////////////////////////////////////////////////////////////
823 
824 SvXMLStylesContext *SdXMLImport::CreateAutoStylesContext(const OUString& rLocalName,
825 	const uno::Reference<xml::sax::XAttributeList>& xAttrList)
826 {
827 	if(GetShapeImport()->GetAutoStylesContext())
828 		return GetShapeImport()->GetAutoStylesContext();
829 
830 	GetShapeImport()->SetAutoStylesContext(new SdXMLStylesContext(
831 		*this, XML_NAMESPACE_OFFICE, rLocalName, xAttrList, sal_True));
832 
833 	return GetShapeImport()->GetAutoStylesContext();
834 }
835 
836 //////////////////////////////////////////////////////////////////////////////
837 
838 SvXMLImportContext* SdXMLImport::CreateMasterStylesContext(const OUString& rLocalName,
839 	const uno::Reference<xml::sax::XAttributeList>&)
840 {
841 	if(mpMasterStylesContext)
842 		return mpMasterStylesContext;
843 
844 	mpMasterStylesContext = new SdXMLMasterStylesContext(
845 		*this, XML_NAMESPACE_OFFICE, rLocalName);
846 	mpMasterStylesContext->AddRef();
847 
848 	return mpMasterStylesContext;
849 }
850 
851 //////////////////////////////////////////////////////////////////////////////
852 
853 SvXMLImportContext *SdXMLImport::CreateFontDeclsContext(const OUString& rLocalName,
854 	const uno::Reference< xml::sax::XAttributeList > & xAttrList )
855 {
856 	XMLFontStylesContext *pFSContext =
857 			new XMLFontStylesContext( *this, XML_NAMESPACE_OFFICE,
858 									  rLocalName, xAttrList,
859 									  gsl_getSystemTextEncoding() );
860 	SetFontDecls( pFSContext );
861 	return pFSContext;
862 }
863 
864 //////////////////////////////////////////////////////////////////////////////
865 // import pool defaults. Parameter contains pool defaults read
866 // from input data. These data needs to be set at the model.
867 //
868 void SdXMLImport::ImportPoolDefaults(const XMLPropStyleContext*)
869 {
870 }
871 
872 //////////////////////////////////////////////////////////////////////////////
873 
874 SvXMLImportContext *SdXMLImport::CreateScriptContext(
875 									   const OUString& rLocalName )
876 {
877 	SvXMLImportContext *pContext = 0;
878 
879 	pContext = new XMLScriptContext( *this,
880 									XML_NAMESPACE_OFFICE, rLocalName,
881 									GetModel() );
882 	return pContext;
883 }
884 
885 //////////////////////////////////////////////////////////////////////////////
886 
887 void SdXMLImport::SetViewSettings(const com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue>& aViewProps)
888 {
889 	uno::Reference< beans::XPropertySet > xPropSet( GetModel(), uno::UNO_QUERY );
890 	if( !xPropSet.is() )
891 		return;
892 
893 	awt::Rectangle aVisArea( 0,0, 28000, 21000 );
894 	sal_Int32 nCount = aViewProps.getLength();
895 
896 	const beans::PropertyValue* pValues = aViewProps.getConstArray();
897 
898 	while( nCount-- )
899 	{
900 		const OUString& rName = pValues->Name;
901 		const uno::Any rValue = pValues->Value;
902 
903 		if( rName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("VisibleAreaTop") ) )
904 		{
905 			rValue >>= aVisArea.Y;
906 		}
907 		else if( rName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("VisibleAreaLeft") ) )
908 		{
909 			rValue >>= aVisArea.X;
910 		}
911 		else if( rName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("VisibleAreaWidth") ) )
912 		{
913 			rValue >>= aVisArea.Width;
914 		}
915 		else if( rName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("VisibleAreaHeight") ) )
916 		{
917 			rValue >>= aVisArea.Height;
918 		}
919 
920 		pValues++;
921 	}
922 
923 	try
924 	{
925 		xPropSet->setPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "VisibleArea" ) ), uno::makeAny( aVisArea )  );
926 	}
927 	catch( com::sun::star::uno::Exception /*e*/ )
928 	{
929 /* #i79978# since old documents may contain invalid view settings, this is nothing to worry the user about.
930 		uno::Sequence<OUString> aSeq(0);
931         SetError( XMLERROR_FLAG_WARNING | XMLERROR_API, aSeq, e.Message, NULL );
932 */
933 	}
934 }
935 
936 void SdXMLImport::SetConfigurationSettings(const com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue>& aConfigProps)
937 {
938 	uno::Reference< lang::XMultiServiceFactory > xFac( GetModel(), uno::UNO_QUERY );
939 	if( !xFac.is() )
940 		return;
941 
942 	uno::Reference< beans::XPropertySet > xProps( xFac->createInstance( OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.document.Settings" ) ) ), uno::UNO_QUERY );
943 	if( !xProps.is() )
944 		return;
945 
946 	uno::Reference< beans::XPropertySetInfo > xInfo( xProps->getPropertySetInfo() );
947 	if( !xInfo.is() )
948 		return;
949 
950 	sal_Int32 nCount = aConfigProps.getLength();
951 	const beans::PropertyValue* pValues = aConfigProps.getConstArray();
952 
953 	while( nCount-- )
954 	{
955 		try
956 		{
957 			const OUString& rProperty = pValues->Name;
958 			if( xInfo->hasPropertyByName( rProperty ) )
959 				xProps->setPropertyValue( rProperty, pValues->Value );
960 		}
961 		catch( uno::Exception& e )
962 		{
963 			(void)e;
964 			OSL_TRACE( "#SdXMLImport::SetConfigurationSettings: Exception!" );
965 		}
966 
967 		pValues++;
968 	}
969 }
970 
971 // #80365# overload this method to read and use the hint value from the
972 // written meta information. If no info is found, guess 10 draw objects
973 //void SdXMLImport::SetStatisticAttributes(const uno::Reference<xml::sax::XAttributeList>& xAttrList)
974 void SdXMLImport::SetStatistics(
975         const uno::Sequence<beans::NamedValue> & i_rStats)
976 {
977     static const char* s_stats[] =
978         { "ObjectCount", 0 };
979 
980     SvXMLImport::SetStatistics(i_rStats);
981 
982     sal_uInt32 nCount(10);
983     for (sal_Int32 i = 0; i < i_rStats.getLength(); ++i) {
984         for (const char** pStat = s_stats; *pStat != 0; ++pStat) {
985             if (i_rStats[i].Name.equalsAscii(*pStat)) {
986                 sal_Int32 val = 0;
987                 if (i_rStats[i].Value >>= val) {
988                     nCount = val;
989                 } else {
990                     DBG_ERROR("SdXMLImport::SetStatistics: invalid entry");
991                 }
992             }
993         }
994     }
995 
996 	if(nCount)
997 	{
998 		GetProgressBarHelper()->SetReference(nCount);
999 		GetProgressBarHelper()->SetValue(0);
1000 	}
1001 }
1002 
1003 
1004 // XServiceInfo
1005 OUString SAL_CALL SdXMLImport::getImplementationName() throw( uno::RuntimeException )
1006 {
1007     if( IsDraw())
1008     {
1009         // Draw
1010 
1011         switch( getImportFlags())
1012         {
1013             case IMPORT_ALL:
1014                 return XMLDrawImportOasis_getImplementationName();
1015             case (IMPORT_STYLES|IMPORT_AUTOSTYLES|IMPORT_MASTERSTYLES):
1016                 return XMLDrawStylesImportOasis_getImplementationName();
1017             case (IMPORT_AUTOSTYLES|IMPORT_CONTENT|IMPORT_SCRIPTS|IMPORT_FONTDECLS):
1018                 return XMLDrawContentImportOasis_getImplementationName();
1019             case IMPORT_META:
1020                 return XMLDrawMetaImportOasis_getImplementationName();
1021             case IMPORT_SETTINGS:
1022                 return XMLDrawSettingsImportOasis_getImplementationName();
1023             default:
1024                 return XMLDrawImportOasis_getImplementationName();
1025         }
1026     }
1027     else
1028     {
1029         // Impress
1030 
1031         switch( getImportFlags())
1032         {
1033             case IMPORT_ALL:
1034                 return XMLImpressImportOasis_getImplementationName();
1035             case (IMPORT_STYLES|IMPORT_AUTOSTYLES|IMPORT_MASTERSTYLES):
1036                 return XMLImpressStylesImportOasis_getImplementationName();
1037             case (IMPORT_AUTOSTYLES|IMPORT_CONTENT|IMPORT_SCRIPTS|IMPORT_FONTDECLS):
1038                 return XMLImpressContentImportOasis_getImplementationName();
1039             case IMPORT_META:
1040                 return XMLImpressMetaImportOasis_getImplementationName();
1041             case IMPORT_SETTINGS:
1042                 return XMLImpressSettingsImportOasis_getImplementationName();
1043             default:
1044                 return XMLImpressImportOasis_getImplementationName();
1045         }
1046     }
1047 }
1048 
1049 	HeaderFooterDeclMap			maHeaderDeclsMap;
1050 	HeaderFooterDeclMap			maFooterDeclsMap;
1051 	DateTimeDeclMap				maDateTimeDeclsMap;
1052 
1053 void SdXMLImport::AddHeaderDecl( const ::rtl::OUString& rName, const ::rtl::OUString& rText )
1054 {
1055 	if( rName.getLength() && rText.getLength() )
1056 		maHeaderDeclsMap[rName] = rText;
1057 }
1058 
1059 void SdXMLImport::AddFooterDecl( const ::rtl::OUString& rName, const ::rtl::OUString& rText )
1060 {
1061 	if( rName.getLength() && rText.getLength() )
1062 		maFooterDeclsMap[rName] = rText;
1063 }
1064 
1065 void SdXMLImport::AddDateTimeDecl( const ::rtl::OUString& rName, const ::rtl::OUString& rText, sal_Bool bFixed, const ::rtl::OUString& rDateTimeFormat )
1066 {
1067 	if( rName.getLength() && (rText.getLength() || !bFixed) )
1068 	{
1069 		DateTimeDeclContextImpl aDecl;
1070 		aDecl.maStrText = rText;
1071 		aDecl.mbFixed = bFixed;
1072 		aDecl.maStrDateTimeFormat = rDateTimeFormat;
1073 		maDateTimeDeclsMap[rName] = aDecl;
1074 	}
1075 }
1076 
1077 ::rtl::OUString SdXMLImport::GetHeaderDecl( const ::rtl::OUString& rName ) const
1078 {
1079 	::rtl::OUString aRet;
1080 	HeaderFooterDeclMap::const_iterator aIter( maHeaderDeclsMap.find( rName ) );
1081 	if( aIter != maHeaderDeclsMap.end() )
1082 		aRet = (*aIter).second;
1083 
1084 	return aRet;
1085 }
1086 
1087 ::rtl::OUString SdXMLImport::GetFooterDecl( const ::rtl::OUString& rName ) const
1088 {
1089 	::rtl::OUString aRet;
1090 	HeaderFooterDeclMap::const_iterator aIter( maFooterDeclsMap.find( rName ) );
1091 	if( aIter != maFooterDeclsMap.end() )
1092 		aRet = (*aIter).second;
1093 
1094 	return aRet;
1095 }
1096 
1097 ::rtl::OUString SdXMLImport::GetDateTimeDecl( const ::rtl::OUString& rName, sal_Bool& rbFixed, ::rtl::OUString& rDateTimeFormat )
1098 {
1099 	DateTimeDeclContextImpl aDecl;
1100 
1101 	DateTimeDeclMap::const_iterator aIter( maDateTimeDeclsMap.find( rName ) );
1102 	if( aIter != maDateTimeDeclsMap.end() )
1103 		aDecl = (*aIter).second;
1104 
1105 	rbFixed = aDecl.mbFixed;
1106 	rDateTimeFormat = aDecl.maStrDateTimeFormat;
1107 	return aDecl.maStrText;
1108 }
1109 
1110 // eof
1111