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