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