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