xref: /AOO42X/main/xmloff/source/core/XMLEmbeddedObjectImportContext.cxx (revision b1c5455db1639c48e26c568e4fa7ee78ca5d60ee)
163bba73cSAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
363bba73cSAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
463bba73cSAndrew Rist  * or more contributor license agreements.  See the NOTICE file
563bba73cSAndrew Rist  * distributed with this work for additional information
663bba73cSAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
763bba73cSAndrew Rist  * to you under the Apache License, Version 2.0 (the
863bba73cSAndrew Rist  * "License"); you may not use this file except in compliance
963bba73cSAndrew Rist  * with the License.  You may obtain a copy of the License at
10cdf0e10cSrcweir  *
1163bba73cSAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12cdf0e10cSrcweir  *
1363bba73cSAndrew Rist  * Unless required by applicable law or agreed to in writing,
1463bba73cSAndrew Rist  * software distributed under the License is distributed on an
1563bba73cSAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
1663bba73cSAndrew Rist  * KIND, either express or implied.  See the License for the
1763bba73cSAndrew Rist  * specific language governing permissions and limitations
1863bba73cSAndrew Rist  * under the License.
19cdf0e10cSrcweir  *
2063bba73cSAndrew Rist  *************************************************************/
2163bba73cSAndrew Rist 
2263bba73cSAndrew 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();
302*d2b26721Smseidel         // #i34042: copy namespace 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
367*d2b26721Smseidel //      // completely and therefor 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 }
391