xref: /aoo4110/main/xmloff/source/core/xmlimp.cxx (revision b1cdbd2c)
1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski // MARKER(update_precomp.py): autogen include statement, do not remove
25*b1cdbd2cSJim Jagielski #include "precompiled_xmloff.hxx"
26*b1cdbd2cSJim Jagielski #include <com/sun/star/beans/XPropertySetInfo.hpp>
27*b1cdbd2cSJim Jagielski #include <tools/debug.hxx>
28*b1cdbd2cSJim Jagielski #include <tools/urlobj.hxx>
29*b1cdbd2cSJim Jagielski #include <osl/mutex.hxx>
30*b1cdbd2cSJim Jagielski #include <rtl/uuid.h>
31*b1cdbd2cSJim Jagielski #include <rtl/memory.h>
32*b1cdbd2cSJim Jagielski #include <svl/svarray.hxx>
33*b1cdbd2cSJim Jagielski #include "unointerfacetouniqueidentifiermapper.hxx"
34*b1cdbd2cSJim Jagielski #include <xmloff/nmspmap.hxx>
35*b1cdbd2cSJim Jagielski #include <xmloff/xmluconv.hxx>
36*b1cdbd2cSJim Jagielski #include "xmloff/xmlnmspe.hxx"
37*b1cdbd2cSJim Jagielski #include <xmloff/xmltoken.hxx>
38*b1cdbd2cSJim Jagielski #include <xmloff/XMLFontStylesContext.hxx>
39*b1cdbd2cSJim Jagielski #include <xmloff/xmlictxt.hxx>
40*b1cdbd2cSJim Jagielski #include <xmloff/xmlimp.hxx>
41*b1cdbd2cSJim Jagielski #include <xmloff/xmlnumfi.hxx>
42*b1cdbd2cSJim Jagielski #include "XMLEventImportHelper.hxx"
43*b1cdbd2cSJim Jagielski #include "XMLStarBasicContextFactory.hxx"
44*b1cdbd2cSJim Jagielski #include "XMLScriptContextFactory.hxx"
45*b1cdbd2cSJim Jagielski #include "StyleMap.hxx"
46*b1cdbd2cSJim Jagielski #include <xmloff/ProgressBarHelper.hxx>
47*b1cdbd2cSJim Jagielski #include <xmloff/xmltoken.hxx>
48*b1cdbd2cSJim Jagielski #include "xmloff/xmlerror.hxx"
49*b1cdbd2cSJim Jagielski #include <com/sun/star/lang/XMultiServiceFactory.hpp>
50*b1cdbd2cSJim Jagielski #include <com/sun/star/lang/ServiceNotRegisteredException.hpp>
51*b1cdbd2cSJim Jagielski #include <com/sun/star/io/XOutputStream.hpp>
52*b1cdbd2cSJim Jagielski #include <com/sun/star/document/XBinaryStreamResolver.hpp>
53*b1cdbd2cSJim Jagielski #include <com/sun/star/document/XStorageBasedDocument.hpp>
54*b1cdbd2cSJim Jagielski #include <com/sun/star/xml/sax/XLocator.hpp>
55*b1cdbd2cSJim Jagielski #include <com/sun/star/packages/zip/ZipIOException.hpp>
56*b1cdbd2cSJim Jagielski #include <comphelper/namecontainer.hxx>
57*b1cdbd2cSJim Jagielski #include <rtl/logfile.hxx>
58*b1cdbd2cSJim Jagielski #include <tools/string.hxx> // used in StartElement for logging
59*b1cdbd2cSJim Jagielski #include <cppuhelper/implbase1.hxx>
60*b1cdbd2cSJim Jagielski #include <comphelper/extract.hxx>
61*b1cdbd2cSJim Jagielski #include <comphelper/processfactory.hxx>
62*b1cdbd2cSJim Jagielski #include <comphelper/documentconstants.hxx>
63*b1cdbd2cSJim Jagielski #include <comphelper/storagehelper.hxx>
64*b1cdbd2cSJim Jagielski #include <unotools/fontcvt.hxx>
65*b1cdbd2cSJim Jagielski 
66*b1cdbd2cSJim Jagielski #include <com/sun/star/rdf/XMetadatable.hpp>
67*b1cdbd2cSJim Jagielski #include <com/sun/star/rdf/XRepositorySupplier.hpp>
68*b1cdbd2cSJim Jagielski #include "RDFaImportHelper.hxx"
69*b1cdbd2cSJim Jagielski 
70*b1cdbd2cSJim Jagielski #define LOGFILE_AUTHOR "unknown"
71*b1cdbd2cSJim Jagielski 
72*b1cdbd2cSJim Jagielski using ::com::sun::star::beans::XPropertySetInfo;
73*b1cdbd2cSJim Jagielski 
74*b1cdbd2cSJim Jagielski using ::rtl::OUString;
75*b1cdbd2cSJim Jagielski using ::rtl::OUStringBuffer;
76*b1cdbd2cSJim Jagielski 
77*b1cdbd2cSJim Jagielski using namespace ::osl;
78*b1cdbd2cSJim Jagielski using namespace ::com::sun::star;
79*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::frame;
80*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::uno;
81*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::util;
82*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::io;
83*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::container;
84*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::document;
85*b1cdbd2cSJim Jagielski using namespace ::xmloff::token;
86*b1cdbd2cSJim Jagielski 
87*b1cdbd2cSJim Jagielski sal_Char __READONLY_DATA sXML_np__office[] = "_office";
88*b1cdbd2cSJim Jagielski sal_Char __READONLY_DATA sXML_np__office_ext[] = "_office_ooo";
89*b1cdbd2cSJim Jagielski sal_Char __READONLY_DATA sXML_np__ooo[] = "_ooo";
90*b1cdbd2cSJim Jagielski sal_Char __READONLY_DATA sXML_np__ooow[] = "_ooow";
91*b1cdbd2cSJim Jagielski sal_Char __READONLY_DATA sXML_np__oooc[] = "_oooc";
92*b1cdbd2cSJim Jagielski sal_Char __READONLY_DATA sXML_np__of[] = "_of";
93*b1cdbd2cSJim Jagielski sal_Char __READONLY_DATA sXML_np__style[] = "_style";
94*b1cdbd2cSJim Jagielski sal_Char __READONLY_DATA sXML_np__text[] = "_text";
95*b1cdbd2cSJim Jagielski sal_Char __READONLY_DATA sXML_np__text_ext[] = "_text_ooo";
96*b1cdbd2cSJim Jagielski sal_Char __READONLY_DATA sXML_np__table[] = "_table";
97*b1cdbd2cSJim Jagielski sal_Char __READONLY_DATA sXML_np__table_ext[] = "_table_ooo";
98*b1cdbd2cSJim Jagielski sal_Char __READONLY_DATA sXML_np__draw[] = "_draw";
99*b1cdbd2cSJim Jagielski sal_Char __READONLY_DATA sXML_np__draw_ext[] = "_draw_ooo";
100*b1cdbd2cSJim Jagielski sal_Char __READONLY_DATA sXML_np__dr3d[] = "_dr3d";
101*b1cdbd2cSJim Jagielski sal_Char __READONLY_DATA sXML_np__fo[] = "_fo";
102*b1cdbd2cSJim Jagielski sal_Char __READONLY_DATA sXML_np__xlink[] = "_xlink";
103*b1cdbd2cSJim Jagielski sal_Char __READONLY_DATA sXML_np__dc[] = "_dc";
104*b1cdbd2cSJim Jagielski sal_Char __READONLY_DATA sXML_np__dom[] = "_dom";
105*b1cdbd2cSJim Jagielski sal_Char __READONLY_DATA sXML_np__meta[] = "_meta";
106*b1cdbd2cSJim Jagielski sal_Char __READONLY_DATA sXML_np__number[] = "_number";
107*b1cdbd2cSJim Jagielski sal_Char __READONLY_DATA sXML_np__svg[] = "_svg";
108*b1cdbd2cSJim Jagielski sal_Char __READONLY_DATA sXML_np__chart[] = "_chart";
109*b1cdbd2cSJim Jagielski sal_Char __READONLY_DATA sXML_np__math[] = "_math";
110*b1cdbd2cSJim Jagielski sal_Char __READONLY_DATA sXML_np__form[] = "_form";
111*b1cdbd2cSJim Jagielski sal_Char __READONLY_DATA sXML_np__script[] = "_script";
112*b1cdbd2cSJim Jagielski sal_Char __READONLY_DATA sXML_np__config[] = "_config";
113*b1cdbd2cSJim Jagielski sal_Char __READONLY_DATA sXML_np__db[] = "_db";
114*b1cdbd2cSJim Jagielski sal_Char __READONLY_DATA sXML_np__xforms[] = "_xforms";
115*b1cdbd2cSJim Jagielski sal_Char __READONLY_DATA sXML_np__xsd[] = "_xsd";
116*b1cdbd2cSJim Jagielski sal_Char __READONLY_DATA sXML_np__xsi[] = "_xsi";
117*b1cdbd2cSJim Jagielski sal_Char __READONLY_DATA sXML_np__field[] = "_field";
118*b1cdbd2cSJim Jagielski sal_Char __READONLY_DATA sXML_np__xhtml[] = "_xhtml";
119*b1cdbd2cSJim Jagielski 
120*b1cdbd2cSJim Jagielski sal_Char __READONLY_DATA sXML_np__fo_old[] = "__fo";
121*b1cdbd2cSJim Jagielski sal_Char __READONLY_DATA sXML_np__xlink_old[] = "__xlink";
122*b1cdbd2cSJim Jagielski sal_Char __READONLY_DATA sXML_np__office_old[] = "__office";
123*b1cdbd2cSJim Jagielski sal_Char __READONLY_DATA sXML_np__style_old[] = "__style";
124*b1cdbd2cSJim Jagielski sal_Char __READONLY_DATA sXML_np__text_old[] = "__text";
125*b1cdbd2cSJim Jagielski sal_Char __READONLY_DATA sXML_np__table_old[] = "__table";
126*b1cdbd2cSJim Jagielski sal_Char __READONLY_DATA sXML_np__meta_old[] = "__meta";
127*b1cdbd2cSJim Jagielski 
128*b1cdbd2cSJim Jagielski 
129*b1cdbd2cSJim Jagielski 
130*b1cdbd2cSJim Jagielski class SvXMLImportEventListener : public cppu::WeakImplHelper1<
131*b1cdbd2cSJim Jagielski 							com::sun::star::lang::XEventListener >
132*b1cdbd2cSJim Jagielski {
133*b1cdbd2cSJim Jagielski private:
134*b1cdbd2cSJim Jagielski 	SvXMLImport*	pImport;
135*b1cdbd2cSJim Jagielski 
136*b1cdbd2cSJim Jagielski public:
137*b1cdbd2cSJim Jagielski 							SvXMLImportEventListener(SvXMLImport* pImport);
138*b1cdbd2cSJim Jagielski 	virtual					~SvXMLImportEventListener();
139*b1cdbd2cSJim Jagielski 
140*b1cdbd2cSJim Jagielski 							// XEventListener
141*b1cdbd2cSJim Jagielski 	virtual void SAL_CALL disposing(const lang::EventObject& rEventObject) throw(::com::sun::star::uno::RuntimeException);
142*b1cdbd2cSJim Jagielski };
143*b1cdbd2cSJim Jagielski 
SvXMLImportEventListener(SvXMLImport * pTempImport)144*b1cdbd2cSJim Jagielski SvXMLImportEventListener::SvXMLImportEventListener(SvXMLImport* pTempImport)
145*b1cdbd2cSJim Jagielski 	: pImport(pTempImport)
146*b1cdbd2cSJim Jagielski {
147*b1cdbd2cSJim Jagielski }
148*b1cdbd2cSJim Jagielski 
~SvXMLImportEventListener()149*b1cdbd2cSJim Jagielski SvXMLImportEventListener::~SvXMLImportEventListener()
150*b1cdbd2cSJim Jagielski {
151*b1cdbd2cSJim Jagielski }
152*b1cdbd2cSJim Jagielski 
153*b1cdbd2cSJim Jagielski // XEventListener
disposing(const lang::EventObject &)154*b1cdbd2cSJim Jagielski void SAL_CALL SvXMLImportEventListener::disposing( const lang::EventObject& )
155*b1cdbd2cSJim Jagielski 	throw(uno::RuntimeException)
156*b1cdbd2cSJim Jagielski {
157*b1cdbd2cSJim Jagielski 	if (pImport)
158*b1cdbd2cSJim Jagielski 	{
159*b1cdbd2cSJim Jagielski 		pImport->DisposingModel();
160*b1cdbd2cSJim Jagielski 		pImport = NULL;
161*b1cdbd2cSJim Jagielski 	}
162*b1cdbd2cSJim Jagielski }
163*b1cdbd2cSJim Jagielski 
164*b1cdbd2cSJim Jagielski //==============================================================================
165*b1cdbd2cSJim Jagielski // --> ORW
166*b1cdbd2cSJim Jagielski namespace
167*b1cdbd2cSJim Jagielski {
168*b1cdbd2cSJim Jagielski     class DocumentInfo
169*b1cdbd2cSJim Jagielski     {
170*b1cdbd2cSJim Jagielski         private:
171*b1cdbd2cSJim Jagielski             sal_uInt16 mnGeneratorVersion;
172*b1cdbd2cSJim Jagielski 
173*b1cdbd2cSJim Jagielski         public:
DocumentInfo(const SvXMLImport & rImport)174*b1cdbd2cSJim Jagielski             DocumentInfo( const SvXMLImport& rImport )
175*b1cdbd2cSJim Jagielski                 : mnGeneratorVersion( SvXMLImport::ProductVersionUnknown )
176*b1cdbd2cSJim Jagielski             {
177*b1cdbd2cSJim Jagielski                 sal_Int32 nUPD, nBuild;
178*b1cdbd2cSJim Jagielski                 if ( rImport.getBuildIds( nUPD, nBuild ) )
179*b1cdbd2cSJim Jagielski                 {
180*b1cdbd2cSJim Jagielski                     if ( nUPD >= 640 && nUPD <= 645 )
181*b1cdbd2cSJim Jagielski                     {
182*b1cdbd2cSJim Jagielski                         mnGeneratorVersion = SvXMLImport::OOo_1x;
183*b1cdbd2cSJim Jagielski                     }
184*b1cdbd2cSJim Jagielski                     else if ( nUPD == 680 )
185*b1cdbd2cSJim Jagielski                     {
186*b1cdbd2cSJim Jagielski                         mnGeneratorVersion = SvXMLImport::OOo_2x;
187*b1cdbd2cSJim Jagielski                     }
188*b1cdbd2cSJim Jagielski                     else if ( nUPD == 300 && nBuild <= 9379 )
189*b1cdbd2cSJim Jagielski                     {
190*b1cdbd2cSJim Jagielski                         mnGeneratorVersion = SvXMLImport::OOo_30x;
191*b1cdbd2cSJim Jagielski                     }
192*b1cdbd2cSJim Jagielski                     else if ( nUPD == 310 )
193*b1cdbd2cSJim Jagielski                     {
194*b1cdbd2cSJim Jagielski                         mnGeneratorVersion = SvXMLImport::OOo_31x;
195*b1cdbd2cSJim Jagielski                     }
196*b1cdbd2cSJim Jagielski                     else if ( nUPD == 320 )
197*b1cdbd2cSJim Jagielski                     {
198*b1cdbd2cSJim Jagielski                         mnGeneratorVersion = SvXMLImport::OOo_32x;
199*b1cdbd2cSJim Jagielski                     }
200*b1cdbd2cSJim Jagielski                     else if ( nUPD == 330 )
201*b1cdbd2cSJim Jagielski                     {
202*b1cdbd2cSJim Jagielski                         mnGeneratorVersion = SvXMLImport::OOo_33x;
203*b1cdbd2cSJim Jagielski                     }
204*b1cdbd2cSJim Jagielski                     else if ( nUPD == 340 )
205*b1cdbd2cSJim Jagielski                     {
206*b1cdbd2cSJim Jagielski                         mnGeneratorVersion = SvXMLImport::OOo_34x;
207*b1cdbd2cSJim Jagielski                     }
208*b1cdbd2cSJim Jagielski                 }
209*b1cdbd2cSJim Jagielski             }
210*b1cdbd2cSJim Jagielski 
~DocumentInfo()211*b1cdbd2cSJim Jagielski             ~DocumentInfo()
212*b1cdbd2cSJim Jagielski             {}
213*b1cdbd2cSJim Jagielski 
getGeneratorVersion() const214*b1cdbd2cSJim Jagielski             sal_uInt16 getGeneratorVersion() const
215*b1cdbd2cSJim Jagielski             {
216*b1cdbd2cSJim Jagielski                 return mnGeneratorVersion;
217*b1cdbd2cSJim Jagielski             }
218*b1cdbd2cSJim Jagielski     };
219*b1cdbd2cSJim Jagielski }
220*b1cdbd2cSJim Jagielski // <--
221*b1cdbd2cSJim Jagielski 
222*b1cdbd2cSJim Jagielski class SvXMLImport_Impl
223*b1cdbd2cSJim Jagielski {
224*b1cdbd2cSJim Jagielski public:
225*b1cdbd2cSJim Jagielski 	FontToSubsFontConverter hBatsFontConv;
226*b1cdbd2cSJim Jagielski 	FontToSubsFontConverter hMathFontConv;
227*b1cdbd2cSJim Jagielski 
228*b1cdbd2cSJim Jagielski 	bool mbOwnGraphicResolver;
229*b1cdbd2cSJim Jagielski 	bool mbOwnEmbeddedResolver;
230*b1cdbd2cSJim Jagielski 	INetURLObject aBaseURL;
231*b1cdbd2cSJim Jagielski     INetURLObject aDocBase;
232*b1cdbd2cSJim Jagielski 
233*b1cdbd2cSJim Jagielski     /// name of stream in package, e.g., "content.xml"
234*b1cdbd2cSJim Jagielski     ::rtl::OUString mStreamName;
235*b1cdbd2cSJim Jagielski 
236*b1cdbd2cSJim Jagielski     ::rtl::OUString aODFVersion;
237*b1cdbd2cSJim Jagielski 
238*b1cdbd2cSJim Jagielski     // --> OD 2004-08-10 #i28749# - boolean, indicating that position attributes
239*b1cdbd2cSJim Jagielski     // of shapes are given in horizontal left-to-right layout. This is the case
240*b1cdbd2cSJim Jagielski     // for the OpenOffice.org file format.
241*b1cdbd2cSJim Jagielski     sal_Bool mbShapePositionInHoriL2R;
242*b1cdbd2cSJim Jagielski     // <--
243*b1cdbd2cSJim Jagielski     // --> OD 2007-12-19 #152540#
244*b1cdbd2cSJim Jagielski     sal_Bool mbTextDocInOOoFileFormat;
245*b1cdbd2cSJim Jagielski     // <--
246*b1cdbd2cSJim Jagielski 
247*b1cdbd2cSJim Jagielski     const uno::Reference< uno::XComponentContext > mxComponentContext;
248*b1cdbd2cSJim Jagielski 
249*b1cdbd2cSJim Jagielski     std::auto_ptr< xmloff::RDFaImportHelper > mpRDFaHelper;
250*b1cdbd2cSJim Jagielski 
251*b1cdbd2cSJim Jagielski     // --> ORW
252*b1cdbd2cSJim Jagielski     std::auto_ptr< DocumentInfo > mpDocumentInfo;
253*b1cdbd2cSJim Jagielski     // <--
254*b1cdbd2cSJim Jagielski 
SvXMLImport_Impl()255*b1cdbd2cSJim Jagielski     SvXMLImport_Impl()
256*b1cdbd2cSJim Jagielski         : hBatsFontConv( 0 )
257*b1cdbd2cSJim Jagielski         , hMathFontConv( 0 )
258*b1cdbd2cSJim Jagielski         , mbOwnGraphicResolver( false )
259*b1cdbd2cSJim Jagielski         , mbOwnEmbeddedResolver( false )
260*b1cdbd2cSJim Jagielski         , mStreamName()
261*b1cdbd2cSJim Jagielski         , mbShapePositionInHoriL2R( sal_False )
262*b1cdbd2cSJim Jagielski         , mbTextDocInOOoFileFormat( sal_False )
263*b1cdbd2cSJim Jagielski         , mxComponentContext( ::comphelper::getProcessComponentContext() )
264*b1cdbd2cSJim Jagielski         , mpRDFaHelper() // lazy
265*b1cdbd2cSJim Jagielski         // --> ORW
266*b1cdbd2cSJim Jagielski         , mpDocumentInfo() // lazy
267*b1cdbd2cSJim Jagielski         // <--
268*b1cdbd2cSJim Jagielski     {
269*b1cdbd2cSJim Jagielski         OSL_ENSURE(mxComponentContext.is(), "SvXMLImport: no ComponentContext");
270*b1cdbd2cSJim Jagielski         if (!mxComponentContext.is()) throw uno::RuntimeException();
271*b1cdbd2cSJim Jagielski     }
272*b1cdbd2cSJim Jagielski 
~SvXMLImport_Impl()273*b1cdbd2cSJim Jagielski 	~SvXMLImport_Impl()
274*b1cdbd2cSJim Jagielski 	{
275*b1cdbd2cSJim Jagielski 		if( hBatsFontConv )
276*b1cdbd2cSJim Jagielski 			DestroyFontToSubsFontConverter( hBatsFontConv );
277*b1cdbd2cSJim Jagielski 		if( hMathFontConv )
278*b1cdbd2cSJim Jagielski 			DestroyFontToSubsFontConverter( hMathFontConv );
279*b1cdbd2cSJim Jagielski 	}
280*b1cdbd2cSJim Jagielski 
281*b1cdbd2cSJim Jagielski     // --> ORW
getGeneratorVersion(const SvXMLImport & rImport)282*b1cdbd2cSJim Jagielski     sal_uInt16 getGeneratorVersion( const SvXMLImport& rImport )
283*b1cdbd2cSJim Jagielski     {
284*b1cdbd2cSJim Jagielski         if ( !mpDocumentInfo.get() )
285*b1cdbd2cSJim Jagielski         {
286*b1cdbd2cSJim Jagielski             mpDocumentInfo.reset( new DocumentInfo( rImport ) );
287*b1cdbd2cSJim Jagielski         }
288*b1cdbd2cSJim Jagielski 
289*b1cdbd2cSJim Jagielski         return mpDocumentInfo->getGeneratorVersion();
290*b1cdbd2cSJim Jagielski     }
291*b1cdbd2cSJim Jagielski     // <--
292*b1cdbd2cSJim Jagielski 
293*b1cdbd2cSJim Jagielski 	::comphelper::UnoInterfaceToUniqueIdentifierMapper	maInterfaceToIdentifierMapper;
294*b1cdbd2cSJim Jagielski };
295*b1cdbd2cSJim Jagielski 
296*b1cdbd2cSJim Jagielski typedef SvXMLImportContext *SvXMLImportContextPtr;
297*b1cdbd2cSJim Jagielski SV_DECL_PTRARR( SvXMLImportContexts_Impl, SvXMLImportContextPtr, 20, 5 )
SV_IMPL_PTRARR(SvXMLImportContexts_Impl,SvXMLImportContextPtr)298*b1cdbd2cSJim Jagielski SV_IMPL_PTRARR( SvXMLImportContexts_Impl, SvXMLImportContextPtr )
299*b1cdbd2cSJim Jagielski 
300*b1cdbd2cSJim Jagielski SvXMLImportContext *SvXMLImport::CreateContext( sal_uInt16 nPrefix,
301*b1cdbd2cSJim Jagielski 										 const OUString& rLocalName,
302*b1cdbd2cSJim Jagielski 										 const uno::Reference< xml::sax::XAttributeList >& )
303*b1cdbd2cSJim Jagielski {
304*b1cdbd2cSJim Jagielski 	return new SvXMLImportContext( *this, nPrefix, rLocalName );
305*b1cdbd2cSJim Jagielski }
306*b1cdbd2cSJim Jagielski 
_InitCtor()307*b1cdbd2cSJim Jagielski void SvXMLImport::_InitCtor()
308*b1cdbd2cSJim Jagielski {
309*b1cdbd2cSJim Jagielski 	if( mnImportFlags != 0 )
310*b1cdbd2cSJim Jagielski 	{
311*b1cdbd2cSJim Jagielski 		// implicit "xml" namespace prefix
312*b1cdbd2cSJim Jagielski         mpNamespaceMap->Add( GetXMLToken(XML_XML), GetXMLToken(XML_N_XML), XML_NAMESPACE_XML );
313*b1cdbd2cSJim Jagielski 		mpNamespaceMap->Add( OUString( RTL_CONSTASCII_USTRINGPARAM ( sXML_np__office ) ),
314*b1cdbd2cSJim Jagielski 							GetXMLToken(XML_N_OFFICE),
315*b1cdbd2cSJim Jagielski 							XML_NAMESPACE_OFFICE );
316*b1cdbd2cSJim Jagielski 		mpNamespaceMap->Add( OUString( RTL_CONSTASCII_USTRINGPARAM ( sXML_np__office_ext ) ),
317*b1cdbd2cSJim Jagielski 							GetXMLToken(XML_N_OFFICE_EXT),
318*b1cdbd2cSJim Jagielski 							XML_NAMESPACE_OFFICE_EXT );
319*b1cdbd2cSJim Jagielski 		mpNamespaceMap->Add( OUString( RTL_CONSTASCII_USTRINGPARAM ( sXML_np__ooo ) ), GetXMLToken(XML_N_OOO), XML_NAMESPACE_OOO );
320*b1cdbd2cSJim Jagielski 		mpNamespaceMap->Add( OUString( RTL_CONSTASCII_USTRINGPARAM ( sXML_np__style) ),
321*b1cdbd2cSJim Jagielski 							GetXMLToken(XML_N_STYLE),
322*b1cdbd2cSJim Jagielski 							XML_NAMESPACE_STYLE );
323*b1cdbd2cSJim Jagielski 		mpNamespaceMap->Add( OUString( RTL_CONSTASCII_USTRINGPARAM ( sXML_np__text) ),
324*b1cdbd2cSJim Jagielski 							GetXMLToken(XML_N_TEXT),
325*b1cdbd2cSJim Jagielski 							XML_NAMESPACE_TEXT );
326*b1cdbd2cSJim Jagielski         mpNamespaceMap->Add( OUString( RTL_CONSTASCII_USTRINGPARAM ( sXML_np__text_ext ) ),
327*b1cdbd2cSJim Jagielski             GetXMLToken(XML_N_TEXT_EXT),
328*b1cdbd2cSJim Jagielski             XML_NAMESPACE_TEXT_EXT );
329*b1cdbd2cSJim Jagielski 		mpNamespaceMap->Add( OUString( RTL_CONSTASCII_USTRINGPARAM ( sXML_np__table ) ),
330*b1cdbd2cSJim Jagielski 							GetXMLToken(XML_N_TABLE),
331*b1cdbd2cSJim Jagielski 							XML_NAMESPACE_TABLE );
332*b1cdbd2cSJim Jagielski 		mpNamespaceMap->Add( OUString( RTL_CONSTASCII_USTRINGPARAM ( sXML_np__table_ext ) ),
333*b1cdbd2cSJim Jagielski 							GetXMLToken(XML_N_TABLE_EXT),
334*b1cdbd2cSJim Jagielski 							XML_NAMESPACE_TABLE_EXT );
335*b1cdbd2cSJim Jagielski 		mpNamespaceMap->Add( OUString( RTL_CONSTASCII_USTRINGPARAM ( sXML_np__draw ) ),
336*b1cdbd2cSJim Jagielski 							GetXMLToken(XML_N_DRAW),
337*b1cdbd2cSJim Jagielski 							XML_NAMESPACE_DRAW );
338*b1cdbd2cSJim Jagielski 		mpNamespaceMap->Add( OUString( RTL_CONSTASCII_USTRINGPARAM ( sXML_np__draw_ext ) ),
339*b1cdbd2cSJim Jagielski 							GetXMLToken(XML_N_DRAW_EXT),
340*b1cdbd2cSJim Jagielski 							XML_NAMESPACE_DRAW_EXT );
341*b1cdbd2cSJim Jagielski 		mpNamespaceMap->Add( OUString( RTL_CONSTASCII_USTRINGPARAM (sXML_np__dr3d ) ),
342*b1cdbd2cSJim Jagielski 							GetXMLToken(XML_N_DR3D),
343*b1cdbd2cSJim Jagielski 							XML_NAMESPACE_DR3D );
344*b1cdbd2cSJim Jagielski 		mpNamespaceMap->Add( OUString( RTL_CONSTASCII_USTRINGPARAM ( sXML_np__fo) ),
345*b1cdbd2cSJim Jagielski 							GetXMLToken(XML_N_FO_COMPAT),
346*b1cdbd2cSJim Jagielski 							XML_NAMESPACE_FO );
347*b1cdbd2cSJim Jagielski 		mpNamespaceMap->Add( OUString( RTL_CONSTASCII_USTRINGPARAM ( sXML_np__xlink) ),
348*b1cdbd2cSJim Jagielski 							GetXMLToken(XML_N_XLINK),
349*b1cdbd2cSJim Jagielski 							XML_NAMESPACE_XLINK );
350*b1cdbd2cSJim Jagielski 		mpNamespaceMap->Add( OUString( RTL_CONSTASCII_USTRINGPARAM ( sXML_np__dc) ),
351*b1cdbd2cSJim Jagielski 							GetXMLToken(XML_N_DC),
352*b1cdbd2cSJim Jagielski 							XML_NAMESPACE_DC );
353*b1cdbd2cSJim Jagielski 		mpNamespaceMap->Add( OUString( RTL_CONSTASCII_USTRINGPARAM ( sXML_np__dom ) ),
354*b1cdbd2cSJim Jagielski 							GetXMLToken(XML_N_DOM),
355*b1cdbd2cSJim Jagielski 							XML_NAMESPACE_DOM );
356*b1cdbd2cSJim Jagielski 		mpNamespaceMap->Add( OUString( RTL_CONSTASCII_USTRINGPARAM ( sXML_np__meta) ),
357*b1cdbd2cSJim Jagielski 							GetXMLToken(XML_N_META),
358*b1cdbd2cSJim Jagielski 							XML_NAMESPACE_META );
359*b1cdbd2cSJim Jagielski 		mpNamespaceMap->Add( OUString( RTL_CONSTASCII_USTRINGPARAM ( sXML_np__number) ),
360*b1cdbd2cSJim Jagielski 							GetXMLToken(XML_N_NUMBER),
361*b1cdbd2cSJim Jagielski 							XML_NAMESPACE_NUMBER );
362*b1cdbd2cSJim Jagielski 		mpNamespaceMap->Add( OUString( RTL_CONSTASCII_USTRINGPARAM ( sXML_np__svg) ),
363*b1cdbd2cSJim Jagielski 							GetXMLToken(XML_N_SVG_COMPAT),
364*b1cdbd2cSJim Jagielski 							XML_NAMESPACE_SVG );
365*b1cdbd2cSJim Jagielski 		mpNamespaceMap->Add( OUString( RTL_CONSTASCII_USTRINGPARAM ( sXML_np__chart) ),
366*b1cdbd2cSJim Jagielski 							GetXMLToken(XML_N_CHART),
367*b1cdbd2cSJim Jagielski 							XML_NAMESPACE_CHART );
368*b1cdbd2cSJim Jagielski 		mpNamespaceMap->Add( OUString( RTL_CONSTASCII_USTRINGPARAM ( sXML_np__math) ),
369*b1cdbd2cSJim Jagielski 							GetXMLToken(XML_N_MATH),
370*b1cdbd2cSJim Jagielski 							XML_NAMESPACE_MATH );
371*b1cdbd2cSJim Jagielski         mpNamespaceMap->Add(OUString(RTL_CONSTASCII_USTRINGPARAM( sXML_np__form )),
372*b1cdbd2cSJim Jagielski                             GetXMLToken(XML_N_FORM),
373*b1cdbd2cSJim Jagielski 							XML_NAMESPACE_FORM );
374*b1cdbd2cSJim Jagielski 		mpNamespaceMap->Add( OUString( RTL_CONSTASCII_USTRINGPARAM ( sXML_np__script) ),
375*b1cdbd2cSJim Jagielski 							GetXMLToken(XML_N_SCRIPT),
376*b1cdbd2cSJim Jagielski 							XML_NAMESPACE_SCRIPT );
377*b1cdbd2cSJim Jagielski 		mpNamespaceMap->Add( OUString( RTL_CONSTASCII_USTRINGPARAM ( sXML_np__config) ),
378*b1cdbd2cSJim Jagielski 							GetXMLToken(XML_N_CONFIG),
379*b1cdbd2cSJim Jagielski 							XML_NAMESPACE_CONFIG );
380*b1cdbd2cSJim Jagielski         mpNamespaceMap->Add( OUString( RTL_CONSTASCII_USTRINGPARAM ( sXML_np__xforms) ),
381*b1cdbd2cSJim Jagielski                             GetXMLToken(XML_N_XFORMS_1_0),
382*b1cdbd2cSJim Jagielski                             XML_NAMESPACE_XFORMS );
383*b1cdbd2cSJim Jagielski         mpNamespaceMap->Add( OUString( RTL_CONSTASCII_USTRINGPARAM ( sXML_np__xsd) ),
384*b1cdbd2cSJim Jagielski                             GetXMLToken(XML_N_XSD),
385*b1cdbd2cSJim Jagielski                             XML_NAMESPACE_XSD );
386*b1cdbd2cSJim Jagielski         mpNamespaceMap->Add( OUString( RTL_CONSTASCII_USTRINGPARAM ( sXML_np__xsi) ),
387*b1cdbd2cSJim Jagielski                             GetXMLToken(XML_N_XSI),
388*b1cdbd2cSJim Jagielski                             XML_NAMESPACE_XFORMS );
389*b1cdbd2cSJim Jagielski 		mpNamespaceMap->Add( OUString( RTL_CONSTASCII_USTRINGPARAM ( sXML_np__ooow ) ), GetXMLToken(XML_N_OOOW), XML_NAMESPACE_OOOW );
390*b1cdbd2cSJim Jagielski 		mpNamespaceMap->Add( OUString( RTL_CONSTASCII_USTRINGPARAM ( sXML_np__oooc ) ), GetXMLToken(XML_N_OOOC), XML_NAMESPACE_OOOC );
391*b1cdbd2cSJim Jagielski         mpNamespaceMap->Add( OUString( RTL_CONSTASCII_USTRINGPARAM ( sXML_np__field ) ), GetXMLToken(XML_N_FIELD), XML_NAMESPACE_FIELD );
392*b1cdbd2cSJim Jagielski 		mpNamespaceMap->Add( OUString( RTL_CONSTASCII_USTRINGPARAM ( sXML_np__of ) ),
393*b1cdbd2cSJim Jagielski                             GetXMLToken(XML_N_OF), XML_NAMESPACE_OF );
394*b1cdbd2cSJim Jagielski         mpNamespaceMap->Add(
395*b1cdbd2cSJim Jagielski             OUString( RTL_CONSTASCII_USTRINGPARAM ( sXML_np__xhtml ) ),
396*b1cdbd2cSJim Jagielski             GetXMLToken(XML_N_XHTML), XML_NAMESPACE_XHTML );
397*b1cdbd2cSJim Jagielski 	}
398*b1cdbd2cSJim Jagielski 
399*b1cdbd2cSJim Jagielski 	msPackageProtocol = OUString( RTL_CONSTASCII_USTRINGPARAM( "vnd.sun.star.Package:" ) );
400*b1cdbd2cSJim Jagielski 
401*b1cdbd2cSJim Jagielski 	if (mxNumberFormatsSupplier.is())
402*b1cdbd2cSJim Jagielski 		mpNumImport = new SvXMLNumFmtHelper(mxNumberFormatsSupplier, getServiceFactory());
403*b1cdbd2cSJim Jagielski 
404*b1cdbd2cSJim Jagielski 	if (mxModel.is() && !mxEventListener.is())
405*b1cdbd2cSJim Jagielski 	{
406*b1cdbd2cSJim Jagielski 		mxEventListener.set(new SvXMLImportEventListener(this));
407*b1cdbd2cSJim Jagielski 		mxModel->addEventListener(mxEventListener);
408*b1cdbd2cSJim Jagielski 	}
409*b1cdbd2cSJim Jagielski 
410*b1cdbd2cSJim Jagielski     ::comphelper::UnoInterfaceToUniqueIdentifierMapper	maInterfaceToIdentifierMapper;
411*b1cdbd2cSJim Jagielski 
412*b1cdbd2cSJim Jagielski }
413*b1cdbd2cSJim Jagielski 
414*b1cdbd2cSJim Jagielski // #110680#
SvXMLImport(const::com::sun::star::uno::Reference<::com::sun::star::lang::XMultiServiceFactory> & xServiceFactory,sal_uInt16 nImportFlags)415*b1cdbd2cSJim Jagielski SvXMLImport::SvXMLImport(
416*b1cdbd2cSJim Jagielski 	const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& xServiceFactory,
417*b1cdbd2cSJim Jagielski 	sal_uInt16 nImportFlags ) throw ()
418*b1cdbd2cSJim Jagielski :	mpImpl( new SvXMLImport_Impl() ),
419*b1cdbd2cSJim Jagielski 	mpNamespaceMap( new SvXMLNamespaceMap ),
420*b1cdbd2cSJim Jagielski 
421*b1cdbd2cSJim Jagielski 	// #110680#
422*b1cdbd2cSJim Jagielski 	// pUnitConv( new SvXMLUnitConverter( MAP_100TH_MM, MAP_100TH_MM ) ),
423*b1cdbd2cSJim Jagielski 	mpUnitConv( new SvXMLUnitConverter( MAP_100TH_MM, MAP_100TH_MM, xServiceFactory ) ),
424*b1cdbd2cSJim Jagielski 
425*b1cdbd2cSJim Jagielski 	mpContexts( new SvXMLImportContexts_Impl ),
426*b1cdbd2cSJim Jagielski 	mpNumImport( NULL ),
427*b1cdbd2cSJim Jagielski 	mpProgressBarHelper( NULL ),
428*b1cdbd2cSJim Jagielski 	mpEventImportHelper( NULL ),
429*b1cdbd2cSJim Jagielski 	mpXMLErrors( NULL ),
430*b1cdbd2cSJim Jagielski 	mpStyleMap(0),
431*b1cdbd2cSJim Jagielski 	mnImportFlags( nImportFlags ),
432*b1cdbd2cSJim Jagielski 	mnErrorFlags(0),
433*b1cdbd2cSJim Jagielski 	// #110680#
434*b1cdbd2cSJim Jagielski 	mxServiceFactory(xServiceFactory),
435*b1cdbd2cSJim Jagielski     mbIsFormsSupported( sal_True ),
436*b1cdbd2cSJim Jagielski 	mbIsTableShapeSupported( false ),
437*b1cdbd2cSJim Jagielski     mbIsGraphicLoadOnDemandSupported( true )
438*b1cdbd2cSJim Jagielski {
439*b1cdbd2cSJim Jagielski 	DBG_ASSERT( mxServiceFactory.is(), "got no service manager" );
440*b1cdbd2cSJim Jagielski 	_InitCtor();
441*b1cdbd2cSJim Jagielski }
442*b1cdbd2cSJim Jagielski 
443*b1cdbd2cSJim Jagielski // #110680#
SvXMLImport(const::com::sun::star::uno::Reference<::com::sun::star::lang::XMultiServiceFactory> & xServiceFactory,const Reference<XModel> & rModel)444*b1cdbd2cSJim Jagielski SvXMLImport::SvXMLImport(
445*b1cdbd2cSJim Jagielski 	const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& xServiceFactory,
446*b1cdbd2cSJim Jagielski 	const Reference< XModel > & rModel ) throw ()
447*b1cdbd2cSJim Jagielski :	mxModel( rModel ),
448*b1cdbd2cSJim Jagielski 	mxNumberFormatsSupplier (rModel, uno::UNO_QUERY),
449*b1cdbd2cSJim Jagielski 	mpImpl( new SvXMLImport_Impl() ),
450*b1cdbd2cSJim Jagielski 	mpNamespaceMap( new SvXMLNamespaceMap ),
451*b1cdbd2cSJim Jagielski 	// #110680#
452*b1cdbd2cSJim Jagielski 	// pUnitConv( new SvXMLUnitConverter( MAP_100TH_MM, MAP_100TH_MM ) ),
453*b1cdbd2cSJim Jagielski 	mpUnitConv( new SvXMLUnitConverter( MAP_100TH_MM, MAP_100TH_MM, xServiceFactory ) ),
454*b1cdbd2cSJim Jagielski 	mpContexts( new SvXMLImportContexts_Impl ),
455*b1cdbd2cSJim Jagielski 	mpNumImport( NULL ),
456*b1cdbd2cSJim Jagielski 	mpProgressBarHelper( NULL ),
457*b1cdbd2cSJim Jagielski 	mpEventImportHelper( NULL ),
458*b1cdbd2cSJim Jagielski 	mpXMLErrors( NULL ),
459*b1cdbd2cSJim Jagielski 	mpStyleMap(0),
460*b1cdbd2cSJim Jagielski 	mnImportFlags( IMPORT_ALL ),
461*b1cdbd2cSJim Jagielski 	mnErrorFlags(0),
462*b1cdbd2cSJim Jagielski 	// #110680#
463*b1cdbd2cSJim Jagielski 	mxServiceFactory(xServiceFactory),
464*b1cdbd2cSJim Jagielski 	mbIsFormsSupported( sal_True ),
465*b1cdbd2cSJim Jagielski 	mbIsTableShapeSupported( false ),
466*b1cdbd2cSJim Jagielski     mbIsGraphicLoadOnDemandSupported( true )
467*b1cdbd2cSJim Jagielski {
468*b1cdbd2cSJim Jagielski 	DBG_ASSERT( mxServiceFactory.is(), "got no service manager" );
469*b1cdbd2cSJim Jagielski 	_InitCtor();
470*b1cdbd2cSJim Jagielski }
471*b1cdbd2cSJim Jagielski 
472*b1cdbd2cSJim Jagielski // #110680#
SvXMLImport(const::com::sun::star::uno::Reference<::com::sun::star::lang::XMultiServiceFactory> & xServiceFactory,const Reference<XModel> & rModel,const::com::sun::star::uno::Reference<::com::sun::star::document::XGraphicObjectResolver> & rGraphicObjects)473*b1cdbd2cSJim Jagielski SvXMLImport::SvXMLImport(
474*b1cdbd2cSJim Jagielski 	const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& xServiceFactory,
475*b1cdbd2cSJim Jagielski 	const Reference< XModel > & rModel,
476*b1cdbd2cSJim Jagielski 	const ::com::sun::star::uno::Reference< ::com::sun::star::document::XGraphicObjectResolver > & rGraphicObjects ) throw ()
477*b1cdbd2cSJim Jagielski :	mxModel( rModel ),
478*b1cdbd2cSJim Jagielski 	mxNumberFormatsSupplier (rModel, uno::UNO_QUERY),
479*b1cdbd2cSJim Jagielski 	mxGraphicResolver( rGraphicObjects ),
480*b1cdbd2cSJim Jagielski 	mpImpl( new SvXMLImport_Impl() ),
481*b1cdbd2cSJim Jagielski 	mpNamespaceMap( new SvXMLNamespaceMap ),
482*b1cdbd2cSJim Jagielski 	// #110680#
483*b1cdbd2cSJim Jagielski 	// pUnitConv( new SvXMLUnitConverter( MAP_100TH_MM, MAP_100TH_MM ) ),
484*b1cdbd2cSJim Jagielski 	mpUnitConv( new SvXMLUnitConverter( MAP_100TH_MM, MAP_100TH_MM, xServiceFactory ) ),
485*b1cdbd2cSJim Jagielski 	mpContexts( new SvXMLImportContexts_Impl ),
486*b1cdbd2cSJim Jagielski 	mpNumImport( NULL ),
487*b1cdbd2cSJim Jagielski 	mpProgressBarHelper( NULL ),
488*b1cdbd2cSJim Jagielski 	mpEventImportHelper( NULL ),
489*b1cdbd2cSJim Jagielski 	mpXMLErrors( NULL ),
490*b1cdbd2cSJim Jagielski 	mpStyleMap(0),
491*b1cdbd2cSJim Jagielski 	mnImportFlags( IMPORT_ALL ),
492*b1cdbd2cSJim Jagielski 	mnErrorFlags(0),
493*b1cdbd2cSJim Jagielski 	// #110680#
494*b1cdbd2cSJim Jagielski 	mxServiceFactory(xServiceFactory),
495*b1cdbd2cSJim Jagielski     mbIsFormsSupported( sal_True ),
496*b1cdbd2cSJim Jagielski     mbIsGraphicLoadOnDemandSupported( true )
497*b1cdbd2cSJim Jagielski {
498*b1cdbd2cSJim Jagielski 	DBG_ASSERT( mxServiceFactory.is(), "got no service manager" );
499*b1cdbd2cSJim Jagielski 	_InitCtor();
500*b1cdbd2cSJim Jagielski }
501*b1cdbd2cSJim Jagielski 
~SvXMLImport()502*b1cdbd2cSJim Jagielski SvXMLImport::~SvXMLImport() throw ()
503*b1cdbd2cSJim Jagielski {
504*b1cdbd2cSJim Jagielski     delete mpXMLErrors;
505*b1cdbd2cSJim Jagielski 	delete mpNamespaceMap;
506*b1cdbd2cSJim Jagielski 	delete mpUnitConv;
507*b1cdbd2cSJim Jagielski 	delete mpEventImportHelper;
508*b1cdbd2cSJim Jagielski 	if( mpContexts )
509*b1cdbd2cSJim Jagielski 	{
510*b1cdbd2cSJim Jagielski 		while( mpContexts->Count() )
511*b1cdbd2cSJim Jagielski 		{
512*b1cdbd2cSJim Jagielski 			sal_uInt16 n = mpContexts->Count() - 1;
513*b1cdbd2cSJim Jagielski 			SvXMLImportContext *pContext = (*mpContexts)[n];
514*b1cdbd2cSJim Jagielski 			mpContexts->Remove( n, 1 );
515*b1cdbd2cSJim Jagielski 			if( pContext )
516*b1cdbd2cSJim Jagielski 				pContext->ReleaseRef();
517*b1cdbd2cSJim Jagielski 		}
518*b1cdbd2cSJim Jagielski 		delete mpContexts;
519*b1cdbd2cSJim Jagielski 	}
520*b1cdbd2cSJim Jagielski 
521*b1cdbd2cSJim Jagielski 	//	delete pImageMapImportHelper;
522*b1cdbd2cSJim Jagielski 
523*b1cdbd2cSJim Jagielski 	//	#i9518# the import component might not be deleted until after the document has been closed,
524*b1cdbd2cSJim Jagielski 	//	so the stuff that accesses the document has been moved to endDocument.
525*b1cdbd2cSJim Jagielski 
526*b1cdbd2cSJim Jagielski 	//	pNumImport is allocated in the ctor, so it must also be deleted here in case the component
527*b1cdbd2cSJim Jagielski 	//	is created and deleted without actually importing.
528*b1cdbd2cSJim Jagielski 	delete mpNumImport;
529*b1cdbd2cSJim Jagielski 	delete mpProgressBarHelper;
530*b1cdbd2cSJim Jagielski 
531*b1cdbd2cSJim Jagielski 	xmloff::token::ResetTokens();
532*b1cdbd2cSJim Jagielski 
533*b1cdbd2cSJim Jagielski 	if( mpImpl )
534*b1cdbd2cSJim Jagielski 		delete mpImpl;
535*b1cdbd2cSJim Jagielski 
536*b1cdbd2cSJim Jagielski 	if (mxEventListener.is() && mxModel.is())
537*b1cdbd2cSJim Jagielski 		mxModel->removeEventListener(mxEventListener);
538*b1cdbd2cSJim Jagielski }
539*b1cdbd2cSJim Jagielski 
540*b1cdbd2cSJim Jagielski // XUnoTunnel & co
getUnoTunnelId()541*b1cdbd2cSJim Jagielski const uno::Sequence< sal_Int8 > & SvXMLImport::getUnoTunnelId() throw()
542*b1cdbd2cSJim Jagielski {
543*b1cdbd2cSJim Jagielski 	static uno::Sequence< sal_Int8 > * pSeq = 0;
544*b1cdbd2cSJim Jagielski 	if( !pSeq )
545*b1cdbd2cSJim Jagielski 	{
546*b1cdbd2cSJim Jagielski 		Guard< Mutex > aGuard( Mutex::getGlobalMutex() );
547*b1cdbd2cSJim Jagielski 		if( !pSeq )
548*b1cdbd2cSJim Jagielski 		{
549*b1cdbd2cSJim Jagielski 			static uno::Sequence< sal_Int8 > aSeq( 16 );
550*b1cdbd2cSJim Jagielski 			rtl_createUuid( (sal_uInt8*)aSeq.getArray(), 0, sal_True );
551*b1cdbd2cSJim Jagielski 			pSeq = &aSeq;
552*b1cdbd2cSJim Jagielski 		}
553*b1cdbd2cSJim Jagielski 	}
554*b1cdbd2cSJim Jagielski 	return *pSeq;
555*b1cdbd2cSJim Jagielski }
556*b1cdbd2cSJim Jagielski 
getImplementation(uno::Reference<uno::XInterface> xInt)557*b1cdbd2cSJim Jagielski SvXMLImport* SvXMLImport::getImplementation( uno::Reference< uno::XInterface > xInt ) throw()
558*b1cdbd2cSJim Jagielski {
559*b1cdbd2cSJim Jagielski 	uno::Reference< lang::XUnoTunnel > xUT( xInt, uno::UNO_QUERY );
560*b1cdbd2cSJim Jagielski 	if( xUT.is() )
561*b1cdbd2cSJim Jagielski 	{
562*b1cdbd2cSJim Jagielski 		return
563*b1cdbd2cSJim Jagielski 			reinterpret_cast<SvXMLImport*>(
564*b1cdbd2cSJim Jagielski 				sal::static_int_cast<sal_IntPtr>(
565*b1cdbd2cSJim Jagielski 					xUT->getSomething( SvXMLImport::getUnoTunnelId())));
566*b1cdbd2cSJim Jagielski 	}
567*b1cdbd2cSJim Jagielski 	else
568*b1cdbd2cSJim Jagielski 		return NULL;
569*b1cdbd2cSJim Jagielski }
570*b1cdbd2cSJim Jagielski 
571*b1cdbd2cSJim Jagielski // XUnoTunnel
getSomething(const uno::Sequence<sal_Int8> & rId)572*b1cdbd2cSJim Jagielski sal_Int64 SAL_CALL SvXMLImport::getSomething( const uno::Sequence< sal_Int8 >& rId )
573*b1cdbd2cSJim Jagielski 	throw( uno::RuntimeException )
574*b1cdbd2cSJim Jagielski {
575*b1cdbd2cSJim Jagielski 	if( rId.getLength() == 16 && 0 == rtl_compareMemory( getUnoTunnelId().getConstArray(),
576*b1cdbd2cSJim Jagielski 														 rId.getConstArray(), 16 ) )
577*b1cdbd2cSJim Jagielski 	{
578*b1cdbd2cSJim Jagielski 		return sal::static_int_cast<sal_Int64>(reinterpret_cast<sal_uIntPtr>(this));
579*b1cdbd2cSJim Jagielski 	}
580*b1cdbd2cSJim Jagielski 	return 0;
581*b1cdbd2cSJim Jagielski }
582*b1cdbd2cSJim Jagielski 
startDocument(void)583*b1cdbd2cSJim Jagielski void SAL_CALL SvXMLImport::startDocument( void )
584*b1cdbd2cSJim Jagielski 	throw( xml::sax::SAXException, uno::RuntimeException )
585*b1cdbd2cSJim Jagielski {
586*b1cdbd2cSJim Jagielski     RTL_LOGFILE_TRACE_AUTHOR( "xmloff", LOGFILE_AUTHOR, "{ SvXMLImport::startDocument" );
587*b1cdbd2cSJim Jagielski 
588*b1cdbd2cSJim Jagielski 	if( !mxGraphicResolver.is() || !mxEmbeddedResolver.is() )
589*b1cdbd2cSJim Jagielski 	{
590*b1cdbd2cSJim Jagielski 		Reference< lang::XMultiServiceFactory > xFactory( mxModel,	UNO_QUERY );
591*b1cdbd2cSJim Jagielski 		if( xFactory.is() )
592*b1cdbd2cSJim Jagielski 		{
593*b1cdbd2cSJim Jagielski 			try
594*b1cdbd2cSJim Jagielski 			{
595*b1cdbd2cSJim Jagielski 				if( !mxGraphicResolver.is() )
596*b1cdbd2cSJim Jagielski 				{
597*b1cdbd2cSJim Jagielski 					mxGraphicResolver = Reference< XGraphicObjectResolver >::query(
598*b1cdbd2cSJim Jagielski 						xFactory->createInstance(
599*b1cdbd2cSJim Jagielski 							OUString(RTL_CONSTASCII_USTRINGPARAM(
600*b1cdbd2cSJim Jagielski 								// #99870# Import... instead of Export...
601*b1cdbd2cSJim Jagielski 								"com.sun.star.document.ImportGraphicObjectResolver"))));
602*b1cdbd2cSJim Jagielski 					mpImpl->mbOwnGraphicResolver = mxGraphicResolver.is();
603*b1cdbd2cSJim Jagielski 				}
604*b1cdbd2cSJim Jagielski 
605*b1cdbd2cSJim Jagielski 				if( !mxEmbeddedResolver.is() )
606*b1cdbd2cSJim Jagielski 				{
607*b1cdbd2cSJim Jagielski 					mxEmbeddedResolver = Reference< XEmbeddedObjectResolver >::query(
608*b1cdbd2cSJim Jagielski 						xFactory->createInstance(
609*b1cdbd2cSJim Jagielski 							OUString(RTL_CONSTASCII_USTRINGPARAM(
610*b1cdbd2cSJim Jagielski 								// #99870# Import... instead of Export...
611*b1cdbd2cSJim Jagielski 								"com.sun.star.document.ImportEmbeddedObjectResolver"))));
612*b1cdbd2cSJim Jagielski 					mpImpl->mbOwnEmbeddedResolver = mxEmbeddedResolver.is();
613*b1cdbd2cSJim Jagielski 				}
614*b1cdbd2cSJim Jagielski 			}
615*b1cdbd2cSJim Jagielski 			catch( com::sun::star::uno::Exception& )
616*b1cdbd2cSJim Jagielski 			{
617*b1cdbd2cSJim Jagielski 			}
618*b1cdbd2cSJim Jagielski 		}
619*b1cdbd2cSJim Jagielski 	}
620*b1cdbd2cSJim Jagielski }
621*b1cdbd2cSJim Jagielski 
endDocument(void)622*b1cdbd2cSJim Jagielski void SAL_CALL SvXMLImport::endDocument( void )
623*b1cdbd2cSJim Jagielski 	throw( xml::sax::SAXException, uno::RuntimeException)
624*b1cdbd2cSJim Jagielski {
625*b1cdbd2cSJim Jagielski     RTL_LOGFILE_TRACE_AUTHOR( "xmloff", LOGFILE_AUTHOR, "} SvXMLImport::startDocument" );
626*b1cdbd2cSJim Jagielski 
627*b1cdbd2cSJim Jagielski 	//	#i9518# All the stuff that accesses the document has to be done here, not in the dtor,
628*b1cdbd2cSJim Jagielski 	//	because the SvXMLImport dtor might not be called until after the document has been closed.
629*b1cdbd2cSJim Jagielski 
630*b1cdbd2cSJim Jagielski     if (mpImpl->mpRDFaHelper.get())
631*b1cdbd2cSJim Jagielski     {
632*b1cdbd2cSJim Jagielski         const uno::Reference<rdf::XRepositorySupplier> xRS(mxModel,
633*b1cdbd2cSJim Jagielski             uno::UNO_QUERY);
634*b1cdbd2cSJim Jagielski         if (xRS.is())
635*b1cdbd2cSJim Jagielski         {
636*b1cdbd2cSJim Jagielski             mpImpl->mpRDFaHelper->InsertRDFa( xRS );
637*b1cdbd2cSJim Jagielski         }
638*b1cdbd2cSJim Jagielski     }
639*b1cdbd2cSJim Jagielski 
640*b1cdbd2cSJim Jagielski 	if (mpNumImport)
641*b1cdbd2cSJim Jagielski 	{
642*b1cdbd2cSJim Jagielski 		delete mpNumImport;
643*b1cdbd2cSJim Jagielski 		mpNumImport = NULL;
644*b1cdbd2cSJim Jagielski 	}
645*b1cdbd2cSJim Jagielski 	if (mxImportInfo.is())
646*b1cdbd2cSJim Jagielski 	{
647*b1cdbd2cSJim Jagielski 		uno::Reference< beans::XPropertySetInfo > xPropertySetInfo = mxImportInfo->getPropertySetInfo();
648*b1cdbd2cSJim Jagielski 		if (xPropertySetInfo.is())
649*b1cdbd2cSJim Jagielski 		{
650*b1cdbd2cSJim Jagielski 			if (mpProgressBarHelper)
651*b1cdbd2cSJim Jagielski 			{
652*b1cdbd2cSJim Jagielski 				OUString sProgressMax(RTL_CONSTASCII_USTRINGPARAM(XML_PROGRESSMAX));
653*b1cdbd2cSJim Jagielski 				OUString sProgressCurrent(RTL_CONSTASCII_USTRINGPARAM(XML_PROGRESSCURRENT));
654*b1cdbd2cSJim Jagielski                 OUString sRepeat(RTL_CONSTASCII_USTRINGPARAM(XML_PROGRESSREPEAT));
655*b1cdbd2cSJim Jagielski 				if (xPropertySetInfo->hasPropertyByName(sProgressMax) &&
656*b1cdbd2cSJim Jagielski 					xPropertySetInfo->hasPropertyByName(sProgressCurrent))
657*b1cdbd2cSJim Jagielski 				{
658*b1cdbd2cSJim Jagielski 					sal_Int32 nProgressMax(mpProgressBarHelper->GetReference());
659*b1cdbd2cSJim Jagielski 					sal_Int32 nProgressCurrent(mpProgressBarHelper->GetValue());
660*b1cdbd2cSJim Jagielski 					uno::Any aAny;
661*b1cdbd2cSJim Jagielski 					aAny <<= nProgressMax;
662*b1cdbd2cSJim Jagielski 					mxImportInfo->setPropertyValue(sProgressMax, aAny);
663*b1cdbd2cSJim Jagielski 					aAny <<= nProgressCurrent;
664*b1cdbd2cSJim Jagielski 					mxImportInfo->setPropertyValue(sProgressCurrent, aAny);
665*b1cdbd2cSJim Jagielski 				}
666*b1cdbd2cSJim Jagielski                 if (xPropertySetInfo->hasPropertyByName(sRepeat))
667*b1cdbd2cSJim Jagielski                     mxImportInfo->setPropertyValue(sRepeat, cppu::bool2any(mpProgressBarHelper->GetRepeat()));
668*b1cdbd2cSJim Jagielski                 // pProgressBarHelper is deleted in dtor
669*b1cdbd2cSJim Jagielski 			}
670*b1cdbd2cSJim Jagielski 			OUString sNumberStyles(RTL_CONSTASCII_USTRINGPARAM(XML_NUMBERSTYLES));
671*b1cdbd2cSJim Jagielski 			if (mxNumberStyles.is() && xPropertySetInfo->hasPropertyByName(sNumberStyles))
672*b1cdbd2cSJim Jagielski 			{
673*b1cdbd2cSJim Jagielski 				uno::Any aAny;
674*b1cdbd2cSJim Jagielski 				aAny <<= mxNumberStyles;
675*b1cdbd2cSJim Jagielski 				mxImportInfo->setPropertyValue(sNumberStyles, aAny);
676*b1cdbd2cSJim Jagielski 			}
677*b1cdbd2cSJim Jagielski 		}
678*b1cdbd2cSJim Jagielski 	}
679*b1cdbd2cSJim Jagielski 
680*b1cdbd2cSJim Jagielski 	if( mxFontDecls.Is() )
681*b1cdbd2cSJim Jagielski 		((SvXMLStylesContext *)&mxFontDecls)->Clear();
682*b1cdbd2cSJim Jagielski 	if( mxStyles.Is() )
683*b1cdbd2cSJim Jagielski 		((SvXMLStylesContext *)&mxStyles)->Clear();
684*b1cdbd2cSJim Jagielski 	if( mxAutoStyles.Is() )
685*b1cdbd2cSJim Jagielski 		((SvXMLStylesContext *)&mxAutoStyles)->Clear();
686*b1cdbd2cSJim Jagielski 	if( mxMasterStyles.Is() )
687*b1cdbd2cSJim Jagielski 		((SvXMLStylesContext *)&mxMasterStyles)->Clear();
688*b1cdbd2cSJim Jagielski 
689*b1cdbd2cSJim Jagielski     // possible form-layer related knittings which can only be done when
690*b1cdbd2cSJim Jagielski     // the whole document exists
691*b1cdbd2cSJim Jagielski     if ( mxFormImport.is() )
692*b1cdbd2cSJim Jagielski         mxFormImport->documentDone();
693*b1cdbd2cSJim Jagielski 
694*b1cdbd2cSJim Jagielski 	//	The shape import helper does the z-order sorting in the dtor,
695*b1cdbd2cSJim Jagielski 	//	so it must be deleted here, too.
696*b1cdbd2cSJim Jagielski 	mxShapeImport = NULL;
697*b1cdbd2cSJim Jagielski 
698*b1cdbd2cSJim Jagielski 	if( mpImpl->mbOwnGraphicResolver )
699*b1cdbd2cSJim Jagielski 	{
700*b1cdbd2cSJim Jagielski 		Reference< lang::XComponent > xComp( mxGraphicResolver, UNO_QUERY );
701*b1cdbd2cSJim Jagielski 		xComp->dispose();
702*b1cdbd2cSJim Jagielski 	}
703*b1cdbd2cSJim Jagielski 
704*b1cdbd2cSJim Jagielski 	if( mpImpl->mbOwnEmbeddedResolver )
705*b1cdbd2cSJim Jagielski 	{
706*b1cdbd2cSJim Jagielski 		Reference< lang::XComponent > xComp( mxEmbeddedResolver, UNO_QUERY );
707*b1cdbd2cSJim Jagielski 		xComp->dispose();
708*b1cdbd2cSJim Jagielski 	}
709*b1cdbd2cSJim Jagielski 	if( mpStyleMap )
710*b1cdbd2cSJim Jagielski 	{
711*b1cdbd2cSJim Jagielski 		mpStyleMap->release();
712*b1cdbd2cSJim Jagielski 		mpStyleMap = 0;
713*b1cdbd2cSJim Jagielski 	}
714*b1cdbd2cSJim Jagielski 
715*b1cdbd2cSJim Jagielski     if ( mpXMLErrors != NULL )
716*b1cdbd2cSJim Jagielski     {
717*b1cdbd2cSJim Jagielski         mpXMLErrors->ThrowErrorAsSAXException( XMLERROR_FLAG_SEVERE );
718*b1cdbd2cSJim Jagielski     }
719*b1cdbd2cSJim Jagielski }
720*b1cdbd2cSJim Jagielski 
startElement(const OUString & rName,const uno::Reference<xml::sax::XAttributeList> & xAttrList)721*b1cdbd2cSJim Jagielski void SAL_CALL SvXMLImport::startElement( const OUString& rName,
722*b1cdbd2cSJim Jagielski 										 const uno::Reference< xml::sax::XAttributeList >& xAttrList )
723*b1cdbd2cSJim Jagielski 	throw(xml::sax::SAXException, uno::RuntimeException)
724*b1cdbd2cSJim Jagielski {
725*b1cdbd2cSJim Jagielski 	SvXMLNamespaceMap *pRewindMap = 0;
726*b1cdbd2cSJim Jagielski 
727*b1cdbd2cSJim Jagielski 	// Process namespace attributes. This must happen before creating the
728*b1cdbd2cSJim Jagielski 	// context, because namespace decaration apply to the element name itself.
729*b1cdbd2cSJim Jagielski 	sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
730*b1cdbd2cSJim Jagielski 	for( sal_Int16 i=0; i < nAttrCount; i++ )
731*b1cdbd2cSJim Jagielski 	{
732*b1cdbd2cSJim Jagielski 		const OUString& rAttrName = xAttrList->getNameByIndex( i );
733*b1cdbd2cSJim Jagielski         if ( rAttrName.equalsAscii("office:version") )
734*b1cdbd2cSJim Jagielski         {
735*b1cdbd2cSJim Jagielski             mpImpl->aODFVersion = xAttrList->getValueByIndex( i );
736*b1cdbd2cSJim Jagielski 
737*b1cdbd2cSJim Jagielski             // the ODF version in content.xml and manifest.xml must be the same starting from ODF1.2
738*b1cdbd2cSJim Jagielski             if ( mpImpl->mStreamName.equals( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "content.xml" ) ) )
739*b1cdbd2cSJim Jagielski               && !IsODFVersionConsistent( mpImpl->aODFVersion ) )
740*b1cdbd2cSJim Jagielski             {
741*b1cdbd2cSJim Jagielski                 throw xml::sax::SAXException(
742*b1cdbd2cSJim Jagielski                         ::rtl::OUString(
743*b1cdbd2cSJim Jagielski                             RTL_CONSTASCII_USTRINGPARAM( "Inconsistent ODF versions in content.xml and manifest.xml!" ) ),
744*b1cdbd2cSJim Jagielski                         uno::Reference< uno::XInterface >(),
745*b1cdbd2cSJim Jagielski                         uno::makeAny(
746*b1cdbd2cSJim Jagielski                             packages::zip::ZipIOException(
747*b1cdbd2cSJim Jagielski                                 ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM(
748*b1cdbd2cSJim Jagielski                                     "Inconsistent ODF versions in content.xml and manifest.xml!" ) ),
749*b1cdbd2cSJim Jagielski 							    Reference< XInterface >() ) ) );
750*b1cdbd2cSJim Jagielski             }
751*b1cdbd2cSJim Jagielski         }
752*b1cdbd2cSJim Jagielski         else if( ( rAttrName.getLength() >= 5 ) &&
753*b1cdbd2cSJim Jagielski             ( rAttrName.compareTo( GetXMLToken(XML_XMLNS), 5 ) == 0 ) &&
754*b1cdbd2cSJim Jagielski 			( rAttrName.getLength() == 5 || ':' == rAttrName[5] ) )
755*b1cdbd2cSJim Jagielski 		{
756*b1cdbd2cSJim Jagielski 			if( !pRewindMap )
757*b1cdbd2cSJim Jagielski 			{
758*b1cdbd2cSJim Jagielski 				pRewindMap = mpNamespaceMap;
759*b1cdbd2cSJim Jagielski 				mpNamespaceMap = new SvXMLNamespaceMap( *mpNamespaceMap );
760*b1cdbd2cSJim Jagielski 			}
761*b1cdbd2cSJim Jagielski 			const OUString& rAttrValue = xAttrList->getValueByIndex( i );
762*b1cdbd2cSJim Jagielski 
763*b1cdbd2cSJim Jagielski             OUString aPrefix( ( rAttrName.getLength() == 5 )
764*b1cdbd2cSJim Jagielski                                  ? OUString()
765*b1cdbd2cSJim Jagielski                                  : rAttrName.copy( 6 ) );
766*b1cdbd2cSJim Jagielski 			// Add namespace, but only if it is known.
767*b1cdbd2cSJim Jagielski 			sal_uInt16 nKey = mpNamespaceMap->AddIfKnown( aPrefix, rAttrValue );
768*b1cdbd2cSJim Jagielski 			// If namespace is unknwon, try to match a name with similar
769*b1cdbd2cSJim Jagielski 			// TC Id an version
770*b1cdbd2cSJim Jagielski             if( XML_NAMESPACE_UNKNOWN == nKey  )
771*b1cdbd2cSJim Jagielski 			{
772*b1cdbd2cSJim Jagielski 				OUString aTestName( rAttrValue );
773*b1cdbd2cSJim Jagielski 				if( SvXMLNamespaceMap::NormalizeURI( aTestName ) )
774*b1cdbd2cSJim Jagielski 					nKey = mpNamespaceMap->AddIfKnown( aPrefix, aTestName );
775*b1cdbd2cSJim Jagielski 			}
776*b1cdbd2cSJim Jagielski 			// If that namespace is not known, too, add it as unknown
777*b1cdbd2cSJim Jagielski             if( XML_NAMESPACE_UNKNOWN == nKey  )
778*b1cdbd2cSJim Jagielski 				mpNamespaceMap->Add( aPrefix, rAttrValue );
779*b1cdbd2cSJim Jagielski 
780*b1cdbd2cSJim Jagielski 		}
781*b1cdbd2cSJim Jagielski 	}
782*b1cdbd2cSJim Jagielski 
783*b1cdbd2cSJim Jagielski 	// Get element's namespace and local name.
784*b1cdbd2cSJim Jagielski 	OUString aLocalName;
785*b1cdbd2cSJim Jagielski 	sal_uInt16 nPrefix =
786*b1cdbd2cSJim Jagielski 		mpNamespaceMap->GetKeyByAttrName( rName, &aLocalName );
787*b1cdbd2cSJim Jagielski 
788*b1cdbd2cSJim Jagielski 	// If there are contexts already, call a CreateChildContext at the topmost
789*b1cdbd2cSJim Jagielski 	// context. Otherwise, create a default context.
790*b1cdbd2cSJim Jagielski 	SvXMLImportContext *pContext;
791*b1cdbd2cSJim Jagielski 	sal_uInt16 nCount = mpContexts->Count();
792*b1cdbd2cSJim Jagielski 	if( nCount > 0 )
793*b1cdbd2cSJim Jagielski 	{
794*b1cdbd2cSJim Jagielski 		pContext = (*mpContexts)[nCount - 1]->CreateChildContext( nPrefix,
795*b1cdbd2cSJim Jagielski 																 aLocalName,
796*b1cdbd2cSJim Jagielski 																 xAttrList );
797*b1cdbd2cSJim Jagielski         DBG_ASSERT( pContext && pContext->GetPrefix() == nPrefix,
798*b1cdbd2cSJim Jagielski 				"SvXMLImport::startElement: created context has wrong prefix" );
799*b1cdbd2cSJim Jagielski 	}
800*b1cdbd2cSJim Jagielski 	else
801*b1cdbd2cSJim Jagielski 	{
802*b1cdbd2cSJim Jagielski #ifdef TIMELOG
803*b1cdbd2cSJim Jagielski         // If we do profiling, we want a trace message for the first element
804*b1cdbd2cSJim Jagielski         // in order to identify the stream.
805*b1cdbd2cSJim Jagielski         ByteString aString( (String)rName, RTL_TEXTENCODING_ASCII_US );
806*b1cdbd2cSJim Jagielski         RTL_LOGFILE_TRACE_AUTHOR1( "xmloff", LOGFILE_AUTHOR,
807*b1cdbd2cSJim Jagielski                                    "SvXMLImport::StartElement( \"%s\", ... )",
808*b1cdbd2cSJim Jagielski                                    aString.GetBuffer() );
809*b1cdbd2cSJim Jagielski #endif
810*b1cdbd2cSJim Jagielski 
811*b1cdbd2cSJim Jagielski 		pContext = CreateContext( nPrefix, aLocalName, xAttrList );
812*b1cdbd2cSJim Jagielski 		if( (nPrefix & XML_NAMESPACE_UNKNOWN_FLAG) != 0 &&
813*b1cdbd2cSJim Jagielski 			IS_TYPE( SvXMLImportContext, pContext ) )
814*b1cdbd2cSJim Jagielski 		{
815*b1cdbd2cSJim Jagielski 			OUString aMsg( RTL_CONSTASCII_USTRINGPARAM( "Root element unknown" ) );
816*b1cdbd2cSJim Jagielski     		Reference<xml::sax::XLocator> xDummyLocator;
817*b1cdbd2cSJim Jagielski 			Sequence < OUString > aParams(1);
818*b1cdbd2cSJim Jagielski 			aParams.getArray()[0] = rName;
819*b1cdbd2cSJim Jagielski 
820*b1cdbd2cSJim Jagielski 			SetError( XMLERROR_FLAG_SEVERE|XMLERROR_UNKNWON_ROOT,
821*b1cdbd2cSJim Jagielski 					  aParams, aMsg, xDummyLocator );
822*b1cdbd2cSJim Jagielski 		}
823*b1cdbd2cSJim Jagielski 	}
824*b1cdbd2cSJim Jagielski 
825*b1cdbd2cSJim Jagielski 	DBG_ASSERT( pContext, "SvXMLImport::startElement: missing context" );
826*b1cdbd2cSJim Jagielski 	if( !pContext )
827*b1cdbd2cSJim Jagielski 		pContext = new SvXMLImportContext( *this, nPrefix, aLocalName );
828*b1cdbd2cSJim Jagielski 
829*b1cdbd2cSJim Jagielski 	pContext->AddRef();
830*b1cdbd2cSJim Jagielski 
831*b1cdbd2cSJim Jagielski 	// Remeber old namespace map.
832*b1cdbd2cSJim Jagielski 	if( pRewindMap )
833*b1cdbd2cSJim Jagielski 		pContext->SetRewindMap( pRewindMap );
834*b1cdbd2cSJim Jagielski 
835*b1cdbd2cSJim Jagielski 	// Call a startElement at the new context.
836*b1cdbd2cSJim Jagielski 	pContext->StartElement( xAttrList );
837*b1cdbd2cSJim Jagielski 
838*b1cdbd2cSJim Jagielski 	// Push context on stack.
839*b1cdbd2cSJim Jagielski 	mpContexts->Insert( pContext, nCount );
840*b1cdbd2cSJim Jagielski }
841*b1cdbd2cSJim Jagielski 
endElement(const OUString & rName)842*b1cdbd2cSJim Jagielski void SAL_CALL SvXMLImport::endElement( const OUString&
843*b1cdbd2cSJim Jagielski #ifdef DBG_UTIL
844*b1cdbd2cSJim Jagielski rName
845*b1cdbd2cSJim Jagielski #endif
846*b1cdbd2cSJim Jagielski )
847*b1cdbd2cSJim Jagielski 	throw(xml::sax::SAXException, uno::RuntimeException)
848*b1cdbd2cSJim Jagielski {
849*b1cdbd2cSJim Jagielski 	sal_uInt16 nCount = mpContexts->Count();
850*b1cdbd2cSJim Jagielski 	DBG_ASSERT( nCount, "SvXMLImport::endElement: no context left" );
851*b1cdbd2cSJim Jagielski 	if( nCount > 0 )
852*b1cdbd2cSJim Jagielski 	{
853*b1cdbd2cSJim Jagielski 		// Get topmost context and remove it from the stack.
854*b1cdbd2cSJim Jagielski 		SvXMLImportContext *pContext = (*mpContexts)[nCount-1];
855*b1cdbd2cSJim Jagielski 		mpContexts->Remove( nCount-1, 1 );
856*b1cdbd2cSJim Jagielski 
857*b1cdbd2cSJim Jagielski #ifdef DBG_UTIL
858*b1cdbd2cSJim Jagielski 		// Non product only: check if endElement call matches startELement call.
859*b1cdbd2cSJim Jagielski 		OUString aLocalName;
860*b1cdbd2cSJim Jagielski 		sal_uInt16 nPrefix =
861*b1cdbd2cSJim Jagielski 			mpNamespaceMap->GetKeyByAttrName( rName, &aLocalName );
862*b1cdbd2cSJim Jagielski 		DBG_ASSERT( pContext->GetPrefix() == nPrefix,
863*b1cdbd2cSJim Jagielski 				"SvXMLImport::endElement: popped context has wrong prefix" );
864*b1cdbd2cSJim Jagielski 		DBG_ASSERT( pContext->GetLocalName() == aLocalName,
865*b1cdbd2cSJim Jagielski 				"SvXMLImport::endElement: popped context has wrong lname" );
866*b1cdbd2cSJim Jagielski #endif
867*b1cdbd2cSJim Jagielski 
868*b1cdbd2cSJim Jagielski 		// Call a EndElement at the current context.
869*b1cdbd2cSJim Jagielski 		pContext->EndElement();
870*b1cdbd2cSJim Jagielski 
871*b1cdbd2cSJim Jagielski 		// Get a namespace map to rewind.
872*b1cdbd2cSJim Jagielski 		SvXMLNamespaceMap *pRewindMap = pContext->GetRewindMap();
873*b1cdbd2cSJim Jagielski 
874*b1cdbd2cSJim Jagielski 		// Delete the current context.
875*b1cdbd2cSJim Jagielski 		pContext->ReleaseRef();
876*b1cdbd2cSJim Jagielski 		pContext = 0;
877*b1cdbd2cSJim Jagielski 
878*b1cdbd2cSJim Jagielski 		// Rewind a namespace map.
879*b1cdbd2cSJim Jagielski 		if( pRewindMap )
880*b1cdbd2cSJim Jagielski 		{
881*b1cdbd2cSJim Jagielski 			delete mpNamespaceMap;
882*b1cdbd2cSJim Jagielski 			mpNamespaceMap = pRewindMap;
883*b1cdbd2cSJim Jagielski 		}
884*b1cdbd2cSJim Jagielski 	}
885*b1cdbd2cSJim Jagielski }
886*b1cdbd2cSJim Jagielski 
characters(const OUString & rChars)887*b1cdbd2cSJim Jagielski void SAL_CALL SvXMLImport::characters( const OUString& rChars )
888*b1cdbd2cSJim Jagielski 	throw(xml::sax::SAXException, uno::RuntimeException)
889*b1cdbd2cSJim Jagielski {
890*b1cdbd2cSJim Jagielski 	sal_uInt16 nCount = mpContexts->Count();
891*b1cdbd2cSJim Jagielski 	if( nCount > 0 )
892*b1cdbd2cSJim Jagielski 	{
893*b1cdbd2cSJim Jagielski 		(*mpContexts)[nCount - 1]->Characters( rChars );
894*b1cdbd2cSJim Jagielski 	}
895*b1cdbd2cSJim Jagielski }
896*b1cdbd2cSJim Jagielski 
ignorableWhitespace(const OUString &)897*b1cdbd2cSJim Jagielski void SAL_CALL SvXMLImport::ignorableWhitespace( const OUString& )
898*b1cdbd2cSJim Jagielski 	throw(xml::sax::SAXException, uno::RuntimeException)
899*b1cdbd2cSJim Jagielski {
900*b1cdbd2cSJim Jagielski }
901*b1cdbd2cSJim Jagielski 
processingInstruction(const OUString &,const OUString &)902*b1cdbd2cSJim Jagielski void SAL_CALL SvXMLImport::processingInstruction( const OUString&,
903*b1cdbd2cSJim Jagielski 									   const OUString& )
904*b1cdbd2cSJim Jagielski 	throw(xml::sax::SAXException, uno::RuntimeException)
905*b1cdbd2cSJim Jagielski {
906*b1cdbd2cSJim Jagielski }
907*b1cdbd2cSJim Jagielski 
setDocumentLocator(const uno::Reference<xml::sax::XLocator> & rLocator)908*b1cdbd2cSJim Jagielski void SAL_CALL SvXMLImport::setDocumentLocator( const uno::Reference< xml::sax::XLocator >& rLocator )
909*b1cdbd2cSJim Jagielski 	throw(xml::sax::SAXException, uno::RuntimeException)
910*b1cdbd2cSJim Jagielski {
911*b1cdbd2cSJim Jagielski 	mxLocator = rLocator;
912*b1cdbd2cSJim Jagielski }
913*b1cdbd2cSJim Jagielski 
914*b1cdbd2cSJim Jagielski // XExtendedDocumentHandler
startCDATA(void)915*b1cdbd2cSJim Jagielski void SAL_CALL SvXMLImport::startCDATA( void ) throw(xml::sax::SAXException, uno::RuntimeException)
916*b1cdbd2cSJim Jagielski {
917*b1cdbd2cSJim Jagielski }
918*b1cdbd2cSJim Jagielski 
endCDATA(void)919*b1cdbd2cSJim Jagielski void SAL_CALL SvXMLImport::endCDATA( void ) throw(uno::RuntimeException)
920*b1cdbd2cSJim Jagielski {
921*b1cdbd2cSJim Jagielski }
922*b1cdbd2cSJim Jagielski 
comment(const OUString &)923*b1cdbd2cSJim Jagielski void SAL_CALL SvXMLImport::comment( const OUString& )
924*b1cdbd2cSJim Jagielski 	throw(xml::sax::SAXException, uno::RuntimeException)
925*b1cdbd2cSJim Jagielski {
926*b1cdbd2cSJim Jagielski }
927*b1cdbd2cSJim Jagielski 
allowLineBreak(void)928*b1cdbd2cSJim Jagielski void SAL_CALL SvXMLImport::allowLineBreak( void )
929*b1cdbd2cSJim Jagielski 	throw(xml::sax::SAXException, uno::RuntimeException)
930*b1cdbd2cSJim Jagielski {
931*b1cdbd2cSJim Jagielski }
932*b1cdbd2cSJim Jagielski 
unknown(const OUString &)933*b1cdbd2cSJim Jagielski void SAL_CALL SvXMLImport::unknown( const OUString& )
934*b1cdbd2cSJim Jagielski 	throw(xml::sax::SAXException, uno::RuntimeException)
935*b1cdbd2cSJim Jagielski {
936*b1cdbd2cSJim Jagielski }
937*b1cdbd2cSJim Jagielski 
SetStatistics(const uno::Sequence<beans::NamedValue> &)938*b1cdbd2cSJim Jagielski void SvXMLImport::SetStatistics(const uno::Sequence< beans::NamedValue> &)
939*b1cdbd2cSJim Jagielski {
940*b1cdbd2cSJim Jagielski     GetProgressBarHelper()->SetRepeat(sal_False);
941*b1cdbd2cSJim Jagielski     GetProgressBarHelper()->SetReference(0);
942*b1cdbd2cSJim Jagielski }
943*b1cdbd2cSJim Jagielski 
944*b1cdbd2cSJim Jagielski ///////////////////////////////////////////////////////////////////////
945*b1cdbd2cSJim Jagielski 
946*b1cdbd2cSJim Jagielski // XImporter
setTargetDocument(const uno::Reference<lang::XComponent> & xDoc)947*b1cdbd2cSJim Jagielski void SAL_CALL SvXMLImport::setTargetDocument( const uno::Reference< lang::XComponent >& xDoc )
948*b1cdbd2cSJim Jagielski 	throw(lang::IllegalArgumentException, uno::RuntimeException)
949*b1cdbd2cSJim Jagielski {
950*b1cdbd2cSJim Jagielski 	mxModel = uno::Reference< frame::XModel >::query( xDoc );
951*b1cdbd2cSJim Jagielski 	if( !mxModel.is() )
952*b1cdbd2cSJim Jagielski 		throw lang::IllegalArgumentException();
953*b1cdbd2cSJim Jagielski 	if (mxModel.is() && !mxEventListener.is())
954*b1cdbd2cSJim Jagielski 	{
955*b1cdbd2cSJim Jagielski 		mxEventListener.set(new SvXMLImportEventListener(this));
956*b1cdbd2cSJim Jagielski 		mxModel->addEventListener(mxEventListener);
957*b1cdbd2cSJim Jagielski 	}
958*b1cdbd2cSJim Jagielski 
959*b1cdbd2cSJim Jagielski 	DBG_ASSERT( !mpNumImport, "number format import already exists." );
960*b1cdbd2cSJim Jagielski 	if( mpNumImport )
961*b1cdbd2cSJim Jagielski 	{
962*b1cdbd2cSJim Jagielski 		delete mpNumImport;
963*b1cdbd2cSJim Jagielski 		mpNumImport = 0;
964*b1cdbd2cSJim Jagielski 	}
965*b1cdbd2cSJim Jagielski }
966*b1cdbd2cSJim Jagielski 
967*b1cdbd2cSJim Jagielski // XFilter
filter(const uno::Sequence<beans::PropertyValue> &)968*b1cdbd2cSJim Jagielski sal_Bool SAL_CALL SvXMLImport::filter( const uno::Sequence< beans::PropertyValue >& )
969*b1cdbd2cSJim Jagielski     throw (uno::RuntimeException)
970*b1cdbd2cSJim Jagielski {
971*b1cdbd2cSJim Jagielski     return sal_False;
972*b1cdbd2cSJim Jagielski }
973*b1cdbd2cSJim Jagielski 
cancel()974*b1cdbd2cSJim Jagielski void SAL_CALL SvXMLImport::cancel(  )
975*b1cdbd2cSJim Jagielski     throw (uno::RuntimeException)
976*b1cdbd2cSJim Jagielski {
977*b1cdbd2cSJim Jagielski }
978*b1cdbd2cSJim Jagielski 
979*b1cdbd2cSJim Jagielski // XInitialize
initialize(const uno::Sequence<uno::Any> & aArguments)980*b1cdbd2cSJim Jagielski void SAL_CALL SvXMLImport::initialize( const uno::Sequence< uno::Any >& aArguments )
981*b1cdbd2cSJim Jagielski 	throw(::com::sun::star::uno::Exception, ::com::sun::star::uno::RuntimeException)
982*b1cdbd2cSJim Jagielski {
983*b1cdbd2cSJim Jagielski 	const sal_Int32 nAnyCount = aArguments.getLength();
984*b1cdbd2cSJim Jagielski 	const uno::Any* pAny = aArguments.getConstArray();
985*b1cdbd2cSJim Jagielski 
986*b1cdbd2cSJim Jagielski 	for( sal_Int32 nIndex = 0; nIndex < nAnyCount; nIndex++, pAny++ )
987*b1cdbd2cSJim Jagielski     {
988*b1cdbd2cSJim Jagielski         Reference<XInterface> xValue;
989*b1cdbd2cSJim Jagielski         *pAny >>= xValue;
990*b1cdbd2cSJim Jagielski 
991*b1cdbd2cSJim Jagielski         uno::Reference<task::XStatusIndicator> xTmpStatusIndicator(
992*b1cdbd2cSJim Jagielski             xValue, UNO_QUERY );
993*b1cdbd2cSJim Jagielski 		if( xTmpStatusIndicator.is() )
994*b1cdbd2cSJim Jagielski 			mxStatusIndicator = xTmpStatusIndicator;
995*b1cdbd2cSJim Jagielski 
996*b1cdbd2cSJim Jagielski         uno::Reference<document::XGraphicObjectResolver> xTmpGraphicResolver(
997*b1cdbd2cSJim Jagielski             xValue, UNO_QUERY );
998*b1cdbd2cSJim Jagielski 		if( xTmpGraphicResolver.is() )
999*b1cdbd2cSJim Jagielski 			mxGraphicResolver = xTmpGraphicResolver;
1000*b1cdbd2cSJim Jagielski 
1001*b1cdbd2cSJim Jagielski         uno::Reference<document::XEmbeddedObjectResolver> xTmpObjectResolver(
1002*b1cdbd2cSJim Jagielski             xValue, UNO_QUERY );
1003*b1cdbd2cSJim Jagielski         if( xTmpObjectResolver.is() )
1004*b1cdbd2cSJim Jagielski             mxEmbeddedResolver = xTmpObjectResolver;
1005*b1cdbd2cSJim Jagielski 
1006*b1cdbd2cSJim Jagielski         uno::Reference<beans::XPropertySet> xTmpPropSet( xValue, UNO_QUERY );
1007*b1cdbd2cSJim Jagielski         if( xTmpPropSet.is() )
1008*b1cdbd2cSJim Jagielski         {
1009*b1cdbd2cSJim Jagielski             mxImportInfo = xTmpPropSet;
1010*b1cdbd2cSJim Jagielski             uno::Reference< beans::XPropertySetInfo > xPropertySetInfo = mxImportInfo->getPropertySetInfo();
1011*b1cdbd2cSJim Jagielski             if (xPropertySetInfo.is())
1012*b1cdbd2cSJim Jagielski 			{
1013*b1cdbd2cSJim Jagielski                 OUString sPropName(RTL_CONSTASCII_USTRINGPARAM(XML_NUMBERSTYLES));
1014*b1cdbd2cSJim Jagielski                 if (xPropertySetInfo->hasPropertyByName(sPropName))
1015*b1cdbd2cSJim Jagielski 				{
1016*b1cdbd2cSJim Jagielski                     uno::Any aAny = mxImportInfo->getPropertyValue(sPropName);
1017*b1cdbd2cSJim Jagielski                     aAny >>= mxNumberStyles;
1018*b1cdbd2cSJim Jagielski 				}
1019*b1cdbd2cSJim Jagielski 
1020*b1cdbd2cSJim Jagielski 				sPropName = OUString( RTL_CONSTASCII_USTRINGPARAM("PrivateData" ) );
1021*b1cdbd2cSJim Jagielski                 if (xPropertySetInfo->hasPropertyByName(sPropName))
1022*b1cdbd2cSJim Jagielski 				{
1023*b1cdbd2cSJim Jagielski 					Reference < XInterface > xIfc;
1024*b1cdbd2cSJim Jagielski                     uno::Any aAny = mxImportInfo->getPropertyValue(sPropName);
1025*b1cdbd2cSJim Jagielski                     aAny >>= xIfc;
1026*b1cdbd2cSJim Jagielski 
1027*b1cdbd2cSJim Jagielski 					StyleMap *pSMap = StyleMap::getImplementation( xIfc );
1028*b1cdbd2cSJim Jagielski 					if( pSMap )
1029*b1cdbd2cSJim Jagielski 					{
1030*b1cdbd2cSJim Jagielski 						mpStyleMap = pSMap;
1031*b1cdbd2cSJim Jagielski 						mpStyleMap->acquire();
1032*b1cdbd2cSJim Jagielski 					}
1033*b1cdbd2cSJim Jagielski 				}
1034*b1cdbd2cSJim Jagielski 				OUString sBaseURI;
1035*b1cdbd2cSJim Jagielski 				sPropName = OUString( RTL_CONSTASCII_USTRINGPARAM("BaseURI" ) );
1036*b1cdbd2cSJim Jagielski                 if (xPropertySetInfo->hasPropertyByName(sPropName))
1037*b1cdbd2cSJim Jagielski 				{
1038*b1cdbd2cSJim Jagielski                     uno::Any aAny = mxImportInfo->getPropertyValue(sPropName);
1039*b1cdbd2cSJim Jagielski                     aAny >>= sBaseURI;
1040*b1cdbd2cSJim Jagielski 					mpImpl->aBaseURL.SetURL( sBaseURI );
1041*b1cdbd2cSJim Jagielski                     mpImpl->aDocBase.SetURL( sBaseURI );
1042*b1cdbd2cSJim Jagielski 				}
1043*b1cdbd2cSJim Jagielski 				OUString sRelPath;
1044*b1cdbd2cSJim Jagielski 				sPropName = OUString( RTL_CONSTASCII_USTRINGPARAM("StreamRelPath" ) );
1045*b1cdbd2cSJim Jagielski 				if( xPropertySetInfo->hasPropertyByName(sPropName) )
1046*b1cdbd2cSJim Jagielski 				{
1047*b1cdbd2cSJim Jagielski 					uno::Any aAny = mxImportInfo->getPropertyValue(sPropName);
1048*b1cdbd2cSJim Jagielski 					aAny >>= sRelPath;
1049*b1cdbd2cSJim Jagielski 				}
1050*b1cdbd2cSJim Jagielski 				OUString sName;
1051*b1cdbd2cSJim Jagielski 				sPropName = OUString( RTL_CONSTASCII_USTRINGPARAM("StreamName" ) );
1052*b1cdbd2cSJim Jagielski 				if( xPropertySetInfo->hasPropertyByName(sPropName) )
1053*b1cdbd2cSJim Jagielski 				{
1054*b1cdbd2cSJim Jagielski 					uno::Any aAny = mxImportInfo->getPropertyValue(sPropName);
1055*b1cdbd2cSJim Jagielski 					aAny >>= sName;
1056*b1cdbd2cSJim Jagielski 				}
1057*b1cdbd2cSJim Jagielski 				if( sBaseURI.getLength() && sName.getLength() )
1058*b1cdbd2cSJim Jagielski 				{
1059*b1cdbd2cSJim Jagielski 					if( sRelPath.getLength() )
1060*b1cdbd2cSJim Jagielski 						mpImpl->aBaseURL.insertName( sRelPath );
1061*b1cdbd2cSJim Jagielski 					mpImpl->aBaseURL.insertName( sName );
1062*b1cdbd2cSJim Jagielski 				}
1063*b1cdbd2cSJim Jagielski                 mpImpl->mStreamName = sName; // Note: may be empty (XSLT)
1064*b1cdbd2cSJim Jagielski                 // --> OD 2004-08-10 #i28749# - retrieve property <ShapePositionInHoriL2R>
1065*b1cdbd2cSJim Jagielski                 sPropName = OUString( RTL_CONSTASCII_USTRINGPARAM("ShapePositionInHoriL2R" ) );
1066*b1cdbd2cSJim Jagielski                 if( xPropertySetInfo->hasPropertyByName(sPropName) )
1067*b1cdbd2cSJim Jagielski                 {
1068*b1cdbd2cSJim Jagielski                     uno::Any aAny = mxImportInfo->getPropertyValue(sPropName);
1069*b1cdbd2cSJim Jagielski                     aAny >>= (mpImpl->mbShapePositionInHoriL2R);
1070*b1cdbd2cSJim Jagielski                 }
1071*b1cdbd2cSJim Jagielski                 // <--
1072*b1cdbd2cSJim Jagielski                 // --> OD 2007-12-19 #152540#
1073*b1cdbd2cSJim Jagielski                 sPropName = OUString( RTL_CONSTASCII_USTRINGPARAM("TextDocInOOoFileFormat" ) );
1074*b1cdbd2cSJim Jagielski                 if( xPropertySetInfo->hasPropertyByName(sPropName) )
1075*b1cdbd2cSJim Jagielski                 {
1076*b1cdbd2cSJim Jagielski                     uno::Any aAny = mxImportInfo->getPropertyValue(sPropName);
1077*b1cdbd2cSJim Jagielski                     aAny >>= (mpImpl->mbTextDocInOOoFileFormat);
1078*b1cdbd2cSJim Jagielski                 }
1079*b1cdbd2cSJim Jagielski                 // <--
1080*b1cdbd2cSJim Jagielski             }
1081*b1cdbd2cSJim Jagielski 		}
1082*b1cdbd2cSJim Jagielski 	}
1083*b1cdbd2cSJim Jagielski }
1084*b1cdbd2cSJim Jagielski 
1085*b1cdbd2cSJim Jagielski // XServiceInfo
getImplementationName()1086*b1cdbd2cSJim Jagielski OUString SAL_CALL SvXMLImport::getImplementationName()
1087*b1cdbd2cSJim Jagielski 	throw(uno::RuntimeException)
1088*b1cdbd2cSJim Jagielski {
1089*b1cdbd2cSJim Jagielski 	OUString aStr;
1090*b1cdbd2cSJim Jagielski 	return aStr;
1091*b1cdbd2cSJim Jagielski }
1092*b1cdbd2cSJim Jagielski 
supportsService(const OUString & rServiceName)1093*b1cdbd2cSJim Jagielski sal_Bool SAL_CALL SvXMLImport::supportsService( const OUString& rServiceName )
1094*b1cdbd2cSJim Jagielski 	throw(::com::sun::star::uno::RuntimeException)
1095*b1cdbd2cSJim Jagielski {
1096*b1cdbd2cSJim Jagielski     return
1097*b1cdbd2cSJim Jagielski         rServiceName.equalsAsciiL(
1098*b1cdbd2cSJim Jagielski             "com.sun.star.document.ImportFilter",
1099*b1cdbd2cSJim Jagielski             sizeof("com.sun.star.document.ImportFilter")-1 ) ||
1100*b1cdbd2cSJim Jagielski         rServiceName.equalsAsciiL(
1101*b1cdbd2cSJim Jagielski             "com.sun.star.xml.XMLImportFilter",
1102*b1cdbd2cSJim Jagielski             sizeof("com.sun.star.xml.XMLImportFilter")-1);
1103*b1cdbd2cSJim Jagielski }
1104*b1cdbd2cSJim Jagielski 
getSupportedServiceNames()1105*b1cdbd2cSJim Jagielski uno::Sequence< OUString > SAL_CALL SvXMLImport::getSupportedServiceNames(  )
1106*b1cdbd2cSJim Jagielski 	throw(uno::RuntimeException)
1107*b1cdbd2cSJim Jagielski {
1108*b1cdbd2cSJim Jagielski     uno::Sequence<OUString> aSeq(2);
1109*b1cdbd2cSJim Jagielski     aSeq[0] = OUString(
1110*b1cdbd2cSJim Jagielski         RTL_CONSTASCII_USTRINGPARAM("com.sun.star.document.ImportFilter"));
1111*b1cdbd2cSJim Jagielski     aSeq[1] = OUString(
1112*b1cdbd2cSJim Jagielski         RTL_CONSTASCII_USTRINGPARAM("com.sun.star.xml.XMLImportFilter"));
1113*b1cdbd2cSJim Jagielski     return aSeq;
1114*b1cdbd2cSJim Jagielski }
1115*b1cdbd2cSJim Jagielski 
1116*b1cdbd2cSJim Jagielski ///////////////////////////////////////////////////////////////////////
1117*b1cdbd2cSJim Jagielski 
CreateTextImport()1118*b1cdbd2cSJim Jagielski XMLTextImportHelper* SvXMLImport::CreateTextImport()
1119*b1cdbd2cSJim Jagielski {
1120*b1cdbd2cSJim Jagielski 	return new XMLTextImportHelper( mxModel, *this );
1121*b1cdbd2cSJim Jagielski }
1122*b1cdbd2cSJim Jagielski 
CreateShapeImport()1123*b1cdbd2cSJim Jagielski XMLShapeImportHelper* SvXMLImport::CreateShapeImport()
1124*b1cdbd2cSJim Jagielski {
1125*b1cdbd2cSJim Jagielski 	return new XMLShapeImportHelper( *this, mxModel );
1126*b1cdbd2cSJim Jagielski }
1127*b1cdbd2cSJim Jagielski 
1128*b1cdbd2cSJim Jagielski #ifndef SVX_LIGHT
CreateChartImport()1129*b1cdbd2cSJim Jagielski SchXMLImportHelper* SvXMLImport::CreateChartImport()
1130*b1cdbd2cSJim Jagielski {
1131*b1cdbd2cSJim Jagielski 	return new SchXMLImportHelper();
1132*b1cdbd2cSJim Jagielski }
1133*b1cdbd2cSJim Jagielski #endif
1134*b1cdbd2cSJim Jagielski 
1135*b1cdbd2cSJim Jagielski #ifndef SVX_LIGHT
CreateFormImport()1136*b1cdbd2cSJim Jagielski ::xmloff::OFormLayerXMLImport* SvXMLImport::CreateFormImport()
1137*b1cdbd2cSJim Jagielski {
1138*b1cdbd2cSJim Jagielski 	return new ::xmloff::OFormLayerXMLImport(*this);
1139*b1cdbd2cSJim Jagielski }
1140*b1cdbd2cSJim Jagielski #endif // #ifndef SVX_LIGHT
1141*b1cdbd2cSJim Jagielski 
1142*b1cdbd2cSJim Jagielski 
1143*b1cdbd2cSJim Jagielski ///////////////////////////////////////////////////////////////////////////////
1144*b1cdbd2cSJim Jagielski //
1145*b1cdbd2cSJim Jagielski // Get or create fill/line/lineend-style-helper
1146*b1cdbd2cSJim Jagielski //
1147*b1cdbd2cSJim Jagielski 
GetGradientHelper()1148*b1cdbd2cSJim Jagielski const Reference< container::XNameContainer > & SvXMLImport::GetGradientHelper()
1149*b1cdbd2cSJim Jagielski {
1150*b1cdbd2cSJim Jagielski 	if( !mxGradientHelper.is() )
1151*b1cdbd2cSJim Jagielski 	{
1152*b1cdbd2cSJim Jagielski 		if( mxModel.is() )
1153*b1cdbd2cSJim Jagielski 		{
1154*b1cdbd2cSJim Jagielski 			Reference< lang::XMultiServiceFactory > xServiceFact( mxModel, UNO_QUERY);
1155*b1cdbd2cSJim Jagielski 			if( xServiceFact.is() )
1156*b1cdbd2cSJim Jagielski 			{
1157*b1cdbd2cSJim Jagielski 				try
1158*b1cdbd2cSJim Jagielski 				{
1159*b1cdbd2cSJim Jagielski 					mxGradientHelper =  Reference< container::XNameContainer >( xServiceFact->createInstance(
1160*b1cdbd2cSJim Jagielski 						OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.drawing.GradientTable" ) ) ), UNO_QUERY);
1161*b1cdbd2cSJim Jagielski 				}
1162*b1cdbd2cSJim Jagielski 				catch( lang::ServiceNotRegisteredException& )
1163*b1cdbd2cSJim Jagielski 				{}
1164*b1cdbd2cSJim Jagielski 			}
1165*b1cdbd2cSJim Jagielski 		}
1166*b1cdbd2cSJim Jagielski 	}
1167*b1cdbd2cSJim Jagielski 
1168*b1cdbd2cSJim Jagielski 	return mxGradientHelper;
1169*b1cdbd2cSJim Jagielski }
1170*b1cdbd2cSJim Jagielski 
GetHatchHelper()1171*b1cdbd2cSJim Jagielski const Reference< container::XNameContainer > & SvXMLImport::GetHatchHelper()
1172*b1cdbd2cSJim Jagielski {
1173*b1cdbd2cSJim Jagielski 	if( !mxHatchHelper.is() )
1174*b1cdbd2cSJim Jagielski 	{
1175*b1cdbd2cSJim Jagielski 		if( mxModel.is() )
1176*b1cdbd2cSJim Jagielski 		{
1177*b1cdbd2cSJim Jagielski 			Reference< lang::XMultiServiceFactory > xServiceFact( mxModel, UNO_QUERY);
1178*b1cdbd2cSJim Jagielski 			if( xServiceFact.is() )
1179*b1cdbd2cSJim Jagielski 			{
1180*b1cdbd2cSJim Jagielski 				try
1181*b1cdbd2cSJim Jagielski 				{
1182*b1cdbd2cSJim Jagielski 					mxHatchHelper =  Reference< container::XNameContainer >( xServiceFact->createInstance(
1183*b1cdbd2cSJim Jagielski 						OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.drawing.HatchTable" ) ) ), UNO_QUERY);
1184*b1cdbd2cSJim Jagielski 				}
1185*b1cdbd2cSJim Jagielski 				catch( lang::ServiceNotRegisteredException& )
1186*b1cdbd2cSJim Jagielski 				{}
1187*b1cdbd2cSJim Jagielski 			}
1188*b1cdbd2cSJim Jagielski 		}
1189*b1cdbd2cSJim Jagielski 	}
1190*b1cdbd2cSJim Jagielski 
1191*b1cdbd2cSJim Jagielski 	return mxHatchHelper;
1192*b1cdbd2cSJim Jagielski }
1193*b1cdbd2cSJim Jagielski 
GetBitmapHelper()1194*b1cdbd2cSJim Jagielski const Reference< container::XNameContainer > & SvXMLImport::GetBitmapHelper()
1195*b1cdbd2cSJim Jagielski {
1196*b1cdbd2cSJim Jagielski 	if( !mxBitmapHelper.is() )
1197*b1cdbd2cSJim Jagielski 	{
1198*b1cdbd2cSJim Jagielski 		if( mxModel.is() )
1199*b1cdbd2cSJim Jagielski 		{
1200*b1cdbd2cSJim Jagielski 			Reference< lang::XMultiServiceFactory > xServiceFact( mxModel, UNO_QUERY);
1201*b1cdbd2cSJim Jagielski 			if( xServiceFact.is() )
1202*b1cdbd2cSJim Jagielski 			{
1203*b1cdbd2cSJim Jagielski 				try
1204*b1cdbd2cSJim Jagielski 				{
1205*b1cdbd2cSJim Jagielski 					mxBitmapHelper =  Reference< container::XNameContainer >( xServiceFact->createInstance(
1206*b1cdbd2cSJim Jagielski 						OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.drawing.BitmapTable" ) ) ), UNO_QUERY);
1207*b1cdbd2cSJim Jagielski 				}
1208*b1cdbd2cSJim Jagielski 				catch( lang::ServiceNotRegisteredException& )
1209*b1cdbd2cSJim Jagielski 				{}
1210*b1cdbd2cSJim Jagielski 			}
1211*b1cdbd2cSJim Jagielski 		}
1212*b1cdbd2cSJim Jagielski 	}
1213*b1cdbd2cSJim Jagielski 
1214*b1cdbd2cSJim Jagielski 	return mxBitmapHelper;
1215*b1cdbd2cSJim Jagielski }
1216*b1cdbd2cSJim Jagielski 
GetTransGradientHelper()1217*b1cdbd2cSJim Jagielski const Reference< container::XNameContainer > & SvXMLImport::GetTransGradientHelper()
1218*b1cdbd2cSJim Jagielski {
1219*b1cdbd2cSJim Jagielski 	if( !mxTransGradientHelper.is() )
1220*b1cdbd2cSJim Jagielski 	{
1221*b1cdbd2cSJim Jagielski 		if( mxModel.is() )
1222*b1cdbd2cSJim Jagielski 		{
1223*b1cdbd2cSJim Jagielski 			Reference< lang::XMultiServiceFactory > xServiceFact( mxModel, UNO_QUERY);
1224*b1cdbd2cSJim Jagielski 			if( xServiceFact.is() )
1225*b1cdbd2cSJim Jagielski 			{
1226*b1cdbd2cSJim Jagielski 				try
1227*b1cdbd2cSJim Jagielski 				{
1228*b1cdbd2cSJim Jagielski 					mxTransGradientHelper =  Reference< container::XNameContainer >( xServiceFact->createInstance(
1229*b1cdbd2cSJim Jagielski 						OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.drawing.TransparencyGradientTable" ) ) ), UNO_QUERY);
1230*b1cdbd2cSJim Jagielski 				}
1231*b1cdbd2cSJim Jagielski 				catch( lang::ServiceNotRegisteredException& )
1232*b1cdbd2cSJim Jagielski 				{}
1233*b1cdbd2cSJim Jagielski 			}
1234*b1cdbd2cSJim Jagielski 		}
1235*b1cdbd2cSJim Jagielski 	}
1236*b1cdbd2cSJim Jagielski 
1237*b1cdbd2cSJim Jagielski 	return mxTransGradientHelper;
1238*b1cdbd2cSJim Jagielski }
1239*b1cdbd2cSJim Jagielski 
GetMarkerHelper()1240*b1cdbd2cSJim Jagielski const Reference< container::XNameContainer > & SvXMLImport::GetMarkerHelper()
1241*b1cdbd2cSJim Jagielski {
1242*b1cdbd2cSJim Jagielski 	if( !mxMarkerHelper.is() )
1243*b1cdbd2cSJim Jagielski 	{
1244*b1cdbd2cSJim Jagielski 		if( mxModel.is() )
1245*b1cdbd2cSJim Jagielski 		{
1246*b1cdbd2cSJim Jagielski 			Reference< lang::XMultiServiceFactory > xServiceFact( mxModel, UNO_QUERY);
1247*b1cdbd2cSJim Jagielski 			if( xServiceFact.is() )
1248*b1cdbd2cSJim Jagielski 			{
1249*b1cdbd2cSJim Jagielski 				try
1250*b1cdbd2cSJim Jagielski 				{
1251*b1cdbd2cSJim Jagielski 					mxMarkerHelper =  Reference< container::XNameContainer >( xServiceFact->createInstance(
1252*b1cdbd2cSJim Jagielski 						OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.drawing.MarkerTable" ) ) ), UNO_QUERY);
1253*b1cdbd2cSJim Jagielski 				}
1254*b1cdbd2cSJim Jagielski 				catch( lang::ServiceNotRegisteredException& )
1255*b1cdbd2cSJim Jagielski 				{}
1256*b1cdbd2cSJim Jagielski 			}
1257*b1cdbd2cSJim Jagielski 		}
1258*b1cdbd2cSJim Jagielski 	}
1259*b1cdbd2cSJim Jagielski 
1260*b1cdbd2cSJim Jagielski 	return mxMarkerHelper;
1261*b1cdbd2cSJim Jagielski }
1262*b1cdbd2cSJim Jagielski 
GetDashHelper()1263*b1cdbd2cSJim Jagielski const Reference< container::XNameContainer > & SvXMLImport::GetDashHelper()
1264*b1cdbd2cSJim Jagielski {
1265*b1cdbd2cSJim Jagielski 	if( !mxDashHelper.is() )
1266*b1cdbd2cSJim Jagielski 	{
1267*b1cdbd2cSJim Jagielski 		if( mxModel.is() )
1268*b1cdbd2cSJim Jagielski 		{
1269*b1cdbd2cSJim Jagielski 			Reference< lang::XMultiServiceFactory > xServiceFact( mxModel, UNO_QUERY);
1270*b1cdbd2cSJim Jagielski 			if( xServiceFact.is() )
1271*b1cdbd2cSJim Jagielski 			{
1272*b1cdbd2cSJim Jagielski 				try
1273*b1cdbd2cSJim Jagielski 				{
1274*b1cdbd2cSJim Jagielski 					mxDashHelper =  Reference< container::XNameContainer >( xServiceFact->createInstance(
1275*b1cdbd2cSJim Jagielski 						OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.drawing.DashTable" ) ) ), UNO_QUERY);
1276*b1cdbd2cSJim Jagielski 				}
1277*b1cdbd2cSJim Jagielski 				catch( lang::ServiceNotRegisteredException& )
1278*b1cdbd2cSJim Jagielski 				{}
1279*b1cdbd2cSJim Jagielski 			}
1280*b1cdbd2cSJim Jagielski 		}
1281*b1cdbd2cSJim Jagielski 	}
1282*b1cdbd2cSJim Jagielski 
1283*b1cdbd2cSJim Jagielski 	return mxDashHelper;
1284*b1cdbd2cSJim Jagielski }
1285*b1cdbd2cSJim Jagielski 
IsPackageURL(const::rtl::OUString & rURL) const1286*b1cdbd2cSJim Jagielski sal_Bool SvXMLImport::IsPackageURL( const ::rtl::OUString& rURL ) const
1287*b1cdbd2cSJim Jagielski {
1288*b1cdbd2cSJim Jagielski 
1289*b1cdbd2cSJim Jagielski 	// if, and only if, only parts are imported, then we're in a package
1290*b1cdbd2cSJim Jagielski 	const sal_uInt32 nTest = IMPORT_META|IMPORT_STYLES|IMPORT_CONTENT|IMPORT_SETTINGS;
1291*b1cdbd2cSJim Jagielski 	if( (mnImportFlags & nTest) == nTest )
1292*b1cdbd2cSJim Jagielski 		return sal_False;
1293*b1cdbd2cSJim Jagielski 
1294*b1cdbd2cSJim Jagielski 	// Some quick tests: Some may rely on the package structure!
1295*b1cdbd2cSJim Jagielski 	sal_Int32 nLen = rURL.getLength();
1296*b1cdbd2cSJim Jagielski 	if( (nLen > 0 && '/' == rURL[0]) )
1297*b1cdbd2cSJim Jagielski 		// RFC2396 net_path or abs_path
1298*b1cdbd2cSJim Jagielski 		return sal_False;
1299*b1cdbd2cSJim Jagielski 	else if( nLen > 1 && '.' == rURL[0] )
1300*b1cdbd2cSJim Jagielski 	{
1301*b1cdbd2cSJim Jagielski 		if( '.' == rURL[1] )
1302*b1cdbd2cSJim Jagielski 			// ../: We are never going up one level, so we know
1303*b1cdbd2cSJim Jagielski 			// it's not an external URI
1304*b1cdbd2cSJim Jagielski 			return sal_False;
1305*b1cdbd2cSJim Jagielski 		else if( '/' == rURL[1] )
1306*b1cdbd2cSJim Jagielski 			// we are remaining on a level, so it's an package URI
1307*b1cdbd2cSJim Jagielski 			return sal_True;
1308*b1cdbd2cSJim Jagielski 	}
1309*b1cdbd2cSJim Jagielski 
1310*b1cdbd2cSJim Jagielski 	// Now check for a RFC2396 schema
1311*b1cdbd2cSJim Jagielski 	sal_Int32 nPos = 1;
1312*b1cdbd2cSJim Jagielski 	while( nPos < nLen )
1313*b1cdbd2cSJim Jagielski 	{
1314*b1cdbd2cSJim Jagielski 		switch( rURL[nPos] )
1315*b1cdbd2cSJim Jagielski 		{
1316*b1cdbd2cSJim Jagielski 		case '/':
1317*b1cdbd2cSJim Jagielski 			// a relative path segement
1318*b1cdbd2cSJim Jagielski 			return sal_True;
1319*b1cdbd2cSJim Jagielski 		case ':':
1320*b1cdbd2cSJim Jagielski 			// a schema
1321*b1cdbd2cSJim Jagielski 			return sal_False;
1322*b1cdbd2cSJim Jagielski 		default:
1323*b1cdbd2cSJim Jagielski 			break;
1324*b1cdbd2cSJim Jagielski 			// we don't care about any other characters
1325*b1cdbd2cSJim Jagielski 		}
1326*b1cdbd2cSJim Jagielski 		++nPos;
1327*b1cdbd2cSJim Jagielski 	}
1328*b1cdbd2cSJim Jagielski 
1329*b1cdbd2cSJim Jagielski 	return sal_True;
1330*b1cdbd2cSJim Jagielski }
1331*b1cdbd2cSJim Jagielski 
ResolveGraphicObjectURL(const::rtl::OUString & rURL,sal_Bool bLoadOnDemand)1332*b1cdbd2cSJim Jagielski ::rtl::OUString SvXMLImport::ResolveGraphicObjectURL( const ::rtl::OUString& rURL,
1333*b1cdbd2cSJim Jagielski 									                  sal_Bool bLoadOnDemand )
1334*b1cdbd2cSJim Jagielski {
1335*b1cdbd2cSJim Jagielski 	::rtl::OUString sRet;
1336*b1cdbd2cSJim Jagielski 
1337*b1cdbd2cSJim Jagielski 	if( IsPackageURL( rURL ) )
1338*b1cdbd2cSJim Jagielski 	{
1339*b1cdbd2cSJim Jagielski 		if( !bLoadOnDemand && mxGraphicResolver.is() )
1340*b1cdbd2cSJim Jagielski 		{
1341*b1cdbd2cSJim Jagielski 			::rtl::OUString		aTmp( msPackageProtocol );
1342*b1cdbd2cSJim Jagielski 			aTmp += rURL;
1343*b1cdbd2cSJim Jagielski 			sRet = mxGraphicResolver->resolveGraphicObjectURL( aTmp );
1344*b1cdbd2cSJim Jagielski 		}
1345*b1cdbd2cSJim Jagielski 
1346*b1cdbd2cSJim Jagielski 		if( !sRet.getLength() )
1347*b1cdbd2cSJim Jagielski 		{
1348*b1cdbd2cSJim Jagielski 			sRet = msPackageProtocol;
1349*b1cdbd2cSJim Jagielski 			sRet += rURL;
1350*b1cdbd2cSJim Jagielski 		}
1351*b1cdbd2cSJim Jagielski 	}
1352*b1cdbd2cSJim Jagielski 
1353*b1cdbd2cSJim Jagielski 	if( !sRet.getLength() )
1354*b1cdbd2cSJim Jagielski 		sRet = GetAbsoluteReference( rURL );
1355*b1cdbd2cSJim Jagielski 
1356*b1cdbd2cSJim Jagielski 	return sRet;
1357*b1cdbd2cSJim Jagielski }
1358*b1cdbd2cSJim Jagielski 
GetStreamForGraphicObjectURLFromBase64()1359*b1cdbd2cSJim Jagielski Reference< XOutputStream > SvXMLImport::GetStreamForGraphicObjectURLFromBase64()
1360*b1cdbd2cSJim Jagielski {
1361*b1cdbd2cSJim Jagielski 	Reference< XOutputStream > xOStm;
1362*b1cdbd2cSJim Jagielski 	Reference< document::XBinaryStreamResolver > xStmResolver( mxGraphicResolver, UNO_QUERY );
1363*b1cdbd2cSJim Jagielski 
1364*b1cdbd2cSJim Jagielski 	if( xStmResolver.is() )
1365*b1cdbd2cSJim Jagielski         xOStm = xStmResolver->createOutputStream();
1366*b1cdbd2cSJim Jagielski 
1367*b1cdbd2cSJim Jagielski 	return xOStm;
1368*b1cdbd2cSJim Jagielski }
1369*b1cdbd2cSJim Jagielski 
ResolveGraphicObjectURLFromBase64(const Reference<XOutputStream> & rOut)1370*b1cdbd2cSJim Jagielski ::rtl::OUString SvXMLImport::ResolveGraphicObjectURLFromBase64(
1371*b1cdbd2cSJim Jagielski 								 const Reference < XOutputStream >& rOut )
1372*b1cdbd2cSJim Jagielski {
1373*b1cdbd2cSJim Jagielski 	OUString sURL;
1374*b1cdbd2cSJim Jagielski 	Reference< document::XBinaryStreamResolver > xStmResolver( mxGraphicResolver, UNO_QUERY );
1375*b1cdbd2cSJim Jagielski 	if( xStmResolver.is() )
1376*b1cdbd2cSJim Jagielski 		sURL = xStmResolver->resolveOutputStream( rOut );
1377*b1cdbd2cSJim Jagielski 
1378*b1cdbd2cSJim Jagielski 	return sURL;
1379*b1cdbd2cSJim Jagielski }
1380*b1cdbd2cSJim Jagielski 
ResolveEmbeddedObjectURL(const::rtl::OUString & rURL,const::rtl::OUString & rClassId)1381*b1cdbd2cSJim Jagielski ::rtl::OUString SvXMLImport::ResolveEmbeddedObjectURL(
1382*b1cdbd2cSJim Jagielski 									const ::rtl::OUString& rURL,
1383*b1cdbd2cSJim Jagielski 									const ::rtl::OUString& rClassId )
1384*b1cdbd2cSJim Jagielski {
1385*b1cdbd2cSJim Jagielski 	::rtl::OUString sRet;
1386*b1cdbd2cSJim Jagielski 
1387*b1cdbd2cSJim Jagielski 	if( IsPackageURL( rURL ) )
1388*b1cdbd2cSJim Jagielski 	{
1389*b1cdbd2cSJim Jagielski 		if ( mxEmbeddedResolver.is() )
1390*b1cdbd2cSJim Jagielski 		{
1391*b1cdbd2cSJim Jagielski 			OUString sURL( rURL );
1392*b1cdbd2cSJim Jagielski 			if( rClassId.getLength() )
1393*b1cdbd2cSJim Jagielski 			{
1394*b1cdbd2cSJim Jagielski 				sURL += OUString( sal_Unicode('!') );
1395*b1cdbd2cSJim Jagielski 				sURL += rClassId;
1396*b1cdbd2cSJim Jagielski 			}
1397*b1cdbd2cSJim Jagielski 			sRet = mxEmbeddedResolver->resolveEmbeddedObjectURL( sURL );
1398*b1cdbd2cSJim Jagielski 		}
1399*b1cdbd2cSJim Jagielski 	}
1400*b1cdbd2cSJim Jagielski 	else
1401*b1cdbd2cSJim Jagielski 		sRet = GetAbsoluteReference( rURL );
1402*b1cdbd2cSJim Jagielski 
1403*b1cdbd2cSJim Jagielski 	return sRet;
1404*b1cdbd2cSJim Jagielski }
1405*b1cdbd2cSJim Jagielski 
1406*b1cdbd2cSJim Jagielski Reference < XOutputStream >
GetStreamForEmbeddedObjectURLFromBase64()1407*b1cdbd2cSJim Jagielski 		SvXMLImport::GetStreamForEmbeddedObjectURLFromBase64()
1408*b1cdbd2cSJim Jagielski {
1409*b1cdbd2cSJim Jagielski 	Reference < XOutputStream > xOLEStream;
1410*b1cdbd2cSJim Jagielski 
1411*b1cdbd2cSJim Jagielski 	if( mxEmbeddedResolver.is() )
1412*b1cdbd2cSJim Jagielski 	{
1413*b1cdbd2cSJim Jagielski 		Reference< XNameAccess > xNA( mxEmbeddedResolver, UNO_QUERY );
1414*b1cdbd2cSJim Jagielski 		if( xNA.is() )
1415*b1cdbd2cSJim Jagielski 		{
1416*b1cdbd2cSJim Jagielski 			OUString aURL( RTL_CONSTASCII_USTRINGPARAM( "Obj12345678" ) );
1417*b1cdbd2cSJim Jagielski 			Any aAny = xNA->getByName( aURL );
1418*b1cdbd2cSJim Jagielski 			aAny >>= xOLEStream;
1419*b1cdbd2cSJim Jagielski 		}
1420*b1cdbd2cSJim Jagielski 	}
1421*b1cdbd2cSJim Jagielski 
1422*b1cdbd2cSJim Jagielski 	return xOLEStream;
1423*b1cdbd2cSJim Jagielski }
1424*b1cdbd2cSJim Jagielski 
ResolveEmbeddedObjectURLFromBase64()1425*b1cdbd2cSJim Jagielski ::rtl::OUString SvXMLImport::ResolveEmbeddedObjectURLFromBase64()
1426*b1cdbd2cSJim Jagielski {
1427*b1cdbd2cSJim Jagielski 	::rtl::OUString sRet;
1428*b1cdbd2cSJim Jagielski 
1429*b1cdbd2cSJim Jagielski 	if( mxEmbeddedResolver.is() )
1430*b1cdbd2cSJim Jagielski 	{
1431*b1cdbd2cSJim Jagielski 		OUString aURL( RTL_CONSTASCII_USTRINGPARAM( "Obj12345678" ) );
1432*b1cdbd2cSJim Jagielski 		sRet = mxEmbeddedResolver->resolveEmbeddedObjectURL( aURL );
1433*b1cdbd2cSJim Jagielski 	}
1434*b1cdbd2cSJim Jagielski 
1435*b1cdbd2cSJim Jagielski 	return sRet;
1436*b1cdbd2cSJim Jagielski }
1437*b1cdbd2cSJim Jagielski 
AddStyleDisplayName(sal_uInt16 nFamily,const OUString & rName,const OUString & rDisplayName)1438*b1cdbd2cSJim Jagielski void SvXMLImport::AddStyleDisplayName( sal_uInt16 nFamily,
1439*b1cdbd2cSJim Jagielski 									   const OUString& rName,
1440*b1cdbd2cSJim Jagielski 									   const OUString& rDisplayName )
1441*b1cdbd2cSJim Jagielski {
1442*b1cdbd2cSJim Jagielski 	if( !mpStyleMap )
1443*b1cdbd2cSJim Jagielski 	{
1444*b1cdbd2cSJim Jagielski 		mpStyleMap = new StyleMap;
1445*b1cdbd2cSJim Jagielski 		mpStyleMap->acquire();
1446*b1cdbd2cSJim Jagielski 		if( mxImportInfo.is() )
1447*b1cdbd2cSJim Jagielski 		{
1448*b1cdbd2cSJim Jagielski 			OUString sPrivateData(
1449*b1cdbd2cSJim Jagielski 					RTL_CONSTASCII_USTRINGPARAM("PrivateData" ) );
1450*b1cdbd2cSJim Jagielski             Reference< beans::XPropertySetInfo > xPropertySetInfo =
1451*b1cdbd2cSJim Jagielski 				mxImportInfo->getPropertySetInfo();
1452*b1cdbd2cSJim Jagielski             if( xPropertySetInfo.is() &&
1453*b1cdbd2cSJim Jagielski 				xPropertySetInfo->hasPropertyByName(sPrivateData) )
1454*b1cdbd2cSJim Jagielski 			{
1455*b1cdbd2cSJim Jagielski 				Reference < XInterface > xIfc(
1456*b1cdbd2cSJim Jagielski 						static_cast< XUnoTunnel *>( mpStyleMap ) );
1457*b1cdbd2cSJim Jagielski 				Any aAny;
1458*b1cdbd2cSJim Jagielski 				aAny <<= xIfc;
1459*b1cdbd2cSJim Jagielski 				mxImportInfo->setPropertyValue( sPrivateData, aAny );
1460*b1cdbd2cSJim Jagielski 			}
1461*b1cdbd2cSJim Jagielski 		}
1462*b1cdbd2cSJim Jagielski 	}
1463*b1cdbd2cSJim Jagielski 
1464*b1cdbd2cSJim Jagielski 	StyleMap::key_type aKey( nFamily, rName );
1465*b1cdbd2cSJim Jagielski 	StyleMap::value_type aValue( aKey, rDisplayName );
1466*b1cdbd2cSJim Jagielski 	::std::pair<StyleMap::iterator,bool> aRes( mpStyleMap->insert( aValue ) );
1467*b1cdbd2cSJim Jagielski 	OSL_ENSURE( aRes.second, "duplicate style name" );
1468*b1cdbd2cSJim Jagielski 
1469*b1cdbd2cSJim Jagielski }
1470*b1cdbd2cSJim Jagielski 
GetStyleDisplayName(sal_uInt16 nFamily,const OUString & rName) const1471*b1cdbd2cSJim Jagielski OUString SvXMLImport::GetStyleDisplayName( sal_uInt16 nFamily,
1472*b1cdbd2cSJim Jagielski 										   const OUString& rName ) const
1473*b1cdbd2cSJim Jagielski {
1474*b1cdbd2cSJim Jagielski 	OUString sName( rName );
1475*b1cdbd2cSJim Jagielski 	if( mpStyleMap && rName.getLength() )
1476*b1cdbd2cSJim Jagielski 	{
1477*b1cdbd2cSJim Jagielski 		StyleMap::key_type aKey( nFamily, rName );
1478*b1cdbd2cSJim Jagielski 		StyleMap::const_iterator aIter = mpStyleMap->find( aKey );
1479*b1cdbd2cSJim Jagielski 		if( aIter != mpStyleMap->end() )
1480*b1cdbd2cSJim Jagielski 			sName = (*aIter).second;
1481*b1cdbd2cSJim Jagielski 	}
1482*b1cdbd2cSJim Jagielski 	return sName;
1483*b1cdbd2cSJim Jagielski }
1484*b1cdbd2cSJim Jagielski 
SetViewSettings(const com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue> &)1485*b1cdbd2cSJim Jagielski void SvXMLImport::SetViewSettings(const com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue>&)
1486*b1cdbd2cSJim Jagielski {
1487*b1cdbd2cSJim Jagielski }
1488*b1cdbd2cSJim Jagielski 
SetConfigurationSettings(const com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue> &)1489*b1cdbd2cSJim Jagielski void SvXMLImport::SetConfigurationSettings(const com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue>&)
1490*b1cdbd2cSJim Jagielski {
1491*b1cdbd2cSJim Jagielski }
1492*b1cdbd2cSJim Jagielski 
SetDocumentSpecificSettings(const::rtl::OUString & _rSettingsGroupName,const uno::Sequence<beans::PropertyValue> & _rSettings)1493*b1cdbd2cSJim Jagielski void SvXMLImport::SetDocumentSpecificSettings(const ::rtl::OUString& _rSettingsGroupName, const uno::Sequence<beans::PropertyValue>& _rSettings)
1494*b1cdbd2cSJim Jagielski {
1495*b1cdbd2cSJim Jagielski     (void)_rSettingsGroupName;
1496*b1cdbd2cSJim Jagielski     (void)_rSettings;
1497*b1cdbd2cSJim Jagielski }
1498*b1cdbd2cSJim Jagielski 
GetProgressBarHelper()1499*b1cdbd2cSJim Jagielski ProgressBarHelper*	SvXMLImport::GetProgressBarHelper()
1500*b1cdbd2cSJim Jagielski {
1501*b1cdbd2cSJim Jagielski 	if (!mpProgressBarHelper)
1502*b1cdbd2cSJim Jagielski 	{
1503*b1cdbd2cSJim Jagielski 		mpProgressBarHelper = new ProgressBarHelper(mxStatusIndicator, sal_False);
1504*b1cdbd2cSJim Jagielski 
1505*b1cdbd2cSJim Jagielski 		if (mxImportInfo.is())
1506*b1cdbd2cSJim Jagielski 		{
1507*b1cdbd2cSJim Jagielski 			uno::Reference< beans::XPropertySetInfo > xPropertySetInfo = mxImportInfo->getPropertySetInfo();
1508*b1cdbd2cSJim Jagielski 			if (xPropertySetInfo.is())
1509*b1cdbd2cSJim Jagielski 			{
1510*b1cdbd2cSJim Jagielski 				OUString sProgressRange(RTL_CONSTASCII_USTRINGPARAM(XML_PROGRESSRANGE));
1511*b1cdbd2cSJim Jagielski 				OUString sProgressMax(RTL_CONSTASCII_USTRINGPARAM(XML_PROGRESSMAX));
1512*b1cdbd2cSJim Jagielski 				OUString sProgressCurrent(RTL_CONSTASCII_USTRINGPARAM(XML_PROGRESSCURRENT));
1513*b1cdbd2cSJim Jagielski                 OUString sRepeat(RTL_CONSTASCII_USTRINGPARAM(XML_PROGRESSREPEAT));
1514*b1cdbd2cSJim Jagielski 				if (xPropertySetInfo->hasPropertyByName(sProgressMax) &&
1515*b1cdbd2cSJim Jagielski 					xPropertySetInfo->hasPropertyByName(sProgressCurrent) &&
1516*b1cdbd2cSJim Jagielski 					xPropertySetInfo->hasPropertyByName(sProgressRange))
1517*b1cdbd2cSJim Jagielski 				{
1518*b1cdbd2cSJim Jagielski 					uno::Any aAny;
1519*b1cdbd2cSJim Jagielski 					sal_Int32 nProgressMax(0);
1520*b1cdbd2cSJim Jagielski 					sal_Int32 nProgressCurrent(0);
1521*b1cdbd2cSJim Jagielski 					sal_Int32 nProgressRange(0);
1522*b1cdbd2cSJim Jagielski 					aAny = mxImportInfo->getPropertyValue(sProgressRange);
1523*b1cdbd2cSJim Jagielski 					if (aAny >>= nProgressRange)
1524*b1cdbd2cSJim Jagielski 						mpProgressBarHelper->SetRange(nProgressRange);
1525*b1cdbd2cSJim Jagielski 					aAny = mxImportInfo->getPropertyValue(sProgressMax);
1526*b1cdbd2cSJim Jagielski 					if (aAny >>= nProgressMax)
1527*b1cdbd2cSJim Jagielski 						mpProgressBarHelper->SetReference(nProgressMax);
1528*b1cdbd2cSJim Jagielski 					aAny = mxImportInfo->getPropertyValue(sProgressCurrent);
1529*b1cdbd2cSJim Jagielski 					if (aAny >>= nProgressCurrent)
1530*b1cdbd2cSJim Jagielski 						mpProgressBarHelper->SetValue(nProgressCurrent);
1531*b1cdbd2cSJim Jagielski 				}
1532*b1cdbd2cSJim Jagielski                 if (xPropertySetInfo->hasPropertyByName(sRepeat))
1533*b1cdbd2cSJim Jagielski                 {
1534*b1cdbd2cSJim Jagielski                     uno::Any aAny = mxImportInfo->getPropertyValue(sRepeat);
1535*b1cdbd2cSJim Jagielski                     if (aAny.getValueType() == getBooleanCppuType())
1536*b1cdbd2cSJim Jagielski                         mpProgressBarHelper->SetRepeat(::cppu::any2bool(aAny));
1537*b1cdbd2cSJim Jagielski                     else {
1538*b1cdbd2cSJim Jagielski                         DBG_ERRORFILE("why is it no boolean?");
1539*b1cdbd2cSJim Jagielski                     }
1540*b1cdbd2cSJim Jagielski                 }
1541*b1cdbd2cSJim Jagielski 			}
1542*b1cdbd2cSJim Jagielski 		}
1543*b1cdbd2cSJim Jagielski 	}
1544*b1cdbd2cSJim Jagielski 	return mpProgressBarHelper;
1545*b1cdbd2cSJim Jagielski }
1546*b1cdbd2cSJim Jagielski 
AddNumberStyle(sal_Int32 nKey,const OUString & rName)1547*b1cdbd2cSJim Jagielski void SvXMLImport::AddNumberStyle(sal_Int32 nKey, const OUString& rName)
1548*b1cdbd2cSJim Jagielski {
1549*b1cdbd2cSJim Jagielski 	if (!mxNumberStyles.is())
1550*b1cdbd2cSJim Jagielski 		mxNumberStyles = uno::Reference< container::XNameContainer >( comphelper::NameContainer_createInstance( ::getCppuType((const sal_Int32*)0)) );
1551*b1cdbd2cSJim Jagielski 	if (mxNumberStyles.is())
1552*b1cdbd2cSJim Jagielski 	{
1553*b1cdbd2cSJim Jagielski 		uno::Any aAny;
1554*b1cdbd2cSJim Jagielski 		aAny <<= nKey;
1555*b1cdbd2cSJim Jagielski 		try
1556*b1cdbd2cSJim Jagielski 		{
1557*b1cdbd2cSJim Jagielski 			mxNumberStyles->insertByName(rName, aAny);
1558*b1cdbd2cSJim Jagielski 		}
1559*b1cdbd2cSJim Jagielski 		catch ( uno::Exception& )
1560*b1cdbd2cSJim Jagielski 		{
1561*b1cdbd2cSJim Jagielski 			DBG_ERROR("Numberformat could not be inserted");
1562*b1cdbd2cSJim Jagielski 		}
1563*b1cdbd2cSJim Jagielski 	}
1564*b1cdbd2cSJim Jagielski 	else {
1565*b1cdbd2cSJim Jagielski 		DBG_ERROR("not possible to create NameContainer");
1566*b1cdbd2cSJim Jagielski     }
1567*b1cdbd2cSJim Jagielski }
1568*b1cdbd2cSJim Jagielski 
GetEventImport()1569*b1cdbd2cSJim Jagielski XMLEventImportHelper& SvXMLImport::GetEventImport()
1570*b1cdbd2cSJim Jagielski {
1571*b1cdbd2cSJim Jagielski #ifndef SVX_LIGHT
1572*b1cdbd2cSJim Jagielski 	if (!mpEventImportHelper)
1573*b1cdbd2cSJim Jagielski 	{
1574*b1cdbd2cSJim Jagielski 		// construct event helper and register StarBasic handler and standard
1575*b1cdbd2cSJim Jagielski 		// event tables
1576*b1cdbd2cSJim Jagielski 		mpEventImportHelper = new XMLEventImportHelper();
1577*b1cdbd2cSJim Jagielski 		OUString sStarBasic(GetXMLToken(XML_STARBASIC));
1578*b1cdbd2cSJim Jagielski 		mpEventImportHelper->RegisterFactory(sStarBasic,
1579*b1cdbd2cSJim Jagielski 											new XMLStarBasicContextFactory());
1580*b1cdbd2cSJim Jagielski 		OUString sScript(GetXMLToken(XML_SCRIPT));
1581*b1cdbd2cSJim Jagielski 		mpEventImportHelper->RegisterFactory(sScript,
1582*b1cdbd2cSJim Jagielski 											new XMLScriptContextFactory());
1583*b1cdbd2cSJim Jagielski 		mpEventImportHelper->AddTranslationTable(aStandardEventTable);
1584*b1cdbd2cSJim Jagielski 
1585*b1cdbd2cSJim Jagielski         // register StarBasic event handler with capitalized spelling
1586*b1cdbd2cSJim Jagielski 		OUString sStarBasicCap(RTL_CONSTASCII_USTRINGPARAM("StarBasic"));
1587*b1cdbd2cSJim Jagielski 		mpEventImportHelper->RegisterFactory(sStarBasicCap,
1588*b1cdbd2cSJim Jagielski 											new XMLStarBasicContextFactory());
1589*b1cdbd2cSJim Jagielski 	}
1590*b1cdbd2cSJim Jagielski #endif
1591*b1cdbd2cSJim Jagielski 
1592*b1cdbd2cSJim Jagielski 	return *mpEventImportHelper;
1593*b1cdbd2cSJim Jagielski }
1594*b1cdbd2cSJim Jagielski 
SetFontDecls(XMLFontStylesContext * pFontDecls)1595*b1cdbd2cSJim Jagielski void SvXMLImport::SetFontDecls( XMLFontStylesContext *pFontDecls )
1596*b1cdbd2cSJim Jagielski {
1597*b1cdbd2cSJim Jagielski 	mxFontDecls = pFontDecls;
1598*b1cdbd2cSJim Jagielski 	GetTextImport()->SetFontDecls( pFontDecls );
1599*b1cdbd2cSJim Jagielski }
1600*b1cdbd2cSJim Jagielski 
SetStyles(SvXMLStylesContext * pStyles)1601*b1cdbd2cSJim Jagielski void SvXMLImport::SetStyles( SvXMLStylesContext *pStyles )
1602*b1cdbd2cSJim Jagielski {
1603*b1cdbd2cSJim Jagielski 	mxStyles = pStyles;
1604*b1cdbd2cSJim Jagielski }
1605*b1cdbd2cSJim Jagielski 
SetAutoStyles(SvXMLStylesContext * pAutoStyles)1606*b1cdbd2cSJim Jagielski void SvXMLImport::SetAutoStyles( SvXMLStylesContext *pAutoStyles )
1607*b1cdbd2cSJim Jagielski {
1608*b1cdbd2cSJim Jagielski 	if (pAutoStyles && mxNumberStyles.is() && (mnImportFlags & IMPORT_CONTENT) )
1609*b1cdbd2cSJim Jagielski 	{
1610*b1cdbd2cSJim Jagielski 		uno::Reference<xml::sax::XAttributeList> xAttrList;
1611*b1cdbd2cSJim Jagielski 		uno::Sequence< ::rtl::OUString > aNames = mxNumberStyles->getElementNames();
1612*b1cdbd2cSJim Jagielski 		sal_uInt32 nCount(aNames.getLength());
1613*b1cdbd2cSJim Jagielski 		if (nCount)
1614*b1cdbd2cSJim Jagielski 		{
1615*b1cdbd2cSJim Jagielski 			const OUString* pNames = aNames.getConstArray();
1616*b1cdbd2cSJim Jagielski 			if ( pNames )
1617*b1cdbd2cSJim Jagielski 			{
1618*b1cdbd2cSJim Jagielski 				SvXMLStyleContext* pContext;
1619*b1cdbd2cSJim Jagielski 				uno::Any aAny;
1620*b1cdbd2cSJim Jagielski 				sal_Int32 nKey(0);
1621*b1cdbd2cSJim Jagielski 				for (sal_uInt32 i = 0; i < nCount; i++, pNames++)
1622*b1cdbd2cSJim Jagielski 				{
1623*b1cdbd2cSJim Jagielski 					aAny = mxNumberStyles->getByName(*pNames);
1624*b1cdbd2cSJim Jagielski 					if (aAny >>= nKey)
1625*b1cdbd2cSJim Jagielski 					{
1626*b1cdbd2cSJim Jagielski 						pContext = new SvXMLNumFormatContext( *this, XML_NAMESPACE_NUMBER,
1627*b1cdbd2cSJim Jagielski 									*pNames, xAttrList, nKey, *pAutoStyles );
1628*b1cdbd2cSJim Jagielski 						pAutoStyles->AddStyle(*pContext);
1629*b1cdbd2cSJim Jagielski 					}
1630*b1cdbd2cSJim Jagielski 				}
1631*b1cdbd2cSJim Jagielski 			}
1632*b1cdbd2cSJim Jagielski 		}
1633*b1cdbd2cSJim Jagielski 	}
1634*b1cdbd2cSJim Jagielski 	mxAutoStyles = pAutoStyles;
1635*b1cdbd2cSJim Jagielski 	GetTextImport()->SetAutoStyles( pAutoStyles );
1636*b1cdbd2cSJim Jagielski 	GetShapeImport()->SetAutoStylesContext( pAutoStyles );
1637*b1cdbd2cSJim Jagielski #ifndef SVX_LIGHT
1638*b1cdbd2cSJim Jagielski 	GetChartImport()->SetAutoStylesContext( pAutoStyles );
1639*b1cdbd2cSJim Jagielski 	GetFormImport()->setAutoStyleContext( pAutoStyles );
1640*b1cdbd2cSJim Jagielski #endif
1641*b1cdbd2cSJim Jagielski }
1642*b1cdbd2cSJim Jagielski 
SetMasterStyles(SvXMLStylesContext * pMasterStyles)1643*b1cdbd2cSJim Jagielski void SvXMLImport::SetMasterStyles( SvXMLStylesContext *pMasterStyles )
1644*b1cdbd2cSJim Jagielski {
1645*b1cdbd2cSJim Jagielski 	mxMasterStyles = pMasterStyles;
1646*b1cdbd2cSJim Jagielski }
1647*b1cdbd2cSJim Jagielski 
GetFontDecls()1648*b1cdbd2cSJim Jagielski XMLFontStylesContext *SvXMLImport::GetFontDecls()
1649*b1cdbd2cSJim Jagielski {
1650*b1cdbd2cSJim Jagielski 	return (XMLFontStylesContext *)&mxFontDecls;
1651*b1cdbd2cSJim Jagielski }
1652*b1cdbd2cSJim Jagielski 
GetStyles()1653*b1cdbd2cSJim Jagielski SvXMLStylesContext *SvXMLImport::GetStyles()
1654*b1cdbd2cSJim Jagielski {
1655*b1cdbd2cSJim Jagielski 	return (SvXMLStylesContext *)&mxStyles;
1656*b1cdbd2cSJim Jagielski }
1657*b1cdbd2cSJim Jagielski 
GetAutoStyles()1658*b1cdbd2cSJim Jagielski SvXMLStylesContext *SvXMLImport::GetAutoStyles()
1659*b1cdbd2cSJim Jagielski {
1660*b1cdbd2cSJim Jagielski 	return (SvXMLStylesContext *)&mxAutoStyles;
1661*b1cdbd2cSJim Jagielski }
1662*b1cdbd2cSJim Jagielski 
GetMasterStyles()1663*b1cdbd2cSJim Jagielski SvXMLStylesContext *SvXMLImport::GetMasterStyles()
1664*b1cdbd2cSJim Jagielski {
1665*b1cdbd2cSJim Jagielski 	return (SvXMLStylesContext *)&mxMasterStyles;
1666*b1cdbd2cSJim Jagielski }
1667*b1cdbd2cSJim Jagielski 
GetFontDecls() const1668*b1cdbd2cSJim Jagielski const XMLFontStylesContext *SvXMLImport::GetFontDecls() const
1669*b1cdbd2cSJim Jagielski {
1670*b1cdbd2cSJim Jagielski 	return (const XMLFontStylesContext *)&mxFontDecls;
1671*b1cdbd2cSJim Jagielski }
1672*b1cdbd2cSJim Jagielski 
GetStyles() const1673*b1cdbd2cSJim Jagielski const SvXMLStylesContext *SvXMLImport::GetStyles() const
1674*b1cdbd2cSJim Jagielski {
1675*b1cdbd2cSJim Jagielski 	return (const SvXMLStylesContext *)&mxStyles;
1676*b1cdbd2cSJim Jagielski }
1677*b1cdbd2cSJim Jagielski 
GetAutoStyles() const1678*b1cdbd2cSJim Jagielski const SvXMLStylesContext *SvXMLImport::GetAutoStyles() const
1679*b1cdbd2cSJim Jagielski {
1680*b1cdbd2cSJim Jagielski 	return (const SvXMLStylesContext *)&mxAutoStyles;
1681*b1cdbd2cSJim Jagielski }
1682*b1cdbd2cSJim Jagielski 
GetMasterStyles() const1683*b1cdbd2cSJim Jagielski const SvXMLStylesContext *SvXMLImport::GetMasterStyles() const
1684*b1cdbd2cSJim Jagielski {
1685*b1cdbd2cSJim Jagielski 	return (const SvXMLStylesContext *)&mxMasterStyles;
1686*b1cdbd2cSJim Jagielski }
1687*b1cdbd2cSJim Jagielski 
GetAbsoluteReference(const OUString & rValue) const1688*b1cdbd2cSJim Jagielski OUString SvXMLImport::GetAbsoluteReference(const OUString& rValue) const
1689*b1cdbd2cSJim Jagielski {
1690*b1cdbd2cSJim Jagielski 	if( rValue.getLength() == 0 || rValue[0] == '#' )
1691*b1cdbd2cSJim Jagielski 		return rValue;
1692*b1cdbd2cSJim Jagielski 
1693*b1cdbd2cSJim Jagielski 	INetURLObject aAbsURL;
1694*b1cdbd2cSJim Jagielski 	if( mpImpl->aBaseURL.GetNewAbsURL( rValue, &aAbsURL ) )
1695*b1cdbd2cSJim Jagielski 		return aAbsURL.GetMainURL( INetURLObject::DECODE_TO_IURI );
1696*b1cdbd2cSJim Jagielski 	else
1697*b1cdbd2cSJim Jagielski 		return rValue;
1698*b1cdbd2cSJim Jagielski }
1699*b1cdbd2cSJim Jagielski 
IsODFVersionConsistent(const::rtl::OUString & aODFVersion)1700*b1cdbd2cSJim Jagielski sal_Bool SvXMLImport::IsODFVersionConsistent( const ::rtl::OUString& aODFVersion )
1701*b1cdbd2cSJim Jagielski {
1702*b1cdbd2cSJim Jagielski     // the check returns sal_False only if the storage version could be retrieved
1703*b1cdbd2cSJim Jagielski     sal_Bool bResult = sal_True;
1704*b1cdbd2cSJim Jagielski 
1705*b1cdbd2cSJim Jagielski     if ( aODFVersion.getLength() && aODFVersion.compareTo( ODFVER_012_TEXT ) >= 0 )
1706*b1cdbd2cSJim Jagielski     {
1707*b1cdbd2cSJim Jagielski         // check the consistency only for the ODF1.2 and later ( according to content.xml )
1708*b1cdbd2cSJim Jagielski         // manifest.xml might have no version, it should be checked here and the correct version should be set
1709*b1cdbd2cSJim Jagielski         try
1710*b1cdbd2cSJim Jagielski         {
1711*b1cdbd2cSJim Jagielski             uno::Reference< document::XStorageBasedDocument > xDoc( mxModel, uno::UNO_QUERY_THROW );
1712*b1cdbd2cSJim Jagielski             uno::Reference< embed::XStorage > xStor = xDoc->getDocumentStorage();
1713*b1cdbd2cSJim Jagielski             uno::Reference< beans::XPropertySet > xStorProps( xStor, uno::UNO_QUERY_THROW );
1714*b1cdbd2cSJim Jagielski 
1715*b1cdbd2cSJim Jagielski             // the check should be done only for OASIS format
1716*b1cdbd2cSJim Jagielski             ::rtl::OUString aMediaType;
1717*b1cdbd2cSJim Jagielski             xStorProps->getPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "MediaType" ) ) ) >>= aMediaType;
1718*b1cdbd2cSJim Jagielski             if ( ::comphelper::OStorageHelper::GetXStorageFormat( xStor ) >= SOFFICE_FILEFORMAT_8 )
1719*b1cdbd2cSJim Jagielski             {
1720*b1cdbd2cSJim Jagielski                 sal_Bool bRepairPackage = sal_False;
1721*b1cdbd2cSJim Jagielski                 try
1722*b1cdbd2cSJim Jagielski                 {
1723*b1cdbd2cSJim Jagielski                     xStorProps->getPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "RepairPackage" ) ) )
1724*b1cdbd2cSJim Jagielski                         >>= bRepairPackage;
1725*b1cdbd2cSJim Jagielski                 } catch ( uno::Exception& )
1726*b1cdbd2cSJim Jagielski                 {}
1727*b1cdbd2cSJim Jagielski 
1728*b1cdbd2cSJim Jagielski                 // check only if not in Repair mode
1729*b1cdbd2cSJim Jagielski                 if ( !bRepairPackage )
1730*b1cdbd2cSJim Jagielski                 {
1731*b1cdbd2cSJim Jagielski                     ::rtl::OUString aStorVersion;
1732*b1cdbd2cSJim Jagielski                     xStorProps->getPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Version" ) ) )
1733*b1cdbd2cSJim Jagielski                         >>= aStorVersion;
1734*b1cdbd2cSJim Jagielski 
1735*b1cdbd2cSJim Jagielski                     // if the storage version is set in manifest.xml, it must be the same as in content.xml
1736*b1cdbd2cSJim Jagielski                     // if not, set it explicitly to be used further ( it will work even for readonly storage )
1737*b1cdbd2cSJim Jagielski                     // This workaround is not nice, but I see no other way to handle it, since there are
1738*b1cdbd2cSJim Jagielski                     // ODF1.2 documents without version in manifest.xml
1739*b1cdbd2cSJim Jagielski                     if ( aStorVersion.getLength() )
1740*b1cdbd2cSJim Jagielski                         bResult = aODFVersion.equals( aStorVersion );
1741*b1cdbd2cSJim Jagielski                     else
1742*b1cdbd2cSJim Jagielski                         xStorProps->setPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Version" ) ),
1743*b1cdbd2cSJim Jagielski                                                       uno::makeAny( aODFVersion ) );
1744*b1cdbd2cSJim Jagielski 
1745*b1cdbd2cSJim Jagielski                     if ( bResult )
1746*b1cdbd2cSJim Jagielski                     {
1747*b1cdbd2cSJim Jagielski                         sal_Bool bInconsistent = sal_False;
1748*b1cdbd2cSJim Jagielski                         xStorProps->getPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "IsInconsistent" ) ) )
1749*b1cdbd2cSJim Jagielski                             >>= bInconsistent;
1750*b1cdbd2cSJim Jagielski                         bResult = !bInconsistent;
1751*b1cdbd2cSJim Jagielski                     }
1752*b1cdbd2cSJim Jagielski                 }
1753*b1cdbd2cSJim Jagielski             }
1754*b1cdbd2cSJim Jagielski         }
1755*b1cdbd2cSJim Jagielski         catch( uno::Exception& )
1756*b1cdbd2cSJim Jagielski         {}
1757*b1cdbd2cSJim Jagielski     }
1758*b1cdbd2cSJim Jagielski 
1759*b1cdbd2cSJim Jagielski     return bResult;
1760*b1cdbd2cSJim Jagielski }
1761*b1cdbd2cSJim Jagielski 
_CreateNumberFormatsSupplier()1762*b1cdbd2cSJim Jagielski void SvXMLImport::_CreateNumberFormatsSupplier()
1763*b1cdbd2cSJim Jagielski {
1764*b1cdbd2cSJim Jagielski     DBG_ASSERT( !mxNumberFormatsSupplier.is(),
1765*b1cdbd2cSJim Jagielski                 "number formats supplier already exists!" );
1766*b1cdbd2cSJim Jagielski     if(mxModel.is())
1767*b1cdbd2cSJim Jagielski     	mxNumberFormatsSupplier =
1768*b1cdbd2cSJim Jagielski         	uno::Reference< util::XNumberFormatsSupplier> (mxModel, uno::UNO_QUERY);
1769*b1cdbd2cSJim Jagielski }
1770*b1cdbd2cSJim Jagielski 
1771*b1cdbd2cSJim Jagielski 
_CreateDataStylesImport()1772*b1cdbd2cSJim Jagielski void SvXMLImport::_CreateDataStylesImport()
1773*b1cdbd2cSJim Jagielski {
1774*b1cdbd2cSJim Jagielski     DBG_ASSERT( mpNumImport == NULL, "data styles import already exists!" );
1775*b1cdbd2cSJim Jagielski     uno::Reference<util::XNumberFormatsSupplier> xNum =
1776*b1cdbd2cSJim Jagielski         GetNumberFormatsSupplier();
1777*b1cdbd2cSJim Jagielski     if ( xNum.is() )
1778*b1cdbd2cSJim Jagielski         mpNumImport = new SvXMLNumFmtHelper(xNum, getServiceFactory());
1779*b1cdbd2cSJim Jagielski }
1780*b1cdbd2cSJim Jagielski 
1781*b1cdbd2cSJim Jagielski 
ConvStarBatsCharToStarSymbol(sal_Unicode c)1782*b1cdbd2cSJim Jagielski sal_Unicode SvXMLImport::ConvStarBatsCharToStarSymbol( sal_Unicode c )
1783*b1cdbd2cSJim Jagielski {
1784*b1cdbd2cSJim Jagielski 	sal_Unicode cNew = c;
1785*b1cdbd2cSJim Jagielski 	if( !mpImpl->hBatsFontConv )
1786*b1cdbd2cSJim Jagielski 	{
1787*b1cdbd2cSJim Jagielski 		OUString sStarBats( RTL_CONSTASCII_USTRINGPARAM( "StarBats" ) );
1788*b1cdbd2cSJim Jagielski 		mpImpl->hBatsFontConv = CreateFontToSubsFontConverter( sStarBats,
1789*b1cdbd2cSJim Jagielski 				 FONTTOSUBSFONT_IMPORT|FONTTOSUBSFONT_ONLYOLDSOSYMBOLFONTS );
1790*b1cdbd2cSJim Jagielski 		OSL_ENSURE( mpImpl->hBatsFontConv, "Got no symbol font converter" );
1791*b1cdbd2cSJim Jagielski 	}
1792*b1cdbd2cSJim Jagielski 	if( mpImpl->hBatsFontConv )
1793*b1cdbd2cSJim Jagielski 	{
1794*b1cdbd2cSJim Jagielski 		cNew = ConvertFontToSubsFontChar( mpImpl->hBatsFontConv, c );
1795*b1cdbd2cSJim Jagielski 	}
1796*b1cdbd2cSJim Jagielski 
1797*b1cdbd2cSJim Jagielski 	return cNew;
1798*b1cdbd2cSJim Jagielski }
1799*b1cdbd2cSJim Jagielski 
ConvStarMathCharToStarSymbol(sal_Unicode c)1800*b1cdbd2cSJim Jagielski sal_Unicode SvXMLImport::ConvStarMathCharToStarSymbol( sal_Unicode c )
1801*b1cdbd2cSJim Jagielski {
1802*b1cdbd2cSJim Jagielski 	sal_Unicode cNew = c;
1803*b1cdbd2cSJim Jagielski 	if( !mpImpl->hMathFontConv )
1804*b1cdbd2cSJim Jagielski 	{
1805*b1cdbd2cSJim Jagielski 		OUString sStarMath( RTL_CONSTASCII_USTRINGPARAM( "StarMath" ) );
1806*b1cdbd2cSJim Jagielski 		mpImpl->hMathFontConv = CreateFontToSubsFontConverter( sStarMath,
1807*b1cdbd2cSJim Jagielski 				 FONTTOSUBSFONT_IMPORT|FONTTOSUBSFONT_ONLYOLDSOSYMBOLFONTS );
1808*b1cdbd2cSJim Jagielski 		OSL_ENSURE( mpImpl->hMathFontConv, "Got no symbol font converter" );
1809*b1cdbd2cSJim Jagielski 	}
1810*b1cdbd2cSJim Jagielski 	if( mpImpl->hMathFontConv )
1811*b1cdbd2cSJim Jagielski 	{
1812*b1cdbd2cSJim Jagielski 		cNew = ConvertFontToSubsFontChar( mpImpl->hMathFontConv, c );
1813*b1cdbd2cSJim Jagielski 	}
1814*b1cdbd2cSJim Jagielski 
1815*b1cdbd2cSJim Jagielski 	return cNew;
1816*b1cdbd2cSJim Jagielski }
1817*b1cdbd2cSJim Jagielski 
1818*b1cdbd2cSJim Jagielski 
1819*b1cdbd2cSJim Jagielski 
SetError(sal_Int32 nId,const Sequence<OUString> & rMsgParams,const OUString & rExceptionMessage,const Reference<xml::sax::XLocator> & rLocator)1820*b1cdbd2cSJim Jagielski void SvXMLImport::SetError(
1821*b1cdbd2cSJim Jagielski     sal_Int32 nId,
1822*b1cdbd2cSJim Jagielski     const Sequence<OUString>& rMsgParams,
1823*b1cdbd2cSJim Jagielski     const OUString& rExceptionMessage,
1824*b1cdbd2cSJim Jagielski     const Reference<xml::sax::XLocator>& rLocator )
1825*b1cdbd2cSJim Jagielski {
1826*b1cdbd2cSJim Jagielski     // maintain error flags
1827*b1cdbd2cSJim Jagielski     if ( ( nId & XMLERROR_FLAG_ERROR ) != 0 )
1828*b1cdbd2cSJim Jagielski         mnErrorFlags |= ERROR_ERROR_OCCURED;
1829*b1cdbd2cSJim Jagielski     if ( ( nId & XMLERROR_FLAG_WARNING ) != 0 )
1830*b1cdbd2cSJim Jagielski         mnErrorFlags |= ERROR_WARNING_OCCURED;
1831*b1cdbd2cSJim Jagielski     if ( ( nId & XMLERROR_FLAG_SEVERE ) != 0 )
1832*b1cdbd2cSJim Jagielski         mnErrorFlags |= ERROR_DO_NOTHING;
1833*b1cdbd2cSJim Jagielski 
1834*b1cdbd2cSJim Jagielski     // create error list on demand
1835*b1cdbd2cSJim Jagielski     if ( mpXMLErrors == NULL )
1836*b1cdbd2cSJim Jagielski         mpXMLErrors = new XMLErrors();
1837*b1cdbd2cSJim Jagielski 
1838*b1cdbd2cSJim Jagielski     // save error information
1839*b1cdbd2cSJim Jagielski     // use document locator (if none supplied)
1840*b1cdbd2cSJim Jagielski     mpXMLErrors->AddRecord( nId, rMsgParams, rExceptionMessage,
1841*b1cdbd2cSJim Jagielski                            rLocator.is() ? rLocator : mxLocator );
1842*b1cdbd2cSJim Jagielski }
1843*b1cdbd2cSJim Jagielski 
SetError(sal_Int32 nId,const Sequence<OUString> & rMsgParams)1844*b1cdbd2cSJim Jagielski void SvXMLImport::SetError(
1845*b1cdbd2cSJim Jagielski     sal_Int32 nId,
1846*b1cdbd2cSJim Jagielski     const Sequence<OUString>& rMsgParams)
1847*b1cdbd2cSJim Jagielski {
1848*b1cdbd2cSJim Jagielski     OUString sEmpty;
1849*b1cdbd2cSJim Jagielski     SetError( nId, rMsgParams, sEmpty, NULL );
1850*b1cdbd2cSJim Jagielski }
1851*b1cdbd2cSJim Jagielski 
SetError(sal_Int32 nId)1852*b1cdbd2cSJim Jagielski void SvXMLImport::SetError(
1853*b1cdbd2cSJim Jagielski     sal_Int32 nId)
1854*b1cdbd2cSJim Jagielski {
1855*b1cdbd2cSJim Jagielski     Sequence<OUString> aSeq(0);
1856*b1cdbd2cSJim Jagielski     SetError( nId, aSeq );
1857*b1cdbd2cSJim Jagielski }
1858*b1cdbd2cSJim Jagielski 
SetError(sal_Int32 nId,const OUString & rMsg1)1859*b1cdbd2cSJim Jagielski void SvXMLImport::SetError(
1860*b1cdbd2cSJim Jagielski     sal_Int32 nId,
1861*b1cdbd2cSJim Jagielski     const OUString& rMsg1)
1862*b1cdbd2cSJim Jagielski {
1863*b1cdbd2cSJim Jagielski     Sequence<OUString> aSeq(1);
1864*b1cdbd2cSJim Jagielski     OUString* pSeq = aSeq.getArray();
1865*b1cdbd2cSJim Jagielski     pSeq[0] = rMsg1;
1866*b1cdbd2cSJim Jagielski     SetError( nId, aSeq );
1867*b1cdbd2cSJim Jagielski }
1868*b1cdbd2cSJim Jagielski 
SetError(sal_Int32 nId,const OUString & rMsg1,const OUString & rMsg2)1869*b1cdbd2cSJim Jagielski void SvXMLImport::SetError(
1870*b1cdbd2cSJim Jagielski     sal_Int32 nId,
1871*b1cdbd2cSJim Jagielski     const OUString& rMsg1,
1872*b1cdbd2cSJim Jagielski     const OUString& rMsg2)
1873*b1cdbd2cSJim Jagielski {
1874*b1cdbd2cSJim Jagielski     Sequence<OUString> aSeq(2);
1875*b1cdbd2cSJim Jagielski     OUString* pSeq = aSeq.getArray();
1876*b1cdbd2cSJim Jagielski     pSeq[0] = rMsg1;
1877*b1cdbd2cSJim Jagielski     pSeq[1] = rMsg2;
1878*b1cdbd2cSJim Jagielski     SetError( nId, aSeq );
1879*b1cdbd2cSJim Jagielski }
1880*b1cdbd2cSJim Jagielski 
SetError(sal_Int32 nId,const OUString & rMsg1,const OUString & rMsg2,const OUString & rMsg3)1881*b1cdbd2cSJim Jagielski void SvXMLImport::SetError(
1882*b1cdbd2cSJim Jagielski     sal_Int32 nId,
1883*b1cdbd2cSJim Jagielski     const OUString& rMsg1,
1884*b1cdbd2cSJim Jagielski     const OUString& rMsg2,
1885*b1cdbd2cSJim Jagielski     const OUString& rMsg3)
1886*b1cdbd2cSJim Jagielski {
1887*b1cdbd2cSJim Jagielski     Sequence<OUString> aSeq(3);
1888*b1cdbd2cSJim Jagielski     OUString* pSeq = aSeq.getArray();
1889*b1cdbd2cSJim Jagielski     pSeq[0] = rMsg1;
1890*b1cdbd2cSJim Jagielski     pSeq[1] = rMsg2;
1891*b1cdbd2cSJim Jagielski     pSeq[2] = rMsg3;
1892*b1cdbd2cSJim Jagielski     SetError( nId, aSeq );
1893*b1cdbd2cSJim Jagielski }
1894*b1cdbd2cSJim Jagielski 
SetError(sal_Int32 nId,const OUString & rMsg1,const OUString & rMsg2,const OUString & rMsg3,const OUString & rMsg4)1895*b1cdbd2cSJim Jagielski void SvXMLImport::SetError(
1896*b1cdbd2cSJim Jagielski     sal_Int32 nId,
1897*b1cdbd2cSJim Jagielski     const OUString& rMsg1,
1898*b1cdbd2cSJim Jagielski     const OUString& rMsg2,
1899*b1cdbd2cSJim Jagielski     const OUString& rMsg3,
1900*b1cdbd2cSJim Jagielski     const OUString& rMsg4)
1901*b1cdbd2cSJim Jagielski {
1902*b1cdbd2cSJim Jagielski     Sequence<OUString> aSeq(4);
1903*b1cdbd2cSJim Jagielski     OUString* pSeq = aSeq.getArray();
1904*b1cdbd2cSJim Jagielski     pSeq[0] = rMsg1;
1905*b1cdbd2cSJim Jagielski     pSeq[1] = rMsg2;
1906*b1cdbd2cSJim Jagielski     pSeq[2] = rMsg3;
1907*b1cdbd2cSJim Jagielski     pSeq[3] = rMsg4;
1908*b1cdbd2cSJim Jagielski     SetError( nId, aSeq );
1909*b1cdbd2cSJim Jagielski }
1910*b1cdbd2cSJim Jagielski 
GetErrors()1911*b1cdbd2cSJim Jagielski XMLErrors* SvXMLImport::GetErrors()
1912*b1cdbd2cSJim Jagielski {
1913*b1cdbd2cSJim Jagielski 	return mpXMLErrors;
1914*b1cdbd2cSJim Jagielski }
1915*b1cdbd2cSJim Jagielski 
DisposingModel()1916*b1cdbd2cSJim Jagielski void SvXMLImport::DisposingModel()
1917*b1cdbd2cSJim Jagielski {
1918*b1cdbd2cSJim Jagielski 	if( mxFontDecls.Is() )
1919*b1cdbd2cSJim Jagielski 		((SvXMLStylesContext *)&mxFontDecls)->Clear();
1920*b1cdbd2cSJim Jagielski 	if( mxStyles.Is() )
1921*b1cdbd2cSJim Jagielski 		((SvXMLStylesContext *)&mxStyles)->Clear();
1922*b1cdbd2cSJim Jagielski 	if( mxAutoStyles.Is() )
1923*b1cdbd2cSJim Jagielski 		((SvXMLStylesContext *)&mxAutoStyles)->Clear();
1924*b1cdbd2cSJim Jagielski 	if( mxMasterStyles.Is() )
1925*b1cdbd2cSJim Jagielski 		((SvXMLStylesContext *)&mxMasterStyles)->Clear();
1926*b1cdbd2cSJim Jagielski 
1927*b1cdbd2cSJim Jagielski 	mxModel.set(0);
1928*b1cdbd2cSJim Jagielski 	mxEventListener.set(NULL);
1929*b1cdbd2cSJim Jagielski }
1930*b1cdbd2cSJim Jagielski 
getInterfaceToIdentifierMapper()1931*b1cdbd2cSJim Jagielski ::comphelper::UnoInterfaceToUniqueIdentifierMapper& SvXMLImport::getInterfaceToIdentifierMapper()
1932*b1cdbd2cSJim Jagielski {
1933*b1cdbd2cSJim Jagielski 	return mpImpl->maInterfaceToIdentifierMapper;
1934*b1cdbd2cSJim Jagielski }
1935*b1cdbd2cSJim Jagielski 
getServiceFactory()1936*b1cdbd2cSJim Jagielski ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > SvXMLImport::getServiceFactory()
1937*b1cdbd2cSJim Jagielski {
1938*b1cdbd2cSJim Jagielski 	// #110680#
1939*b1cdbd2cSJim Jagielski 	return mxServiceFactory;
1940*b1cdbd2cSJim Jagielski }
1941*b1cdbd2cSJim Jagielski 
1942*b1cdbd2cSJim Jagielski uno::Reference< uno::XComponentContext >
GetComponentContext() const1943*b1cdbd2cSJim Jagielski SvXMLImport::GetComponentContext() const
1944*b1cdbd2cSJim Jagielski {
1945*b1cdbd2cSJim Jagielski     return mpImpl->mxComponentContext;
1946*b1cdbd2cSJim Jagielski }
1947*b1cdbd2cSJim Jagielski 
GetBaseURL() const1948*b1cdbd2cSJim Jagielski String SvXMLImport::GetBaseURL() const
1949*b1cdbd2cSJim Jagielski {
1950*b1cdbd2cSJim Jagielski     return mpImpl->aBaseURL.GetMainURL( INetURLObject::NO_DECODE );
1951*b1cdbd2cSJim Jagielski }
1952*b1cdbd2cSJim Jagielski 
GetDocumentBase() const1953*b1cdbd2cSJim Jagielski String SvXMLImport::GetDocumentBase() const
1954*b1cdbd2cSJim Jagielski {
1955*b1cdbd2cSJim Jagielski     return mpImpl->aDocBase.GetMainURL( INetURLObject::NO_DECODE );
1956*b1cdbd2cSJim Jagielski }
1957*b1cdbd2cSJim Jagielski 
GetStreamName() const1958*b1cdbd2cSJim Jagielski ::rtl::OUString SvXMLImport::GetStreamName() const
1959*b1cdbd2cSJim Jagielski {
1960*b1cdbd2cSJim Jagielski     return mpImpl->mStreamName;
1961*b1cdbd2cSJim Jagielski }
1962*b1cdbd2cSJim Jagielski 
1963*b1cdbd2cSJim Jagielski // --> OD 2004-08-10 #i28749#
IsShapePositionInHoriL2R() const1964*b1cdbd2cSJim Jagielski sal_Bool SvXMLImport::IsShapePositionInHoriL2R() const
1965*b1cdbd2cSJim Jagielski {
1966*b1cdbd2cSJim Jagielski     return mpImpl->mbShapePositionInHoriL2R;
1967*b1cdbd2cSJim Jagielski }
1968*b1cdbd2cSJim Jagielski // <--
1969*b1cdbd2cSJim Jagielski 
1970*b1cdbd2cSJim Jagielski // --> OD 2007-12-19 #152540#
IsTextDocInOOoFileFormat() const1971*b1cdbd2cSJim Jagielski sal_Bool SvXMLImport::IsTextDocInOOoFileFormat() const
1972*b1cdbd2cSJim Jagielski {
1973*b1cdbd2cSJim Jagielski     return mpImpl->mbTextDocInOOoFileFormat;
1974*b1cdbd2cSJim Jagielski }
1975*b1cdbd2cSJim Jagielski 
1976*b1cdbd2cSJim Jagielski // <--
1977*b1cdbd2cSJim Jagielski 
initXForms()1978*b1cdbd2cSJim Jagielski void SvXMLImport::initXForms()
1979*b1cdbd2cSJim Jagielski {
1980*b1cdbd2cSJim Jagielski     // dummy method; to be implemented by derived classes supporting XForms
1981*b1cdbd2cSJim Jagielski }
1982*b1cdbd2cSJim Jagielski 
getBuildIds(sal_Int32 & rUPD,sal_Int32 & rBuild) const1983*b1cdbd2cSJim Jagielski bool SvXMLImport::getBuildIds( sal_Int32& rUPD, sal_Int32& rBuild ) const
1984*b1cdbd2cSJim Jagielski {
1985*b1cdbd2cSJim Jagielski 	bool bRet = false;
1986*b1cdbd2cSJim Jagielski 	if( mxImportInfo.is() ) try
1987*b1cdbd2cSJim Jagielski 	{
1988*b1cdbd2cSJim Jagielski 		const OUString aPropName(RTL_CONSTASCII_USTRINGPARAM("BuildId"));
1989*b1cdbd2cSJim Jagielski 		Reference< XPropertySetInfo > xSetInfo( mxImportInfo->getPropertySetInfo() );
1990*b1cdbd2cSJim Jagielski 		if( xSetInfo.is() && xSetInfo->hasPropertyByName( aPropName ) )
1991*b1cdbd2cSJim Jagielski 		{
1992*b1cdbd2cSJim Jagielski 			OUString aBuildId;
1993*b1cdbd2cSJim Jagielski 			mxImportInfo->getPropertyValue( aPropName ) >>= aBuildId;
1994*b1cdbd2cSJim Jagielski 			if( aBuildId.getLength() )
1995*b1cdbd2cSJim Jagielski 			{
1996*b1cdbd2cSJim Jagielski 				sal_Int32 nIndex = aBuildId.indexOf('$');
1997*b1cdbd2cSJim Jagielski 				if( nIndex != -1 )
1998*b1cdbd2cSJim Jagielski 				{
1999*b1cdbd2cSJim Jagielski 					rUPD = aBuildId.copy( 0, nIndex ).toInt32();
2000*b1cdbd2cSJim Jagielski 					rBuild = aBuildId.copy( nIndex+1 ).toInt32();
2001*b1cdbd2cSJim Jagielski 					bRet = true;
2002*b1cdbd2cSJim Jagielski 				}
2003*b1cdbd2cSJim Jagielski 			}
2004*b1cdbd2cSJim Jagielski 		}
2005*b1cdbd2cSJim Jagielski 	}
2006*b1cdbd2cSJim Jagielski 	catch( Exception& )
2007*b1cdbd2cSJim Jagielski 	{
2008*b1cdbd2cSJim Jagielski 	}
2009*b1cdbd2cSJim Jagielski 	return bRet;
2010*b1cdbd2cSJim Jagielski }
2011*b1cdbd2cSJim Jagielski 
getGeneratorVersion() const2012*b1cdbd2cSJim Jagielski sal_uInt16 SvXMLImport::getGeneratorVersion() const
2013*b1cdbd2cSJim Jagielski {
2014*b1cdbd2cSJim Jagielski     // --> ORW
2015*b1cdbd2cSJim Jagielski     return mpImpl->getGeneratorVersion( *this );
2016*b1cdbd2cSJim Jagielski     // <--
2017*b1cdbd2cSJim Jagielski }
2018*b1cdbd2cSJim Jagielski 
isGraphicLoadOnDemandSupported() const2019*b1cdbd2cSJim Jagielski bool SvXMLImport::isGraphicLoadOnDemandSupported() const
2020*b1cdbd2cSJim Jagielski {
2021*b1cdbd2cSJim Jagielski     return mbIsGraphicLoadOnDemandSupported;
2022*b1cdbd2cSJim Jagielski }
2023*b1cdbd2cSJim Jagielski 
GetODFVersion() const2024*b1cdbd2cSJim Jagielski ::rtl::OUString SvXMLImport::GetODFVersion() const
2025*b1cdbd2cSJim Jagielski {
2026*b1cdbd2cSJim Jagielski     return mpImpl->aODFVersion;
2027*b1cdbd2cSJim Jagielski }
2028*b1cdbd2cSJim Jagielski 
2029*b1cdbd2cSJim Jagielski // xml:id for RDF metadata
SetXmlId(uno::Reference<uno::XInterface> const & i_xIfc,::rtl::OUString const & i_rXmlId)2030*b1cdbd2cSJim Jagielski void SvXMLImport::SetXmlId(uno::Reference<uno::XInterface> const & i_xIfc,
2031*b1cdbd2cSJim Jagielski     ::rtl::OUString const & i_rXmlId)
2032*b1cdbd2cSJim Jagielski {
2033*b1cdbd2cSJim Jagielski     if (i_rXmlId.getLength() > 0) {
2034*b1cdbd2cSJim Jagielski         try {
2035*b1cdbd2cSJim Jagielski             const uno::Reference<rdf::XMetadatable> xMeta(i_xIfc,
2036*b1cdbd2cSJim Jagielski                 uno::UNO_QUERY);
2037*b1cdbd2cSJim Jagielski //FIXME: not yet
2038*b1cdbd2cSJim Jagielski //            OSL_ENSURE(xMeta.is(), "xml:id: not XMetadatable");
2039*b1cdbd2cSJim Jagielski             if (xMeta.is()) {
2040*b1cdbd2cSJim Jagielski                 const beans::StringPair mdref( GetStreamName(), i_rXmlId );
2041*b1cdbd2cSJim Jagielski                 try {
2042*b1cdbd2cSJim Jagielski                     xMeta->setMetadataReference(mdref);
2043*b1cdbd2cSJim Jagielski                 } catch (lang::IllegalArgumentException &) {
2044*b1cdbd2cSJim Jagielski                     // probably duplicate; ignore
2045*b1cdbd2cSJim Jagielski                     OSL_TRACE("SvXMLImport::SetXmlId: cannot set xml:id");
2046*b1cdbd2cSJim Jagielski                 }
2047*b1cdbd2cSJim Jagielski             }
2048*b1cdbd2cSJim Jagielski         } catch (uno::Exception &) {
2049*b1cdbd2cSJim Jagielski             OSL_ENSURE(false, "SvXMLImport::SetXmlId: exception?");
2050*b1cdbd2cSJim Jagielski         }
2051*b1cdbd2cSJim Jagielski     }
2052*b1cdbd2cSJim Jagielski }
2053*b1cdbd2cSJim Jagielski 
2054*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE ::xmloff::RDFaImportHelper &
GetRDFaImportHelper()2055*b1cdbd2cSJim Jagielski SvXMLImport::GetRDFaImportHelper()
2056*b1cdbd2cSJim Jagielski {
2057*b1cdbd2cSJim Jagielski     if (!mpImpl->mpRDFaHelper.get())
2058*b1cdbd2cSJim Jagielski     {
2059*b1cdbd2cSJim Jagielski         mpImpl->mpRDFaHelper.reset( new ::xmloff::RDFaImportHelper(*this) );
2060*b1cdbd2cSJim Jagielski     }
2061*b1cdbd2cSJim Jagielski     return *mpImpl->mpRDFaHelper;
2062*b1cdbd2cSJim Jagielski }
2063*b1cdbd2cSJim Jagielski 
2064*b1cdbd2cSJim Jagielski void
AddRDFa(uno::Reference<rdf::XMetadatable> i_xObject,::rtl::OUString const & i_rAbout,::rtl::OUString const & i_rProperty,::rtl::OUString const & i_rContent,::rtl::OUString const & i_rDatatype)2065*b1cdbd2cSJim Jagielski SvXMLImport::AddRDFa(uno::Reference<rdf::XMetadatable> i_xObject,
2066*b1cdbd2cSJim Jagielski     ::rtl::OUString const & i_rAbout,
2067*b1cdbd2cSJim Jagielski     ::rtl::OUString const & i_rProperty,
2068*b1cdbd2cSJim Jagielski     ::rtl::OUString const & i_rContent,
2069*b1cdbd2cSJim Jagielski     ::rtl::OUString const & i_rDatatype)
2070*b1cdbd2cSJim Jagielski {
2071*b1cdbd2cSJim Jagielski     // N.B.: we only get called if i_xObject had xhtml:about attribute
2072*b1cdbd2cSJim Jagielski     // (an empty attribute value is valid)
2073*b1cdbd2cSJim Jagielski     ::xmloff::RDFaImportHelper & rRDFaHelper( GetRDFaImportHelper() );
2074*b1cdbd2cSJim Jagielski     rRDFaHelper.ParseAndAddRDFa(i_xObject,
2075*b1cdbd2cSJim Jagielski         i_rAbout, i_rProperty, i_rContent, i_rDatatype);
2076*b1cdbd2cSJim Jagielski }
2077*b1cdbd2cSJim Jagielski 
2078