1*63bba73cSAndrew Rist /**************************************************************
2cdf0e10cSrcweir *
3*63bba73cSAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one
4*63bba73cSAndrew Rist * or more contributor license agreements. See the NOTICE file
5*63bba73cSAndrew Rist * distributed with this work for additional information
6*63bba73cSAndrew Rist * regarding copyright ownership. The ASF licenses this file
7*63bba73cSAndrew Rist * to you under the Apache License, Version 2.0 (the
8*63bba73cSAndrew Rist * "License"); you may not use this file except in compliance
9*63bba73cSAndrew Rist * with the License. You may obtain a copy of the License at
10cdf0e10cSrcweir *
11*63bba73cSAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0
12cdf0e10cSrcweir *
13*63bba73cSAndrew Rist * Unless required by applicable law or agreed to in writing,
14*63bba73cSAndrew Rist * software distributed under the License is distributed on an
15*63bba73cSAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*63bba73cSAndrew Rist * KIND, either express or implied. See the License for the
17*63bba73cSAndrew Rist * specific language governing permissions and limitations
18*63bba73cSAndrew Rist * under the License.
19cdf0e10cSrcweir *
20*63bba73cSAndrew Rist *************************************************************/
21*63bba73cSAndrew Rist
22*63bba73cSAndrew Rist
23cdf0e10cSrcweir
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_xmloff.hxx"
26cdf0e10cSrcweir #include <com/sun/star/document/XImporter.hpp>
27cdf0e10cSrcweir #include <com/sun/star/util/XModifiable.hpp>
28cdf0e10cSrcweir #include <com/sun/star/util/XModifiable2.hpp>
29cdf0e10cSrcweir #include <com/sun/star/frame/XStorable.hpp>
30cdf0e10cSrcweir
31cdf0e10cSrcweir // #110680#
32cdf0e10cSrcweir //#ifndef _COMPHELPER_PROCESSFACTORY_HXX_
33cdf0e10cSrcweir //#include <comphelper/processfactory.hxx>
34cdf0e10cSrcweir //#endif
35cdf0e10cSrcweir #include <tools/globname.hxx>
36cdf0e10cSrcweir #include <sot/clsids.hxx>
37cdf0e10cSrcweir #include <tools/globname.hxx>
38cdf0e10cSrcweir #include <sot/clsids.hxx>
39cdf0e10cSrcweir #include <xmloff/nmspmap.hxx>
40cdf0e10cSrcweir #include <xmloff/xmlimp.hxx>
41cdf0e10cSrcweir #include "xmloff/xmlnmspe.hxx"
42cdf0e10cSrcweir #include <xmloff/xmltoken.hxx>
43cdf0e10cSrcweir #include "xmloff/xmlerror.hxx"
44cdf0e10cSrcweir #include <xmloff/attrlist.hxx>
45cdf0e10cSrcweir #include "xmloff/XMLFilterServiceNames.h"
46cdf0e10cSrcweir #include "XMLEmbeddedObjectImportContext.hxx"
47cdf0e10cSrcweir
48cdf0e10cSrcweir using ::rtl::OUString;
49cdf0e10cSrcweir using ::rtl::OUStringBuffer;
50cdf0e10cSrcweir
51cdf0e10cSrcweir using namespace ::com::sun::star::uno;
52cdf0e10cSrcweir using namespace ::com::sun::star::util;
53cdf0e10cSrcweir using namespace ::com::sun::star::beans;
54cdf0e10cSrcweir using namespace ::com::sun::star::lang;
55cdf0e10cSrcweir using namespace ::com::sun::star::frame;
56cdf0e10cSrcweir using namespace ::com::sun::star::document;
57cdf0e10cSrcweir using namespace ::com::sun::star::xml::sax;
58cdf0e10cSrcweir using namespace ::xmloff::token;
59cdf0e10cSrcweir
60cdf0e10cSrcweir struct XMLServiceMapEntry_Impl
61cdf0e10cSrcweir {
62cdf0e10cSrcweir enum XMLTokenEnum eClass;
63cdf0e10cSrcweir const sal_Char *sFilterService;
64cdf0e10cSrcweir sal_Int32 nFilterServiceLen;
65cdf0e10cSrcweir };
66cdf0e10cSrcweir
67cdf0e10cSrcweir #define SERVICE_MAP_ENTRY( cls, app ) \
68cdf0e10cSrcweir { XML_##cls, \
69cdf0e10cSrcweir XML_IMPORT_FILTER_##app, sizeof(XML_IMPORT_FILTER_##app)-1}
70cdf0e10cSrcweir
71cdf0e10cSrcweir const XMLServiceMapEntry_Impl aServiceMap[] =
72cdf0e10cSrcweir {
73cdf0e10cSrcweir SERVICE_MAP_ENTRY( TEXT, WRITER ),
74cdf0e10cSrcweir SERVICE_MAP_ENTRY( ONLINE_TEXT, WRITER ),
75cdf0e10cSrcweir SERVICE_MAP_ENTRY( SPREADSHEET, CALC ),
76cdf0e10cSrcweir SERVICE_MAP_ENTRY( DRAWING, DRAW ),
77cdf0e10cSrcweir SERVICE_MAP_ENTRY( GRAPHICS, DRAW ),
78cdf0e10cSrcweir SERVICE_MAP_ENTRY( PRESENTATION, IMPRESS ),
79cdf0e10cSrcweir SERVICE_MAP_ENTRY( CHART, CHART ),
80cdf0e10cSrcweir { XML_TOKEN_INVALID, 0, 0 }
81cdf0e10cSrcweir };
82cdf0e10cSrcweir
83cdf0e10cSrcweir class XMLEmbeddedObjectImportContext_Impl : public SvXMLImportContext
84cdf0e10cSrcweir {
85cdf0e10cSrcweir ::com::sun::star::uno::Reference<
86cdf0e10cSrcweir ::com::sun::star::xml::sax::XDocumentHandler > xHandler;
87cdf0e10cSrcweir
88cdf0e10cSrcweir public:
89cdf0e10cSrcweir TYPEINFO();
90cdf0e10cSrcweir
91cdf0e10cSrcweir XMLEmbeddedObjectImportContext_Impl( SvXMLImport& rImport, sal_uInt16 nPrfx,
92cdf0e10cSrcweir const ::rtl::OUString& rLName,
93cdf0e10cSrcweir const ::com::sun::star::uno::Reference<
94cdf0e10cSrcweir ::com::sun::star::xml::sax::XDocumentHandler >& rHandler );
95cdf0e10cSrcweir
96cdf0e10cSrcweir virtual ~XMLEmbeddedObjectImportContext_Impl();
97cdf0e10cSrcweir
98cdf0e10cSrcweir virtual SvXMLImportContext *CreateChildContext( sal_uInt16 nPrefix,
99cdf0e10cSrcweir const ::rtl::OUString& rLocalName,
100cdf0e10cSrcweir const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList >& xAttrList );
101cdf0e10cSrcweir
102cdf0e10cSrcweir virtual void StartElement( const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList >& xAttrList );
103cdf0e10cSrcweir
104cdf0e10cSrcweir virtual void EndElement();
105cdf0e10cSrcweir
106cdf0e10cSrcweir virtual void Characters( const ::rtl::OUString& rChars );
107cdf0e10cSrcweir };
108cdf0e10cSrcweir
109cdf0e10cSrcweir TYPEINIT1( XMLEmbeddedObjectImportContext_Impl, SvXMLImportContext );
110cdf0e10cSrcweir
XMLEmbeddedObjectImportContext_Impl(SvXMLImport & rImport,sal_uInt16 nPrfx,const OUString & rLName,const Reference<XDocumentHandler> & rHandler)111cdf0e10cSrcweir XMLEmbeddedObjectImportContext_Impl::XMLEmbeddedObjectImportContext_Impl(
112cdf0e10cSrcweir SvXMLImport& rImport, sal_uInt16 nPrfx,
113cdf0e10cSrcweir const OUString& rLName,
114cdf0e10cSrcweir const Reference< XDocumentHandler >& rHandler ) :
115cdf0e10cSrcweir SvXMLImportContext( rImport, nPrfx, rLName ),
116cdf0e10cSrcweir xHandler( rHandler )
117cdf0e10cSrcweir {
118cdf0e10cSrcweir }
119cdf0e10cSrcweir
~XMLEmbeddedObjectImportContext_Impl()120cdf0e10cSrcweir XMLEmbeddedObjectImportContext_Impl::~XMLEmbeddedObjectImportContext_Impl()
121cdf0e10cSrcweir {
122cdf0e10cSrcweir }
123cdf0e10cSrcweir
CreateChildContext(sal_uInt16 nPrefix,const OUString & rLocalName,const Reference<XAttributeList> &)124cdf0e10cSrcweir SvXMLImportContext *XMLEmbeddedObjectImportContext_Impl::CreateChildContext(
125cdf0e10cSrcweir sal_uInt16 nPrefix,
126cdf0e10cSrcweir const OUString& rLocalName,
127cdf0e10cSrcweir const Reference< XAttributeList >& )
128cdf0e10cSrcweir {
129cdf0e10cSrcweir return new XMLEmbeddedObjectImportContext_Impl( GetImport(),
130cdf0e10cSrcweir nPrefix, rLocalName,
131cdf0e10cSrcweir xHandler );
132cdf0e10cSrcweir }
133cdf0e10cSrcweir
StartElement(const Reference<XAttributeList> & xAttrList)134cdf0e10cSrcweir void XMLEmbeddedObjectImportContext_Impl::StartElement(
135cdf0e10cSrcweir const Reference< XAttributeList >& xAttrList )
136cdf0e10cSrcweir {
137cdf0e10cSrcweir xHandler->startElement( GetImport().GetNamespaceMap().GetQNameByKey(
138cdf0e10cSrcweir GetPrefix(), GetLocalName() ),
139cdf0e10cSrcweir xAttrList );
140cdf0e10cSrcweir }
141cdf0e10cSrcweir
EndElement()142cdf0e10cSrcweir void XMLEmbeddedObjectImportContext_Impl::EndElement()
143cdf0e10cSrcweir {
144cdf0e10cSrcweir xHandler->endElement( GetImport().GetNamespaceMap().GetQNameByKey(
145cdf0e10cSrcweir GetPrefix(), GetLocalName() ) );
146cdf0e10cSrcweir }
147cdf0e10cSrcweir
Characters(const OUString & rChars)148cdf0e10cSrcweir void XMLEmbeddedObjectImportContext_Impl::Characters( const OUString& rChars )
149cdf0e10cSrcweir {
150cdf0e10cSrcweir xHandler->characters( rChars );
151cdf0e10cSrcweir }
152cdf0e10cSrcweir
153cdf0e10cSrcweir //-----------------------------------------------------------------------------
154cdf0e10cSrcweir
155cdf0e10cSrcweir TYPEINIT1( XMLEmbeddedObjectImportContext, SvXMLImportContext );
156cdf0e10cSrcweir
SetComponent(Reference<XComponent> & rComp)157cdf0e10cSrcweir sal_Bool XMLEmbeddedObjectImportContext::SetComponent(
158cdf0e10cSrcweir Reference< XComponent >& rComp )
159cdf0e10cSrcweir {
160cdf0e10cSrcweir if( !rComp.is() || !sFilterService.getLength() )
161cdf0e10cSrcweir return sal_False;
162cdf0e10cSrcweir
163cdf0e10cSrcweir
164cdf0e10cSrcweir Sequence<Any> aArgs( 0 );
165cdf0e10cSrcweir
166cdf0e10cSrcweir // #110680#
167cdf0e10cSrcweir // Reference< XMultiServiceFactory > xServiceFactory = comphelper::getProcessServiceFactory();
168cdf0e10cSrcweir Reference< XMultiServiceFactory > xServiceFactory = GetImport().getServiceFactory();
169cdf0e10cSrcweir
170cdf0e10cSrcweir xHandler = Reference < XDocumentHandler >(
171cdf0e10cSrcweir xServiceFactory->createInstanceWithArguments( sFilterService, aArgs),
172cdf0e10cSrcweir UNO_QUERY);
173cdf0e10cSrcweir
174cdf0e10cSrcweir if( !xHandler.is() )
175cdf0e10cSrcweir return sal_False;
176cdf0e10cSrcweir
177cdf0e10cSrcweir try
178cdf0e10cSrcweir {
179cdf0e10cSrcweir Reference < XModifiable2 > xModifiable2( rComp, UNO_QUERY_THROW );
180cdf0e10cSrcweir xModifiable2->disableSetModified();
181cdf0e10cSrcweir }
182cdf0e10cSrcweir catch( Exception& )
183cdf0e10cSrcweir {
184cdf0e10cSrcweir }
185cdf0e10cSrcweir
186cdf0e10cSrcweir Reference < XImporter > xImporter( xHandler, UNO_QUERY );
187cdf0e10cSrcweir xImporter->setTargetDocument( rComp );
188cdf0e10cSrcweir
189cdf0e10cSrcweir xComp = rComp; // keep ref to component only if there is a handler
190cdf0e10cSrcweir
191cdf0e10cSrcweir return sal_True;
192cdf0e10cSrcweir }
193cdf0e10cSrcweir
XMLEmbeddedObjectImportContext(SvXMLImport & rImport,sal_uInt16 nPrfx,const OUString & rLName,const Reference<XAttributeList> & xAttrList)194cdf0e10cSrcweir XMLEmbeddedObjectImportContext::XMLEmbeddedObjectImportContext(
195cdf0e10cSrcweir SvXMLImport& rImport, sal_uInt16 nPrfx, const OUString& rLName,
196cdf0e10cSrcweir const Reference< XAttributeList >& xAttrList ) :
197cdf0e10cSrcweir SvXMLImportContext( rImport, nPrfx, rLName )
198cdf0e10cSrcweir {
199cdf0e10cSrcweir SvGlobalName aName;
200cdf0e10cSrcweir
201cdf0e10cSrcweir if( nPrfx == XML_NAMESPACE_MATH &&
202cdf0e10cSrcweir IsXMLToken( rLName, XML_MATH ) )
203cdf0e10cSrcweir {
204cdf0e10cSrcweir sFilterService = OUString( RTL_CONSTASCII_USTRINGPARAM(XML_IMPORT_FILTER_MATH) );
205cdf0e10cSrcweir aName = SvGlobalName(SO3_SM_CLASSID);
206cdf0e10cSrcweir }
207cdf0e10cSrcweir else if( nPrfx == XML_NAMESPACE_OFFICE &&
208cdf0e10cSrcweir IsXMLToken( rLName, XML_DOCUMENT ) )
209cdf0e10cSrcweir {
210cdf0e10cSrcweir OUString sMime;
211cdf0e10cSrcweir
212cdf0e10cSrcweir sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
213cdf0e10cSrcweir for( sal_Int16 i=0; i < nAttrCount; i++ )
214cdf0e10cSrcweir {
215cdf0e10cSrcweir const OUString& rAttrName = xAttrList->getNameByIndex( i );
216cdf0e10cSrcweir OUString aLocalName;
217cdf0e10cSrcweir sal_uInt16 nPrefix = GetImport().GetNamespaceMap().GetKeyByAttrName( rAttrName, &aLocalName );
218cdf0e10cSrcweir if( nPrefix == XML_NAMESPACE_OFFICE &&
219cdf0e10cSrcweir IsXMLToken( aLocalName, XML_MIMETYPE ) )
220cdf0e10cSrcweir {
221cdf0e10cSrcweir sMime = xAttrList->getValueByIndex( i );
222cdf0e10cSrcweir break;
223cdf0e10cSrcweir }
224cdf0e10cSrcweir }
225cdf0e10cSrcweir
226cdf0e10cSrcweir OUString sClass;
227cdf0e10cSrcweir static const char * aTmp[] =
228cdf0e10cSrcweir {
229cdf0e10cSrcweir "application/vnd.oasis.openoffice.",
230cdf0e10cSrcweir "application/x-vnd.oasis.openoffice.",
231cdf0e10cSrcweir "application/vnd.oasis.opendocument.",
232cdf0e10cSrcweir "application/x-vnd.oasis.opendocument.",
233cdf0e10cSrcweir NULL
234cdf0e10cSrcweir };
235cdf0e10cSrcweir for (int k=0; aTmp[k]; k++)
236cdf0e10cSrcweir {
237cdf0e10cSrcweir ::rtl::OUString sTmpString = ::rtl::OUString::createFromAscii(aTmp[k]);
238cdf0e10cSrcweir if( sMime.matchAsciiL( aTmp[k], sTmpString.getLength() ) )
239cdf0e10cSrcweir {
240cdf0e10cSrcweir sClass = sMime.copy( sTmpString.getLength() );
241cdf0e10cSrcweir break;
242cdf0e10cSrcweir }
243cdf0e10cSrcweir }
244cdf0e10cSrcweir
245cdf0e10cSrcweir if( sClass.getLength() )
246cdf0e10cSrcweir {
247cdf0e10cSrcweir const XMLServiceMapEntry_Impl *pEntry = aServiceMap;
248cdf0e10cSrcweir while( pEntry->eClass != XML_TOKEN_INVALID )
249cdf0e10cSrcweir {
250cdf0e10cSrcweir if( IsXMLToken( sClass, pEntry->eClass ) )
251cdf0e10cSrcweir {
252cdf0e10cSrcweir sFilterService = OUString( pEntry->sFilterService,
253cdf0e10cSrcweir pEntry->nFilterServiceLen,
254cdf0e10cSrcweir RTL_TEXTENCODING_ASCII_US );
255cdf0e10cSrcweir
256cdf0e10cSrcweir switch( pEntry->eClass )
257cdf0e10cSrcweir {
258cdf0e10cSrcweir case XML_TEXT: aName = SvGlobalName(SO3_SW_CLASSID); break;
259cdf0e10cSrcweir case XML_ONLINE_TEXT: aName = SvGlobalName(SO3_SWWEB_CLASSID); break;
260cdf0e10cSrcweir case XML_SPREADSHEET: aName = SvGlobalName(SO3_SC_CLASSID); break;
261cdf0e10cSrcweir case XML_DRAWING:
262cdf0e10cSrcweir case XML_GRAPHICS:
263cdf0e10cSrcweir case XML_IMAGE: aName = SvGlobalName(SO3_SDRAW_CLASSID); break;
264cdf0e10cSrcweir case XML_PRESENTATION: aName = SvGlobalName(SO3_SIMPRESS_CLASSID); break;
265cdf0e10cSrcweir case XML_CHART: aName = SvGlobalName(SO3_SCH_CLASSID); break;
266cdf0e10cSrcweir default:
267cdf0e10cSrcweir break;
268cdf0e10cSrcweir }
269cdf0e10cSrcweir
270cdf0e10cSrcweir break;
271cdf0e10cSrcweir }
272cdf0e10cSrcweir pEntry++;
273cdf0e10cSrcweir }
274cdf0e10cSrcweir }
275cdf0e10cSrcweir }
276cdf0e10cSrcweir
277cdf0e10cSrcweir sCLSID = aName.GetHexName();
278cdf0e10cSrcweir }
279cdf0e10cSrcweir
~XMLEmbeddedObjectImportContext()280cdf0e10cSrcweir XMLEmbeddedObjectImportContext::~XMLEmbeddedObjectImportContext()
281cdf0e10cSrcweir {
282cdf0e10cSrcweir }
283cdf0e10cSrcweir
CreateChildContext(sal_uInt16 nPrefix,const OUString & rLocalName,const Reference<XAttributeList> &)284cdf0e10cSrcweir SvXMLImportContext *XMLEmbeddedObjectImportContext::CreateChildContext(
285cdf0e10cSrcweir sal_uInt16 nPrefix, const OUString& rLocalName,
286cdf0e10cSrcweir const Reference< XAttributeList >& )
287cdf0e10cSrcweir {
288cdf0e10cSrcweir if( xHandler.is() )
289cdf0e10cSrcweir return new XMLEmbeddedObjectImportContext_Impl( GetImport(),
290cdf0e10cSrcweir nPrefix, rLocalName,
291cdf0e10cSrcweir xHandler );
292cdf0e10cSrcweir else
293cdf0e10cSrcweir return new SvXMLImportContext( GetImport(), nPrefix, rLocalName );
294cdf0e10cSrcweir }
295cdf0e10cSrcweir
StartElement(const Reference<XAttributeList> & rAttrList)296cdf0e10cSrcweir void XMLEmbeddedObjectImportContext::StartElement(
297cdf0e10cSrcweir const Reference< XAttributeList >& rAttrList )
298cdf0e10cSrcweir {
299cdf0e10cSrcweir if( xHandler.is() )
300cdf0e10cSrcweir {
301cdf0e10cSrcweir xHandler->startDocument();
302cdf0e10cSrcweir // #i34042: copy namepspace declarations
303cdf0e10cSrcweir SvXMLAttributeList *pAttrList = new SvXMLAttributeList( rAttrList );
304cdf0e10cSrcweir Reference< XAttributeList > xAttrList( pAttrList );
305cdf0e10cSrcweir const SvXMLNamespaceMap& rNamespaceMap = GetImport().GetNamespaceMap();
306cdf0e10cSrcweir sal_uInt16 nPos = rNamespaceMap.GetFirstKey();
307cdf0e10cSrcweir while( USHRT_MAX != nPos )
308cdf0e10cSrcweir {
309cdf0e10cSrcweir OUString aAttrName( rNamespaceMap.GetAttrNameByKey( nPos ) );
310cdf0e10cSrcweir if( 0 == xAttrList->getValueByName( aAttrName ).getLength() )
311cdf0e10cSrcweir {
312cdf0e10cSrcweir pAttrList->AddAttribute( aAttrName,
313cdf0e10cSrcweir rNamespaceMap.GetNameByKey( nPos ) );
314cdf0e10cSrcweir }
315cdf0e10cSrcweir nPos = rNamespaceMap.GetNextKey( nPos );
316cdf0e10cSrcweir }
317cdf0e10cSrcweir xHandler->startElement( GetImport().GetNamespaceMap().GetQNameByKey(
318cdf0e10cSrcweir GetPrefix(), GetLocalName() ),
319cdf0e10cSrcweir xAttrList );
320cdf0e10cSrcweir }
321cdf0e10cSrcweir }
322cdf0e10cSrcweir
EndElement()323cdf0e10cSrcweir void XMLEmbeddedObjectImportContext::EndElement()
324cdf0e10cSrcweir {
325cdf0e10cSrcweir if( xHandler.is() )
326cdf0e10cSrcweir {
327cdf0e10cSrcweir xHandler->endElement( GetImport().GetNamespaceMap().GetQNameByKey(
328cdf0e10cSrcweir GetPrefix(), GetLocalName() ) );
329cdf0e10cSrcweir xHandler->endDocument();
330cdf0e10cSrcweir
331cdf0e10cSrcweir
332cdf0e10cSrcweir // storing part is commented out since it should be done through the object, not the model
333cdf0e10cSrcweir // TODO/LATER: probably an object should be provided here an be stored here
334cdf0e10cSrcweir
335cdf0e10cSrcweir // // Save the object. That's required because the object should not be
336cdf0e10cSrcweir // // modified (it has been loaded just now). Setting it to unmodified
337cdf0e10cSrcweir // // only does not work, because it is then assumed that it has been
338cdf0e10cSrcweir // // stored.
339cdf0e10cSrcweir // Reference < XStorable > xStorable( xComp, UNO_QUERY );
340cdf0e10cSrcweir // if( xStorable.is() )
341cdf0e10cSrcweir // {
342cdf0e10cSrcweir // try
343cdf0e10cSrcweir // {
344cdf0e10cSrcweir // xStorable->store();
345cdf0e10cSrcweir // }
346cdf0e10cSrcweir // catch( ::com::sun::star::beans::PropertyVetoException& )
347cdf0e10cSrcweir // {
348cdf0e10cSrcweir // Sequence<OUString> aSeq( 0 );
349cdf0e10cSrcweir // GetImport().SetError( XMLERROR_FLAG_WARNING |
350cdf0e10cSrcweir // XMLERROR_API,
351cdf0e10cSrcweir // aSeq );
352cdf0e10cSrcweir // }
353cdf0e10cSrcweir // }
354cdf0e10cSrcweir
355cdf0e10cSrcweir try
356cdf0e10cSrcweir {
357cdf0e10cSrcweir Reference < XModifiable2 > xModifiable2( xComp, UNO_QUERY_THROW );
358cdf0e10cSrcweir xModifiable2->enableSetModified();
359cdf0e10cSrcweir xModifiable2->setModified( sal_True ); // trigger new replacement image generation
360cdf0e10cSrcweir }
361cdf0e10cSrcweir catch( Exception& )
362cdf0e10cSrcweir {
363cdf0e10cSrcweir }
364cdf0e10cSrcweir
365cdf0e10cSrcweir
366cdf0e10cSrcweir // // reset modifies state for the object since it has been imported
367cdf0e10cSrcweir // // completly and therfor hasn't been modified.
368cdf0e10cSrcweir // Reference < XModifiable > xModifiable( xComp, UNO_QUERY );
369cdf0e10cSrcweir // if( xModifiable.is() )
370cdf0e10cSrcweir // {
371cdf0e10cSrcweir // try
372cdf0e10cSrcweir // {
373cdf0e10cSrcweir // xModifiable->setModified( sal_False );
374cdf0e10cSrcweir // }
375cdf0e10cSrcweir // catch( ::com::sun::star::beans::PropertyVetoException& e )
376cdf0e10cSrcweir // {
377cdf0e10cSrcweir // Sequence<OUString> aSeq( 0 );
378cdf0e10cSrcweir // GetImport().SetError( XMLERROR_FLAG_WARNING |
379cdf0e10cSrcweir // XMLERROR_API,
380cdf0e10cSrcweir // aSeq );
381cdf0e10cSrcweir // }
382cdf0e10cSrcweir // }
383cdf0e10cSrcweir }
384cdf0e10cSrcweir }
385cdf0e10cSrcweir
Characters(const::rtl::OUString & rChars)386cdf0e10cSrcweir void XMLEmbeddedObjectImportContext::Characters( const ::rtl::OUString& rChars )
387cdf0e10cSrcweir {
388cdf0e10cSrcweir if( xHandler.is() )
389cdf0e10cSrcweir xHandler->characters( rChars );
390cdf0e10cSrcweir }
391cdf0e10cSrcweir
392