xref: /trunk/main/xmloff/source/draw/sdxmlimp.cxx (revision 1ecadb572e7010ff3b3382ad9bf179dbc6efadbb)
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