xref: /AOO41X/main/framework/source/xml/imagesconfiguration.cxx (revision d0626817eadca72252d341a27a0d42c4a6bf2287)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_framework.hxx"
26 
27 #include <xml/imagesconfiguration.hxx>
28 #include <services.h>
29 
30 #include <xml/imagesdocumenthandler.hxx>
31 #include <xml/saxnamespacefilter.hxx>
32 
33 //_________________________________________________________________________________________________________________
34 //  interface includes
35 //_________________________________________________________________________________________________________________
36 #include <com/sun/star/xml/sax/XParser.hpp>
37 #include <com/sun/star/io/XActiveDataSource.hpp>
38 #include <com/sun/star/io/XInputStream.hpp>
39 #include <com/sun/star/lang/XMultiServiceFactory.hpp>
40 
41 //_________________________________________________________________________________________________________________
42 //  other includes
43 //_________________________________________________________________________________________________________________
44 
45 #ifndef _UNOTOOLS_PROCESSFACTORY_HXX
46 #include <comphelper/processfactory.hxx>
47 #endif
48 #include <unotools/streamwrap.hxx>
49 #include <tools/debug.hxx>
50 
51 //_________________________________________________________________________________________________________________
52 //  namespace
53 //_________________________________________________________________________________________________________________
54 
55 using namespace ::com::sun::star::uno;
56 using namespace ::com::sun::star::xml::sax;
57 using namespace ::com::sun::star::lang;
58 using namespace ::com::sun::star::io;
59 
60 
61 namespace framework
62 {
63 
64 SV_IMPL_PTRARR( ImageItemListDescriptor, ImageItemDescriptorPtr );
65 SV_IMPL_PTRARR( ExternalImageItemListDescriptor, ExternalImageItemDescriptorPtr );
66 SV_IMPL_PTRARR( ImageListDescriptor, ImageListItemDescriptorPtr );
67 
GetSaxParser(const::com::sun::star::uno::Reference<::com::sun::star::lang::XMultiServiceFactory> & xServiceFactory)68 static Reference< XParser > GetSaxParser(
69     // #110897#
70     const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& xServiceFactory
71     )
72 {
73     //Reference< XMultiServiceFactory > xServiceManager = ::comphelper::getProcessServiceFactory();
74     //return Reference< XParser >( xServiceManager->createInstance( SERVICENAME_SAXPARSER), UNO_QUERY);
75     return Reference< XParser >( xServiceFactory->createInstance( SERVICENAME_SAXPARSER), UNO_QUERY);
76 }
77 
GetSaxWriter(const::com::sun::star::uno::Reference<::com::sun::star::lang::XMultiServiceFactory> & xServiceFactory)78 static Reference< XDocumentHandler > GetSaxWriter(
79     // #110897#
80     const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& xServiceFactory
81     )
82 {
83     //Reference< XMultiServiceFactory > xServiceManager = ::comphelper::getProcessServiceFactory();
84     //return Reference< XDocumentHandler >( xServiceManager->createInstance( SERVICENAME_SAXWRITER), UNO_QUERY) ;
85     return Reference< XDocumentHandler >( xServiceFactory->createInstance( SERVICENAME_SAXWRITER), UNO_QUERY) ;
86 }
87 
88 // #110897#
LoadImages(const::com::sun::star::uno::Reference<::com::sun::star::lang::XMultiServiceFactory> & xServiceFactory,SvStream & rInStream,ImageListsDescriptor & aItems)89 sal_Bool ImagesConfiguration::LoadImages(
90     const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& xServiceFactory,
91     SvStream& rInStream, ImageListsDescriptor& aItems )
92 {
93     Reference< XParser > xParser( GetSaxParser( xServiceFactory ) );
94     Reference< XInputStream > xInputStream(
95                                 (::cppu::OWeakObject *)new utl::OInputStreamWrapper( rInStream ),
96                                 UNO_QUERY );
97 
98     // connect stream to input stream to the parser
99     InputSource aInputSource;
100 
101     aInputSource.aInputStream = xInputStream;
102 
103     // create namespace filter and set document handler inside to support xml namespaces
104     Reference< XDocumentHandler > xDocHandler( new OReadImagesDocumentHandler( aItems ));
105     Reference< XDocumentHandler > xFilter( new SaxNamespaceFilter( xDocHandler ));
106 
107     // connect parser and filter
108     xParser->setDocumentHandler( xFilter );
109 
110     try
111     {
112         xParser->parseStream( aInputSource );
113         return sal_True;
114     }
115     catch ( RuntimeException& )
116     {
117         return sal_False;
118     }
119     catch( SAXException& )
120     {
121         return sal_False;
122     }
123     catch( ::com::sun::star::io::IOException& )
124     {
125         return sal_False;
126     }
127 }
128 
129 
130 // #110897#
StoreImages(const::com::sun::star::uno::Reference<::com::sun::star::lang::XMultiServiceFactory> & xServiceFactory,SvStream & rOutStream,const ImageListsDescriptor & aItems)131 sal_Bool ImagesConfiguration::StoreImages(
132     const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& xServiceFactory,
133     SvStream& rOutStream, const ImageListsDescriptor& aItems )
134 {
135     Reference< XDocumentHandler > xWriter( GetSaxWriter( xServiceFactory ) );
136 
137     Reference< XOutputStream > xOutputStream(
138                                 (::cppu::OWeakObject *)new utl::OOutputStreamWrapper( rOutStream ),
139                                 UNO_QUERY );
140 
141     Reference< ::com::sun::star::io::XActiveDataSource> xDataSource( xWriter , UNO_QUERY );
142     xDataSource->setOutputStream( xOutputStream );
143 
144     try
145     {
146         OWriteImagesDocumentHandler aWriteImagesDocumentHandler( aItems, xWriter );
147         aWriteImagesDocumentHandler.WriteImagesDocument();
148         return sal_True;
149     }
150     catch ( RuntimeException& )
151     {
152         return sal_False;
153     }
154     catch ( SAXException& )
155     {
156         return sal_False;
157     }
158     catch ( ::com::sun::star::io::IOException& )
159     {
160         return sal_False;
161     }
162 }
163 
LoadImages(const::com::sun::star::uno::Reference<::com::sun::star::lang::XMultiServiceFactory> & xServiceFactory,const::com::sun::star::uno::Reference<::com::sun::star::io::XInputStream> & rInputStream,ImageListsDescriptor & rItems)164 sal_Bool ImagesConfiguration::LoadImages(
165     const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& xServiceFactory,
166     const ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream >& rInputStream,
167     ImageListsDescriptor& rItems )
168 {
169     Reference< XParser > xParser( GetSaxParser( xServiceFactory ) );
170 
171     // connect stream to input stream to the parser
172     InputSource aInputSource;
173 
174     aInputSource.aInputStream = rInputStream;
175 
176     // create namespace filter and set document handler inside to support xml namespaces
177     Reference< XDocumentHandler > xDocHandler( new OReadImagesDocumentHandler( rItems ));
178     Reference< XDocumentHandler > xFilter( new SaxNamespaceFilter( xDocHandler ));
179 
180     // connect parser and filter
181     xParser->setDocumentHandler( xFilter );
182 
183     try
184     {
185         xParser->parseStream( aInputSource );
186         return sal_True;
187     }
188     catch ( RuntimeException& )
189     {
190         return sal_False;
191     }
192     catch( SAXException& )
193     {
194         return sal_False;
195     }
196     catch( ::com::sun::star::io::IOException& )
197     {
198         return sal_False;
199     }
200 }
201 
StoreImages(const::com::sun::star::uno::Reference<::com::sun::star::lang::XMultiServiceFactory> & xServiceFactory,const::com::sun::star::uno::Reference<::com::sun::star::io::XOutputStream> & rOutputStream,const ImageListsDescriptor & rItems)202 sal_Bool ImagesConfiguration::StoreImages(
203     const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& xServiceFactory,
204     const ::com::sun::star::uno::Reference< ::com::sun::star::io::XOutputStream >& rOutputStream,
205     const ImageListsDescriptor& rItems )
206 {
207     Reference< XDocumentHandler > xWriter( GetSaxWriter( xServiceFactory ) );
208 
209     Reference< ::com::sun::star::io::XActiveDataSource> xDataSource( xWriter , UNO_QUERY );
210     xDataSource->setOutputStream( rOutputStream );
211 
212     try
213     {
214         OWriteImagesDocumentHandler aWriteImagesDocumentHandler( rItems, xWriter );
215         aWriteImagesDocumentHandler.WriteImagesDocument();
216         return sal_True;
217     }
218     catch ( RuntimeException& )
219     {
220         return sal_False;
221     }
222     catch ( SAXException& )
223     {
224         return sal_False;
225     }
226     catch ( ::com::sun::star::io::IOException& )
227     {
228         return sal_False;
229     }
230 }
231 
232 }
233 
234