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 #ifndef DBA_XMLEXPORT_HXX 25 #define DBA_XMLEXPORT_HXX 26 27 #ifndef _COM_SUN_STAR_CONTAINER_XNAMED_HPP_ 28 #include <com/sun/star/container/XNamed.hpp> 29 #endif 30 #ifndef _COM_SUN_STAR_DOCUMENT_XFILTER_HPP_ 31 #include <com/sun/star/document/XFilter.hpp> 32 #endif 33 #ifndef _COM_SUN_STAR_DOCUMENT_XIMPORTER_HPP_ 34 #include <com/sun/star/document/XImporter.hpp> 35 #endif 36 #ifndef _COM_SUN_STAR_DOCUMENT_XEXPORTER_HPP_ 37 #include <com/sun/star/document/XExporter.hpp> 38 #endif 39 #ifndef _COM_SUN_STAR_LANG_XINITIALIZATION_HPP_ 40 #include <com/sun/star/lang/XInitialization.hpp> 41 #endif 42 #ifndef _COM_SUN_STAR_LANG_XSERVICEINFO_HPP_ 43 #include <com/sun/star/lang/XServiceInfo.hpp> 44 #endif 45 #ifndef _COM_SUN_STAR_BEANS_XPROPERTYSET_HPP_ 46 #include <com/sun/star/beans/XPropertySet.hpp> 47 #endif 48 #ifndef _COM_SUN_STAR_LANG_XCOMPONENT_HPP_ 49 #include <com/sun/star/lang/XComponent.hpp> 50 #endif 51 #ifndef _CPPUHELPER_IMPLBASE1_HXX_ 52 #include <cppuhelper/implbase1.hxx> 53 #endif 54 #ifndef _CPPUHELPER_IMPLBASE5_HXX_ 55 #include <cppuhelper/implbase5.hxx> 56 #endif 57 #ifndef _COM_SUN_STAR_LANG_XMULTISERVICEFACTORY_HPP_ 58 #include <com/sun/star/lang/XMultiServiceFactory.hpp> 59 #endif 60 #ifndef _COM_SUN_STAR_IO_XACTIVEDATASOURCE_HPP_ 61 #include <com/sun/star/io/XActiveDataSource.hpp> 62 #endif 63 #ifndef _OSL_DIAGNOSE_H_ 64 #include <osl/diagnose.h> 65 #endif 66 #ifndef _UNOTOOLS_TEMPFILE_HXX 67 #include <unotools/tempfile.hxx> 68 #endif 69 #ifndef _UNOTOOLS_LOCALFILEHELPER_HXX 70 #include <unotools/localfilehelper.hxx> 71 #endif 72 #ifndef _UNTOOLS_UCBSTREAMHELPER_HXX 73 #include <unotools/ucbstreamhelper.hxx> 74 #endif 75 #ifndef _XMLOFF_XMLEXP_HXX 76 #include <xmloff/xmlexp.hxx> 77 #endif 78 #ifndef _XMLOFF_XMLIMP_HXX 79 #include <xmloff/xmlimp.hxx> 80 #endif 81 #ifndef _DBASHARED_APITOOLS_HXX_ 82 #include "apitools.hxx" 83 #endif 84 #include "dsntypes.hxx" 85 #ifndef _COMPHELPER_STLTYPES_HXX_ 86 #include <comphelper/stl_types.hxx> 87 #endif 88 #ifndef _COM_SUN_STAR_SDBCX_XCOLUMNSSUPPLIER_HPP_ 89 #include <com/sun/star/sdbcx/XColumnsSupplier.hpp> 90 #endif 91 92 #include <memory> 93 94 namespace dbaxml 95 { 96 using namespace ::xmloff::token; 97 using namespace ::com::sun::star::uno; 98 using namespace ::com::sun::star::container; 99 using namespace ::com::sun::star::lang; 100 using namespace ::com::sun::star::beans; 101 using namespace ::com::sun::star::document; 102 using namespace ::com::sun::star::sdbcx; 103 using namespace ::com::sun::star::text; 104 using namespace ::com::sun::star::io; 105 using namespace ::com::sun::star::xml::sax; 106 // ------------- 107 // - ODBExport - 108 // ------------- 109 #define PROGRESS_BAR_STEP 20 110 111 class ODBExport : public SvXMLExport 112 { 113 typedef ::std::map< ::xmloff::token::XMLTokenEnum, ::rtl::OUString> TSettingsMap; 114 115 typedef ::std::pair< ::rtl::OUString ,::rtl::OUString> TStringPair; 116 struct TDelimiter 117 { 118 ::rtl::OUString sText; 119 ::rtl::OUString sField; 120 ::rtl::OUString sDecimal; 121 ::rtl::OUString sThousand; 122 bool bUsed; 123 TDelimiterdbaxml::ODBExport::TDelimiter124 TDelimiter() : bUsed( false ) { } 125 }; 126 typedef ::std::map< Reference<XPropertySet> ,::rtl::OUString > TPropertyStyleMap; 127 typedef ::std::map< Reference<XPropertySet> ,Reference<XPropertySet> > TTableColumnMap; 128 129 struct TypedPropertyValue 130 { 131 ::rtl::OUString Name; 132 ::com::sun::star::uno::Type Type; 133 ::com::sun::star::uno::Any Value; 134 TypedPropertyValuedbaxml::ODBExport::TypedPropertyValue135 TypedPropertyValue( const ::rtl::OUString& _name, const ::com::sun::star::uno::Type& _type, const ::com::sun::star::uno::Any& _value ) 136 :Name( _name ) 137 ,Type( _type ) 138 ,Value( _value ) 139 { 140 } 141 }; 142 143 ::std::auto_ptr< TStringPair > m_aAutoIncrement; 144 ::std::auto_ptr< TDelimiter > m_aDelimiter; 145 ::std::vector< TypedPropertyValue > m_aDataSourceSettings; 146 ::std::vector< XMLPropertyState > m_aCurrentPropertyStates; 147 TPropertyStyleMap m_aAutoStyleNames; 148 TPropertyStyleMap m_aCellAutoStyleNames; 149 TPropertyStyleMap m_aRowAutoStyleNames; 150 TTableColumnMap m_aTableDummyColumns; 151 ::rtl::OUString m_sCharSet; 152 UniReference < SvXMLExportPropertyMapper> m_xExportHelper; 153 UniReference < SvXMLExportPropertyMapper> m_xColumnExportHelper; 154 UniReference < SvXMLExportPropertyMapper> m_xCellExportHelper; 155 UniReference < SvXMLExportPropertyMapper> m_xRowExportHelper; 156 157 mutable UniReference < XMLPropertySetMapper > m_xTableStylesPropertySetMapper; 158 mutable UniReference < XMLPropertySetMapper > m_xColumnStylesPropertySetMapper; 159 mutable UniReference < XMLPropertySetMapper > m_xCellStylesPropertySetMapper; 160 mutable UniReference < XMLPropertySetMapper > m_xRowStylesPropertySetMapper; 161 162 Reference<XPropertySet> m_xDataSource; 163 ::dbaccess::ODsnTypeCollection m_aTypeCollection; 164 sal_Bool m_bAllreadyFilled; 165 166 void exportDataSource(); 167 void exportConnectionData(); 168 void exportDriverSettings(const TSettingsMap& _aSettings); 169 void exportApplicationConnectionSettings(const TSettingsMap& _aSettings); 170 void exportLogin(); 171 void exportSequence(const Sequence< ::rtl::OUString>& _aValue 172 ,::xmloff::token::XMLTokenEnum _eTokenFilter 173 ,::xmloff::token::XMLTokenEnum _eTokenType); 174 void exportDelimiter(); 175 void exportAutoIncrement(); 176 void exportCharSet(); 177 void exportDataSourceSettings(); 178 void exportForms(); 179 void exportReports(); 180 void exportQueries(sal_Bool _bExportContext); 181 void exportTables(sal_Bool _bExportContext); 182 void exportStyleName(XPropertySet* _xProp,SvXMLAttributeList& _rAtt); 183 void exportStyleName(const ::xmloff::token::XMLTokenEnum _eToken,const Reference<XPropertySet>& _xProp,SvXMLAttributeList& _rAtt,TPropertyStyleMap& _rMap); 184 void exportCollection(const Reference< XNameAccess >& _xCollection 185 ,enum ::xmloff::token::XMLTokenEnum _eComponents 186 ,enum ::xmloff::token::XMLTokenEnum _eSubComponents 187 ,sal_Bool _bExportContext 188 ,const ::comphelper::mem_fun1_t<ODBExport,XPropertySet* >& _aMemFunc 189 ); 190 void exportComponent(XPropertySet* _xProp); 191 void exportQuery(XPropertySet* _xProp); 192 void exportTable(XPropertySet* _xProp); 193 void exportFilter(XPropertySet* _xProp 194 ,const ::rtl::OUString& _sProp 195 ,enum ::xmloff::token::XMLTokenEnum _eStatementType); 196 void exportTableName(XPropertySet* _xProp,sal_Bool _bUpdate); 197 void exportAutoStyle(XPropertySet* _xProp); 198 void exportColumns(const Reference<XColumnsSupplier>& _xColSup); 199 void collectComponentStyles(); 200 201 ::rtl::OUString implConvertAny(const Any& _rValue); 202 203 UniReference < XMLPropertySetMapper > GetTableStylesPropertySetMapper() const; 204 205 private: 206 ODBExport(); 207 protected: 208 209 virtual void _ExportStyles( sal_Bool bUsed ); 210 virtual void _ExportAutoStyles(); 211 virtual void _ExportContent(); 212 virtual void _ExportMasterStyles(); 213 virtual void _ExportFontDecls(); 214 virtual sal_uInt32 exportDoc( enum ::xmloff::token::XMLTokenEnum eClass ); 215 virtual SvXMLAutoStylePoolP* CreateAutoStylePool(); 216 217 virtual void GetViewSettings(com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue>& aProps); 218 virtual void GetConfigurationSettings(com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue>& aProps); 219 ~ODBExport()220 virtual ~ODBExport(){}; 221 public: 222 223 ODBExport(const Reference< XMultiServiceFactory >& _rxMSF, sal_uInt16 nExportFlag = EXPORT_CONTENT | EXPORT_AUTOSTYLES | EXPORT_PRETTY | EXPORT_FONTDECLS | EXPORT_SCRIPTS ); 224 // XServiceInfo 225 DECLARE_SERVICE_INFO_STATIC( ); 226 227 UniReference < XMLPropertySetMapper > GetColumnStylesPropertySetMapper() const; 228 UniReference < XMLPropertySetMapper > GetCellStylesPropertySetMapper() const; 229 230 // XExporter 231 virtual void SAL_CALL setSourceDocument( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XComponent >& xDoc ) throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException); 232 getDataSource() const233 inline Reference<XPropertySet> getDataSource() const { return m_xDataSource; } 234 }; 235 236 // ----------------------------------------------------------------------------- 237 } // dbaxml 238 // ----------------------------------------------------------------------------- 239 #endif // DBA_XMLEXPORT_HXX 240