xref: /trunk/main/dbaccess/source/ui/inc/TokenWriter.hxx (revision cdf0e10c4e3984b49a9502b011690b615761d4a3)
1 /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
11  * OpenOffice.org is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * OpenOffice.org is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Lesser General Public License version 3 for more details
19  * (a copy is included in the LICENSE file that accompanied this code).
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * version 3 along with OpenOffice.org.  If not, see
23  * <http://www.openoffice.org/license.html>
24  * for a copy of the LGPLv3 License.
25  *
26  ************************************************************************/
27 #ifndef DBAUI_TOKENWRITER_HXX
28 #define DBAUI_TOKENWRITER_HXX
29 
30 #include "DExport.hxx"
31 #include "moduledbu.hxx"
32 #include "commontypes.hxx"
33 
34 #include <com/sun/star/awt/FontDescriptor.hpp>
35 #include <com/sun/star/sdbc/XResultSet.hpp>
36 #include <com/sun/star/sdbc/XResultSetUpdate.hpp>
37 #include <com/sun/star/sdbc/XRow.hpp>
38 #include <com/sun/star/lang/XMultiServiceFactory.hpp>
39 #include <com/sun/star/lang/XEventListener.hpp>
40 #include <com/sun/star/frame/XModel.hpp>
41 #include <com/sun/star/beans/PropertyValue.hpp>
42 #include <com/sun/star/sdb/CommandType.hpp>
43 #include <com/sun/star/sdbcx/XRowLocate.hpp>
44 
45 #include <cppuhelper/implbase1.hxx>
46 #include <tools/stream.hxx>
47 #include <svx/dataaccessdescriptor.hxx>
48 
49 #include <memory>
50 
51 namespace com { namespace sun { namespace star {
52     namespace sdbc{
53         class XRowUpdate;
54     }
55 }}}
56 
57 namespace dbaui
58 {
59     // =========================================================================
60     // ODatabaseImportExport Basisklasse f"ur Import/Export
61     // =========================================================================
62     class ODatabaseExport;
63     typedef ::cppu::WeakImplHelper1< ::com::sun::star::lang::XEventListener> ODatabaseImportExport_BASE;
64     class ODatabaseImportExport : public ODatabaseImportExport_BASE
65     {
66     private:
67         void impl_initializeRowMember_throw();
68 
69     protected:
70         ::com::sun::star::lang::Locale                                                  m_aLocale;
71         ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any>                    m_aSelection;
72         sal_Bool                                                                        m_bBookmarkSelection;
73         SvStream*                                                                       m_pStream;
74         ::com::sun::star::awt::FontDescriptor                                           m_aFont;
75         ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >       m_xObject;      // table/query
76         SharedConnection                                                                m_xConnection;
77         ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSet >          m_xResultSet;
78         ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XRow >                m_xRow;
79         ::com::sun::star::uno::Reference< ::com::sun::star::sdbcx::XRowLocate >         m_xRowLocate;
80         ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSetMetaData >  m_xResultSetMetaData;
81         ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexAccess >   m_xRowSetColumns;
82         ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatter >    m_xFormatter;   // a number formatter working with the connection's NumberFormatsSupplier
83         ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory> m_xFactory;
84 
85         ::rtl::OUString m_sName;
86         //dyf add 20070601
87         //for transfor the tablename
88         ::rtl::OUString m_sDefaultTableName;
89         //dyf add end
90         ::rtl::OUString m_sDataSourceName;
91         sal_Int32       m_nCommandType;
92         bool            m_bNeedToReInitialize;
93 
94 #if defined UNX
95         static const char __FAR_DATA sNewLine;
96 #else
97         static const char __FAR_DATA sNewLine[];
98 #endif
99 
100         ODatabaseExport*    m_pReader;
101         sal_Int32*          m_pRowMarker; // wenn gesetzt, dann nur diese Rows kopieren
102         rtl_TextEncoding    m_eDestEnc;
103         sal_Bool            m_bInInitialize;
104         sal_Bool            m_bCheckOnly;
105 
106         // export data
107         ODatabaseImportExport(  const ::svx::ODataAccessDescriptor& _aDataDescriptor,
108                                 const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rM,
109                                 const ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatter >& _rxNumberF,
110                                 const String& rExchange = String());
111 
112         // import data
113         ODatabaseImportExport(  const SharedConnection& _rxConnection,
114                                 const ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatter >& _rxNumberF,
115                                 const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rM);
116 
117         virtual ~ODatabaseImportExport();
118 
119         virtual void initialize();
120     public:
121         void setStream(SvStream* _pStream){  m_pStream = _pStream; }
122 
123         //dyf add 20070601
124         //for set the tablename
125         void setSTableName(const ::rtl::OUString &_sTableName){ m_sDefaultTableName = _sTableName; }
126         //dyf add end
127 
128         virtual sal_Bool Write(); // Export
129         virtual sal_Bool Read(); // Import
130 
131         void initialize(const ::svx::ODataAccessDescriptor& _aDataDescriptor);
132         void dispose();
133 
134         void enableCheckOnly() { m_bCheckOnly = sal_True; }
135         sal_Bool isCheckEnabled() const { return m_bCheckOnly; }
136 
137 
138     private:
139         virtual void SAL_CALL disposing( const ::com::sun::star::lang::EventObject& Source ) throw(::com::sun::star::uno::RuntimeException);
140         void impl_initFromDescriptor( const ::svx::ODataAccessDescriptor& _aDataDescriptor, bool _bPlusDefaultInit );
141     };
142 
143     // =========================================================================
144     // RTF Im- und Export
145     // =========================================================================
146 
147     class ORTFImportExport : public ODatabaseImportExport
148     {
149         void appendRow(::rtl::OString* pHorzChar,sal_Int32 _nColumnCount,sal_Int32& k,sal_Int32& kk);
150     public:
151         // export data
152         ORTFImportExport(   const ::svx::ODataAccessDescriptor& _aDataDescriptor,
153                             const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rM,
154                             const ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatter >& _rxNumberF,
155                             const String& rExchange = String())
156                             : ODatabaseImportExport(_aDataDescriptor,_rM,_rxNumberF,rExchange) {};
157 
158         // import data
159         ORTFImportExport(   const SharedConnection& _rxConnection,
160                             const ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatter >& _rxNumberF,
161                             const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rM)
162                         : ODatabaseImportExport(_rxConnection,_rxNumberF,_rM)
163         {}
164 
165         virtual sal_Bool Write();
166         virtual sal_Bool Read();
167     };
168     // =========================================================================
169     // HTML Im- und Export
170     // =========================================================================
171     #define SBA_HTML_FONTSIZES 7
172     const sal_Int16 nIndentMax = 23;
173     class OHTMLImportExport : public ODatabaseImportExport
174     {
175         // default HtmlFontSz[1-7]
176         static const sal_Int16  nDefaultFontSize[SBA_HTML_FONTSIZES];
177         // HtmlFontSz[1-7] in s*3.ini [user]
178         static sal_Int16        nFontSize[SBA_HTML_FONTSIZES];
179         static const sal_Int16  nCellSpacing;
180         static const char __FAR_DATA sIndentSource[];
181         char                    sIndent[nIndentMax+1];
182         sal_Int16               m_nIndent;
183     #ifdef DBG_UTIL
184         sal_Bool                    m_bCheckFont;
185     #endif
186 
187         void WriteHeader();
188         void WriteBody();
189         void WriteTables();
190         void WriteCell( sal_Int32 nFormat,sal_Int32 nWidthPixel,sal_Int32 nHeightPixel,const char* pChar,const String& rValue,const char* pHtmlTag);
191         void IncIndent( sal_Int16 nVal );
192         const char*         GetIndentStr() { return sIndent; }
193         void FontOn();
194         inline void FontOff();
195 
196     public:
197         // export data
198         OHTMLImportExport(  const ::svx::ODataAccessDescriptor& _aDataDescriptor,
199                             const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rM,
200                             const ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatter >& _rxNumberF,
201                             const String& rExchange = String());
202         // import data
203         OHTMLImportExport(  const SharedConnection& _rxConnection,
204                             const ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatter >& _rxNumberF,
205                             const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rM)
206                         : ODatabaseImportExport(_rxConnection,_rxNumberF,_rM)
207         {}
208 
209         virtual sal_Bool Write();
210         virtual sal_Bool Read();
211 
212     };
213     // =========================================================================
214     // normal RowSet Im- und Export
215     // =========================================================================
216 
217     class ORowSetImportExport : public ODatabaseImportExport
218     {
219         OModuleClient       m_aModuleClient;
220         ::std::vector<sal_Int32>    m_aColumnMapping;
221         ::std::vector<sal_Int32>    m_aColumnTypes;
222         ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSetUpdate >    m_xTargetResultSetUpdate;   //
223         ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XRowUpdate >          m_xTargetRowUpdate;         //
224         ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSetMetaData >  m_xTargetResultSetMetaData; //
225         Window*                     m_pParent;
226         sal_Bool                    m_bAlreadyAsked;
227 
228         sal_Bool insertNewRow();
229     protected:
230         virtual void initialize();
231 
232     public:
233         // export data
234         ORowSetImportExport(Window* _pParent,
235                             const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSetUpdate >& _xResultSetUpdate,
236                             const ::svx::ODataAccessDescriptor& _aDataDescriptor,
237                             const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rM,
238                             const String& rExchange = String());
239 
240         // import data
241         ORowSetImportExport(const SharedConnection& _rxConnection,
242                             const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rM)
243                         : ODatabaseImportExport(_rxConnection,NULL,_rM)
244         {}
245 
246         virtual sal_Bool Write();
247         virtual sal_Bool Read();
248 
249     private:
250         using ODatabaseImportExport::initialize;
251     };
252 
253 }
254 #endif // DBAUI_TOKENWRITER_HXX
255 
256 
257 
258