|  | /************************************************************** | 
|  | * | 
|  | * Licensed to the Apache Software Foundation (ASF) under one | 
|  | * or more contributor license agreements.  See the NOTICE file | 
|  | * distributed with this work for additional information | 
|  | * regarding copyright ownership.  The ASF licenses this file | 
|  | * to you under the Apache License, Version 2.0 (the | 
|  | * "License"); you may not use this file except in compliance | 
|  | * with the License.  You may obtain a copy of the License at | 
|  | * | 
|  | *   http://www.apache.org/licenses/LICENSE-2.0 | 
|  | * | 
|  | * Unless required by applicable law or agreed to in writing, | 
|  | * software distributed under the License is distributed on an | 
|  | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | 
|  | * KIND, either express or implied.  See the License for the | 
|  | * specific language governing permissions and limitations | 
|  | * under the License. | 
|  | * | 
|  | *************************************************************/ | 
|  |  | 
|  |  | 
|  | #ifndef DBAUI_TOKENWRITER_HXX | 
|  | #define DBAUI_TOKENWRITER_HXX | 
|  |  | 
|  | #include "DExport.hxx" | 
|  | #include "moduledbu.hxx" | 
|  | #include "commontypes.hxx" | 
|  |  | 
|  | #include <com/sun/star/awt/FontDescriptor.hpp> | 
|  | #include <com/sun/star/sdbc/XResultSet.hpp> | 
|  | #include <com/sun/star/sdbc/XResultSetUpdate.hpp> | 
|  | #include <com/sun/star/sdbc/XRow.hpp> | 
|  | #include <com/sun/star/lang/XMultiServiceFactory.hpp> | 
|  | #include <com/sun/star/lang/XEventListener.hpp> | 
|  | #include <com/sun/star/frame/XModel.hpp> | 
|  | #include <com/sun/star/beans/PropertyValue.hpp> | 
|  | #include <com/sun/star/sdb/CommandType.hpp> | 
|  | #include <com/sun/star/sdbcx/XRowLocate.hpp> | 
|  |  | 
|  | #include <cppuhelper/implbase1.hxx> | 
|  | #include <tools/stream.hxx> | 
|  | #include <svx/dataaccessdescriptor.hxx> | 
|  |  | 
|  | #include <memory> | 
|  |  | 
|  | namespace com { namespace sun { namespace star { | 
|  | namespace sdbc{ | 
|  | class XRowUpdate; | 
|  | } | 
|  | }}} | 
|  |  | 
|  | namespace dbaui | 
|  | { | 
|  | // ========================================================================= | 
|  | // ODatabaseImportExport Basisklasse f"ur Import/Export | 
|  | // ========================================================================= | 
|  | class ODatabaseExport; | 
|  | typedef ::cppu::WeakImplHelper1< ::com::sun::star::lang::XEventListener> ODatabaseImportExport_BASE; | 
|  | class ODatabaseImportExport : public ODatabaseImportExport_BASE | 
|  | { | 
|  | private: | 
|  | void impl_initializeRowMember_throw(); | 
|  |  | 
|  | protected: | 
|  | ::com::sun::star::lang::Locale	                                                m_aLocale; | 
|  | ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any>					m_aSelection; | 
|  | sal_Bool                                                                        m_bBookmarkSelection; | 
|  | SvStream*																		m_pStream; | 
|  | ::com::sun::star::awt::FontDescriptor											m_aFont; | 
|  | ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >		m_xObject;		// table/query | 
|  | SharedConnection                                                                m_xConnection; | 
|  | ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSet >			m_xResultSet; | 
|  | ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XRow >				m_xRow; | 
|  | ::com::sun::star::uno::Reference< ::com::sun::star::sdbcx::XRowLocate >         m_xRowLocate; | 
|  | ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSetMetaData >	m_xResultSetMetaData; | 
|  | ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexAccess >   m_xRowSetColumns; | 
|  | ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatter > 	m_xFormatter;	// a number formatter working with the connection's NumberFormatsSupplier | 
|  | ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory> m_xFactory; | 
|  |  | 
|  | ::rtl::OUString m_sName; | 
|  | //dyf add 20070601 | 
|  | //for transfor the tablename | 
|  | ::rtl::OUString m_sDefaultTableName; | 
|  | //dyf add end | 
|  | ::rtl::OUString m_sDataSourceName; | 
|  | sal_Int32		m_nCommandType; | 
|  | bool            m_bNeedToReInitialize; | 
|  |  | 
|  | #if defined UNX | 
|  | static const char __FAR_DATA sNewLine; | 
|  | #else | 
|  | static const char __FAR_DATA sNewLine[]; | 
|  | #endif | 
|  |  | 
|  | ODatabaseExport*	m_pReader; | 
|  | sal_Int32*			m_pRowMarker; // wenn gesetzt, dann nur diese Rows kopieren | 
|  | rtl_TextEncoding    m_eDestEnc; | 
|  | sal_Bool			m_bInInitialize; | 
|  | sal_Bool			m_bCheckOnly; | 
|  |  | 
|  | // export data | 
|  | ODatabaseImportExport(	const ::svx::ODataAccessDescriptor& _aDataDescriptor, | 
|  | const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rM, | 
|  | const ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatter >& _rxNumberF, | 
|  | const String& rExchange = String()); | 
|  |  | 
|  | // import data | 
|  | ODatabaseImportExport(	const SharedConnection& _rxConnection, | 
|  | const ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatter >& _rxNumberF, | 
|  | const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rM); | 
|  |  | 
|  | virtual ~ODatabaseImportExport(); | 
|  |  | 
|  | virtual void initialize(); | 
|  | public: | 
|  | void setStream(SvStream* _pStream){  m_pStream = _pStream; } | 
|  |  | 
|  | //dyf add 20070601 | 
|  | //for set the tablename | 
|  | void setSTableName(const ::rtl::OUString &_sTableName){ m_sDefaultTableName = _sTableName; } | 
|  | //dyf add end | 
|  |  | 
|  | virtual sal_Bool Write(); // Export | 
|  | virtual sal_Bool Read(); // Import | 
|  |  | 
|  | void initialize(const ::svx::ODataAccessDescriptor& _aDataDescriptor); | 
|  | void dispose(); | 
|  |  | 
|  | void enableCheckOnly() { m_bCheckOnly = sal_True; } | 
|  | sal_Bool isCheckEnabled() const { return m_bCheckOnly; } | 
|  |  | 
|  |  | 
|  | private: | 
|  | virtual void SAL_CALL disposing( const ::com::sun::star::lang::EventObject& Source ) throw(::com::sun::star::uno::RuntimeException); | 
|  | void impl_initFromDescriptor( const ::svx::ODataAccessDescriptor& _aDataDescriptor, bool _bPlusDefaultInit ); | 
|  | }; | 
|  |  | 
|  | // ========================================================================= | 
|  | // RTF Im- und Export | 
|  | // ========================================================================= | 
|  |  | 
|  | class ORTFImportExport : public ODatabaseImportExport | 
|  | { | 
|  | void appendRow(::rtl::OString* pHorzChar,sal_Int32 _nColumnCount,sal_Int32& k,sal_Int32& kk); | 
|  | public: | 
|  | // export data | 
|  | ORTFImportExport(	const ::svx::ODataAccessDescriptor& _aDataDescriptor, | 
|  | const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rM, | 
|  | const ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatter >& _rxNumberF, | 
|  | const String& rExchange = String()) | 
|  | : ODatabaseImportExport(_aDataDescriptor,_rM,_rxNumberF,rExchange) {}; | 
|  |  | 
|  | // import data | 
|  | ORTFImportExport(	const SharedConnection& _rxConnection, | 
|  | const ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatter >& _rxNumberF, | 
|  | const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rM) | 
|  | : ODatabaseImportExport(_rxConnection,_rxNumberF,_rM) | 
|  | {} | 
|  |  | 
|  | virtual sal_Bool Write(); | 
|  | virtual sal_Bool Read(); | 
|  | }; | 
|  | // ========================================================================= | 
|  | // HTML Im- und Export | 
|  | // ========================================================================= | 
|  | #define SBA_HTML_FONTSIZES 7 | 
|  | const sal_Int16 nIndentMax = 23; | 
|  | class OHTMLImportExport : public ODatabaseImportExport | 
|  | { | 
|  | // default HtmlFontSz[1-7] | 
|  | static const sal_Int16	nDefaultFontSize[SBA_HTML_FONTSIZES]; | 
|  | // HtmlFontSz[1-7] in s*3.ini [user] | 
|  | static sal_Int16		nFontSize[SBA_HTML_FONTSIZES]; | 
|  | static const sal_Int16	nCellSpacing; | 
|  | static const char __FAR_DATA sIndentSource[]; | 
|  | char					sIndent[nIndentMax+1]; | 
|  | sal_Int16				m_nIndent; | 
|  | #ifdef DBG_UTIL | 
|  | sal_Bool					m_bCheckFont; | 
|  | #endif | 
|  |  | 
|  | void WriteHeader(); | 
|  | void WriteBody(); | 
|  | void WriteTables(); | 
|  | void WriteCell( sal_Int32 nFormat,sal_Int32 nWidthPixel,sal_Int32 nHeightPixel,const char* pChar,const String& rValue,const char* pHtmlTag); | 
|  | void IncIndent( sal_Int16 nVal ); | 
|  | const char*			GetIndentStr() { return sIndent; } | 
|  | void FontOn(); | 
|  | inline void FontOff(); | 
|  |  | 
|  | public: | 
|  | // export data | 
|  | OHTMLImportExport(	const ::svx::ODataAccessDescriptor& _aDataDescriptor, | 
|  | const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rM, | 
|  | const ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatter >& _rxNumberF, | 
|  | const String& rExchange = String()); | 
|  | // import data | 
|  | OHTMLImportExport(	const SharedConnection& _rxConnection, | 
|  | const ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatter >& _rxNumberF, | 
|  | const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rM) | 
|  | : ODatabaseImportExport(_rxConnection,_rxNumberF,_rM) | 
|  | {} | 
|  |  | 
|  | virtual sal_Bool Write(); | 
|  | virtual sal_Bool Read(); | 
|  |  | 
|  | }; | 
|  | // ========================================================================= | 
|  | // normal RowSet Im- und Export | 
|  | // ========================================================================= | 
|  |  | 
|  | class ORowSetImportExport : public ODatabaseImportExport | 
|  | { | 
|  | OModuleClient		m_aModuleClient; | 
|  | ::std::vector<sal_Int32>	m_aColumnMapping; | 
|  | ::std::vector<sal_Int32>	m_aColumnTypes; | 
|  | ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSetUpdate >	m_xTargetResultSetUpdate;	// | 
|  | ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XRowUpdate >			m_xTargetRowUpdate;			// | 
|  | ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSetMetaData >	m_xTargetResultSetMetaData;	// | 
|  | Window*						m_pParent; | 
|  | sal_Bool					m_bAlreadyAsked; | 
|  |  | 
|  | sal_Bool insertNewRow(); | 
|  | protected: | 
|  | virtual void initialize(); | 
|  |  | 
|  | public: | 
|  | // export data | 
|  | ORowSetImportExport(Window* _pParent, | 
|  | const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSetUpdate >& _xResultSetUpdate, | 
|  | const ::svx::ODataAccessDescriptor& _aDataDescriptor, | 
|  | const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rM, | 
|  | const String& rExchange = String()); | 
|  |  | 
|  | // import data | 
|  | ORowSetImportExport(const SharedConnection& _rxConnection, | 
|  | const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rM) | 
|  | : ODatabaseImportExport(_rxConnection,NULL,_rM) | 
|  | {} | 
|  |  | 
|  | virtual sal_Bool Write(); | 
|  | virtual sal_Bool Read(); | 
|  |  | 
|  | private: | 
|  | using ODatabaseImportExport::initialize; | 
|  | }; | 
|  |  | 
|  | } | 
|  | #endif // DBAUI_TOKENWRITER_HXX | 
|  |  | 
|  |  | 
|  |  |