xref: /AOO41X/main/dbaccess/source/ui/misc/UITools.cxx (revision cdf0e10c4e3984b49a9502b011690b615761d4a3)
1*cdf0e10cSrcweir /*************************************************************************
2*cdf0e10cSrcweir  *
3*cdf0e10cSrcweir  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4*cdf0e10cSrcweir  *
5*cdf0e10cSrcweir  * Copyright 2000, 2010 Oracle and/or its affiliates.
6*cdf0e10cSrcweir  *
7*cdf0e10cSrcweir  * OpenOffice.org - a multi-platform office productivity suite
8*cdf0e10cSrcweir  *
9*cdf0e10cSrcweir  * This file is part of OpenOffice.org.
10*cdf0e10cSrcweir  *
11*cdf0e10cSrcweir  * OpenOffice.org is free software: you can redistribute it and/or modify
12*cdf0e10cSrcweir  * it under the terms of the GNU Lesser General Public License version 3
13*cdf0e10cSrcweir  * only, as published by the Free Software Foundation.
14*cdf0e10cSrcweir  *
15*cdf0e10cSrcweir  * OpenOffice.org is distributed in the hope that it will be useful,
16*cdf0e10cSrcweir  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17*cdf0e10cSrcweir  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18*cdf0e10cSrcweir  * GNU Lesser General Public License version 3 for more details
19*cdf0e10cSrcweir  * (a copy is included in the LICENSE file that accompanied this code).
20*cdf0e10cSrcweir  *
21*cdf0e10cSrcweir  * You should have received a copy of the GNU Lesser General Public License
22*cdf0e10cSrcweir  * version 3 along with OpenOffice.org.  If not, see
23*cdf0e10cSrcweir  * <http://www.openoffice.org/license.html>
24*cdf0e10cSrcweir  * for a copy of the LGPLv3 License.
25*cdf0e10cSrcweir  *
26*cdf0e10cSrcweir  ************************************************************************/
27*cdf0e10cSrcweir 
28*cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
29*cdf0e10cSrcweir #include "precompiled_dbaccess.hxx"
30*cdf0e10cSrcweir 
31*cdf0e10cSrcweir #ifndef DBAUI_TOOLS_HXX
32*cdf0e10cSrcweir #include "UITools.hxx"
33*cdf0e10cSrcweir #endif
34*cdf0e10cSrcweir #ifndef _SFX_DOCFILT_HACK_HXX
35*cdf0e10cSrcweir #include <sfx2/docfilt.hxx>
36*cdf0e10cSrcweir #endif
37*cdf0e10cSrcweir #ifndef _DBACCESS_UI_CALLBACKS_HXX_
38*cdf0e10cSrcweir #include "callbacks.hxx"
39*cdf0e10cSrcweir #endif
40*cdf0e10cSrcweir #ifndef DBACCESS_SHARED_DBUSTRINGS_HRC
41*cdf0e10cSrcweir #include "dbustrings.hrc"
42*cdf0e10cSrcweir #endif
43*cdf0e10cSrcweir #ifndef _DBU_RESOURCE_HRC_
44*cdf0e10cSrcweir #include "dbu_resource.hrc"
45*cdf0e10cSrcweir #endif
46*cdf0e10cSrcweir #ifndef DBAUI_DLGSAVE_HXX
47*cdf0e10cSrcweir #include "dlgsave.hxx"
48*cdf0e10cSrcweir #endif
49*cdf0e10cSrcweir #ifndef DBAUI_DBTREELISTBOX_HXX
50*cdf0e10cSrcweir #include "dbtreelistbox.hxx"
51*cdf0e10cSrcweir #endif
52*cdf0e10cSrcweir #ifndef DBACCESS_SOURCE_UI_INC_DEFAULTOBJECTNAMECHECK_HXX
53*cdf0e10cSrcweir #include "defaultobjectnamecheck.hxx"
54*cdf0e10cSrcweir #endif
55*cdf0e10cSrcweir #ifndef _COMPHELPER_EXTRACT_HXX_
56*cdf0e10cSrcweir #include <comphelper/extract.hxx>
57*cdf0e10cSrcweir #endif
58*cdf0e10cSrcweir #ifndef _COM_SUN_STAR_SDB_XSINGLESELECTQUERYANALYZER_HPP_
59*cdf0e10cSrcweir #include <com/sun/star/sdb/XSingleSelectQueryAnalyzer.hpp>
60*cdf0e10cSrcweir #endif
61*cdf0e10cSrcweir #ifndef _COM_SUN_STAR_SDB_XCOMPLETEDCONNECTION_HPP_
62*cdf0e10cSrcweir #include <com/sun/star/sdb/XCompletedConnection.hpp>
63*cdf0e10cSrcweir #endif
64*cdf0e10cSrcweir #ifndef _COM_SUN_STAR_SDBC_XDATASOURCE_HPP_
65*cdf0e10cSrcweir #include <com/sun/star/sdbc/XDataSource.hpp>
66*cdf0e10cSrcweir #endif
67*cdf0e10cSrcweir #ifndef _COM_SUN_STAR_SDB_SQLCONTEXT_HPP_
68*cdf0e10cSrcweir #include <com/sun/star/sdb/SQLContext.hpp>
69*cdf0e10cSrcweir #endif
70*cdf0e10cSrcweir #ifndef _COM_SUN_STAR_SDBCX_XKEYSSUPPLIER_HPP_
71*cdf0e10cSrcweir #include <com/sun/star/sdbcx/XKeysSupplier.hpp>
72*cdf0e10cSrcweir #endif
73*cdf0e10cSrcweir #ifndef _COM_SUN_STAR_SDBCX_XCOLUMNSSUPPLIER_HPP_
74*cdf0e10cSrcweir #include <com/sun/star/sdbcx/XColumnsSupplier.hpp>
75*cdf0e10cSrcweir #endif
76*cdf0e10cSrcweir #ifndef _COM_SUN_STAR_SDBCX_XVIEWSSUPPLIER_HPP_
77*cdf0e10cSrcweir #include <com/sun/star/sdbcx/XViewsSupplier.hpp>
78*cdf0e10cSrcweir #endif
79*cdf0e10cSrcweir #ifndef _COM_SUN_STAR_SDBCX_XTABLESSUPPLIER_HPP_
80*cdf0e10cSrcweir #include <com/sun/star/sdbcx/XTablesSupplier.hpp>
81*cdf0e10cSrcweir #endif
82*cdf0e10cSrcweir #ifndef _COM_SUN_STAR_SDBCX_XDATADESCRIPTORFACTORY_HPP_
83*cdf0e10cSrcweir #include <com/sun/star/sdbcx/XDataDescriptorFactory.hpp>
84*cdf0e10cSrcweir #endif
85*cdf0e10cSrcweir #ifndef _COM_SUN_STAR_SDBCX_XAPPEND_HPP_
86*cdf0e10cSrcweir #include <com/sun/star/sdbcx/XAppend.hpp>
87*cdf0e10cSrcweir #endif
88*cdf0e10cSrcweir #ifndef _COM_SUN_STAR_SDBC_XROW_HPP_
89*cdf0e10cSrcweir #include <com/sun/star/sdbc/XRow.hpp>
90*cdf0e10cSrcweir #endif
91*cdf0e10cSrcweir #ifndef _COM_SUN_STAR_SDBC_XRESULTSETMETADATASUPPLIER_HPP_
92*cdf0e10cSrcweir #include <com/sun/star/sdbc/XResultSetMetaDataSupplier.hpp>
93*cdf0e10cSrcweir #endif
94*cdf0e10cSrcweir #ifndef _COM_SUN_STAR_SDBC_XRESULTSETMETADATA_HPP_
95*cdf0e10cSrcweir #include <com/sun/star/sdbc/XResultSetMetaData.hpp>
96*cdf0e10cSrcweir #endif
97*cdf0e10cSrcweir #include <com/sun/star/sdbc/ColumnValue.hpp>
98*cdf0e10cSrcweir #ifndef _COM_SUN_STAR_TASK_XINTERACTIONHANDLER_HPP_
99*cdf0e10cSrcweir #include <com/sun/star/task/XInteractionHandler.hpp>
100*cdf0e10cSrcweir #endif
101*cdf0e10cSrcweir #ifndef _COM_SUN_STAR_UCB_XCONTENT_HPP_
102*cdf0e10cSrcweir #include <com/sun/star/ucb/XContent.hpp>
103*cdf0e10cSrcweir #endif
104*cdf0e10cSrcweir #ifndef _COM_SUN_STAR_UI_DIALOGS_XEXECUTABLEDIALOG_HPP_
105*cdf0e10cSrcweir #include <com/sun/star/ui/dialogs/XExecutableDialog.hpp>
106*cdf0e10cSrcweir #endif
107*cdf0e10cSrcweir #ifndef _COM_SUN_STAR_BEANS_PROPERTYVALUE_HPP_
108*cdf0e10cSrcweir #include <com/sun/star/beans/PropertyValue.hpp>
109*cdf0e10cSrcweir #endif
110*cdf0e10cSrcweir #ifndef _COM_SUN_STAR_CONTAINER_XINDEXACCESS_HPP_
111*cdf0e10cSrcweir #include <com/sun/star/container/XIndexAccess.hpp>
112*cdf0e10cSrcweir #endif
113*cdf0e10cSrcweir #ifndef _COM_SUN_STAR_CONTAINER_XNAMECONTAINER_HPP_
114*cdf0e10cSrcweir #include <com/sun/star/container/XNameContainer.hpp>
115*cdf0e10cSrcweir #endif
116*cdf0e10cSrcweir #ifndef _COM_SUN_STAR_UCB_INTERACTIVEIOEXCEPTION_HPP_
117*cdf0e10cSrcweir #include <com/sun/star/ucb/InteractiveIOException.hpp>
118*cdf0e10cSrcweir #endif
119*cdf0e10cSrcweir #ifndef _COM_SUN_STAR_SDB_XDOCUMENTDATASOURCE_HPP_
120*cdf0e10cSrcweir #include <com/sun/star/sdb/XDocumentDataSource.hpp>
121*cdf0e10cSrcweir #endif
122*cdf0e10cSrcweir #ifndef _COM_SUN_STAR_UCB_IOERRORCODE_HPP_
123*cdf0e10cSrcweir #include <com/sun/star/ucb/IOErrorCode.hpp>
124*cdf0e10cSrcweir #endif
125*cdf0e10cSrcweir #ifndef _TOOLKIT_HELPER_VCLUNOHELPER_HXX_
126*cdf0e10cSrcweir #include <toolkit/helper/vclunohelper.hxx>
127*cdf0e10cSrcweir #endif
128*cdf0e10cSrcweir #ifndef _TOOLKIT_AWT_VCLXWINDOW_HXX_
129*cdf0e10cSrcweir #include <toolkit/awt/vclxwindow.hxx>
130*cdf0e10cSrcweir #endif
131*cdf0e10cSrcweir #ifndef _VCL_STDTEXT_HXX
132*cdf0e10cSrcweir #include <vcl/stdtext.hxx>
133*cdf0e10cSrcweir #endif
134*cdf0e10cSrcweir #ifndef _COM_SUN_STAR_BEANS_XPROPERTYSETINFO_HPP_
135*cdf0e10cSrcweir #include <com/sun/star/beans/XPropertySetInfo.hpp>
136*cdf0e10cSrcweir #endif
137*cdf0e10cSrcweir #ifndef _COM_SUN_STAR_BEANS_XPROPERTYSET_HPP_
138*cdf0e10cSrcweir #include <com/sun/star/beans/XPropertySet.hpp>
139*cdf0e10cSrcweir #endif
140*cdf0e10cSrcweir #ifndef _COM_SUN_STAR_CONTAINER_XNAMEACCESS_HPP_
141*cdf0e10cSrcweir #include <com/sun/star/container/XNameAccess.hpp>
142*cdf0e10cSrcweir #endif
143*cdf0e10cSrcweir #ifndef _COM_SUN_STAR_CONTAINER_XCONTAINER_HPP_
144*cdf0e10cSrcweir #include <com/sun/star/container/XContainer.hpp>
145*cdf0e10cSrcweir #endif
146*cdf0e10cSrcweir #ifndef _COM_SUN_STAR_CONTAINER_XHIERARCHICALNAMECONTAINER_HPP_
147*cdf0e10cSrcweir #include <com/sun/star/container/XHierarchicalNameContainer.hpp>
148*cdf0e10cSrcweir #endif
149*cdf0e10cSrcweir #ifndef _COM_SUN_STAR_LANG_XMULTISERVICEFACTORY_HPP_
150*cdf0e10cSrcweir #include <com/sun/star/lang/XMultiServiceFactory.hpp>
151*cdf0e10cSrcweir #endif
152*cdf0e10cSrcweir #ifndef _COM_SUN_STAR_AWT_TEXTALIGN_HPP_
153*cdf0e10cSrcweir #include <com/sun/star/awt/TextAlign.hpp>
154*cdf0e10cSrcweir #endif
155*cdf0e10cSrcweir #ifndef _COM_SUN_STAR_AWT_FONTDESCRIPTOR_HPP_
156*cdf0e10cSrcweir #include <com/sun/star/awt/FontDescriptor.hpp>
157*cdf0e10cSrcweir #endif
158*cdf0e10cSrcweir #ifndef _COM_SUN_STAR_AWT_FONTWEIGHT_HPP_
159*cdf0e10cSrcweir #include <com/sun/star/awt/FontWeight.hpp>
160*cdf0e10cSrcweir #endif
161*cdf0e10cSrcweir #ifndef _COM_SUN_STAR_AWT_FONTRELIEF_HPP_
162*cdf0e10cSrcweir #include <com/sun/star/awt/FontRelief.hpp>
163*cdf0e10cSrcweir #endif
164*cdf0e10cSrcweir #ifndef _COM_SUN_STAR_AWT_FONTWIDTH_HPP_
165*cdf0e10cSrcweir #include <com/sun/star/awt/FontWidth.hpp>
166*cdf0e10cSrcweir #endif
167*cdf0e10cSrcweir #ifndef _COM_SUN_STAR_FRAME_XMODEL_HPP_
168*cdf0e10cSrcweir #include <com/sun/star/frame/XModel.hpp>
169*cdf0e10cSrcweir #endif
170*cdf0e10cSrcweir #ifndef DBAUI_SBATTRDLG_HRC
171*cdf0e10cSrcweir #include "dlgattr.hrc"
172*cdf0e10cSrcweir #endif
173*cdf0e10cSrcweir #ifndef DBAUI_TYPEINFO_HXX
174*cdf0e10cSrcweir #include "TypeInfo.hxx"
175*cdf0e10cSrcweir #endif
176*cdf0e10cSrcweir #ifndef DBAUI_FIELDDESCRIPTIONS_HXX
177*cdf0e10cSrcweir #include "FieldDescriptions.hxx"
178*cdf0e10cSrcweir #endif
179*cdf0e10cSrcweir #ifndef _COMPHELPER_STLTYPES_HXX_
180*cdf0e10cSrcweir #include <comphelper/stl_types.hxx>
181*cdf0e10cSrcweir #endif
182*cdf0e10cSrcweir #ifndef COMPHELPER_COMPONENTCONTEXT_HXX
183*cdf0e10cSrcweir #include <comphelper/componentcontext.hxx>
184*cdf0e10cSrcweir #endif
185*cdf0e10cSrcweir 
186*cdf0e10cSrcweir #ifndef _SVX_SVXIDS_HRC
187*cdf0e10cSrcweir #include <svx/svxids.hrc>
188*cdf0e10cSrcweir #endif
189*cdf0e10cSrcweir 
190*cdf0e10cSrcweir #define ITEMID_HORJUSTIFY		SID_ATTR_ALIGN_HOR_JUSTIFY
191*cdf0e10cSrcweir #define ITEMID_VERJUSTIFY		SID_ATTR_ALIGN_VER_JUSTIFY
192*cdf0e10cSrcweir //#define ITEMID_ORIENTATION     SID_ATTR_ALIGN_ORIENTATION
193*cdf0e10cSrcweir #define ITEMID_LINEBREAK		SID_ATTR_ALIGN_LINEBREAK
194*cdf0e10cSrcweir #define ITEMID_MARGIN			SID_ATTR_ALIGN_MARGIN
195*cdf0e10cSrcweir #define ITEMID_NUMBERINFO		SID_ATTR_NUMBERFORMAT_INFO
196*cdf0e10cSrcweir 
197*cdf0e10cSrcweir #ifndef _SFXITEMPOOL_HXX
198*cdf0e10cSrcweir #include <svl/itempool.hxx>
199*cdf0e10cSrcweir #endif
200*cdf0e10cSrcweir #ifndef _STRING_HXX
201*cdf0e10cSrcweir #include <tools/string.hxx>
202*cdf0e10cSrcweir #endif
203*cdf0e10cSrcweir #ifndef _DBA_DBACCESS_HELPID_HRC_
204*cdf0e10cSrcweir #include "dbaccess_helpid.hrc"
205*cdf0e10cSrcweir #endif
206*cdf0e10cSrcweir #ifndef _SFXITEMSET_HXX //autogen wg. SfxItemSet
207*cdf0e10cSrcweir #include <svl/itemset.hxx>
208*cdf0e10cSrcweir #endif
209*cdf0e10cSrcweir #ifndef DBACCESS_SBA_GRID_HRC
210*cdf0e10cSrcweir #include "sbagrid.hrc"
211*cdf0e10cSrcweir #endif
212*cdf0e10cSrcweir #ifndef _SFXRNGITEM_HXX
213*cdf0e10cSrcweir #include <svl/rngitem.hxx>
214*cdf0e10cSrcweir #endif
215*cdf0e10cSrcweir #ifndef _SFXINTITEM_HXX
216*cdf0e10cSrcweir #include <svl/intitem.hxx>
217*cdf0e10cSrcweir #endif
218*cdf0e10cSrcweir #ifndef _SVX_ALGITEM_HXX
219*cdf0e10cSrcweir #include <svx/algitem.hxx>
220*cdf0e10cSrcweir #endif
221*cdf0e10cSrcweir #ifndef _SVX_NUMINF_HXX
222*cdf0e10cSrcweir #include <svx/numinf.hxx>
223*cdf0e10cSrcweir #endif
224*cdf0e10cSrcweir #define _ZFORLIST_DECLARE_TABLE
225*cdf0e10cSrcweir #ifndef _SVX_NUMINF_HXX
226*cdf0e10cSrcweir #include <svx/numinf.hxx>
227*cdf0e10cSrcweir #endif
228*cdf0e10cSrcweir #ifndef _ZFORLIST_HXX
229*cdf0e10cSrcweir #include <svl/zforlist.hxx>
230*cdf0e10cSrcweir #endif
231*cdf0e10cSrcweir #ifndef DBAUI_SBATTRDLG_HXX
232*cdf0e10cSrcweir #include "dlgattr.hxx"
233*cdf0e10cSrcweir #endif
234*cdf0e10cSrcweir #ifndef _SV_MSGBOX_HXX
235*cdf0e10cSrcweir #include <vcl/msgbox.hxx>
236*cdf0e10cSrcweir #endif
237*cdf0e10cSrcweir #ifndef _COM_SUN_STAR_CONTAINER_XCHILD_HPP_
238*cdf0e10cSrcweir #include <com/sun/star/container/XChild.hpp>
239*cdf0e10cSrcweir #endif
240*cdf0e10cSrcweir #ifndef _COM_SUN_STAR_UTIL_XNUMBERFORMATSSUPPLIER_HPP_
241*cdf0e10cSrcweir #include <com/sun/star/util/XNumberFormatsSupplier.hpp>
242*cdf0e10cSrcweir #endif
243*cdf0e10cSrcweir #ifndef _COM_SUN_STAR_UTIL_XNUMBERFORMATTER_HPP_
244*cdf0e10cSrcweir #include <com/sun/star/util/XNumberFormatter.hpp>
245*cdf0e10cSrcweir #endif
246*cdf0e10cSrcweir #ifndef _DBU_MISC_HRC_
247*cdf0e10cSrcweir #include "dbu_misc.hrc"
248*cdf0e10cSrcweir #endif
249*cdf0e10cSrcweir #ifndef _DBAUI_SQLMESSAGE_HXX_
250*cdf0e10cSrcweir #include "sqlmessage.hxx"
251*cdf0e10cSrcweir #endif
252*cdf0e10cSrcweir #ifndef _COM_SUN_STAR_UTIL_NUMBERFORMAT_HPP_
253*cdf0e10cSrcweir #include <com/sun/star/util/NumberFormat.hpp>
254*cdf0e10cSrcweir #endif
255*cdf0e10cSrcweir #ifndef _COM_SUN_STAR_UTIL_URL_HPP_
256*cdf0e10cSrcweir #include <com/sun/star/util/URL.hpp>
257*cdf0e10cSrcweir #endif
258*cdf0e10cSrcweir #ifndef _SV_TOOLBOX_HXX
259*cdf0e10cSrcweir #include <vcl/toolbox.hxx>
260*cdf0e10cSrcweir #endif
261*cdf0e10cSrcweir #ifndef _DBAUI_DLGSIZE_HXX
262*cdf0e10cSrcweir #include "dlgsize.hxx"
263*cdf0e10cSrcweir #endif
264*cdf0e10cSrcweir #ifndef _SVTOOLS_EDITBROWSEBOX_HXX_
265*cdf0e10cSrcweir #include <svtools/editbrowsebox.hxx>
266*cdf0e10cSrcweir #endif
267*cdf0e10cSrcweir #ifndef _UTL_CONFIGMGR_HXX_
268*cdf0e10cSrcweir #include <unotools/configmgr.hxx>
269*cdf0e10cSrcweir #endif
270*cdf0e10cSrcweir #ifndef INCLUDED_SVTOOLS_HELPOPT_HXX
271*cdf0e10cSrcweir #include <svtools/helpopt.hxx>
272*cdf0e10cSrcweir #endif
273*cdf0e10cSrcweir #ifndef _UCBHELPER_CONTENT_HXX
274*cdf0e10cSrcweir #include <ucbhelper/content.hxx>
275*cdf0e10cSrcweir #endif
276*cdf0e10cSrcweir #ifndef _URLOBJ_HXX
277*cdf0e10cSrcweir #include <tools/urlobj.hxx>
278*cdf0e10cSrcweir #endif
279*cdf0e10cSrcweir #ifndef TOOLS_DIAGNOSE_EX_H
280*cdf0e10cSrcweir #include <tools/diagnose_ex.h>
281*cdf0e10cSrcweir #endif
282*cdf0e10cSrcweir #ifndef _NUMUNO_HXX
283*cdf0e10cSrcweir #include <svl/numuno.hxx>
284*cdf0e10cSrcweir #endif
285*cdf0e10cSrcweir #ifndef INCLUDED_SVTOOLS_PATHOPTIONS_HXX
286*cdf0e10cSrcweir #include <unotools/pathoptions.hxx>
287*cdf0e10cSrcweir #endif
288*cdf0e10cSrcweir #ifndef SVTOOLS_FILENOTATION_HXX_
289*cdf0e10cSrcweir #include <svl/filenotation.hxx>
290*cdf0e10cSrcweir #endif
291*cdf0e10cSrcweir #ifndef _SVT_FILEVIEW_HXX
292*cdf0e10cSrcweir #include <svtools/fileview.hxx>
293*cdf0e10cSrcweir #endif
294*cdf0e10cSrcweir #ifndef _CONNECTIVITY_FILE_VALUE_HXX_
295*cdf0e10cSrcweir #include <connectivity/FValue.hxx>
296*cdf0e10cSrcweir #endif
297*cdf0e10cSrcweir 
298*cdf0e10cSrcweir // .........................................................................
299*cdf0e10cSrcweir namespace dbaui
300*cdf0e10cSrcweir {
301*cdf0e10cSrcweir // .........................................................................
302*cdf0e10cSrcweir using namespace ::dbtools;
303*cdf0e10cSrcweir using namespace ::comphelper;
304*cdf0e10cSrcweir using namespace ::com::sun::star::uno;
305*cdf0e10cSrcweir using namespace ::com::sun::star::task;
306*cdf0e10cSrcweir using namespace ::com::sun::star::sdbcx;
307*cdf0e10cSrcweir using namespace ::com::sun::star::sdbc;
308*cdf0e10cSrcweir using namespace ::com::sun::star::sdb;
309*cdf0e10cSrcweir using namespace ::com::sun::star::util;
310*cdf0e10cSrcweir using namespace ::com::sun::star::ucb;
311*cdf0e10cSrcweir using namespace ::com::sun::star::beans;
312*cdf0e10cSrcweir using namespace ::com::sun::star::container;
313*cdf0e10cSrcweir using namespace ::com::sun::star::lang;
314*cdf0e10cSrcweir using namespace ::com::sun::star::ui::dialogs;
315*cdf0e10cSrcweir using namespace ::svt;
316*cdf0e10cSrcweir using ::com::sun::star::ucb::InteractiveIOException;
317*cdf0e10cSrcweir using ::com::sun::star::ucb::IOErrorCode_NO_FILE;
318*cdf0e10cSrcweir using ::com::sun::star::ucb::IOErrorCode_NOT_EXISTING;
319*cdf0e10cSrcweir using ::com::sun::star::frame::XModel;
320*cdf0e10cSrcweir 
321*cdf0e10cSrcweir // -----------------------------------------------------------------------------
322*cdf0e10cSrcweir SQLExceptionInfo createConnection(	const ::rtl::OUString& _rsDataSourceName,
323*cdf0e10cSrcweir 	 								const Reference< ::com::sun::star::container::XNameAccess >& _xDatabaseContext,
324*cdf0e10cSrcweir 									const Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rMF,
325*cdf0e10cSrcweir 									Reference< ::com::sun::star::lang::XEventListener>& _rEvtLst,
326*cdf0e10cSrcweir 									Reference< ::com::sun::star::sdbc::XConnection>& _rOUTConnection )
327*cdf0e10cSrcweir {
328*cdf0e10cSrcweir 	Reference<XPropertySet> xProp;
329*cdf0e10cSrcweir 	try
330*cdf0e10cSrcweir 	{
331*cdf0e10cSrcweir 		xProp.set(_xDatabaseContext->getByName(_rsDataSourceName),UNO_QUERY);
332*cdf0e10cSrcweir 	}
333*cdf0e10cSrcweir 	catch(Exception&)
334*cdf0e10cSrcweir 	{
335*cdf0e10cSrcweir 	}
336*cdf0e10cSrcweir 	SQLExceptionInfo aInfo;
337*cdf0e10cSrcweir 
338*cdf0e10cSrcweir 	return createConnection(xProp,_rMF,_rEvtLst,_rOUTConnection);
339*cdf0e10cSrcweir }
340*cdf0e10cSrcweir // -----------------------------------------------------------------------------
341*cdf0e10cSrcweir SQLExceptionInfo createConnection(	const Reference< ::com::sun::star::beans::XPropertySet>& _xDataSource,
342*cdf0e10cSrcweir 									const Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rMF,
343*cdf0e10cSrcweir 									Reference< ::com::sun::star::lang::XEventListener>& _rEvtLst,
344*cdf0e10cSrcweir 									Reference< ::com::sun::star::sdbc::XConnection>& _rOUTConnection )
345*cdf0e10cSrcweir {
346*cdf0e10cSrcweir 	SQLExceptionInfo aInfo;
347*cdf0e10cSrcweir 	if ( !_xDataSource.is() )
348*cdf0e10cSrcweir 	{
349*cdf0e10cSrcweir 		OSL_ENSURE(0,"createConnection: coult not retrieve the data source!");
350*cdf0e10cSrcweir 		return aInfo;
351*cdf0e10cSrcweir 	}
352*cdf0e10cSrcweir 
353*cdf0e10cSrcweir 	::rtl::OUString sPwd, sUser;
354*cdf0e10cSrcweir 	sal_Bool bPwdReq = sal_False;
355*cdf0e10cSrcweir 	try
356*cdf0e10cSrcweir 	{
357*cdf0e10cSrcweir 		_xDataSource->getPropertyValue(PROPERTY_PASSWORD) >>= sPwd;
358*cdf0e10cSrcweir 		bPwdReq = ::cppu::any2bool(_xDataSource->getPropertyValue(PROPERTY_ISPASSWORDREQUIRED));
359*cdf0e10cSrcweir 		_xDataSource->getPropertyValue(PROPERTY_USER) >>= sUser;
360*cdf0e10cSrcweir 	}
361*cdf0e10cSrcweir 	catch(Exception&)
362*cdf0e10cSrcweir 	{
363*cdf0e10cSrcweir 		OSL_ENSURE(0,"createConnection: error while retrieving data source properties!");
364*cdf0e10cSrcweir 	}
365*cdf0e10cSrcweir 
366*cdf0e10cSrcweir 
367*cdf0e10cSrcweir 	try
368*cdf0e10cSrcweir 	{
369*cdf0e10cSrcweir 		if(bPwdReq && !sPwd.getLength())
370*cdf0e10cSrcweir 		{	// password required, but empty -> connect using an interaction handler
371*cdf0e10cSrcweir 			Reference<XCompletedConnection> xConnectionCompletion(_xDataSource, UNO_QUERY);
372*cdf0e10cSrcweir 			if (!xConnectionCompletion.is())
373*cdf0e10cSrcweir 			{
374*cdf0e10cSrcweir 				OSL_ENSURE(0,"createConnection: missing an interface ... need an error message here!");
375*cdf0e10cSrcweir 			}
376*cdf0e10cSrcweir 			else
377*cdf0e10cSrcweir 			{	// instantiate the default SDB interaction handler
378*cdf0e10cSrcweir 				Reference< XInteractionHandler > xHandler(_rMF->createInstance(SERVICE_TASK_INTERACTION_HANDLER), UNO_QUERY);
379*cdf0e10cSrcweir 				if (!xHandler.is())
380*cdf0e10cSrcweir 				{
381*cdf0e10cSrcweir 					OSL_ENSURE(sal_False, "createConnection: could not instantiate an interaction handler!");
382*cdf0e10cSrcweir 					// ShowServiceNotAvailableError(NULL, String(SERVICE_TASK_INTERACTION_HANDLER), sal_True);
383*cdf0e10cSrcweir 						// TODO: a real parent!
384*cdf0e10cSrcweir 				}
385*cdf0e10cSrcweir 				else
386*cdf0e10cSrcweir 					_rOUTConnection = xConnectionCompletion->connectWithCompletion(xHandler);
387*cdf0e10cSrcweir 			}
388*cdf0e10cSrcweir 		}
389*cdf0e10cSrcweir 		else
390*cdf0e10cSrcweir 		{
391*cdf0e10cSrcweir 			Reference<XDataSource> xDataSource(_xDataSource,UNO_QUERY);
392*cdf0e10cSrcweir 			_rOUTConnection = xDataSource->getConnection(sUser, sPwd);
393*cdf0e10cSrcweir 		}
394*cdf0e10cSrcweir 		// be notified when connection is in disposing
395*cdf0e10cSrcweir 		Reference< XComponent >  xComponent(_rOUTConnection, UNO_QUERY);
396*cdf0e10cSrcweir 		if (xComponent.is() && _rEvtLst.is())
397*cdf0e10cSrcweir 			xComponent->addEventListener(_rEvtLst);
398*cdf0e10cSrcweir 	}
399*cdf0e10cSrcweir 	catch(SQLContext& e) { aInfo = SQLExceptionInfo(e); }
400*cdf0e10cSrcweir 	catch(SQLWarning& e) { aInfo = SQLExceptionInfo(e); }
401*cdf0e10cSrcweir 	catch(SQLException& e) { aInfo = SQLExceptionInfo(e); }
402*cdf0e10cSrcweir 	catch(Exception&) { OSL_ENSURE(0,"SbaTableQueryBrowser::OnExpandEntry: could not connect - unknown exception!"); }
403*cdf0e10cSrcweir 
404*cdf0e10cSrcweir 	//	showError(aInfo);
405*cdf0e10cSrcweir 
406*cdf0e10cSrcweir 	return aInfo;
407*cdf0e10cSrcweir }
408*cdf0e10cSrcweir // -----------------------------------------------------------------------------
409*cdf0e10cSrcweir Reference< XDataSource > getDataSourceByName( const ::rtl::OUString& _rDataSourceName,
410*cdf0e10cSrcweir     Window* _pErrorMessageParent, Reference< XMultiServiceFactory > _rxORB, ::dbtools::SQLExceptionInfo* _pErrorInfo )
411*cdf0e10cSrcweir {
412*cdf0e10cSrcweir     ::comphelper::ComponentContext aContext( _rxORB );
413*cdf0e10cSrcweir     Reference< XNameAccess > xDatabaseContext( aContext.createComponent( "com.sun.star.sdb.DatabaseContext" ), UNO_QUERY_THROW );
414*cdf0e10cSrcweir 
415*cdf0e10cSrcweir     Reference< XDataSource > xDatasource;
416*cdf0e10cSrcweir     Any aError;
417*cdf0e10cSrcweir     SQLExceptionInfo aSQLError;
418*cdf0e10cSrcweir 	try
419*cdf0e10cSrcweir 	{
420*cdf0e10cSrcweir 		xDatabaseContext->getByName( _rDataSourceName ) >>= xDatasource;
421*cdf0e10cSrcweir 	}
422*cdf0e10cSrcweir 	catch(const WrappedTargetException& e)
423*cdf0e10cSrcweir 	{
424*cdf0e10cSrcweir         InteractiveIOException aIOException;
425*cdf0e10cSrcweir         if  (   ( e.TargetException >>= aIOException )
426*cdf0e10cSrcweir             &&  (   ( aIOException.Code == IOErrorCode_NO_FILE )
427*cdf0e10cSrcweir                 ||  ( aIOException.Code == IOErrorCode_NOT_EXISTING )
428*cdf0e10cSrcweir                 )
429*cdf0e10cSrcweir             )
430*cdf0e10cSrcweir         {
431*cdf0e10cSrcweir             String sErrorMessage = String( ModuleRes( STR_FILE_DOES_NOT_EXIST ) );
432*cdf0e10cSrcweir 		    OFileNotation aTransformer( e.Message );
433*cdf0e10cSrcweir 		    sErrorMessage.SearchAndReplaceAscii( "$file$", aTransformer.get( OFileNotation::N_SYSTEM ) );
434*cdf0e10cSrcweir             aSQLError = SQLExceptionInfo( sErrorMessage ).get();
435*cdf0e10cSrcweir         }
436*cdf0e10cSrcweir         else
437*cdf0e10cSrcweir         {
438*cdf0e10cSrcweir             aSQLError = SQLExceptionInfo( e.TargetException );
439*cdf0e10cSrcweir             if ( !aSQLError.isValid() )
440*cdf0e10cSrcweir                 aError = e.TargetException;
441*cdf0e10cSrcweir         }
442*cdf0e10cSrcweir 	}
443*cdf0e10cSrcweir     catch( const Exception& )
444*cdf0e10cSrcweir     {
445*cdf0e10cSrcweir         DBG_UNHANDLED_EXCEPTION();
446*cdf0e10cSrcweir     }
447*cdf0e10cSrcweir 
448*cdf0e10cSrcweir 	if ( xDatasource.is() )
449*cdf0e10cSrcweir 		return xDatasource;
450*cdf0e10cSrcweir 
451*cdf0e10cSrcweir     if ( aSQLError.isValid() )
452*cdf0e10cSrcweir     {
453*cdf0e10cSrcweir         if ( _pErrorInfo )
454*cdf0e10cSrcweir         {
455*cdf0e10cSrcweir             *_pErrorInfo = aSQLError;
456*cdf0e10cSrcweir         }
457*cdf0e10cSrcweir         else
458*cdf0e10cSrcweir         {
459*cdf0e10cSrcweir             showError( aSQLError, _pErrorMessageParent, _rxORB );
460*cdf0e10cSrcweir         }
461*cdf0e10cSrcweir     }
462*cdf0e10cSrcweir 
463*cdf0e10cSrcweir     return Reference<XDataSource>();
464*cdf0e10cSrcweir }
465*cdf0e10cSrcweir // -----------------------------------------------------------------------------
466*cdf0e10cSrcweir Reference< XInterface > getDataSourceOrModel(const Reference< XInterface >& _xObject)
467*cdf0e10cSrcweir {
468*cdf0e10cSrcweir 	Reference< XInterface > xRet;
469*cdf0e10cSrcweir 	Reference<XDocumentDataSource> xDocumentDataSource(_xObject,UNO_QUERY);
470*cdf0e10cSrcweir     if ( xDocumentDataSource.is() )
471*cdf0e10cSrcweir         xRet = xDocumentDataSource->getDatabaseDocument();
472*cdf0e10cSrcweir 
473*cdf0e10cSrcweir 	if ( !xRet.is() )
474*cdf0e10cSrcweir 	{
475*cdf0e10cSrcweir 		Reference<XOfficeDatabaseDocument> xOfficeDoc(_xObject,UNO_QUERY);
476*cdf0e10cSrcweir 		if ( xOfficeDoc.is() )
477*cdf0e10cSrcweir 			xRet = xOfficeDoc->getDataSource();
478*cdf0e10cSrcweir 	}
479*cdf0e10cSrcweir 
480*cdf0e10cSrcweir 	return xRet;
481*cdf0e10cSrcweir }
482*cdf0e10cSrcweir // -----------------------------------------------------------------------------
483*cdf0e10cSrcweir void showError(const SQLExceptionInfo& _rInfo,Window* _pParent,const Reference< XMultiServiceFactory >& _xFactory)
484*cdf0e10cSrcweir {
485*cdf0e10cSrcweir 	OSL_ENSURE(_pParent,"showError: Parent window must be NOT NULL!");
486*cdf0e10cSrcweir 	::dbtools::showError(_rInfo,VCLUnoHelper::GetInterface(_pParent),_xFactory);
487*cdf0e10cSrcweir }
488*cdf0e10cSrcweir 
489*cdf0e10cSrcweir // -----------------------------------------------------------------------------
490*cdf0e10cSrcweir ::std::vector< Reference<XNameAccess> > getKeyColumns(const Reference<XIndexAccess >& _rxKeys,
491*cdf0e10cSrcweir 													  sal_Int32 _nKeyType)
492*cdf0e10cSrcweir {
493*cdf0e10cSrcweir 	// use keys and indexes for excat postioning
494*cdf0e10cSrcweir 	// first the keys
495*cdf0e10cSrcweir 	::std::vector< Reference<XNameAccess> > vRet;
496*cdf0e10cSrcweir 	if(_rxKeys.is())
497*cdf0e10cSrcweir 	{
498*cdf0e10cSrcweir 		Reference<XPropertySet> xProp;
499*cdf0e10cSrcweir 		for(sal_Int32 i=0;i< _rxKeys->getCount();++i)
500*cdf0e10cSrcweir 		{
501*cdf0e10cSrcweir 			_rxKeys->getByIndex(i) >>= xProp;
502*cdf0e10cSrcweir 			sal_Int32 nKeyType = 0;
503*cdf0e10cSrcweir 			xProp->getPropertyValue(PROPERTY_TYPE) >>= nKeyType;
504*cdf0e10cSrcweir 			if(_nKeyType == nKeyType)
505*cdf0e10cSrcweir 			{
506*cdf0e10cSrcweir 				Reference<XColumnsSupplier> xKeyColsSup(xProp,UNO_QUERY);
507*cdf0e10cSrcweir 				OSL_ENSURE(xKeyColsSup.is(),"Columnsupplier is null!");
508*cdf0e10cSrcweir 				vRet.push_back(xKeyColsSup->getColumns());
509*cdf0e10cSrcweir 			}
510*cdf0e10cSrcweir 		}
511*cdf0e10cSrcweir 	}
512*cdf0e10cSrcweir 
513*cdf0e10cSrcweir 	return vRet;
514*cdf0e10cSrcweir }
515*cdf0e10cSrcweir // -----------------------------------------------------------------------------
516*cdf0e10cSrcweir 
517*cdf0e10cSrcweir TOTypeInfoSP getTypeInfoFromType(const OTypeInfoMap& _rTypeInfo,
518*cdf0e10cSrcweir 							   sal_Int32 _nType,
519*cdf0e10cSrcweir 							   const ::rtl::OUString& _sTypeName,
520*cdf0e10cSrcweir 							   const ::rtl::OUString& _sCreateParams,
521*cdf0e10cSrcweir 							   sal_Int32 _nPrecision,
522*cdf0e10cSrcweir 							   sal_Int32 _nScale,
523*cdf0e10cSrcweir 							   sal_Bool _bAutoIncrement,
524*cdf0e10cSrcweir 							   sal_Bool& _brForceToType)
525*cdf0e10cSrcweir {
526*cdf0e10cSrcweir 	TOTypeInfoSP pTypeInfo;
527*cdf0e10cSrcweir 	_brForceToType = sal_False;
528*cdf0e10cSrcweir 	// search for type
529*cdf0e10cSrcweir 	::std::pair<OTypeInfoMap::const_iterator, OTypeInfoMap::const_iterator> aPair = _rTypeInfo.equal_range(_nType);
530*cdf0e10cSrcweir 	OTypeInfoMap::const_iterator aIter = aPair.first;
531*cdf0e10cSrcweir 	if(aIter != _rTypeInfo.end()) // compare with end is correct here
532*cdf0e10cSrcweir 	{
533*cdf0e10cSrcweir 		for(;aIter != aPair.second;++aIter)
534*cdf0e10cSrcweir 		{
535*cdf0e10cSrcweir 			// search the best matching type
536*cdf0e10cSrcweir 	#ifdef DBG_UTIL
537*cdf0e10cSrcweir 			::rtl::OUString sDBTypeName			= aIter->second->aTypeName;         (void)sDBTypeName;
538*cdf0e10cSrcweir 			sal_Int32		nDBTypePrecision	= aIter->second->nPrecision;        (void)nDBTypePrecision;
539*cdf0e10cSrcweir 			sal_Int32		nDBTypeScale		= aIter->second->nMaximumScale;     (void)nDBTypeScale;
540*cdf0e10cSrcweir 			sal_Bool		bDBAutoIncrement	= aIter->second->bAutoIncrement;    (void)bDBAutoIncrement;
541*cdf0e10cSrcweir 	#endif
542*cdf0e10cSrcweir 			if	(	(
543*cdf0e10cSrcweir 						!_sTypeName.getLength()
544*cdf0e10cSrcweir 					||	(aIter->second->aTypeName.equalsIgnoreAsciiCase(_sTypeName))
545*cdf0e10cSrcweir 					)
546*cdf0e10cSrcweir 				&&	(
547*cdf0e10cSrcweir 						(
548*cdf0e10cSrcweir 								!aIter->second->aCreateParams.getLength()
549*cdf0e10cSrcweir 							&&	!_sCreateParams.getLength()
550*cdf0e10cSrcweir 						)
551*cdf0e10cSrcweir 					||	(
552*cdf0e10cSrcweir 								(aIter->second->nPrecision		>= _nPrecision)
553*cdf0e10cSrcweir 							&&	(aIter->second->nMaximumScale	>= _nScale)
554*cdf0e10cSrcweir 							&&	( (_bAutoIncrement && aIter->second->bAutoIncrement) || !_bAutoIncrement )
555*cdf0e10cSrcweir 						)
556*cdf0e10cSrcweir 					)
557*cdf0e10cSrcweir 				)
558*cdf0e10cSrcweir 				break;
559*cdf0e10cSrcweir 		}
560*cdf0e10cSrcweir 
561*cdf0e10cSrcweir 		if (aIter == aPair.second)
562*cdf0e10cSrcweir 		{
563*cdf0e10cSrcweir 			for(aIter = aPair.first; aIter != aPair.second; ++aIter)
564*cdf0e10cSrcweir 			{
565*cdf0e10cSrcweir 				sal_Int32 nPrec = aIter->second->nPrecision;
566*cdf0e10cSrcweir 				sal_Int32 nScale = aIter->second->nMaximumScale;
567*cdf0e10cSrcweir 				// search the best matching type (now comparing the local names)
568*cdf0e10cSrcweir 				if	(	(aIter->second->aLocalTypeName.equalsIgnoreAsciiCase(_sTypeName))
569*cdf0e10cSrcweir 					&&	(nPrec	>= _nPrecision)
570*cdf0e10cSrcweir 					&&	(nScale	>= _nScale)
571*cdf0e10cSrcweir 					&&	( (_bAutoIncrement && aIter->second->bAutoIncrement) || !_bAutoIncrement )
572*cdf0e10cSrcweir 					)
573*cdf0e10cSrcweir 				{
574*cdf0e10cSrcweir 					OSL_ENSURE(sal_False,
575*cdf0e10cSrcweir 						(	::rtl::OString("getTypeInfoFromType: assuming column type ")
576*cdf0e10cSrcweir 						+=	::rtl::OString(aIter->second->aTypeName.getStr(), aIter->second->aTypeName.getLength(), gsl_getSystemTextEncoding())
577*cdf0e10cSrcweir 						+=	::rtl::OString("\" (expected type name ")
578*cdf0e10cSrcweir 						+=	::rtl::OString(_sTypeName.getStr(), _sTypeName.getLength(), gsl_getSystemTextEncoding())
579*cdf0e10cSrcweir 						+=	::rtl::OString(" matches the type's local name).")).getStr());
580*cdf0e10cSrcweir 					break;
581*cdf0e10cSrcweir 				}
582*cdf0e10cSrcweir 			}
583*cdf0e10cSrcweir 		}
584*cdf0e10cSrcweir 
585*cdf0e10cSrcweir 		if (aIter == aPair.second)
586*cdf0e10cSrcweir 		{	// no match for the names, no match for the local names
587*cdf0e10cSrcweir 			// -> drop the precision and the scale restriction, accept any type with the property
588*cdf0e10cSrcweir 			// type id (nType)
589*cdf0e10cSrcweir 
590*cdf0e10cSrcweir 			//OSL_ENSURE(sal_False,
591*cdf0e10cSrcweir 			//	(	::rtl::OString("getTypeInfoFromType: did not find a matching type")
592*cdf0e10cSrcweir 			//	+=	::rtl::OString(" (expected type name: ")
593*cdf0e10cSrcweir 			//	+=	::rtl::OString(_sTypeName.getStr(), _sTypeName.getLength(), gsl_getSystemTextEncoding())
594*cdf0e10cSrcweir 			//	+=	::rtl::OString(")! Defaulting to the first matching type.")).getStr());
595*cdf0e10cSrcweir 			for(aIter = aPair.first; aIter != aPair.second; ++aIter)
596*cdf0e10cSrcweir 			{
597*cdf0e10cSrcweir 				// search the best matching type (now comparing the local names)
598*cdf0e10cSrcweir #ifdef DBG_UTIL
599*cdf0e10cSrcweir 				::rtl::OUString sDBTypeName = aIter->second->aTypeName;
600*cdf0e10cSrcweir #endif
601*cdf0e10cSrcweir 				sal_Int32 nPrec = aIter->second->nPrecision;
602*cdf0e10cSrcweir 				sal_Int32 nScale = aIter->second->nMaximumScale;
603*cdf0e10cSrcweir 				if	(	(nPrec	>= _nPrecision)
604*cdf0e10cSrcweir 					&&	(nScale	>= _nScale)
605*cdf0e10cSrcweir 					&&	( (_bAutoIncrement && aIter->second->bAutoIncrement) || !_bAutoIncrement )
606*cdf0e10cSrcweir 					)
607*cdf0e10cSrcweir 					break;
608*cdf0e10cSrcweir 			}
609*cdf0e10cSrcweir 		}
610*cdf0e10cSrcweir 		if (aIter == aPair.second)
611*cdf0e10cSrcweir 		{
612*cdf0e10cSrcweir 			if ( _bAutoIncrement )
613*cdf0e10cSrcweir 			{
614*cdf0e10cSrcweir 				for(aIter = aPair.first; aIter != aPair.second; ++aIter)
615*cdf0e10cSrcweir 				{
616*cdf0e10cSrcweir 					// search the best matching type (now comparing the local names)
617*cdf0e10cSrcweir #ifdef DBG_UTIL
618*cdf0e10cSrcweir 					::rtl::OUString sDBTypeName = aIter->second->aTypeName;
619*cdf0e10cSrcweir #endif
620*cdf0e10cSrcweir 					sal_Int32 nScale = aIter->second->nMaximumScale;
621*cdf0e10cSrcweir 					if	(	(nScale	>= _nScale)
622*cdf0e10cSrcweir 						&&	(aIter->second->bAutoIncrement	== _bAutoIncrement)
623*cdf0e10cSrcweir 						)
624*cdf0e10cSrcweir 						break;
625*cdf0e10cSrcweir 				}
626*cdf0e10cSrcweir 				if ( aIter == aPair.second )
627*cdf0e10cSrcweir 				{
628*cdf0e10cSrcweir 					// try it without the auto increment flag
629*cdf0e10cSrcweir 					pTypeInfo = getTypeInfoFromType(_rTypeInfo,
630*cdf0e10cSrcweir 								   _nType,
631*cdf0e10cSrcweir 								   _sTypeName,
632*cdf0e10cSrcweir 								   _sCreateParams,
633*cdf0e10cSrcweir 								   _nPrecision,
634*cdf0e10cSrcweir 								   _nScale,
635*cdf0e10cSrcweir 								   sal_False,
636*cdf0e10cSrcweir 								   _brForceToType);
637*cdf0e10cSrcweir 				}
638*cdf0e10cSrcweir 				else
639*cdf0e10cSrcweir 					pTypeInfo = aIter->second;
640*cdf0e10cSrcweir 			}
641*cdf0e10cSrcweir 			else
642*cdf0e10cSrcweir 			{
643*cdf0e10cSrcweir 				pTypeInfo = aPair.first->second;
644*cdf0e10cSrcweir 				_brForceToType = sal_True;
645*cdf0e10cSrcweir 			}
646*cdf0e10cSrcweir 		}
647*cdf0e10cSrcweir 		else
648*cdf0e10cSrcweir 			pTypeInfo = aIter->second;
649*cdf0e10cSrcweir 	}
650*cdf0e10cSrcweir 	else
651*cdf0e10cSrcweir 	{
652*cdf0e10cSrcweir 		::comphelper::TStringMixEqualFunctor aCase(sal_False);
653*cdf0e10cSrcweir 		// search for typeinfo where the typename is equal _sTypeName
654*cdf0e10cSrcweir 		OTypeInfoMap::const_iterator typeInfoLoop = _rTypeInfo.begin();
655*cdf0e10cSrcweir 		OTypeInfoMap::const_iterator typeInfoEnd  = _rTypeInfo.end();
656*cdf0e10cSrcweir 		for (; typeInfoLoop != typeInfoEnd; ++typeInfoLoop)
657*cdf0e10cSrcweir 		{
658*cdf0e10cSrcweir 			if ( aCase( typeInfoLoop->second->getDBName() , _sTypeName ) )
659*cdf0e10cSrcweir             {
660*cdf0e10cSrcweir 			    pTypeInfo = typeInfoLoop->second;
661*cdf0e10cSrcweir 				break;
662*cdf0e10cSrcweir             }
663*cdf0e10cSrcweir 		}
664*cdf0e10cSrcweir 	}
665*cdf0e10cSrcweir 
666*cdf0e10cSrcweir 	OSL_ENSURE(pTypeInfo, "getTypeInfoFromType: no type info found for this type!");
667*cdf0e10cSrcweir 	return pTypeInfo;
668*cdf0e10cSrcweir }
669*cdf0e10cSrcweir // -----------------------------------------------------------------------------
670*cdf0e10cSrcweir void fillTypeInfo(	const Reference< ::com::sun::star::sdbc::XConnection>& _rxConnection,
671*cdf0e10cSrcweir 					const String& _rsTypeNames,
672*cdf0e10cSrcweir 					OTypeInfoMap& _rTypeInfoMap,
673*cdf0e10cSrcweir 					::std::vector<OTypeInfoMap::iterator>& _rTypeInfoIters)
674*cdf0e10cSrcweir {
675*cdf0e10cSrcweir 	if(!_rxConnection.is())
676*cdf0e10cSrcweir 		return;
677*cdf0e10cSrcweir 	Reference< XResultSet> xRs = _rxConnection->getMetaData ()->getTypeInfo ();
678*cdf0e10cSrcweir 	Reference< XRow> xRow(xRs,UNO_QUERY);
679*cdf0e10cSrcweir 	// Information for a single SQL type
680*cdf0e10cSrcweir 	if(xRs.is())
681*cdf0e10cSrcweir 	{
682*cdf0e10cSrcweir 		static const ::rtl::OUString aB1 = ::rtl::OUString::createFromAscii(" [ ");
683*cdf0e10cSrcweir 		static const ::rtl::OUString aB2 = ::rtl::OUString::createFromAscii(" ]");
684*cdf0e10cSrcweir         Reference<XResultSetMetaData> xResultSetMetaData = Reference<XResultSetMetaDataSupplier>(xRs,UNO_QUERY)->getMetaData();
685*cdf0e10cSrcweir         ::connectivity::ORowSetValue aValue;
686*cdf0e10cSrcweir         ::std::vector<sal_Int32> aTypes;
687*cdf0e10cSrcweir         ::std::vector<sal_Bool> aNullable;
688*cdf0e10cSrcweir 		// Loop on the result set until we reach end of file
689*cdf0e10cSrcweir 		while (xRs->next())
690*cdf0e10cSrcweir 		{
691*cdf0e10cSrcweir 			TOTypeInfoSP pInfo(new OTypeInfo());
692*cdf0e10cSrcweir             sal_Int32 nPos = 1;
693*cdf0e10cSrcweir             if ( aTypes.empty() )
694*cdf0e10cSrcweir             {
695*cdf0e10cSrcweir                 sal_Int32 nCount = xResultSetMetaData->getColumnCount();
696*cdf0e10cSrcweir                 if ( nCount < 1 )
697*cdf0e10cSrcweir                     nCount = 18;
698*cdf0e10cSrcweir                 aTypes.reserve(nCount+1);
699*cdf0e10cSrcweir                 aTypes.push_back(-1);
700*cdf0e10cSrcweir                 aNullable.push_back(sal_False);
701*cdf0e10cSrcweir                 for (sal_Int32 j = 1; j <= nCount ; ++j)
702*cdf0e10cSrcweir                 {
703*cdf0e10cSrcweir                     aTypes.push_back(xResultSetMetaData->getColumnType(j));
704*cdf0e10cSrcweir                     aNullable.push_back(xResultSetMetaData->isNullable(j) != ColumnValue::NO_NULLS);
705*cdf0e10cSrcweir                 }
706*cdf0e10cSrcweir             }
707*cdf0e10cSrcweir 
708*cdf0e10cSrcweir             aValue.fill(nPos,aTypes[nPos],aNullable[nPos],xRow);
709*cdf0e10cSrcweir 			pInfo->aTypeName		= aValue;
710*cdf0e10cSrcweir 			++nPos;
711*cdf0e10cSrcweir             aValue.fill(nPos,aTypes[nPos],aNullable[nPos],xRow);
712*cdf0e10cSrcweir 			pInfo->nType			= aValue;
713*cdf0e10cSrcweir 			++nPos;
714*cdf0e10cSrcweir             aValue.fill(nPos,aTypes[nPos],aNullable[nPos],xRow);
715*cdf0e10cSrcweir 			pInfo->nPrecision		= aValue;
716*cdf0e10cSrcweir 			++nPos;
717*cdf0e10cSrcweir             aValue.fill(nPos,aTypes[nPos],aNullable[nPos],xRow);
718*cdf0e10cSrcweir 			pInfo->aLiteralPrefix	= aValue;
719*cdf0e10cSrcweir 			++nPos;
720*cdf0e10cSrcweir             aValue.fill(nPos,aTypes[nPos],aNullable[nPos],xRow);
721*cdf0e10cSrcweir 			pInfo->aLiteralSuffix	= aValue;
722*cdf0e10cSrcweir 			++nPos;
723*cdf0e10cSrcweir             aValue.fill(nPos,aTypes[nPos],aNullable[nPos],xRow);
724*cdf0e10cSrcweir 			pInfo->aCreateParams	= aValue;
725*cdf0e10cSrcweir 			++nPos;
726*cdf0e10cSrcweir             aValue.fill(nPos,aTypes[nPos],aNullable[nPos],xRow);
727*cdf0e10cSrcweir 			pInfo->bNullable		= (sal_Int32)aValue == ColumnValue::NULLABLE;
728*cdf0e10cSrcweir 			++nPos;
729*cdf0e10cSrcweir             aValue.fill(nPos,aTypes[nPos],aNullable[nPos],xRow);
730*cdf0e10cSrcweir 			pInfo->bCaseSensitive	= (sal_Bool)aValue;
731*cdf0e10cSrcweir 			++nPos;
732*cdf0e10cSrcweir             aValue.fill(nPos,aTypes[nPos],aNullable[nPos],xRow);
733*cdf0e10cSrcweir 			pInfo->nSearchType		= aValue;
734*cdf0e10cSrcweir 			++nPos;
735*cdf0e10cSrcweir             aValue.fill(nPos,aTypes[nPos],aNullable[nPos],xRow);
736*cdf0e10cSrcweir 			pInfo->bUnsigned		= (sal_Bool)aValue;
737*cdf0e10cSrcweir 			++nPos;
738*cdf0e10cSrcweir             aValue.fill(nPos,aTypes[nPos],aNullable[nPos],xRow);
739*cdf0e10cSrcweir 			pInfo->bCurrency		= (sal_Bool)aValue;
740*cdf0e10cSrcweir 			++nPos;
741*cdf0e10cSrcweir             aValue.fill(nPos,aTypes[nPos],aNullable[nPos],xRow);
742*cdf0e10cSrcweir 			pInfo->bAutoIncrement	= (sal_Bool)aValue;
743*cdf0e10cSrcweir 			++nPos;
744*cdf0e10cSrcweir             aValue.fill(nPos,aTypes[nPos],aNullable[nPos],xRow);
745*cdf0e10cSrcweir 			pInfo->aLocalTypeName	= aValue;
746*cdf0e10cSrcweir 			++nPos;
747*cdf0e10cSrcweir             aValue.fill(nPos,aTypes[nPos],aNullable[nPos],xRow);
748*cdf0e10cSrcweir 			pInfo->nMinimumScale	= aValue;
749*cdf0e10cSrcweir 			++nPos;
750*cdf0e10cSrcweir             aValue.fill(nPos,aTypes[nPos],aNullable[nPos],xRow);
751*cdf0e10cSrcweir 			pInfo->nMaximumScale	= aValue;
752*cdf0e10cSrcweir             nPos = 18;
753*cdf0e10cSrcweir             aValue.fill(nPos,aTypes[nPos],aNullable[nPos],xRow);
754*cdf0e10cSrcweir 
755*cdf0e10cSrcweir 			// check if values are less than zero like it happens in a oracle jdbc driver
756*cdf0e10cSrcweir 			if( pInfo->nPrecision < 0)
757*cdf0e10cSrcweir 				pInfo->nPrecision = 0;
758*cdf0e10cSrcweir 			if( pInfo->nMinimumScale < 0)
759*cdf0e10cSrcweir 				pInfo->nMinimumScale = 0;
760*cdf0e10cSrcweir 			if( pInfo->nMaximumScale < 0)
761*cdf0e10cSrcweir 				pInfo->nMaximumScale = 0;
762*cdf0e10cSrcweir 
763*cdf0e10cSrcweir 			String aName;
764*cdf0e10cSrcweir 			switch(pInfo->nType)
765*cdf0e10cSrcweir 			{
766*cdf0e10cSrcweir 				case DataType::CHAR:
767*cdf0e10cSrcweir 					aName = _rsTypeNames.GetToken(TYPE_CHAR);
768*cdf0e10cSrcweir 					break;
769*cdf0e10cSrcweir 				case DataType::VARCHAR:
770*cdf0e10cSrcweir 					aName = _rsTypeNames.GetToken(TYPE_TEXT);
771*cdf0e10cSrcweir 					break;
772*cdf0e10cSrcweir 				case DataType::DECIMAL:
773*cdf0e10cSrcweir 					aName = _rsTypeNames.GetToken(TYPE_DECIMAL);
774*cdf0e10cSrcweir 					break;
775*cdf0e10cSrcweir 				case DataType::NUMERIC:
776*cdf0e10cSrcweir 					aName = _rsTypeNames.GetToken(TYPE_NUMERIC);
777*cdf0e10cSrcweir 					break;
778*cdf0e10cSrcweir 				case DataType::BIGINT:
779*cdf0e10cSrcweir 					aName = _rsTypeNames.GetToken(TYPE_BIGINT);
780*cdf0e10cSrcweir 					break;
781*cdf0e10cSrcweir 				case DataType::FLOAT:
782*cdf0e10cSrcweir 					aName = _rsTypeNames.GetToken(TYPE_FLOAT);
783*cdf0e10cSrcweir 					break;
784*cdf0e10cSrcweir 				case DataType::DOUBLE:
785*cdf0e10cSrcweir 					aName = _rsTypeNames.GetToken(TYPE_DOUBLE);
786*cdf0e10cSrcweir 					break;
787*cdf0e10cSrcweir 				case DataType::LONGVARCHAR:
788*cdf0e10cSrcweir 					aName = _rsTypeNames.GetToken(TYPE_MEMO);
789*cdf0e10cSrcweir 					break;
790*cdf0e10cSrcweir 				case DataType::LONGVARBINARY:
791*cdf0e10cSrcweir 					aName = _rsTypeNames.GetToken(TYPE_IMAGE);
792*cdf0e10cSrcweir 					break;
793*cdf0e10cSrcweir 				case DataType::DATE:
794*cdf0e10cSrcweir 					aName = _rsTypeNames.GetToken(TYPE_DATE);
795*cdf0e10cSrcweir 					break;
796*cdf0e10cSrcweir 				case DataType::TIME:
797*cdf0e10cSrcweir 					aName = _rsTypeNames.GetToken(TYPE_TIME);
798*cdf0e10cSrcweir 					break;
799*cdf0e10cSrcweir 				case DataType::TIMESTAMP:
800*cdf0e10cSrcweir 					aName = _rsTypeNames.GetToken(TYPE_DATETIME);
801*cdf0e10cSrcweir 					break;
802*cdf0e10cSrcweir 				case DataType::BIT:
803*cdf0e10cSrcweir 					if ( pInfo->aCreateParams.getLength() )
804*cdf0e10cSrcweir 					{
805*cdf0e10cSrcweir 						aName = _rsTypeNames.GetToken(TYPE_BIT);
806*cdf0e10cSrcweir 						break;
807*cdf0e10cSrcweir 					}
808*cdf0e10cSrcweir 					// run through
809*cdf0e10cSrcweir 				case DataType::BOOLEAN:
810*cdf0e10cSrcweir 					aName = _rsTypeNames.GetToken(TYPE_BOOL);
811*cdf0e10cSrcweir 					break;
812*cdf0e10cSrcweir 				case DataType::TINYINT:
813*cdf0e10cSrcweir 					aName = _rsTypeNames.GetToken(TYPE_TINYINT);
814*cdf0e10cSrcweir 					break;
815*cdf0e10cSrcweir 				case DataType::SMALLINT:
816*cdf0e10cSrcweir 					aName = _rsTypeNames.GetToken(TYPE_SMALLINT);
817*cdf0e10cSrcweir 					break;
818*cdf0e10cSrcweir 				case DataType::INTEGER:
819*cdf0e10cSrcweir 					aName = _rsTypeNames.GetToken(TYPE_INTEGER);
820*cdf0e10cSrcweir 					break;
821*cdf0e10cSrcweir 				case DataType::REAL:
822*cdf0e10cSrcweir 					aName = _rsTypeNames.GetToken(TYPE_REAL);
823*cdf0e10cSrcweir 					break;
824*cdf0e10cSrcweir 				case DataType::BINARY:
825*cdf0e10cSrcweir 					aName = _rsTypeNames.GetToken(TYPE_BINARY);
826*cdf0e10cSrcweir 					break;
827*cdf0e10cSrcweir 				case DataType::VARBINARY:
828*cdf0e10cSrcweir 					aName = _rsTypeNames.GetToken(TYPE_VARBINARY);
829*cdf0e10cSrcweir 					break;
830*cdf0e10cSrcweir 				case DataType::SQLNULL:
831*cdf0e10cSrcweir 					aName = _rsTypeNames.GetToken(TYPE_SQLNULL);
832*cdf0e10cSrcweir 					break;
833*cdf0e10cSrcweir 				case DataType::OBJECT:
834*cdf0e10cSrcweir 					aName = _rsTypeNames.GetToken(TYPE_OBJECT);
835*cdf0e10cSrcweir 					break;
836*cdf0e10cSrcweir 				case DataType::DISTINCT:
837*cdf0e10cSrcweir 					aName = _rsTypeNames.GetToken(TYPE_DISTINCT);
838*cdf0e10cSrcweir 					break;
839*cdf0e10cSrcweir 				case DataType::STRUCT:
840*cdf0e10cSrcweir 					aName = _rsTypeNames.GetToken(TYPE_STRUCT);
841*cdf0e10cSrcweir 					break;
842*cdf0e10cSrcweir 				case DataType::ARRAY:
843*cdf0e10cSrcweir 					aName = _rsTypeNames.GetToken(TYPE_ARRAY);
844*cdf0e10cSrcweir 					break;
845*cdf0e10cSrcweir 				case DataType::BLOB:
846*cdf0e10cSrcweir 					aName = _rsTypeNames.GetToken(TYPE_BLOB);
847*cdf0e10cSrcweir 					break;
848*cdf0e10cSrcweir 				case DataType::CLOB:
849*cdf0e10cSrcweir 					aName = _rsTypeNames.GetToken(TYPE_CLOB);
850*cdf0e10cSrcweir 					break;
851*cdf0e10cSrcweir 				case DataType::REF:
852*cdf0e10cSrcweir 					aName = _rsTypeNames.GetToken(TYPE_REF);
853*cdf0e10cSrcweir 					break;
854*cdf0e10cSrcweir 				case DataType::OTHER:
855*cdf0e10cSrcweir 					aName = _rsTypeNames.GetToken(TYPE_OTHER);
856*cdf0e10cSrcweir 					break;
857*cdf0e10cSrcweir 			}
858*cdf0e10cSrcweir 			if ( aName.Len() )
859*cdf0e10cSrcweir 			{
860*cdf0e10cSrcweir 				pInfo->aUIName = aName.GetBuffer();
861*cdf0e10cSrcweir 				pInfo->aUIName += aB1;
862*cdf0e10cSrcweir 			}
863*cdf0e10cSrcweir 			pInfo->aUIName += pInfo->aTypeName;
864*cdf0e10cSrcweir 			if ( aName.Len() )
865*cdf0e10cSrcweir 				pInfo->aUIName += aB2;
866*cdf0e10cSrcweir 			// Now that we have the type info, save it in the multimap
867*cdf0e10cSrcweir 			_rTypeInfoMap.insert(OTypeInfoMap::value_type(pInfo->nType,pInfo));
868*cdf0e10cSrcweir 		}
869*cdf0e10cSrcweir 		// for a faster index access
870*cdf0e10cSrcweir 		_rTypeInfoIters.reserve(_rTypeInfoMap.size());
871*cdf0e10cSrcweir 
872*cdf0e10cSrcweir 		OTypeInfoMap::iterator aIter = _rTypeInfoMap.begin();
873*cdf0e10cSrcweir         OTypeInfoMap::iterator aEnd = _rTypeInfoMap.end();
874*cdf0e10cSrcweir 		for(;aIter != aEnd;++aIter)
875*cdf0e10cSrcweir 			_rTypeInfoIters.push_back(aIter);
876*cdf0e10cSrcweir 
877*cdf0e10cSrcweir 		// Close the result set/statement.
878*cdf0e10cSrcweir 
879*cdf0e10cSrcweir 		::comphelper::disposeComponent(xRs);
880*cdf0e10cSrcweir 	}
881*cdf0e10cSrcweir }
882*cdf0e10cSrcweir // -----------------------------------------------------------------------------
883*cdf0e10cSrcweir void setColumnProperties(const Reference<XPropertySet>& _rxColumn,const OFieldDescription* _pFieldDesc)
884*cdf0e10cSrcweir {
885*cdf0e10cSrcweir 	_rxColumn->setPropertyValue(PROPERTY_NAME,makeAny(_pFieldDesc->GetName()));
886*cdf0e10cSrcweir 	_rxColumn->setPropertyValue(PROPERTY_TYPENAME,makeAny(_pFieldDesc->getTypeInfo()->aTypeName));
887*cdf0e10cSrcweir 	_rxColumn->setPropertyValue(PROPERTY_TYPE,makeAny(_pFieldDesc->GetType()));
888*cdf0e10cSrcweir 	_rxColumn->setPropertyValue(PROPERTY_PRECISION,makeAny(_pFieldDesc->GetPrecision()));
889*cdf0e10cSrcweir 	_rxColumn->setPropertyValue(PROPERTY_SCALE,makeAny(_pFieldDesc->GetScale()));
890*cdf0e10cSrcweir 	_rxColumn->setPropertyValue(PROPERTY_ISNULLABLE, makeAny(_pFieldDesc->GetIsNullable()));
891*cdf0e10cSrcweir 	_rxColumn->setPropertyValue(PROPERTY_ISAUTOINCREMENT,::cppu::bool2any(_pFieldDesc->IsAutoIncrement()));
892*cdf0e10cSrcweir     _rxColumn->setPropertyValue(PROPERTY_DESCRIPTION,makeAny(_pFieldDesc->GetDescription()));
893*cdf0e10cSrcweir 	if ( _rxColumn->getPropertySetInfo()->hasPropertyByName(PROPERTY_ISCURRENCY) && _pFieldDesc->IsCurrency() )
894*cdf0e10cSrcweir 		_rxColumn->setPropertyValue(PROPERTY_ISCURRENCY,::cppu::bool2any(_pFieldDesc->IsCurrency()));
895*cdf0e10cSrcweir 	// set autoincrement value when available
896*cdf0e10cSrcweir 	// and only set when the entry is not empty, that lets the value in the column untouched
897*cdf0e10cSrcweir 	if ( _pFieldDesc->IsAutoIncrement() && _pFieldDesc->GetAutoIncrementValue().getLength() && _rxColumn->getPropertySetInfo()->hasPropertyByName(PROPERTY_AUTOINCREMENTCREATION) )
898*cdf0e10cSrcweir 		_rxColumn->setPropertyValue(PROPERTY_AUTOINCREMENTCREATION,makeAny(_pFieldDesc->GetAutoIncrementValue()));
899*cdf0e10cSrcweir }
900*cdf0e10cSrcweir // -----------------------------------------------------------------------------
901*cdf0e10cSrcweir ::rtl::OUString createDefaultName(const Reference< XDatabaseMetaData>& _xMetaData,const Reference<XNameAccess>& _xTables,const ::rtl::OUString& _sName)
902*cdf0e10cSrcweir {
903*cdf0e10cSrcweir 	OSL_ENSURE(_xMetaData.is(),"No MetaData!");
904*cdf0e10cSrcweir 	::rtl::OUString sDefaultName = _sName;
905*cdf0e10cSrcweir 	try
906*cdf0e10cSrcweir 	{
907*cdf0e10cSrcweir 		::rtl::OUString sCatalog,sSchema,sCompsedName;
908*cdf0e10cSrcweir 		if(_xMetaData->supportsCatalogsInTableDefinitions())
909*cdf0e10cSrcweir 		{
910*cdf0e10cSrcweir 			try
911*cdf0e10cSrcweir 			{
912*cdf0e10cSrcweir 				Reference< XConnection> xCon = _xMetaData->getConnection();
913*cdf0e10cSrcweir 				if ( xCon.is() )
914*cdf0e10cSrcweir 					sCatalog = xCon->getCatalog();
915*cdf0e10cSrcweir 				if ( !sCatalog.getLength() )
916*cdf0e10cSrcweir 				{
917*cdf0e10cSrcweir 					Reference<XResultSet> xRes = _xMetaData->getCatalogs();
918*cdf0e10cSrcweir 					Reference<XRow> xRow(xRes,UNO_QUERY);
919*cdf0e10cSrcweir 					while(xRes.is() && xRes->next())
920*cdf0e10cSrcweir 					{
921*cdf0e10cSrcweir 						sCatalog = xRow->getString(1);
922*cdf0e10cSrcweir 						if(!xRow->wasNull())
923*cdf0e10cSrcweir 							break;
924*cdf0e10cSrcweir 					}
925*cdf0e10cSrcweir 				}
926*cdf0e10cSrcweir 			}
927*cdf0e10cSrcweir 			catch(const SQLException&)
928*cdf0e10cSrcweir 			{
929*cdf0e10cSrcweir 			}
930*cdf0e10cSrcweir 		}
931*cdf0e10cSrcweir 		if(_xMetaData->supportsSchemasInTableDefinitions())
932*cdf0e10cSrcweir 		{
933*cdf0e10cSrcweir 			sSchema = _xMetaData->getUserName();
934*cdf0e10cSrcweir 		}
935*cdf0e10cSrcweir 		sCompsedName = ::dbtools::composeTableName( _xMetaData, sCatalog, sSchema, _sName, sal_False, ::dbtools::eInDataManipulation );
936*cdf0e10cSrcweir 		sDefaultName = ::dbtools::createUniqueName(_xTables,sCompsedName);
937*cdf0e10cSrcweir 	}
938*cdf0e10cSrcweir 	catch(const SQLException&)
939*cdf0e10cSrcweir 	{
940*cdf0e10cSrcweir 	}
941*cdf0e10cSrcweir 	return sDefaultName;
942*cdf0e10cSrcweir }
943*cdf0e10cSrcweir // -----------------------------------------------------------------------------
944*cdf0e10cSrcweir sal_Bool checkDataSourceAvailable(const ::rtl::OUString& _sDataSourceName,const Reference< ::com::sun::star::lang::XMultiServiceFactory >& _xORB)
945*cdf0e10cSrcweir {
946*cdf0e10cSrcweir 	sal_Bool bRet = sal_False;
947*cdf0e10cSrcweir 	Reference< XNameAccess > xDataBaseContext(_xORB->createInstance(SERVICE_SDB_DATABASECONTEXT), UNO_QUERY);
948*cdf0e10cSrcweir 	if ( xDataBaseContext.is() )
949*cdf0e10cSrcweir 	{
950*cdf0e10cSrcweir 		bRet = xDataBaseContext->hasByName(_sDataSourceName);
951*cdf0e10cSrcweir 		if ( !bRet )
952*cdf0e10cSrcweir 		{ // try if this one is a URL
953*cdf0e10cSrcweir 			try
954*cdf0e10cSrcweir 			{
955*cdf0e10cSrcweir 				bRet = xDataBaseContext->getByName(_sDataSourceName).hasValue();
956*cdf0e10cSrcweir 			}
957*cdf0e10cSrcweir 			catch(Exception)
958*cdf0e10cSrcweir 			{
959*cdf0e10cSrcweir 			}
960*cdf0e10cSrcweir 		}
961*cdf0e10cSrcweir 	}
962*cdf0e10cSrcweir 	return bRet;
963*cdf0e10cSrcweir }
964*cdf0e10cSrcweir // -----------------------------------------------------------------------------
965*cdf0e10cSrcweir sal_Int32 mapTextAllign(const SvxCellHorJustify& _eAlignment)
966*cdf0e10cSrcweir {
967*cdf0e10cSrcweir 	sal_Int32 nAlignment = com::sun::star::awt::TextAlign::LEFT;
968*cdf0e10cSrcweir 	switch (_eAlignment)
969*cdf0e10cSrcweir 	{
970*cdf0e10cSrcweir 		case SVX_HOR_JUSTIFY_STANDARD:
971*cdf0e10cSrcweir 		case SVX_HOR_JUSTIFY_LEFT:		nAlignment = ::com::sun::star::awt::TextAlign::LEFT;	break;
972*cdf0e10cSrcweir 		case SVX_HOR_JUSTIFY_CENTER:	nAlignment = ::com::sun::star::awt::TextAlign::CENTER;	break;
973*cdf0e10cSrcweir 		case SVX_HOR_JUSTIFY_RIGHT:		nAlignment = ::com::sun::star::awt::TextAlign::RIGHT;	break;
974*cdf0e10cSrcweir 		default:
975*cdf0e10cSrcweir 			OSL_ENSURE(0,"Invalid TextAlign!");
976*cdf0e10cSrcweir 	}
977*cdf0e10cSrcweir 	return nAlignment;
978*cdf0e10cSrcweir }
979*cdf0e10cSrcweir // -----------------------------------------------------------------------------
980*cdf0e10cSrcweir SvxCellHorJustify mapTextJustify(const sal_Int32& _nAlignment)
981*cdf0e10cSrcweir {
982*cdf0e10cSrcweir 	SvxCellHorJustify eJustify = SVX_HOR_JUSTIFY_LEFT;
983*cdf0e10cSrcweir 	switch (_nAlignment)
984*cdf0e10cSrcweir 	{
985*cdf0e10cSrcweir 		case ::com::sun::star::awt::TextAlign::LEFT		: eJustify = SVX_HOR_JUSTIFY_LEFT; break;
986*cdf0e10cSrcweir 		case ::com::sun::star::awt::TextAlign::CENTER	: eJustify = SVX_HOR_JUSTIFY_CENTER; break;
987*cdf0e10cSrcweir 		case ::com::sun::star::awt::TextAlign::RIGHT	: eJustify = SVX_HOR_JUSTIFY_RIGHT; break;
988*cdf0e10cSrcweir 		default:
989*cdf0e10cSrcweir 			OSL_ENSURE(0,"Invalid TextAlign!");
990*cdf0e10cSrcweir 	}
991*cdf0e10cSrcweir 	return eJustify;
992*cdf0e10cSrcweir }
993*cdf0e10cSrcweir // -----------------------------------------------------------------------------
994*cdf0e10cSrcweir float ConvertFontWeight( ::FontWeight eWeight )
995*cdf0e10cSrcweir {
996*cdf0e10cSrcweir 	if( eWeight == WEIGHT_DONTKNOW )
997*cdf0e10cSrcweir 		return ::com::sun::star::awt::FontWeight::DONTKNOW;
998*cdf0e10cSrcweir 	else if( eWeight == WEIGHT_THIN )
999*cdf0e10cSrcweir 		return ::com::sun::star::awt::FontWeight::THIN;
1000*cdf0e10cSrcweir 	else if( eWeight == WEIGHT_ULTRALIGHT )
1001*cdf0e10cSrcweir 		return ::com::sun::star::awt::FontWeight::ULTRALIGHT;
1002*cdf0e10cSrcweir 	else if( eWeight == WEIGHT_LIGHT )
1003*cdf0e10cSrcweir 		return ::com::sun::star::awt::FontWeight::LIGHT;
1004*cdf0e10cSrcweir 	else if( eWeight == WEIGHT_SEMILIGHT )
1005*cdf0e10cSrcweir 		return ::com::sun::star::awt::FontWeight::SEMILIGHT;
1006*cdf0e10cSrcweir 	else if( ( eWeight == WEIGHT_NORMAL ) || ( eWeight == WEIGHT_MEDIUM ) )
1007*cdf0e10cSrcweir 		return ::com::sun::star::awt::FontWeight::NORMAL;
1008*cdf0e10cSrcweir 	else if( eWeight == WEIGHT_SEMIBOLD )
1009*cdf0e10cSrcweir 		return ::com::sun::star::awt::FontWeight::SEMIBOLD;
1010*cdf0e10cSrcweir 	else if( eWeight == WEIGHT_BOLD )
1011*cdf0e10cSrcweir 		return ::com::sun::star::awt::FontWeight::BOLD;
1012*cdf0e10cSrcweir 	else if( eWeight == WEIGHT_ULTRABOLD )
1013*cdf0e10cSrcweir 		return ::com::sun::star::awt::FontWeight::ULTRABOLD;
1014*cdf0e10cSrcweir 	else if( eWeight == WEIGHT_BLACK )
1015*cdf0e10cSrcweir 		return ::com::sun::star::awt::FontWeight::BLACK;
1016*cdf0e10cSrcweir 
1017*cdf0e10cSrcweir 	OSL_ENSURE(0, "Unknown FontWeigth" );
1018*cdf0e10cSrcweir 	return ::com::sun::star::awt::FontWeight::DONTKNOW;
1019*cdf0e10cSrcweir }
1020*cdf0e10cSrcweir // -----------------------------------------------------------------------------
1021*cdf0e10cSrcweir float ConvertFontWidth( ::FontWidth eWidth )
1022*cdf0e10cSrcweir {
1023*cdf0e10cSrcweir 	if( eWidth == WIDTH_DONTKNOW )
1024*cdf0e10cSrcweir 		return ::com::sun::star::awt::FontWidth::DONTKNOW;
1025*cdf0e10cSrcweir 	else if( eWidth == WIDTH_ULTRA_CONDENSED )
1026*cdf0e10cSrcweir 		return ::com::sun::star::awt::FontWidth::ULTRACONDENSED;
1027*cdf0e10cSrcweir 	else if( eWidth == WIDTH_EXTRA_CONDENSED )
1028*cdf0e10cSrcweir 		return ::com::sun::star::awt::FontWidth::EXTRACONDENSED;
1029*cdf0e10cSrcweir 	else if( eWidth == WIDTH_CONDENSED )
1030*cdf0e10cSrcweir 		return ::com::sun::star::awt::FontWidth::CONDENSED;
1031*cdf0e10cSrcweir 	else if( eWidth == WIDTH_SEMI_CONDENSED )
1032*cdf0e10cSrcweir 		return ::com::sun::star::awt::FontWidth::SEMICONDENSED;
1033*cdf0e10cSrcweir 	else if( eWidth == WIDTH_NORMAL )
1034*cdf0e10cSrcweir 		return ::com::sun::star::awt::FontWidth::NORMAL;
1035*cdf0e10cSrcweir 	else if( eWidth == WIDTH_SEMI_EXPANDED )
1036*cdf0e10cSrcweir 		return ::com::sun::star::awt::FontWidth::SEMIEXPANDED;
1037*cdf0e10cSrcweir 	else if( eWidth == WIDTH_EXPANDED )
1038*cdf0e10cSrcweir 		return ::com::sun::star::awt::FontWidth::EXPANDED;
1039*cdf0e10cSrcweir 	else if( eWidth == WIDTH_EXTRA_EXPANDED )
1040*cdf0e10cSrcweir 		return ::com::sun::star::awt::FontWidth::EXTRAEXPANDED;
1041*cdf0e10cSrcweir 	else if( eWidth == WIDTH_ULTRA_EXPANDED )
1042*cdf0e10cSrcweir 		return ::com::sun::star::awt::FontWidth::ULTRAEXPANDED;
1043*cdf0e10cSrcweir 
1044*cdf0e10cSrcweir 	OSL_ENSURE(0, "Unknown FontWidth" );
1045*cdf0e10cSrcweir 	return ::com::sun::star::awt::FontWidth::DONTKNOW;
1046*cdf0e10cSrcweir }
1047*cdf0e10cSrcweir // -----------------------------------------------------------------------------
1048*cdf0e10cSrcweir ::com::sun::star::awt::FontDescriptor CreateFontDescriptor( const Font& rFont )
1049*cdf0e10cSrcweir {
1050*cdf0e10cSrcweir 	::com::sun::star::awt::FontDescriptor aFD;
1051*cdf0e10cSrcweir 	aFD.Name			= rFont.GetName();
1052*cdf0e10cSrcweir 	aFD.StyleName		= rFont.GetStyleName();
1053*cdf0e10cSrcweir 	aFD.Height			= (sal_Int16)rFont.GetSize().Height();
1054*cdf0e10cSrcweir 	aFD.Width			= (sal_Int16)rFont.GetSize().Width();
1055*cdf0e10cSrcweir 	aFD.Family			= sal::static_int_cast< sal_Int16 >(rFont.GetFamily());
1056*cdf0e10cSrcweir 	aFD.CharSet			= rFont.GetCharSet();
1057*cdf0e10cSrcweir 	aFD.Pitch			= sal::static_int_cast< sal_Int16 >(rFont.GetPitch());
1058*cdf0e10cSrcweir 	aFD.CharacterWidth	= ConvertFontWidth( rFont.GetWidthType() );
1059*cdf0e10cSrcweir 	aFD.Weight			= ConvertFontWeight( rFont.GetWeight() );
1060*cdf0e10cSrcweir 	aFD.Slant			= (::com::sun::star::awt::FontSlant)rFont.GetItalic();
1061*cdf0e10cSrcweir 	aFD.Underline		= sal::static_int_cast< sal_Int16 >(
1062*cdf0e10cSrcweir         rFont.GetUnderline());
1063*cdf0e10cSrcweir 	aFD.Strikeout		= sal::static_int_cast< sal_Int16 >(
1064*cdf0e10cSrcweir         rFont.GetStrikeout());
1065*cdf0e10cSrcweir 	aFD.Orientation		= rFont.GetOrientation();
1066*cdf0e10cSrcweir 	aFD.Kerning			= rFont.IsKerning();
1067*cdf0e10cSrcweir 	aFD.WordLineMode	= rFont.IsWordLineMode();
1068*cdf0e10cSrcweir 	aFD.Type			= 0;   // ??? => Nur an Metric...
1069*cdf0e10cSrcweir 	return aFD;
1070*cdf0e10cSrcweir }
1071*cdf0e10cSrcweir // -----------------------------------------------------------------------------
1072*cdf0e10cSrcweir void callColumnFormatDialog(const Reference<XPropertySet>& xAffectedCol,
1073*cdf0e10cSrcweir 							const Reference<XPropertySet>& xField,
1074*cdf0e10cSrcweir 							SvNumberFormatter* _pFormatter,
1075*cdf0e10cSrcweir 							Window* _pParent)
1076*cdf0e10cSrcweir {
1077*cdf0e10cSrcweir 	if (xAffectedCol.is() && xField.is())
1078*cdf0e10cSrcweir 	{
1079*cdf0e10cSrcweir 		try
1080*cdf0e10cSrcweir 		{
1081*cdf0e10cSrcweir 			Reference< XPropertySetInfo >  xInfo = xAffectedCol->getPropertySetInfo();
1082*cdf0e10cSrcweir 			sal_Bool bHasFormat = xInfo->hasPropertyByName(PROPERTY_FORMATKEY);
1083*cdf0e10cSrcweir 			sal_Int32 nDataType = ::comphelper::getINT32(xField->getPropertyValue(PROPERTY_TYPE));
1084*cdf0e10cSrcweir 
1085*cdf0e10cSrcweir 			SvxCellHorJustify eJustify(SVX_HOR_JUSTIFY_STANDARD);
1086*cdf0e10cSrcweir 			Any aAlignment = xAffectedCol->getPropertyValue(PROPERTY_ALIGN);
1087*cdf0e10cSrcweir 			if (aAlignment.hasValue())
1088*cdf0e10cSrcweir 				eJustify = dbaui::mapTextJustify(::comphelper::getINT16(aAlignment));
1089*cdf0e10cSrcweir 			sal_Int32  nFormatKey = 0;
1090*cdf0e10cSrcweir 			if ( bHasFormat )
1091*cdf0e10cSrcweir 				nFormatKey = ::comphelper::getINT32(xAffectedCol->getPropertyValue(PROPERTY_FORMATKEY));
1092*cdf0e10cSrcweir 
1093*cdf0e10cSrcweir 			sal_uInt16 nFlags = 0;
1094*cdf0e10cSrcweir 			if(callColumnFormatDialog(_pParent,_pFormatter,nDataType,nFormatKey,eJustify,nFlags,bHasFormat))
1095*cdf0e10cSrcweir 			{
1096*cdf0e10cSrcweir 				xAffectedCol->setPropertyValue(PROPERTY_ALIGN, makeAny((sal_Int16)dbaui::mapTextAllign(eJustify)));
1097*cdf0e10cSrcweir 				if (nFlags & TP_ATTR_NUMBER)
1098*cdf0e10cSrcweir 					xAffectedCol->setPropertyValue(PROPERTY_FORMATKEY, makeAny(nFormatKey));
1099*cdf0e10cSrcweir 
1100*cdf0e10cSrcweir 			}
1101*cdf0e10cSrcweir 		}
1102*cdf0e10cSrcweir         catch( const Exception& )
1103*cdf0e10cSrcweir         {
1104*cdf0e10cSrcweir             DBG_UNHANDLED_EXCEPTION();
1105*cdf0e10cSrcweir         }
1106*cdf0e10cSrcweir 	}
1107*cdf0e10cSrcweir }
1108*cdf0e10cSrcweir // -----------------------------------------------------------------------------
1109*cdf0e10cSrcweir sal_Bool callColumnFormatDialog(Window* _pParent,
1110*cdf0e10cSrcweir 								SvNumberFormatter* _pFormatter,
1111*cdf0e10cSrcweir 								sal_Int32 _nDataType,
1112*cdf0e10cSrcweir 								sal_Int32& _nFormatKey,
1113*cdf0e10cSrcweir 								SvxCellHorJustify& _eJustify,
1114*cdf0e10cSrcweir 								sal_uInt16&	_nFlags,
1115*cdf0e10cSrcweir 								sal_Bool  _bHasFormat)
1116*cdf0e10cSrcweir {
1117*cdf0e10cSrcweir 	sal_Bool bRet = sal_False;
1118*cdf0e10cSrcweir 	// the allowed format changes depend of the type of the field ...
1119*cdf0e10cSrcweir 	_nFlags = TP_ATTR_ALIGN;
1120*cdf0e10cSrcweir 
1121*cdf0e10cSrcweir 	if (_bHasFormat)
1122*cdf0e10cSrcweir 		_nFlags |= TP_ATTR_NUMBER;
1123*cdf0e10cSrcweir 
1124*cdf0e10cSrcweir 	// ------------
1125*cdf0e10cSrcweir 	// UNO->ItemSet
1126*cdf0e10cSrcweir 	static SfxItemInfo aItemInfos[] =
1127*cdf0e10cSrcweir 	{
1128*cdf0e10cSrcweir 		{ 0, 0 },
1129*cdf0e10cSrcweir 		{ SID_ATTR_NUMBERFORMAT_VALUE,		SFX_ITEM_POOLABLE },
1130*cdf0e10cSrcweir 		{ SID_ATTR_ALIGN_HOR_JUSTIFY,		SFX_ITEM_POOLABLE },
1131*cdf0e10cSrcweir 		{ SID_ATTR_NUMBERFORMAT_ONE_AREA,	SFX_ITEM_POOLABLE },
1132*cdf0e10cSrcweir 		{ SID_ATTR_NUMBERFORMAT_INFO,		SFX_ITEM_POOLABLE }
1133*cdf0e10cSrcweir 	};
1134*cdf0e10cSrcweir 	static sal_uInt16 aAttrMap[] =
1135*cdf0e10cSrcweir 	{
1136*cdf0e10cSrcweir 		SBA_DEF_RANGEFORMAT, SBA_ATTR_ALIGN_HOR_JUSTIFY,
1137*cdf0e10cSrcweir 		SID_ATTR_NUMBERFORMAT_ONE_AREA, SID_ATTR_NUMBERFORMAT_ONE_AREA,
1138*cdf0e10cSrcweir 		SID_ATTR_NUMBERFORMAT_INFO, SID_ATTR_NUMBERFORMAT_INFO,
1139*cdf0e10cSrcweir 		0
1140*cdf0e10cSrcweir 	};
1141*cdf0e10cSrcweir 
1142*cdf0e10cSrcweir 	SfxPoolItem* pDefaults[] =
1143*cdf0e10cSrcweir 	{
1144*cdf0e10cSrcweir 		new SfxRangeItem(SBA_DEF_RANGEFORMAT, SBA_DEF_FMTVALUE, SBA_ATTR_ALIGN_HOR_JUSTIFY),
1145*cdf0e10cSrcweir 		new SfxUInt32Item(SBA_DEF_FMTVALUE),
1146*cdf0e10cSrcweir 		new SvxHorJustifyItem(SVX_HOR_JUSTIFY_STANDARD, SBA_ATTR_ALIGN_HOR_JUSTIFY),
1147*cdf0e10cSrcweir 		new SfxBoolItem(SID_ATTR_NUMBERFORMAT_ONE_AREA, sal_False),
1148*cdf0e10cSrcweir 		new SvxNumberInfoItem(SID_ATTR_NUMBERFORMAT_INFO)
1149*cdf0e10cSrcweir 	};
1150*cdf0e10cSrcweir 
1151*cdf0e10cSrcweir 	SfxItemPool* pPool = new SfxItemPool(String::CreateFromAscii("GridBrowserProperties"), SBA_DEF_RANGEFORMAT, SBA_ATTR_ALIGN_HOR_JUSTIFY, aItemInfos, pDefaults);
1152*cdf0e10cSrcweir 	pPool->SetDefaultMetric( SFX_MAPUNIT_TWIP );	// ripped, don't understand why
1153*cdf0e10cSrcweir 	pPool->FreezeIdRanges();						// the same
1154*cdf0e10cSrcweir 
1155*cdf0e10cSrcweir 	SfxItemSet* pFormatDescriptor = new SfxItemSet(*pPool, aAttrMap);
1156*cdf0e10cSrcweir 	// fill it
1157*cdf0e10cSrcweir 	pFormatDescriptor->Put(SvxHorJustifyItem(_eJustify, SBA_ATTR_ALIGN_HOR_JUSTIFY));
1158*cdf0e10cSrcweir 	sal_Bool bText = sal_False;
1159*cdf0e10cSrcweir 	if (_bHasFormat)
1160*cdf0e10cSrcweir 	{
1161*cdf0e10cSrcweir 		// if the col is bound to a text field we have to disallow all non-text formats
1162*cdf0e10cSrcweir 		if ((DataType::CHAR == _nDataType) || (DataType::VARCHAR == _nDataType) || (DataType::LONGVARCHAR == _nDataType) || (DataType::CLOB == _nDataType))
1163*cdf0e10cSrcweir 		{
1164*cdf0e10cSrcweir 			bText = sal_True;
1165*cdf0e10cSrcweir 			pFormatDescriptor->Put(SfxBoolItem(SID_ATTR_NUMBERFORMAT_ONE_AREA, sal_True));
1166*cdf0e10cSrcweir 			if (!_pFormatter->IsTextFormat(_nFormatKey))
1167*cdf0e10cSrcweir 				// text fields can only have text formats
1168*cdf0e10cSrcweir 				_nFormatKey = _pFormatter->GetStandardFormat(NUMBERFORMAT_TEXT,_pParent->GetSettings().GetLanguage());
1169*cdf0e10cSrcweir 		}
1170*cdf0e10cSrcweir 
1171*cdf0e10cSrcweir 		pFormatDescriptor->Put(SfxUInt32Item(SBA_DEF_FMTVALUE, _nFormatKey));
1172*cdf0e10cSrcweir 	}
1173*cdf0e10cSrcweir 
1174*cdf0e10cSrcweir 	if (!bText)
1175*cdf0e10cSrcweir 	{
1176*cdf0e10cSrcweir 		double dPreviewVal = 1234.56789;
1177*cdf0e10cSrcweir 		SvxNumberInfoItem aFormatter(_pFormatter, dPreviewVal, SID_ATTR_NUMBERFORMAT_INFO);
1178*cdf0e10cSrcweir 		pFormatDescriptor->Put(aFormatter);
1179*cdf0e10cSrcweir 	}
1180*cdf0e10cSrcweir 
1181*cdf0e10cSrcweir 	{	// want the dialog to be destroyed before our set
1182*cdf0e10cSrcweir 		SbaSbAttrDlg aDlg(_pParent, pFormatDescriptor, _pFormatter, _nFlags);
1183*cdf0e10cSrcweir 		if (RET_OK == aDlg.Execute())
1184*cdf0e10cSrcweir 		{
1185*cdf0e10cSrcweir 			// ------------
1186*cdf0e10cSrcweir 			// ItemSet->UNO
1187*cdf0e10cSrcweir 			// UNO-properties
1188*cdf0e10cSrcweir 			const SfxItemSet* pSet = aDlg.GetExampleSet();
1189*cdf0e10cSrcweir 			// (of course we could put the modified items directly into the column, but then the UNO-model
1190*cdf0e10cSrcweir 			// won't reflect these changes, and why do we have a model, then ?)
1191*cdf0e10cSrcweir 
1192*cdf0e10cSrcweir 			// horizontal justify
1193*cdf0e10cSrcweir 			SFX_ITEMSET_GET(*pSet, pHorJustify, SvxHorJustifyItem, SBA_ATTR_ALIGN_HOR_JUSTIFY, sal_True);
1194*cdf0e10cSrcweir 
1195*cdf0e10cSrcweir 			_eJustify = (SvxCellHorJustify)pHorJustify->GetValue();
1196*cdf0e10cSrcweir 
1197*cdf0e10cSrcweir 			// format key
1198*cdf0e10cSrcweir 			if (_nFlags & TP_ATTR_NUMBER)
1199*cdf0e10cSrcweir 			{
1200*cdf0e10cSrcweir 				SFX_ITEMSET_GET(*pSet, pFormat, SfxUInt32Item, SBA_DEF_FMTVALUE, sal_True);
1201*cdf0e10cSrcweir 				_nFormatKey = (sal_Int32)pFormat->GetValue();
1202*cdf0e10cSrcweir 			}
1203*cdf0e10cSrcweir 			bRet = sal_True;
1204*cdf0e10cSrcweir 		}
1205*cdf0e10cSrcweir 			// deleted formats
1206*cdf0e10cSrcweir 		const SfxItemSet* pResult = aDlg.GetOutputItemSet();
1207*cdf0e10cSrcweir 		if (pResult)
1208*cdf0e10cSrcweir 		{
1209*cdf0e10cSrcweir 			const SfxPoolItem* pItem = pResult->GetItem( SID_ATTR_NUMBERFORMAT_INFO );
1210*cdf0e10cSrcweir 			const SvxNumberInfoItem* pInfoItem = static_cast<const SvxNumberInfoItem*>(pItem);
1211*cdf0e10cSrcweir 			if (pInfoItem && pInfoItem->GetDelCount())
1212*cdf0e10cSrcweir 			{
1213*cdf0e10cSrcweir 				const sal_uInt32* pDeletedKeys = pInfoItem->GetDelArray();
1214*cdf0e10cSrcweir 
1215*cdf0e10cSrcweir 				for (sal_uInt16 i=0; i< pInfoItem->GetDelCount(); ++i, ++pDeletedKeys)
1216*cdf0e10cSrcweir 					_pFormatter->DeleteEntry(*pDeletedKeys);
1217*cdf0e10cSrcweir 			}
1218*cdf0e10cSrcweir 		}
1219*cdf0e10cSrcweir 	}
1220*cdf0e10cSrcweir 
1221*cdf0e10cSrcweir 	delete pFormatDescriptor;
1222*cdf0e10cSrcweir     SfxItemPool::Free(pPool);
1223*cdf0e10cSrcweir 	for (sal_uInt16 i=0; i<sizeof(pDefaults)/sizeof(pDefaults[0]); ++i)
1224*cdf0e10cSrcweir 		delete pDefaults[i];
1225*cdf0e10cSrcweir 
1226*cdf0e10cSrcweir 	return bRet;
1227*cdf0e10cSrcweir }
1228*cdf0e10cSrcweir 
1229*cdf0e10cSrcweir //------------------------------------------------------------------------------
1230*cdf0e10cSrcweir const SfxFilter* getStandardDatabaseFilter()
1231*cdf0e10cSrcweir {
1232*cdf0e10cSrcweir 	static const String s_sDatabaseType = String::CreateFromAscii("StarOffice XML (Base)");
1233*cdf0e10cSrcweir 	const SfxFilter* pFilter = SfxFilter::GetFilterByName( s_sDatabaseType);
1234*cdf0e10cSrcweir 	OSL_ENSURE(pFilter,"Filter: StarOffice XML (Base) could not be found!");
1235*cdf0e10cSrcweir 	return pFilter;
1236*cdf0e10cSrcweir }
1237*cdf0e10cSrcweir 
1238*cdf0e10cSrcweir 
1239*cdf0e10cSrcweir // -----------------------------------------------------------------------------
1240*cdf0e10cSrcweir sal_Bool appendToFilter(const Reference<XConnection>& _xConnection,
1241*cdf0e10cSrcweir 						const ::rtl::OUString& _sName,
1242*cdf0e10cSrcweir 						const Reference< XMultiServiceFactory >& _xFactory,
1243*cdf0e10cSrcweir 						Window* _pParent)
1244*cdf0e10cSrcweir {
1245*cdf0e10cSrcweir 	sal_Bool bRet = sal_False;
1246*cdf0e10cSrcweir 	Reference< XChild> xChild(_xConnection,UNO_QUERY);
1247*cdf0e10cSrcweir 	if(xChild.is())
1248*cdf0e10cSrcweir 	{
1249*cdf0e10cSrcweir 		Reference< XPropertySet> xProp(xChild->getParent(),UNO_QUERY);
1250*cdf0e10cSrcweir 		if(xProp.is())
1251*cdf0e10cSrcweir 		{
1252*cdf0e10cSrcweir 			Sequence< ::rtl::OUString > aFilter;
1253*cdf0e10cSrcweir 			xProp->getPropertyValue(PROPERTY_TABLEFILTER) >>= aFilter;
1254*cdf0e10cSrcweir 			// first check if we have something like SCHEMA.%
1255*cdf0e10cSrcweir 			sal_Bool bHasToInsert = sal_True;
1256*cdf0e10cSrcweir 			static ::rtl::OUString sPattern = ::rtl::OUString::createFromAscii("%");
1257*cdf0e10cSrcweir 			const ::rtl::OUString* pBegin = aFilter.getConstArray();
1258*cdf0e10cSrcweir 			const ::rtl::OUString* pEnd = pBegin + aFilter.getLength();
1259*cdf0e10cSrcweir 			for (;pBegin != pEnd; ++pBegin)
1260*cdf0e10cSrcweir 			{
1261*cdf0e10cSrcweir 				if(pBegin->indexOf('%') != -1)
1262*cdf0e10cSrcweir 				{
1263*cdf0e10cSrcweir 					sal_Int32 nLen;
1264*cdf0e10cSrcweir 					if((nLen = pBegin->lastIndexOf('.')) != -1 && !pBegin->compareTo(_sName,nLen))
1265*cdf0e10cSrcweir 						bHasToInsert = sal_False;
1266*cdf0e10cSrcweir 					else if(pBegin->getLength() == 1)
1267*cdf0e10cSrcweir 						bHasToInsert = sal_False;
1268*cdf0e10cSrcweir 				}
1269*cdf0e10cSrcweir 			}
1270*cdf0e10cSrcweir 
1271*cdf0e10cSrcweir 			bRet = sal_True;
1272*cdf0e10cSrcweir 			if(bHasToInsert)
1273*cdf0e10cSrcweir 			{
1274*cdf0e10cSrcweir 				if(! ::dbaui::checkDataSourceAvailable(::comphelper::getString(xProp->getPropertyValue(PROPERTY_NAME)),_xFactory))
1275*cdf0e10cSrcweir 				{
1276*cdf0e10cSrcweir 					String aMessage(ModuleRes(STR_TABLEDESIGN_DATASOURCE_DELETED));
1277*cdf0e10cSrcweir 					OSQLWarningBox( _pParent, aMessage ).Execute();
1278*cdf0e10cSrcweir 					bRet = sal_False;
1279*cdf0e10cSrcweir 				}
1280*cdf0e10cSrcweir 				else
1281*cdf0e10cSrcweir 				{
1282*cdf0e10cSrcweir 					aFilter.realloc(aFilter.getLength()+1);
1283*cdf0e10cSrcweir 					aFilter.getArray()[aFilter.getLength()-1] = _sName;
1284*cdf0e10cSrcweir 					xProp->setPropertyValue(PROPERTY_TABLEFILTER,makeAny(aFilter));
1285*cdf0e10cSrcweir 				}
1286*cdf0e10cSrcweir 			}
1287*cdf0e10cSrcweir 		}
1288*cdf0e10cSrcweir 	}
1289*cdf0e10cSrcweir 	return bRet;
1290*cdf0e10cSrcweir }
1291*cdf0e10cSrcweir // -----------------------------------------------------------------------------
1292*cdf0e10cSrcweir void notifySystemWindow(Window* _pWindow,Window* _pToRegister, ::comphelper::mem_fun1_t<TaskPaneList,Window*> _rMemFunc)
1293*cdf0e10cSrcweir {
1294*cdf0e10cSrcweir 	OSL_ENSURE(_pWindow,"Window can not be null!");
1295*cdf0e10cSrcweir     SystemWindow* pSystemWindow = _pWindow ? _pWindow->GetSystemWindow() : NULL;
1296*cdf0e10cSrcweir 	if ( pSystemWindow )
1297*cdf0e10cSrcweir 	{
1298*cdf0e10cSrcweir 		_rMemFunc( pSystemWindow->GetTaskPaneList(), _pToRegister );
1299*cdf0e10cSrcweir 	}
1300*cdf0e10cSrcweir }
1301*cdf0e10cSrcweir // -----------------------------------------------------------------------------
1302*cdf0e10cSrcweir void adjustToolBoxSize(ToolBox* _pToolBox)
1303*cdf0e10cSrcweir {
1304*cdf0e10cSrcweir 	// adjust the toolbox size, otherwise large bitmaps don't fit into
1305*cdf0e10cSrcweir 	Size aOldSize = _pToolBox->GetSizePixel();
1306*cdf0e10cSrcweir 	Size aSize = _pToolBox->CalcWindowSizePixel();
1307*cdf0e10cSrcweir 	if ( !aSize.Width() )
1308*cdf0e10cSrcweir 		aSize.Width() = aOldSize.Width();
1309*cdf0e10cSrcweir 	else if ( !aSize.Height() )
1310*cdf0e10cSrcweir 		aSize.Height() = aOldSize.Height();
1311*cdf0e10cSrcweir 
1312*cdf0e10cSrcweir 	Size aTbSize = _pToolBox->GetSizePixel();
1313*cdf0e10cSrcweir 	if ( (aSize.Width() && aSize.Width() != aTbSize.Width()) ||
1314*cdf0e10cSrcweir 			(aSize.Height() && aSize.Height() != aTbSize.Height()) )
1315*cdf0e10cSrcweir 	{
1316*cdf0e10cSrcweir 		_pToolBox->SetPosSizePixel( _pToolBox->GetPosPixel(), aSize );
1317*cdf0e10cSrcweir 		_pToolBox->Invalidate();
1318*cdf0e10cSrcweir 	}
1319*cdf0e10cSrcweir }
1320*cdf0e10cSrcweir // -----------------------------------------------------------------------------
1321*cdf0e10cSrcweir sal_Bool isHiContrast(Window* _pWindow)
1322*cdf0e10cSrcweir {
1323*cdf0e10cSrcweir 	OSL_ENSURE(_pWindow,"Window must be not null!");
1324*cdf0e10cSrcweir 	Window* pIter = _pWindow;
1325*cdf0e10cSrcweir 	//	while( pIter &&  pIter->GetBackground().GetColor().GetColor() == COL_TRANSPARENT )
1326*cdf0e10cSrcweir 	while( pIter )
1327*cdf0e10cSrcweir 	{
1328*cdf0e10cSrcweir 		if ( pIter->GetBackground().GetColor().GetColor() == COL_TRANSPARENT )
1329*cdf0e10cSrcweir 			pIter = pIter->GetParent();
1330*cdf0e10cSrcweir 		else
1331*cdf0e10cSrcweir 			break;
1332*cdf0e10cSrcweir 	}
1333*cdf0e10cSrcweir 	return pIter && pIter->GetSettings().GetStyleSettings().GetHighContrastMode();
1334*cdf0e10cSrcweir }
1335*cdf0e10cSrcweir 
1336*cdf0e10cSrcweir // -----------------------------------------------------------------------------
1337*cdf0e10cSrcweir void adjustBrowseBoxColumnWidth( ::svt::EditBrowseBox* _pBox, sal_uInt16 _nColId )
1338*cdf0e10cSrcweir {
1339*cdf0e10cSrcweir 	sal_Int32 nColSize = -1;
1340*cdf0e10cSrcweir 	sal_uInt32 nDefaultWidth = _pBox->GetDefaultColumnWidth( _pBox->GetColumnTitle( _nColId ) );
1341*cdf0e10cSrcweir 	if ( nDefaultWidth != _pBox->GetColumnWidth( _nColId ) )
1342*cdf0e10cSrcweir 	{
1343*cdf0e10cSrcweir 		Size aSizeMM = _pBox->PixelToLogic( Size( _pBox->GetColumnWidth( _nColId ), 0 ), MapMode( MAP_MM ) );
1344*cdf0e10cSrcweir 		nColSize = aSizeMM.Width() * 10;
1345*cdf0e10cSrcweir 	}
1346*cdf0e10cSrcweir 
1347*cdf0e10cSrcweir 	Size aDefaultMM = _pBox->PixelToLogic( Size( nDefaultWidth, 0 ), MapMode( MAP_MM ) );
1348*cdf0e10cSrcweir 
1349*cdf0e10cSrcweir 	DlgSize aColumnSizeDlg( _pBox, nColSize, sal_False, aDefaultMM.Width() * 10 );
1350*cdf0e10cSrcweir 	if ( aColumnSizeDlg.Execute() )
1351*cdf0e10cSrcweir 	{
1352*cdf0e10cSrcweir 		sal_Int32 nValue = aColumnSizeDlg.GetValue();
1353*cdf0e10cSrcweir 		if ( -1 == nValue )
1354*cdf0e10cSrcweir 		{	// default width
1355*cdf0e10cSrcweir 			nValue = _pBox->GetDefaultColumnWidth( _pBox->GetColumnTitle( _nColId ) );
1356*cdf0e10cSrcweir 		}
1357*cdf0e10cSrcweir 		else
1358*cdf0e10cSrcweir 		{
1359*cdf0e10cSrcweir 			Size aSizeMM( nValue / 10, 0 );
1360*cdf0e10cSrcweir 			nValue = _pBox->LogicToPixel( aSizeMM, MapMode( MAP_MM ) ).Width();
1361*cdf0e10cSrcweir 		}
1362*cdf0e10cSrcweir 		_pBox->SetColumnWidth( _nColId, nValue );
1363*cdf0e10cSrcweir 	}
1364*cdf0e10cSrcweir }
1365*cdf0e10cSrcweir // -----------------------------------------------------------------------------
1366*cdf0e10cSrcweir // check if SQL92 name checking is enabled
1367*cdf0e10cSrcweir sal_Bool isSQL92CheckEnabled(const Reference<XConnection>& _xConnection)
1368*cdf0e10cSrcweir {
1369*cdf0e10cSrcweir 	return ::dbtools::getBooleanDataSourceSetting( _xConnection, PROPERTY_ENABLESQL92CHECK );
1370*cdf0e10cSrcweir }
1371*cdf0e10cSrcweir // -----------------------------------------------------------------------------
1372*cdf0e10cSrcweir sal_Bool isAppendTableAliasEnabled(const Reference<XConnection>& _xConnection)
1373*cdf0e10cSrcweir {
1374*cdf0e10cSrcweir 	return ::dbtools::getBooleanDataSourceSetting( _xConnection, INFO_APPEND_TABLE_ALIAS );
1375*cdf0e10cSrcweir }
1376*cdf0e10cSrcweir 
1377*cdf0e10cSrcweir // -----------------------------------------------------------------------------
1378*cdf0e10cSrcweir sal_Bool generateAsBeforeTableAlias(const Reference<XConnection>& _xConnection)
1379*cdf0e10cSrcweir {
1380*cdf0e10cSrcweir 	return ::dbtools::getBooleanDataSourceSetting( _xConnection, INFO_AS_BEFORE_CORRELATION_NAME );
1381*cdf0e10cSrcweir }
1382*cdf0e10cSrcweir 
1383*cdf0e10cSrcweir // -----------------------------------------------------------------------------
1384*cdf0e10cSrcweir void fillAutoIncrementValue(const Reference<XPropertySet>& _xDatasource,
1385*cdf0e10cSrcweir 							sal_Bool& _rAutoIncrementValueEnabled,
1386*cdf0e10cSrcweir 							::rtl::OUString& _rsAutoIncrementValue)
1387*cdf0e10cSrcweir {
1388*cdf0e10cSrcweir 	if ( _xDatasource.is() )
1389*cdf0e10cSrcweir 	{
1390*cdf0e10cSrcweir 		OSL_ENSURE(_xDatasource->getPropertySetInfo()->hasPropertyByName(PROPERTY_INFO),"NO datasource supplied!");
1391*cdf0e10cSrcweir 		Sequence<PropertyValue> aInfo;
1392*cdf0e10cSrcweir 		_xDatasource->getPropertyValue(PROPERTY_INFO) >>= aInfo;
1393*cdf0e10cSrcweir 
1394*cdf0e10cSrcweir 		// search the right propertyvalue
1395*cdf0e10cSrcweir 		const PropertyValue* pValue =::std::find_if(aInfo.getConstArray(),
1396*cdf0e10cSrcweir 													aInfo.getConstArray() + aInfo.getLength(),
1397*cdf0e10cSrcweir 													::std::bind2nd(TPropertyValueEqualFunctor(),PROPERTY_AUTOINCREMENTCREATION));
1398*cdf0e10cSrcweir 		if ( pValue && pValue != (aInfo.getConstArray() + aInfo.getLength()) )
1399*cdf0e10cSrcweir 			pValue->Value >>= _rsAutoIncrementValue;
1400*cdf0e10cSrcweir 		pValue =::std::find_if(aInfo.getConstArray(),
1401*cdf0e10cSrcweir 													aInfo.getConstArray() + aInfo.getLength(),
1402*cdf0e10cSrcweir 													::std::bind2nd(TPropertyValueEqualFunctor(),::rtl::OUString::createFromAscii("IsAutoRetrievingEnabled") ));
1403*cdf0e10cSrcweir 		if ( pValue && pValue != (aInfo.getConstArray() + aInfo.getLength()) )
1404*cdf0e10cSrcweir 			pValue->Value >>= _rAutoIncrementValueEnabled;
1405*cdf0e10cSrcweir 	}
1406*cdf0e10cSrcweir }
1407*cdf0e10cSrcweir // -----------------------------------------------------------------------------
1408*cdf0e10cSrcweir void fillAutoIncrementValue(const Reference<XConnection>& _xConnection,
1409*cdf0e10cSrcweir 							sal_Bool& _rAutoIncrementValueEnabled,
1410*cdf0e10cSrcweir 							::rtl::OUString& _rsAutoIncrementValue)
1411*cdf0e10cSrcweir {
1412*cdf0e10cSrcweir 	Reference< XChild> xChild(_xConnection,UNO_QUERY);
1413*cdf0e10cSrcweir 	if(xChild.is())
1414*cdf0e10cSrcweir 	{
1415*cdf0e10cSrcweir 		Reference< XPropertySet> xProp(xChild->getParent(),UNO_QUERY);
1416*cdf0e10cSrcweir 		fillAutoIncrementValue(xProp,_rAutoIncrementValueEnabled,_rsAutoIncrementValue);
1417*cdf0e10cSrcweir 	}
1418*cdf0e10cSrcweir }
1419*cdf0e10cSrcweir // -----------------------------------------------------------------------------
1420*cdf0e10cSrcweir ::rtl::OUString getStrippedDatabaseName(const Reference<XPropertySet>& _xDataSource,::rtl::OUString& _rsDatabaseName)
1421*cdf0e10cSrcweir {
1422*cdf0e10cSrcweir 	if ( !_rsDatabaseName.getLength() && _xDataSource.is() )
1423*cdf0e10cSrcweir 	{
1424*cdf0e10cSrcweir 		try
1425*cdf0e10cSrcweir 		{
1426*cdf0e10cSrcweir 			_xDataSource->getPropertyValue(PROPERTY_NAME) >>= _rsDatabaseName;
1427*cdf0e10cSrcweir 		}
1428*cdf0e10cSrcweir 		catch(const Exception& )
1429*cdf0e10cSrcweir 		{
1430*cdf0e10cSrcweir             DBG_UNHANDLED_EXCEPTION();
1431*cdf0e10cSrcweir 		}
1432*cdf0e10cSrcweir 	}
1433*cdf0e10cSrcweir 	::rtl::OUString sName = _rsDatabaseName;
1434*cdf0e10cSrcweir 	INetURLObject aURL(sName);
1435*cdf0e10cSrcweir 	if ( aURL.GetProtocol() != INET_PROT_NOT_VALID )
1436*cdf0e10cSrcweir 		sName = aURL.getBase(INetURLObject::LAST_SEGMENT,true,INetURLObject::DECODE_UNAMBIGUOUS);
1437*cdf0e10cSrcweir 	return sName;
1438*cdf0e10cSrcweir }
1439*cdf0e10cSrcweir // -----------------------------------------------------------------------------
1440*cdf0e10cSrcweir 	void AppendConfigToken( ::rtl::OUString& _rURL, sal_Bool _bQuestionMark )
1441*cdf0e10cSrcweir 	{
1442*cdf0e10cSrcweir 		Any aLocale =
1443*cdf0e10cSrcweir 			::utl::ConfigManager::GetConfigManager()->GetDirectConfigProperty( ::utl::ConfigManager::LOCALE );
1444*cdf0e10cSrcweir 		::rtl::OUString sLocaleStr;
1445*cdf0e10cSrcweir 		if ( !( aLocale >>= sLocaleStr ) )
1446*cdf0e10cSrcweir 			// fallback is english
1447*cdf0e10cSrcweir 			sLocaleStr = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("en"));
1448*cdf0e10cSrcweir 
1449*cdf0e10cSrcweir 		// query part exists?
1450*cdf0e10cSrcweir 		if ( _bQuestionMark )
1451*cdf0e10cSrcweir 			// no, so start with '?'
1452*cdf0e10cSrcweir 			_rURL += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("?"));
1453*cdf0e10cSrcweir 		else
1454*cdf0e10cSrcweir 			// yes, so only append with '&'
1455*cdf0e10cSrcweir 			_rURL += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("&"));
1456*cdf0e10cSrcweir 
1457*cdf0e10cSrcweir 		// set parameters
1458*cdf0e10cSrcweir 		_rURL += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Language="));
1459*cdf0e10cSrcweir 		_rURL += sLocaleStr;
1460*cdf0e10cSrcweir 		_rURL += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("&System="));
1461*cdf0e10cSrcweir 		_rURL += SvtHelpOptions().GetSystem();
1462*cdf0e10cSrcweir 	}
1463*cdf0e10cSrcweir 
1464*cdf0e10cSrcweir namespace
1465*cdf0e10cSrcweir {
1466*cdf0e10cSrcweir 	// -----------------------------------------------------------------------
1467*cdf0e10cSrcweir 
1468*cdf0e10cSrcweir 	sal_Bool GetHelpAnchor_Impl( const ::rtl::OUString& _rURL, ::rtl::OUString& _rAnchor )
1469*cdf0e10cSrcweir 	{
1470*cdf0e10cSrcweir 		sal_Bool bRet = sal_False;
1471*cdf0e10cSrcweir 		::rtl::OUString sAnchor;
1472*cdf0e10cSrcweir 
1473*cdf0e10cSrcweir 		try
1474*cdf0e10cSrcweir 		{
1475*cdf0e10cSrcweir 			::ucbhelper::Content aCnt( INetURLObject( _rURL ).GetMainURL( INetURLObject::NO_DECODE ),
1476*cdf0e10cSrcweir 								 Reference< ::com::sun::star::ucb::XCommandEnvironment > () );
1477*cdf0e10cSrcweir 			if ( ( aCnt.getPropertyValue( ::rtl::OUString::createFromAscii( "AnchorName" ) ) >>= sAnchor ) )
1478*cdf0e10cSrcweir 			{
1479*cdf0e10cSrcweir 
1480*cdf0e10cSrcweir 				if ( sAnchor.getLength() > 0 )
1481*cdf0e10cSrcweir 				{
1482*cdf0e10cSrcweir 					_rAnchor = sAnchor;
1483*cdf0e10cSrcweir 					bRet = sal_True;
1484*cdf0e10cSrcweir 				}
1485*cdf0e10cSrcweir 			}
1486*cdf0e10cSrcweir 			else
1487*cdf0e10cSrcweir 			{
1488*cdf0e10cSrcweir 				DBG_ERRORFILE( "Property 'AnchorName' is missing" );
1489*cdf0e10cSrcweir 			}
1490*cdf0e10cSrcweir 		}
1491*cdf0e10cSrcweir 		catch( Exception& )
1492*cdf0e10cSrcweir 		{
1493*cdf0e10cSrcweir 		}
1494*cdf0e10cSrcweir 
1495*cdf0e10cSrcweir 		return bRet;
1496*cdf0e10cSrcweir 	}
1497*cdf0e10cSrcweir // .........................................................................
1498*cdf0e10cSrcweir } // annonymous
1499*cdf0e10cSrcweir // .........................................................................
1500*cdf0e10cSrcweir // -----------------------------------------------------------------------------
1501*cdf0e10cSrcweir ::com::sun::star::util::URL	createHelpAgentURL(const ::rtl::OUString& _sModuleName, const rtl::OString& sHelpId)
1502*cdf0e10cSrcweir {
1503*cdf0e10cSrcweir 	::com::sun::star::util::URL aURL;
1504*cdf0e10cSrcweir 	aURL.Complete = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "vnd.sun.star.help://" ) );
1505*cdf0e10cSrcweir 	aURL.Complete += _sModuleName;
1506*cdf0e10cSrcweir 	aURL.Complete += ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "/" ) );
1507*cdf0e10cSrcweir 	aURL.Complete += ::rtl::OUString(sHelpId, sHelpId.getLength(), RTL_TEXTENCODING_UTF8);
1508*cdf0e10cSrcweir 
1509*cdf0e10cSrcweir 	::rtl::OUString sAnchor;
1510*cdf0e10cSrcweir 	::rtl::OUString sTempURL = aURL.Complete;
1511*cdf0e10cSrcweir 	AppendConfigToken( sTempURL, sal_True );
1512*cdf0e10cSrcweir 	sal_Bool bHasAnchor = GetHelpAnchor_Impl( sTempURL, sAnchor );
1513*cdf0e10cSrcweir 	AppendConfigToken(aURL.Complete,sal_True);
1514*cdf0e10cSrcweir 	if ( bHasAnchor )
1515*cdf0e10cSrcweir 	{
1516*cdf0e10cSrcweir 		aURL.Complete += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("#"));
1517*cdf0e10cSrcweir 		aURL.Complete += sAnchor;
1518*cdf0e10cSrcweir 	}
1519*cdf0e10cSrcweir 	return aURL;
1520*cdf0e10cSrcweir }
1521*cdf0e10cSrcweir // -----------------------------------------------------------------------------
1522*cdf0e10cSrcweir void setEvalDateFormatForFormatter(Reference< ::com::sun::star::util::XNumberFormatter >& _rxFormatter)
1523*cdf0e10cSrcweir {
1524*cdf0e10cSrcweir 	OSL_ENSURE( _rxFormatter.is(),"setEvalDateFormatForFormatter: Formatter is NULL!");
1525*cdf0e10cSrcweir 	if ( _rxFormatter.is() )
1526*cdf0e10cSrcweir 	{
1527*cdf0e10cSrcweir 		Reference< ::com::sun::star::util::XNumberFormatsSupplier >  xSupplier = _rxFormatter->getNumberFormatsSupplier();
1528*cdf0e10cSrcweir 
1529*cdf0e10cSrcweir 		Reference< XUnoTunnel > xTunnel(xSupplier,UNO_QUERY);
1530*cdf0e10cSrcweir 		SvNumberFormatsSupplierObj* pSupplierImpl = reinterpret_cast<SvNumberFormatsSupplierObj*>(xTunnel->getSomething(SvNumberFormatsSupplierObj::getUnoTunnelId()));
1531*cdf0e10cSrcweir 		OSL_ENSURE(pSupplierImpl,"No Supplier!");
1532*cdf0e10cSrcweir 
1533*cdf0e10cSrcweir 		if ( pSupplierImpl )
1534*cdf0e10cSrcweir 		{
1535*cdf0e10cSrcweir 			SvNumberFormatter* pFormatter = pSupplierImpl->GetNumberFormatter();
1536*cdf0e10cSrcweir 			pFormatter->SetEvalDateFormat(NF_EVALDATEFORMAT_FORMAT);
1537*cdf0e10cSrcweir 		}
1538*cdf0e10cSrcweir 	}
1539*cdf0e10cSrcweir }
1540*cdf0e10cSrcweir // -----------------------------------------------------------------------------
1541*cdf0e10cSrcweir TOTypeInfoSP queryPrimaryKeyType(const OTypeInfoMap& _rTypeInfo)
1542*cdf0e10cSrcweir {
1543*cdf0e10cSrcweir 	TOTypeInfoSP pTypeInfo;
1544*cdf0e10cSrcweir 	// first we search for a type which supports autoIncrement
1545*cdf0e10cSrcweir 	OTypeInfoMap::const_iterator aIter = _rTypeInfo.begin();
1546*cdf0e10cSrcweir 	OTypeInfoMap::const_iterator aEnd  = _rTypeInfo.end();
1547*cdf0e10cSrcweir 	for(;aIter != aEnd;++aIter)
1548*cdf0e10cSrcweir 	{
1549*cdf0e10cSrcweir 		// OJ: we don't want to set an autoincrement column to be key
1550*cdf0e10cSrcweir 		// because we don't have the possiblity to know how to create
1551*cdf0e10cSrcweir 		// such auto increment column later on
1552*cdf0e10cSrcweir 		// so until we know how to do it, we create a column without autoincrement
1553*cdf0e10cSrcweir 		//	if ( !aIter->second->bAutoIncrement )
1554*cdf0e10cSrcweir 		{	// therefor we have searched
1555*cdf0e10cSrcweir 			if ( aIter->second->nType == DataType::INTEGER )
1556*cdf0e10cSrcweir 			{
1557*cdf0e10cSrcweir 				pTypeInfo = aIter->second; // alternative
1558*cdf0e10cSrcweir 				break;
1559*cdf0e10cSrcweir 			}
1560*cdf0e10cSrcweir 			else if ( !pTypeInfo.get() && aIter->second->nType == DataType::DOUBLE )
1561*cdf0e10cSrcweir 				pTypeInfo = aIter->second; // alternative
1562*cdf0e10cSrcweir 			else if ( !pTypeInfo.get() && aIter->second->nType == DataType::REAL )
1563*cdf0e10cSrcweir 				pTypeInfo = aIter->second; // alternative
1564*cdf0e10cSrcweir 		}
1565*cdf0e10cSrcweir 	}
1566*cdf0e10cSrcweir 	if ( !pTypeInfo.get() ) // just a fallback
1567*cdf0e10cSrcweir 		pTypeInfo = queryTypeInfoByType(DataType::VARCHAR,_rTypeInfo);
1568*cdf0e10cSrcweir 
1569*cdf0e10cSrcweir 	OSL_ENSURE(pTypeInfo.get(),"checkColumns: cann't find a type which is useable as a key!");
1570*cdf0e10cSrcweir 	return pTypeInfo;
1571*cdf0e10cSrcweir }
1572*cdf0e10cSrcweir // -----------------------------------------------------------------------------
1573*cdf0e10cSrcweir TOTypeInfoSP queryTypeInfoByType(sal_Int32 _nDataType,const OTypeInfoMap& _rTypeInfo)
1574*cdf0e10cSrcweir {
1575*cdf0e10cSrcweir 	OTypeInfoMap::const_iterator aIter = _rTypeInfo.find(_nDataType);
1576*cdf0e10cSrcweir 	if(aIter != _rTypeInfo.end())
1577*cdf0e10cSrcweir 		return aIter->second;
1578*cdf0e10cSrcweir 	// fall back if the type is unknown
1579*cdf0e10cSrcweir 	TOTypeInfoSP pTypeInfo;
1580*cdf0e10cSrcweir 	switch(_nDataType)
1581*cdf0e10cSrcweir 	{
1582*cdf0e10cSrcweir 		case DataType::TINYINT:
1583*cdf0e10cSrcweir 			if( pTypeInfo = queryTypeInfoByType(DataType::SMALLINT,_rTypeInfo))
1584*cdf0e10cSrcweir 				break;
1585*cdf0e10cSrcweir 			// run through
1586*cdf0e10cSrcweir 		case DataType::SMALLINT:
1587*cdf0e10cSrcweir 			if( pTypeInfo = queryTypeInfoByType(DataType::INTEGER,_rTypeInfo))
1588*cdf0e10cSrcweir 				break;
1589*cdf0e10cSrcweir 			// run through
1590*cdf0e10cSrcweir 		case DataType::INTEGER:
1591*cdf0e10cSrcweir 			if( pTypeInfo = queryTypeInfoByType(DataType::FLOAT,_rTypeInfo))
1592*cdf0e10cSrcweir 				break;
1593*cdf0e10cSrcweir 			// run through
1594*cdf0e10cSrcweir 		case DataType::FLOAT:
1595*cdf0e10cSrcweir 			if( pTypeInfo = queryTypeInfoByType(DataType::REAL,_rTypeInfo))
1596*cdf0e10cSrcweir 				break;
1597*cdf0e10cSrcweir 			// run through
1598*cdf0e10cSrcweir 		case DataType::DATE:
1599*cdf0e10cSrcweir 		case DataType::TIME:
1600*cdf0e10cSrcweir 			if( DataType::DATE == _nDataType || DataType::TIME == _nDataType )
1601*cdf0e10cSrcweir 			{
1602*cdf0e10cSrcweir 				if( pTypeInfo = queryTypeInfoByType(DataType::TIMESTAMP,_rTypeInfo))
1603*cdf0e10cSrcweir 					break;
1604*cdf0e10cSrcweir 			}
1605*cdf0e10cSrcweir 			// run through
1606*cdf0e10cSrcweir 		case DataType::TIMESTAMP:
1607*cdf0e10cSrcweir 		case DataType::REAL:
1608*cdf0e10cSrcweir 		case DataType::BIGINT:
1609*cdf0e10cSrcweir 			if (  pTypeInfo = queryTypeInfoByType(DataType::DOUBLE,_rTypeInfo) )
1610*cdf0e10cSrcweir 				break;
1611*cdf0e10cSrcweir 			// run through
1612*cdf0e10cSrcweir 		case DataType::DOUBLE:
1613*cdf0e10cSrcweir 			if (  pTypeInfo = queryTypeInfoByType(DataType::NUMERIC,_rTypeInfo) )
1614*cdf0e10cSrcweir 				break;
1615*cdf0e10cSrcweir 			// run through
1616*cdf0e10cSrcweir 		case DataType::NUMERIC:
1617*cdf0e10cSrcweir 			 pTypeInfo = queryTypeInfoByType(DataType::DECIMAL,_rTypeInfo);
1618*cdf0e10cSrcweir 			break;
1619*cdf0e10cSrcweir 		case DataType::DECIMAL:
1620*cdf0e10cSrcweir 			if (  pTypeInfo = queryTypeInfoByType(DataType::NUMERIC,_rTypeInfo) )
1621*cdf0e10cSrcweir 				break;
1622*cdf0e10cSrcweir 			if (  pTypeInfo = queryTypeInfoByType(DataType::DOUBLE,_rTypeInfo) )
1623*cdf0e10cSrcweir 				break;
1624*cdf0e10cSrcweir 			break;
1625*cdf0e10cSrcweir 		case DataType::VARCHAR:
1626*cdf0e10cSrcweir 			if (  pTypeInfo = queryTypeInfoByType(DataType::LONGVARCHAR,_rTypeInfo) )
1627*cdf0e10cSrcweir 				break;
1628*cdf0e10cSrcweir 			break;
1629*cdf0e10cSrcweir 		case DataType::LONGVARCHAR:
1630*cdf0e10cSrcweir 			if (  pTypeInfo = queryTypeInfoByType(DataType::CLOB,_rTypeInfo) )
1631*cdf0e10cSrcweir 				break;
1632*cdf0e10cSrcweir 			break;
1633*cdf0e10cSrcweir 		default:
1634*cdf0e10cSrcweir 			;
1635*cdf0e10cSrcweir 	} // switch(_nDataType)
1636*cdf0e10cSrcweir 	if ( !pTypeInfo )
1637*cdf0e10cSrcweir 	{
1638*cdf0e10cSrcweir 		::rtl::OUString sCreate(RTL_CONSTASCII_USTRINGPARAM("x")),sTypeName;
1639*cdf0e10cSrcweir 		sal_Bool bForce = sal_True;
1640*cdf0e10cSrcweir 		pTypeInfo = ::dbaui::getTypeInfoFromType(_rTypeInfo,DataType::VARCHAR,sTypeName,sCreate,50,0,sal_False,bForce);
1641*cdf0e10cSrcweir 	} // if ( !pTypeInfo )
1642*cdf0e10cSrcweir 	OSL_ENSURE(pTypeInfo,"Wrong DataType supplied!");
1643*cdf0e10cSrcweir 	return pTypeInfo;
1644*cdf0e10cSrcweir }
1645*cdf0e10cSrcweir // -----------------------------------------------------------------------------
1646*cdf0e10cSrcweir sal_Int32 askForUserAction(Window* _pParent,sal_uInt16 _nTitle,sal_uInt16 _nText,sal_Bool _bAll,const ::rtl::OUString& _sName)
1647*cdf0e10cSrcweir {
1648*cdf0e10cSrcweir 	vos::OGuard aGuard( Application::GetSolarMutex() );
1649*cdf0e10cSrcweir 	String aMsg = String(ModuleRes(_nText));
1650*cdf0e10cSrcweir 	aMsg.SearchAndReplace(String::CreateFromAscii("%1"),String(_sName));
1651*cdf0e10cSrcweir 	OSQLMessageBox aAsk(_pParent,String(ModuleRes(_nTitle )),aMsg,WB_YES_NO | WB_DEF_YES,OSQLMessageBox::Query);
1652*cdf0e10cSrcweir 	if ( _bAll )
1653*cdf0e10cSrcweir 	{
1654*cdf0e10cSrcweir 		aAsk.AddButton(String(ModuleRes(STR_BUTTON_TEXT_ALL)), RET_ALL, 0);
1655*cdf0e10cSrcweir 		aAsk.GetPushButton(RET_ALL)->SetHelpId(HID_CONFIRM_DROP_BUTTON_ALL);
1656*cdf0e10cSrcweir 	}
1657*cdf0e10cSrcweir 	return aAsk.Execute();
1658*cdf0e10cSrcweir }
1659*cdf0e10cSrcweir 
1660*cdf0e10cSrcweir // -----------------------------------------------------------------------------
1661*cdf0e10cSrcweir namespace
1662*cdf0e10cSrcweir {
1663*cdf0e10cSrcweir     static ::rtl::OUString lcl_createSDBCLevelStatement( const ::rtl::OUString& _rStatement, const Reference< XConnection >& _rxConnection )
1664*cdf0e10cSrcweir     {
1665*cdf0e10cSrcweir         ::rtl::OUString sSDBCLevelStatement( _rStatement );
1666*cdf0e10cSrcweir         try
1667*cdf0e10cSrcweir         {
1668*cdf0e10cSrcweir             Reference< XMultiServiceFactory > xAnalyzerFactory( _rxConnection, UNO_QUERY_THROW );
1669*cdf0e10cSrcweir             Reference< XSingleSelectQueryAnalyzer > xAnalyzer( xAnalyzerFactory->createInstance( SERVICE_NAME_SINGLESELECTQUERYCOMPOSER ), UNO_QUERY_THROW );
1670*cdf0e10cSrcweir             xAnalyzer->setQuery( _rStatement );
1671*cdf0e10cSrcweir             sSDBCLevelStatement = xAnalyzer->getQueryWithSubstitution();
1672*cdf0e10cSrcweir         }
1673*cdf0e10cSrcweir         catch( const Exception& )
1674*cdf0e10cSrcweir         {
1675*cdf0e10cSrcweir             DBG_UNHANDLED_EXCEPTION();
1676*cdf0e10cSrcweir         }
1677*cdf0e10cSrcweir         return sSDBCLevelStatement;
1678*cdf0e10cSrcweir     }
1679*cdf0e10cSrcweir }
1680*cdf0e10cSrcweir 
1681*cdf0e10cSrcweir // -----------------------------------------------------------------------------
1682*cdf0e10cSrcweir Reference< XPropertySet > createView( const ::rtl::OUString& _rName, const Reference< XConnection >& _rxConnection,
1683*cdf0e10cSrcweir                                     const ::rtl::OUString& _rCommand )
1684*cdf0e10cSrcweir {
1685*cdf0e10cSrcweir 	Reference<XViewsSupplier> xSup(_rxConnection,UNO_QUERY);
1686*cdf0e10cSrcweir 	Reference< XNameAccess > xViews;
1687*cdf0e10cSrcweir 	if(xSup.is())
1688*cdf0e10cSrcweir 		xViews = xSup->getViews();
1689*cdf0e10cSrcweir 	Reference<XDataDescriptorFactory> xFact(xViews,UNO_QUERY);
1690*cdf0e10cSrcweir 	OSL_ENSURE(xFact.is(),"No XDataDescriptorFactory available!");
1691*cdf0e10cSrcweir 	if(!xFact.is())
1692*cdf0e10cSrcweir 		return NULL;
1693*cdf0e10cSrcweir 
1694*cdf0e10cSrcweir 	Reference<XPropertySet> xView = xFact->createDataDescriptor();
1695*cdf0e10cSrcweir 	if ( !xView.is() )
1696*cdf0e10cSrcweir 		return NULL;
1697*cdf0e10cSrcweir 
1698*cdf0e10cSrcweir 	::rtl::OUString sCatalog,sSchema,sTable;
1699*cdf0e10cSrcweir 	::dbtools::qualifiedNameComponents(_rxConnection->getMetaData(),
1700*cdf0e10cSrcweir 										_rName,
1701*cdf0e10cSrcweir 										sCatalog,
1702*cdf0e10cSrcweir 										sSchema,
1703*cdf0e10cSrcweir 										sTable,
1704*cdf0e10cSrcweir 										::dbtools::eInDataManipulation);
1705*cdf0e10cSrcweir 
1706*cdf0e10cSrcweir 	xView->setPropertyValue(PROPERTY_CATALOGNAME,makeAny(sCatalog));
1707*cdf0e10cSrcweir 	xView->setPropertyValue(PROPERTY_SCHEMANAME,makeAny(sSchema));
1708*cdf0e10cSrcweir 	xView->setPropertyValue(PROPERTY_NAME,makeAny(sTable));
1709*cdf0e10cSrcweir 
1710*cdf0e10cSrcweir 	xView->setPropertyValue( PROPERTY_COMMAND, makeAny( _rCommand ) );
1711*cdf0e10cSrcweir 
1712*cdf0e10cSrcweir 	Reference<XAppend> xAppend(xViews,UNO_QUERY);
1713*cdf0e10cSrcweir 	if(xAppend.is())
1714*cdf0e10cSrcweir 		xAppend->appendByDescriptor(xView);
1715*cdf0e10cSrcweir 
1716*cdf0e10cSrcweir 	xView = NULL;
1717*cdf0e10cSrcweir 	// we need to reget the view because after appending it it is no longer valid
1718*cdf0e10cSrcweir 	// but this time it isn't a view object it is a table object with type "VIEW"
1719*cdf0e10cSrcweir 	Reference<XTablesSupplier> xTabSup(_rxConnection,UNO_QUERY);
1720*cdf0e10cSrcweir 	Reference< XNameAccess > xTables;
1721*cdf0e10cSrcweir 	if ( xTabSup.is() )
1722*cdf0e10cSrcweir 	{
1723*cdf0e10cSrcweir 		xTables = xTabSup->getTables();
1724*cdf0e10cSrcweir 		if ( xTables.is() && xTables->hasByName( _rName ) )
1725*cdf0e10cSrcweir 			xTables->getByName( _rName ) >>= xView;
1726*cdf0e10cSrcweir 	}
1727*cdf0e10cSrcweir 
1728*cdf0e10cSrcweir 	return xView;
1729*cdf0e10cSrcweir }
1730*cdf0e10cSrcweir 
1731*cdf0e10cSrcweir // -----------------------------------------------------------------------------
1732*cdf0e10cSrcweir Reference<XPropertySet> createView( const ::rtl::OUString& _rName, const Reference< XConnection >& _rxConnection
1733*cdf0e10cSrcweir 								   ,const Reference<XPropertySet>& _rxSourceObject)
1734*cdf0e10cSrcweir {
1735*cdf0e10cSrcweir 	::rtl::OUString sCommand;
1736*cdf0e10cSrcweir     Reference< XPropertySetInfo > xPSI( _rxSourceObject->getPropertySetInfo(), UNO_SET_THROW );
1737*cdf0e10cSrcweir 	if ( xPSI->hasPropertyByName( PROPERTY_COMMAND ) )
1738*cdf0e10cSrcweir 	{
1739*cdf0e10cSrcweir 		_rxSourceObject->getPropertyValue( PROPERTY_COMMAND ) >>= sCommand;
1740*cdf0e10cSrcweir 
1741*cdf0e10cSrcweir         sal_Bool bEscapeProcessing( sal_False );
1742*cdf0e10cSrcweir         OSL_VERIFY( _rxSourceObject->getPropertyValue( PROPERTY_ESCAPE_PROCESSING ) >>= bEscapeProcessing );
1743*cdf0e10cSrcweir         if ( bEscapeProcessing )
1744*cdf0e10cSrcweir             sCommand = lcl_createSDBCLevelStatement( sCommand, _rxConnection );
1745*cdf0e10cSrcweir 	}
1746*cdf0e10cSrcweir 	else
1747*cdf0e10cSrcweir 	{
1748*cdf0e10cSrcweir 		sCommand = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "SELECT * FROM " ) );
1749*cdf0e10cSrcweir 		sCommand += composeTableNameForSelect( _rxConnection, _rxSourceObject );
1750*cdf0e10cSrcweir 	}
1751*cdf0e10cSrcweir     return createView( _rName, _rxConnection, sCommand );
1752*cdf0e10cSrcweir }
1753*cdf0e10cSrcweir 
1754*cdf0e10cSrcweir // -----------------------------------------------------------------------------
1755*cdf0e10cSrcweir sal_Bool insertHierachyElement( Window* _pParent, const Reference< XMultiServiceFactory >& _rxORB,
1756*cdf0e10cSrcweir 						   const Reference<XHierarchicalNameContainer>& _xNames,
1757*cdf0e10cSrcweir 						   const String& _sParentFolder,
1758*cdf0e10cSrcweir 						   sal_Bool _bForm,
1759*cdf0e10cSrcweir 						   sal_Bool _bCollection,
1760*cdf0e10cSrcweir 						   const Reference<XContent>& _xContent,
1761*cdf0e10cSrcweir 						   sal_Bool _bMove)
1762*cdf0e10cSrcweir {
1763*cdf0e10cSrcweir     OSL_ENSURE( _xNames.is(), "insertHierachyElement: illegal name container!" );
1764*cdf0e10cSrcweir 	if ( !_xNames.is() )
1765*cdf0e10cSrcweir         return sal_False;
1766*cdf0e10cSrcweir 
1767*cdf0e10cSrcweir     Reference<XNameAccess> xNameAccess( _xNames, UNO_QUERY );
1768*cdf0e10cSrcweir 	::rtl::OUString sName = _sParentFolder;
1769*cdf0e10cSrcweir 	if ( _xNames->hasByHierarchicalName(sName) )
1770*cdf0e10cSrcweir 	{
1771*cdf0e10cSrcweir 		Reference<XChild> xChild(_xNames->getByHierarchicalName(sName),UNO_QUERY);
1772*cdf0e10cSrcweir 		xNameAccess.set(xChild,UNO_QUERY);
1773*cdf0e10cSrcweir 		if ( !xNameAccess.is() && xChild.is() )
1774*cdf0e10cSrcweir 			xNameAccess.set(xChild->getParent(),UNO_QUERY);
1775*cdf0e10cSrcweir 	}
1776*cdf0e10cSrcweir 
1777*cdf0e10cSrcweir     OSL_ENSURE( xNameAccess.is(), "insertHierachyElement: could not find the proper name container!" );
1778*cdf0e10cSrcweir 	if ( !xNameAccess.is() )
1779*cdf0e10cSrcweir         return sal_False;
1780*cdf0e10cSrcweir 
1781*cdf0e10cSrcweir     ::rtl::OUString sNewName;
1782*cdf0e10cSrcweir 	Reference<XPropertySet> xProp(_xContent,UNO_QUERY);
1783*cdf0e10cSrcweir 	if ( xProp.is() )
1784*cdf0e10cSrcweir 		xProp->getPropertyValue(PROPERTY_NAME) >>= sNewName;
1785*cdf0e10cSrcweir 
1786*cdf0e10cSrcweir 	if ( !_bMove || !sNewName.getLength() )
1787*cdf0e10cSrcweir 	{
1788*cdf0e10cSrcweir 		String sTargetName,sLabel;
1789*cdf0e10cSrcweir 		if ( !sNewName.getLength() || xNameAccess->hasByName(sNewName) )
1790*cdf0e10cSrcweir 		{
1791*cdf0e10cSrcweir 			if ( sNewName.getLength() )
1792*cdf0e10cSrcweir 				sTargetName = sNewName;
1793*cdf0e10cSrcweir 			else
1794*cdf0e10cSrcweir 				sTargetName = String(ModuleRes( _bCollection ? STR_NEW_FOLDER : ((_bForm) ? RID_STR_FORM : RID_STR_REPORT)));
1795*cdf0e10cSrcweir 			sLabel = String(ModuleRes( _bCollection ? STR_FOLDER_LABEL  : ((_bForm) ? STR_FRM_LABEL : STR_RPT_LABEL)));
1796*cdf0e10cSrcweir 			sTargetName = ::dbtools::createUniqueName(xNameAccess,sTargetName);
1797*cdf0e10cSrcweir 
1798*cdf0e10cSrcweir 
1799*cdf0e10cSrcweir 			// here we have everything needed to create a new query object ...
1800*cdf0e10cSrcweir             HierarchicalNameCheck aNameChecker( _xNames.get(), sName );
1801*cdf0e10cSrcweir 			// ... ehm, except a new name
1802*cdf0e10cSrcweir 			OSaveAsDlg aAskForName(	_pParent,
1803*cdf0e10cSrcweir                                     _rxORB,
1804*cdf0e10cSrcweir 									sTargetName,
1805*cdf0e10cSrcweir 									sLabel,
1806*cdf0e10cSrcweir 									aNameChecker,
1807*cdf0e10cSrcweir 									SAD_ADDITIONAL_DESCRIPTION | SAD_TITLE_PASTE_AS);
1808*cdf0e10cSrcweir 			if ( RET_OK != aAskForName.Execute() )
1809*cdf0e10cSrcweir 				// cancelled by the user
1810*cdf0e10cSrcweir 				return sal_False;
1811*cdf0e10cSrcweir 
1812*cdf0e10cSrcweir 			sNewName = aAskForName.getName();
1813*cdf0e10cSrcweir 		}
1814*cdf0e10cSrcweir 	}
1815*cdf0e10cSrcweir 	else if ( xNameAccess->hasByName(sNewName) )
1816*cdf0e10cSrcweir 	{
1817*cdf0e10cSrcweir 		String sError(ModuleRes(STR_NAME_ALREADY_EXISTS));
1818*cdf0e10cSrcweir 		sError.SearchAndReplaceAscii("#",sNewName);
1819*cdf0e10cSrcweir 		throw SQLException(sError,NULL,::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("S1000")) ,0,Any());
1820*cdf0e10cSrcweir 	}
1821*cdf0e10cSrcweir 
1822*cdf0e10cSrcweir     try
1823*cdf0e10cSrcweir 	{
1824*cdf0e10cSrcweir 		Reference<XMultiServiceFactory> xORB( xNameAccess, UNO_QUERY_THROW );
1825*cdf0e10cSrcweir 		Sequence< Any > aArguments(3);
1826*cdf0e10cSrcweir 		PropertyValue aValue;
1827*cdf0e10cSrcweir 		// set as folder
1828*cdf0e10cSrcweir 		aValue.Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Name"));
1829*cdf0e10cSrcweir 		aValue.Value <<= sNewName;
1830*cdf0e10cSrcweir 		aArguments[0] <<= aValue;
1831*cdf0e10cSrcweir 		//parent
1832*cdf0e10cSrcweir 		aValue.Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Parent"));
1833*cdf0e10cSrcweir 		aValue.Value <<= xNameAccess;
1834*cdf0e10cSrcweir 		aArguments[1] <<= aValue;
1835*cdf0e10cSrcweir 
1836*cdf0e10cSrcweir 		aValue.Name = PROPERTY_EMBEDDEDOBJECT;
1837*cdf0e10cSrcweir 		aValue.Value <<= _xContent;
1838*cdf0e10cSrcweir 		aArguments[2] <<= aValue;
1839*cdf0e10cSrcweir 
1840*cdf0e10cSrcweir 		::rtl::OUString sServiceName(_bCollection ? ((_bForm) ? SERVICE_NAME_FORM_COLLECTION : SERVICE_NAME_REPORT_COLLECTION) : SERVICE_SDB_DOCUMENTDEFINITION);
1841*cdf0e10cSrcweir 
1842*cdf0e10cSrcweir 		Reference<XContent > xNew( xORB->createInstanceWithArguments( sServiceName, aArguments ), UNO_QUERY_THROW );
1843*cdf0e10cSrcweir 		Reference< XNameContainer > xNameContainer( xNameAccess, UNO_QUERY_THROW );
1844*cdf0e10cSrcweir 		xNameContainer->insertByName( sNewName, makeAny( xNew ) );
1845*cdf0e10cSrcweir 	}
1846*cdf0e10cSrcweir     catch( const IllegalArgumentException& e )
1847*cdf0e10cSrcweir     {
1848*cdf0e10cSrcweir         ::dbtools::throwGenericSQLException( e.Message, e.Context );
1849*cdf0e10cSrcweir     }
1850*cdf0e10cSrcweir 	catch( const Exception& )
1851*cdf0e10cSrcweir 	{
1852*cdf0e10cSrcweir         DBG_UNHANDLED_EXCEPTION();
1853*cdf0e10cSrcweir         return sal_False;
1854*cdf0e10cSrcweir 	}
1855*cdf0e10cSrcweir 
1856*cdf0e10cSrcweir     return sal_True;
1857*cdf0e10cSrcweir }
1858*cdf0e10cSrcweir // -----------------------------------------------------------------------------
1859*cdf0e10cSrcweir Reference< XNumberFormatter > getNumberFormatter(const Reference< XConnection >& _rxConnection,const Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rMF )
1860*cdf0e10cSrcweir {
1861*cdf0e10cSrcweir 	// ---------------------------------------------------------------
1862*cdf0e10cSrcweir 	// create a formatter working with the connections format supplier
1863*cdf0e10cSrcweir 	Reference< XNumberFormatter > xFormatter;
1864*cdf0e10cSrcweir 
1865*cdf0e10cSrcweir 	try
1866*cdf0e10cSrcweir 	{
1867*cdf0e10cSrcweir 		Reference< ::com::sun::star::util::XNumberFormatsSupplier >  xSupplier(::dbtools::getNumberFormats(_rxConnection, sal_True,_rMF));
1868*cdf0e10cSrcweir 
1869*cdf0e10cSrcweir 		if ( xSupplier.is() )
1870*cdf0e10cSrcweir 		{
1871*cdf0e10cSrcweir 			// create a new formatter
1872*cdf0e10cSrcweir 			xFormatter = Reference< ::com::sun::star::util::XNumberFormatter > (
1873*cdf0e10cSrcweir 				_rMF->createInstance(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.util.NumberFormatter"))), UNO_QUERY);
1874*cdf0e10cSrcweir 			if ( xFormatter.is() )
1875*cdf0e10cSrcweir 				xFormatter->attachNumberFormatsSupplier(xSupplier);
1876*cdf0e10cSrcweir 		}
1877*cdf0e10cSrcweir 	}
1878*cdf0e10cSrcweir 	catch(const Exception&)
1879*cdf0e10cSrcweir 	{
1880*cdf0e10cSrcweir         DBG_UNHANDLED_EXCEPTION();
1881*cdf0e10cSrcweir 	}
1882*cdf0e10cSrcweir 	return xFormatter;
1883*cdf0e10cSrcweir }
1884*cdf0e10cSrcweir 
1885*cdf0e10cSrcweir 
1886*cdf0e10cSrcweir // .........................................................................
1887*cdf0e10cSrcweir } // dbaui
1888*cdf0e10cSrcweir // .........................................................................
1889