xref: /trunk/main/chart2/source/model/inc/XMLFilter.hxx (revision 91144cd0085a7583d2099b982122deb2184ab956)
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 #ifndef CHART2_XMLFILTER_HXX
24 #define CHART2_XMLFILTER_HXX
25 
26 #include <cppuhelper/implbase4.hxx>
27 #include <com/sun/star/beans/XPropertySet.hpp>
28 #include <com/sun/star/document/XFilter.hpp>
29 #include <com/sun/star/document/XImporter.hpp>
30 #include <com/sun/star/document/XExporter.hpp>
31 #include <com/sun/star/lang/XServiceInfo.hpp>
32 #include <com/sun/star/uno/XComponentContext.hpp>
33 #include <com/sun/star/io/XActiveDataSource.hpp>
34 #include <osl/mutex.hxx>
35 
36 // for APPHELPER_... macros
37 #include "ServiceMacros.hxx"
38 
39 namespace com { namespace sun { namespace star {
40 namespace embed
41 {
42     class XStorage;
43 }
44 namespace xml { namespace sax
45 {
46     class XParser;
47 }}
48 namespace document
49 {
50     class XGraphicObjectResolver;
51 }
52 }}}
53 
54 namespace chart
55 {
56 
57 class XMLFilter : public
58     ::cppu::WeakImplHelper4<
59         ::com::sun::star::document::XFilter,
60         ::com::sun::star::document::XExporter,
61         ::com::sun::star::document::XImporter,
62         ::com::sun::star::lang::XServiceInfo >
63 {
64 public:
65     explicit XMLFilter( ::com::sun::star::uno::Reference<
66                             ::com::sun::star::uno::XComponentContext > const & xContext );
67     virtual ~XMLFilter();
68 
69     /// establish methods for factory instantiation
70     APPHELPER_SERVICE_FACTORY_HELPER( XMLFilter )
71     /// XServiceInfo declarations
72     APPHELPER_XSERVICEINFO_DECL()
73 
74 protected:
75     // ____ XFilter ____
76     virtual sal_Bool SAL_CALL filter(
77         const ::com::sun::star::uno::Sequence<
78             ::com::sun::star::beans::PropertyValue >& aDescriptor );
79     virtual void SAL_CALL cancel();
80 
81     // ____ XImporter ____
82     virtual void SAL_CALL setTargetDocument(
83         const ::com::sun::star::uno::Reference<
84             ::com::sun::star::lang::XComponent >& Document );
85 
86     // ____ XExporter ____
87     virtual void SAL_CALL setSourceDocument(
88         const ::com::sun::star::uno::Reference<
89             ::com::sun::star::lang::XComponent >& Document );
90 
getDocumentHandler() const91     inline ::rtl::OUString getDocumentHandler() const { return m_sDocumentHandler; }
setDocumentHandler(const::rtl::OUString & _sDocumentHandler)92     inline void setDocumentHandler(const ::rtl::OUString& _sDocumentHandler) { m_sDocumentHandler = _sDocumentHandler; }
93 
94     virtual ::rtl::OUString getMediaType(bool _bOasis);
95 
96     /** fills the oasis flag only when a filtername was set
97     *
98     * \param _rMediaDescriptor
99     * \param _rOutOASIS
100     */
101     virtual void isOasisFormat(const ::com::sun::star::uno::Sequence<
102             ::com::sun::star::beans::PropertyValue >& _rMediaDescriptor, bool & _rOutOASIS );
103 
104 private:
105     // methods
106 
107     /// @return a warning code, or 0 for successful operation
108     sal_Int32 impl_Import( const ::com::sun::star::uno::Reference<
109                                ::com::sun::star::lang::XComponent > & xDocumentComp,
110                            const ::com::sun::star::uno::Sequence<
111                                ::com::sun::star::beans::PropertyValue > & aMediaDescriptor );
112     /// @return a warning code, or 0 for successful operation
113     sal_Int32 impl_ImportStream(
114         const ::rtl::OUString & rStreamName,
115         const ::rtl::OUString & rServiceName,
116         const ::com::sun::star::uno::Reference<
117             ::com::sun::star::embed::XStorage > & xStorage,
118         const ::com::sun::star::uno::Reference<
119             ::com::sun::star::xml::sax::XParser > & xParser,
120         const ::com::sun::star::uno::Reference<
121             ::com::sun::star::lang::XMultiComponentFactory > & xFactory,
122         const ::com::sun::star::uno::Reference<
123             ::com::sun::star::document::XGraphicObjectResolver > & xGraphicObjectResolver,
124         ::com::sun::star::uno::Reference<
125             ::com::sun::star::beans::XPropertySet >& xPropSet );
126 
127     /// @return a warning code, or 0 for successful operation
128     sal_Int32 impl_Export( const ::com::sun::star::uno::Reference<
129                                ::com::sun::star::lang::XComponent > & xDocumentComp,
130                            const ::com::sun::star::uno::Sequence<
131                                ::com::sun::star::beans::PropertyValue > & aMediaDescriptor );
132     /// @return a warning code, or 0 for successful operation
133     sal_Int32 impl_ExportStream(
134         const ::rtl::OUString & rStreamName,
135         const ::rtl::OUString & rServiceName,
136         const ::com::sun::star::uno::Reference<
137             ::com::sun::star::embed::XStorage > & xStorage,
138         const ::com::sun::star::uno::Reference<
139             ::com::sun::star::io::XActiveDataSource >& xActiveDataSource,
140         const ::com::sun::star::uno::Reference<
141             ::com::sun::star::lang::XMultiServiceFactory > & xFactory,
142         const ::com::sun::star::uno::Sequence<
143             ::com::sun::star::uno::Any > & rFilterProperties );
144 
145     // members
146     ::com::sun::star::uno::Reference<
147         ::com::sun::star::uno::XComponentContext > m_xContext;
148     ::com::sun::star::uno::Reference<
149         ::com::sun::star::lang::XComponent >       m_xTargetDoc;
150     ::com::sun::star::uno::Reference<
151         ::com::sun::star::lang::XComponent >       m_xSourceDoc;
152     ::rtl::OUString                                m_sDocumentHandler; // when set it will be set as doc handler
153 
154     volatile bool                                  m_bCancelOperation;
155     ::osl::Mutex                                   m_aMutex;
156 };
157 
158 // =============================================================================
159 class XMLReportFilterHelper : public XMLFilter
160 {
161     virtual void isOasisFormat(const ::com::sun::star::uno::Sequence<
162                                     ::com::sun::star::beans::PropertyValue >& _rMediaDescriptor, bool & _rOutOASIS );
163 public:
XMLReportFilterHelper(::com::sun::star::uno::Reference<::com::sun::star::uno::XComponentContext> const & _xContext)164     explicit XMLReportFilterHelper( ::com::sun::star::uno::Reference<
165                             ::com::sun::star::uno::XComponentContext > const & _xContext )
166                             :XMLFilter(_xContext)
167     {}
168     /// establish methods for factory instantiation
create(::com::sun::star::uno::Reference<::com::sun::star::uno::XComponentContext> const & xContext)169     static ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL   create(
170         ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext > const & xContext)
171     {
172         return (::cppu::OWeakObject *)new XMLReportFilterHelper( xContext );
173     }
getImplementationName_Static()174     static ::rtl::OUString getImplementationName_Static()
175     {
176         return ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.comp.chart2.report.XMLFilter" ));
177     }
178 protected:
179     virtual ::rtl::OUString SAL_CALL
getImplementationName()180         getImplementationName()
181     {
182         return getImplementationName_Static();
183     }
184     // ____ XImporter ____
setTargetDocument(const::com::sun::star::uno::Reference<::com::sun::star::lang::XComponent> & Document)185     virtual void SAL_CALL setTargetDocument(
186         const ::com::sun::star::uno::Reference<
187             ::com::sun::star::lang::XComponent >& Document )
188     {
189         setDocumentHandler(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.comp.report.ImportDocumentHandler")));
190         XMLFilter::setTargetDocument(Document);
191     }
192 
193     // ____ XExporter ____
setSourceDocument(const::com::sun::star::uno::Reference<::com::sun::star::lang::XComponent> & Document)194     virtual void SAL_CALL setSourceDocument(
195         const ::com::sun::star::uno::Reference<
196             ::com::sun::star::lang::XComponent >& Document )
197     {
198         setDocumentHandler(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.comp.report.ExportDocumentHandler")));
199         XMLFilter::setSourceDocument(Document);
200     }
201 
202     virtual ::rtl::OUString getMediaType(bool _bOasis);
203 };
204 
205 } //  namespace chart
206 
207 // CHART2_XMLFILTER_HXX
208 #endif
209