1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski // MARKER(update_precomp.py): autogen include statement, do not remove
25*b1cdbd2cSJim Jagielski #include "precompiled_dbaccess.hxx"
26*b1cdbd2cSJim Jagielski 
27*b1cdbd2cSJim Jagielski #include "xmlExport.hxx"
28*b1cdbd2cSJim Jagielski #include "xmlAutoStyle.hxx"
29*b1cdbd2cSJim Jagielski #include "flt_reghelper.hxx"
30*b1cdbd2cSJim Jagielski #include <xmloff/ProgressBarHelper.hxx>
31*b1cdbd2cSJim Jagielski #include <xmloff/xmltoken.hxx>
32*b1cdbd2cSJim Jagielski #include <xmloff/txtimp.hxx>
33*b1cdbd2cSJim Jagielski #include <xmloff/xmlnmspe.hxx>
34*b1cdbd2cSJim Jagielski #include <xmloff/xmluconv.hxx>
35*b1cdbd2cSJim Jagielski #include <xmloff/nmspmap.hxx>
36*b1cdbd2cSJim Jagielski #include <comphelper/types.hxx>
37*b1cdbd2cSJim Jagielski #include "xmlstrings.hrc"
38*b1cdbd2cSJim Jagielski #include "xmlEnums.hxx"
39*b1cdbd2cSJim Jagielski #include <xmloff/nmspmap.hxx>
40*b1cdbd2cSJim Jagielski #include <com/sun/star/beans/XPropertyState.hpp>
41*b1cdbd2cSJim Jagielski #include <com/sun/star/beans/PropertyAttribute.hpp>
42*b1cdbd2cSJim Jagielski #include <com/sun/star/sdb/XFormDocumentsSupplier.hpp>
43*b1cdbd2cSJim Jagielski #include <com/sun/star/sdb/XOfficeDatabaseDocument.hpp>
44*b1cdbd2cSJim Jagielski #include <com/sun/star/sdb/XReportDocumentsSupplier.hpp>
45*b1cdbd2cSJim Jagielski #include <com/sun/star/sdb/XQueryDefinitionsSupplier.hpp>
46*b1cdbd2cSJim Jagielski #include <com/sun/star/sdbcx/XTablesSupplier.hpp>
47*b1cdbd2cSJim Jagielski #include <com/sun/star/sdbcx/XDataDescriptorFactory.hpp>
48*b1cdbd2cSJim Jagielski 
49*b1cdbd2cSJim Jagielski #include <com/sun/star/awt/TextAlign.hpp>
50*b1cdbd2cSJim Jagielski #include <xmloff/xmluconv.hxx>
51*b1cdbd2cSJim Jagielski #include "xmlHelper.hxx"
52*b1cdbd2cSJim Jagielski #include <com/sun/star/awt/FontDescriptor.hpp>
53*b1cdbd2cSJim Jagielski #include <svl/filenotation.hxx>
54*b1cdbd2cSJim Jagielski #include <unotools/pathoptions.hxx>
55*b1cdbd2cSJim Jagielski #include <tools/diagnose_ex.h>
56*b1cdbd2cSJim Jagielski #include <connectivity/DriversConfig.hxx>
57*b1cdbd2cSJim Jagielski #include <connectivity/dbtools.hxx>
58*b1cdbd2cSJim Jagielski 
59*b1cdbd2cSJim Jagielski #include <boost/optional.hpp>
60*b1cdbd2cSJim Jagielski 
61*b1cdbd2cSJim Jagielski namespace dbaxml
62*b1cdbd2cSJim Jagielski {
63*b1cdbd2cSJim Jagielski 	using namespace comphelper;
64*b1cdbd2cSJim Jagielski 	using namespace ::com::sun::star::sdb;
65*b1cdbd2cSJim Jagielski 	using namespace ::com::sun::star::sdbcx;
66*b1cdbd2cSJim Jagielski 	using namespace ::com::sun::star::util;
67*b1cdbd2cSJim Jagielski     using namespace ::com::sun::star;
68*b1cdbd2cSJim Jagielski 
69*b1cdbd2cSJim Jagielski 	class ODBExportHelper
70*b1cdbd2cSJim Jagielski 	{
71*b1cdbd2cSJim Jagielski 	public:
72*b1cdbd2cSJim Jagielski 		static ::rtl::OUString SAL_CALL getImplementationName_Static(  ) throw (RuntimeException);
73*b1cdbd2cSJim Jagielski 		static Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames_Static(  ) throw(RuntimeException);
74*b1cdbd2cSJim Jagielski 		static Reference< XInterface > SAL_CALL Create(const Reference< ::com::sun::star::lang::XMultiServiceFactory >&);
75*b1cdbd2cSJim Jagielski 	};
76*b1cdbd2cSJim Jagielski 	class ODBFullExportHelper
77*b1cdbd2cSJim Jagielski 	{
78*b1cdbd2cSJim Jagielski 	public:
79*b1cdbd2cSJim Jagielski 		static ::rtl::OUString SAL_CALL getImplementationName_Static(  ) throw (RuntimeException);
80*b1cdbd2cSJim Jagielski 		static Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames_Static(  ) throw(RuntimeException);
81*b1cdbd2cSJim Jagielski 		static Reference< XInterface > SAL_CALL Create(const Reference< ::com::sun::star::lang::XMultiServiceFactory >&);
82*b1cdbd2cSJim Jagielski 	};
83*b1cdbd2cSJim Jagielski }
84*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
createRegistryInfo_ODBFilterExport()85*b1cdbd2cSJim Jagielski extern "C" void SAL_CALL createRegistryInfo_ODBFilterExport( )
86*b1cdbd2cSJim Jagielski {
87*b1cdbd2cSJim Jagielski 	static ::dbaxml::OMultiInstanceAutoRegistration< ::dbaxml::ODBExport > aAutoRegistration;
88*b1cdbd2cSJim Jagielski }
89*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------------
createRegistryInfo_OSettingsExport()90*b1cdbd2cSJim Jagielski extern "C" void SAL_CALL createRegistryInfo_OSettingsExport( )
91*b1cdbd2cSJim Jagielski {
92*b1cdbd2cSJim Jagielski 	static ::dbaxml::OMultiInstanceAutoRegistration< ::dbaxml::ODBExportHelper > aAutoRegistration;
93*b1cdbd2cSJim Jagielski }
94*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------------
createRegistryInfo_OFullExport()95*b1cdbd2cSJim Jagielski extern "C" void SAL_CALL createRegistryInfo_OFullExport( )
96*b1cdbd2cSJim Jagielski {
97*b1cdbd2cSJim Jagielski 	static ::dbaxml::OMultiInstanceAutoRegistration< ::dbaxml::ODBFullExportHelper > aAutoRegistration;
98*b1cdbd2cSJim Jagielski }
99*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------------
100*b1cdbd2cSJim Jagielski namespace dbaxml
101*b1cdbd2cSJim Jagielski {
102*b1cdbd2cSJim Jagielski 	using namespace comphelper;
103*b1cdbd2cSJim Jagielski 	using namespace ::com::sun::star::sdb;
104*b1cdbd2cSJim Jagielski 	using namespace ::com::sun::star::sdbcx;
105*b1cdbd2cSJim Jagielski 	using namespace ::com::sun::star::util;
106*b1cdbd2cSJim Jagielski 
107*b1cdbd2cSJim Jagielski 	//---------------------------------------------------------------------
Create(const Reference<XMultiServiceFactory> & _rxORB)108*b1cdbd2cSJim Jagielski 	Reference< XInterface > SAL_CALL ODBExportHelper::Create(const Reference< XMultiServiceFactory >& _rxORB)
109*b1cdbd2cSJim Jagielski 	{
110*b1cdbd2cSJim Jagielski 		return static_cast< XServiceInfo* >(new ODBExport(_rxORB,EXPORT_SETTINGS | EXPORT_PRETTY ));
111*b1cdbd2cSJim Jagielski 	}
112*b1cdbd2cSJim Jagielski 	//---------------------------------------------------------------------
getImplementationName_Static()113*b1cdbd2cSJim Jagielski 	::rtl::OUString SAL_CALL ODBExportHelper::getImplementationName_Static(  ) throw (RuntimeException)
114*b1cdbd2cSJim Jagielski 	{
115*b1cdbd2cSJim Jagielski 		return ::rtl::OUString::createFromAscii("com.sun.star.comp.sdb.XMLSettingsExporter");
116*b1cdbd2cSJim Jagielski 	}
117*b1cdbd2cSJim Jagielski 	//---------------------------------------------------------------------
getSupportedServiceNames_Static()118*b1cdbd2cSJim Jagielski 	Sequence< ::rtl::OUString > SAL_CALL ODBExportHelper::getSupportedServiceNames_Static(  ) throw(RuntimeException)
119*b1cdbd2cSJim Jagielski 	{
120*b1cdbd2cSJim Jagielski 		Sequence< ::rtl::OUString > aSupported(1);
121*b1cdbd2cSJim Jagielski 		aSupported[0] = ::rtl::OUString::createFromAscii("com.sun.star.document.ExportFilter");
122*b1cdbd2cSJim Jagielski 		return aSupported;
123*b1cdbd2cSJim Jagielski 	}
124*b1cdbd2cSJim Jagielski 
125*b1cdbd2cSJim Jagielski 
126*b1cdbd2cSJim Jagielski 	//---------------------------------------------------------------------
Create(const Reference<XMultiServiceFactory> & _rxORB)127*b1cdbd2cSJim Jagielski 	Reference< XInterface > SAL_CALL ODBFullExportHelper::Create(const Reference< XMultiServiceFactory >& _rxORB)
128*b1cdbd2cSJim Jagielski 	{
129*b1cdbd2cSJim Jagielski 		return static_cast< XServiceInfo* >(new ODBExport(_rxORB,EXPORT_ALL));
130*b1cdbd2cSJim Jagielski 	}
131*b1cdbd2cSJim Jagielski 	//---------------------------------------------------------------------
getImplementationName_Static()132*b1cdbd2cSJim Jagielski 	::rtl::OUString SAL_CALL ODBFullExportHelper::getImplementationName_Static(  ) throw (RuntimeException)
133*b1cdbd2cSJim Jagielski 	{
134*b1cdbd2cSJim Jagielski 		return ::rtl::OUString::createFromAscii("com.sun.star.comp.sdb.XMLFullExporter");
135*b1cdbd2cSJim Jagielski 	}
136*b1cdbd2cSJim Jagielski 	//---------------------------------------------------------------------
getSupportedServiceNames_Static()137*b1cdbd2cSJim Jagielski 	Sequence< ::rtl::OUString > SAL_CALL ODBFullExportHelper::getSupportedServiceNames_Static(  ) throw(RuntimeException)
138*b1cdbd2cSJim Jagielski 	{
139*b1cdbd2cSJim Jagielski 		Sequence< ::rtl::OUString > aSupported(1);
140*b1cdbd2cSJim Jagielski 		aSupported[0] = ::rtl::OUString::createFromAscii("com.sun.star.document.ExportFilter");
141*b1cdbd2cSJim Jagielski 		return aSupported;
142*b1cdbd2cSJim Jagielski 	}
143*b1cdbd2cSJim Jagielski 
144*b1cdbd2cSJim Jagielski 	//---------------------------------------------------------------------
lcl_implGetPropertyXMLType(const Type & _rType)145*b1cdbd2cSJim Jagielski 	::rtl::OUString lcl_implGetPropertyXMLType(const Type& _rType)
146*b1cdbd2cSJim Jagielski 	{
147*b1cdbd2cSJim Jagielski 		// possible types we can write (either because we recognize them directly or because we convert _rValue
148*b1cdbd2cSJim Jagielski 		// into one of these types)
149*b1cdbd2cSJim Jagielski 		static const ::rtl::OUString s_sTypeBoolean	(RTL_CONSTASCII_USTRINGPARAM("boolean"));
150*b1cdbd2cSJim Jagielski 		static const ::rtl::OUString s_sTypeShort	(RTL_CONSTASCII_USTRINGPARAM("short"));
151*b1cdbd2cSJim Jagielski 		static const ::rtl::OUString s_sTypeInteger	(RTL_CONSTASCII_USTRINGPARAM("int"));
152*b1cdbd2cSJim Jagielski 		static const ::rtl::OUString s_sTypeLong	(RTL_CONSTASCII_USTRINGPARAM("long"));
153*b1cdbd2cSJim Jagielski 		static const ::rtl::OUString s_sTypeDouble	(RTL_CONSTASCII_USTRINGPARAM("double"));
154*b1cdbd2cSJim Jagielski 		static const ::rtl::OUString s_sTypeString	(RTL_CONSTASCII_USTRINGPARAM("string"));
155*b1cdbd2cSJim Jagielski 
156*b1cdbd2cSJim Jagielski 		// handle the type description
157*b1cdbd2cSJim Jagielski 		switch (_rType.getTypeClass())
158*b1cdbd2cSJim Jagielski 		{
159*b1cdbd2cSJim Jagielski 			case TypeClass_STRING:
160*b1cdbd2cSJim Jagielski 				return s_sTypeString;
161*b1cdbd2cSJim Jagielski 			case TypeClass_DOUBLE:
162*b1cdbd2cSJim Jagielski 				return s_sTypeDouble;
163*b1cdbd2cSJim Jagielski 			case TypeClass_BOOLEAN:
164*b1cdbd2cSJim Jagielski 				return s_sTypeBoolean;
165*b1cdbd2cSJim Jagielski 			case TypeClass_BYTE:
166*b1cdbd2cSJim Jagielski 			case TypeClass_SHORT:
167*b1cdbd2cSJim Jagielski 				return s_sTypeShort;
168*b1cdbd2cSJim Jagielski 			case TypeClass_LONG:
169*b1cdbd2cSJim Jagielski 				return s_sTypeInteger;
170*b1cdbd2cSJim Jagielski 			case TypeClass_HYPER:
171*b1cdbd2cSJim Jagielski 				return s_sTypeLong;
172*b1cdbd2cSJim Jagielski 			case TypeClass_ENUM:
173*b1cdbd2cSJim Jagielski 				return s_sTypeInteger;
174*b1cdbd2cSJim Jagielski 
175*b1cdbd2cSJim Jagielski 			default:
176*b1cdbd2cSJim Jagielski                 OSL_ENSURE( false, "lcl_implGetPropertyXMLType: unsupported value type!" );
177*b1cdbd2cSJim Jagielski 				return s_sTypeDouble;
178*b1cdbd2cSJim Jagielski 		}
179*b1cdbd2cSJim Jagielski 	}
180*b1cdbd2cSJim Jagielski 
181*b1cdbd2cSJim Jagielski 	class OSpecialHanldeXMLExportPropertyMapper : public SvXMLExportPropertyMapper
182*b1cdbd2cSJim Jagielski 	{
183*b1cdbd2cSJim Jagielski 	public:
OSpecialHanldeXMLExportPropertyMapper(const UniReference<XMLPropertySetMapper> & rMapper)184*b1cdbd2cSJim Jagielski 		OSpecialHanldeXMLExportPropertyMapper(const UniReference< XMLPropertySetMapper >& rMapper) : SvXMLExportPropertyMapper(rMapper )
185*b1cdbd2cSJim Jagielski 		{
186*b1cdbd2cSJim Jagielski 		}
187*b1cdbd2cSJim Jagielski 		/** this method is called for every item that has the
188*b1cdbd2cSJim Jagielski 	    MID_FLAG_SPECIAL_ITEM_EXPORT flag set */
handleSpecialItem(SvXMLAttributeList &,const XMLPropertyState &,const SvXMLUnitConverter &,const SvXMLNamespaceMap &,const::std::vector<XMLPropertyState> *,sal_uInt32) const189*b1cdbd2cSJim Jagielski 		virtual void handleSpecialItem(
190*b1cdbd2cSJim Jagielski 				SvXMLAttributeList& /*rAttrList*/,
191*b1cdbd2cSJim Jagielski 				const XMLPropertyState& /*rProperty*/,
192*b1cdbd2cSJim Jagielski 				const SvXMLUnitConverter& /*rUnitConverter*/,
193*b1cdbd2cSJim Jagielski 				const SvXMLNamespaceMap& /*rNamespaceMap*/,
194*b1cdbd2cSJim Jagielski 				const ::std::vector< XMLPropertyState > * /*pProperties*/ ,
195*b1cdbd2cSJim Jagielski 				sal_uInt32 /*nIdx*/ ) const
196*b1cdbd2cSJim Jagielski 		{
197*b1cdbd2cSJim Jagielski 			// nothing to do here
198*b1cdbd2cSJim Jagielski 		}
199*b1cdbd2cSJim Jagielski 	};
200*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
ODBExport(const Reference<XMultiServiceFactory> & _rxMSF,sal_uInt16 nExportFlag)201*b1cdbd2cSJim Jagielski ODBExport::ODBExport(const Reference< XMultiServiceFactory >& _rxMSF,sal_uInt16 nExportFlag)
202*b1cdbd2cSJim Jagielski : SvXMLExport( _rxMSF,MAP_10TH_MM,XML_DATABASE, EXPORT_OASIS | nExportFlag)
203*b1cdbd2cSJim Jagielski ,m_aTypeCollection(_rxMSF)
204*b1cdbd2cSJim Jagielski ,m_bAllreadyFilled(sal_False)
205*b1cdbd2cSJim Jagielski {
206*b1cdbd2cSJim Jagielski 	GetMM100UnitConverter().setCoreMeasureUnit(MAP_10TH_MM);
207*b1cdbd2cSJim Jagielski     GetMM100UnitConverter().setXMLMeasureUnit(MAP_CM);
208*b1cdbd2cSJim Jagielski 
209*b1cdbd2cSJim Jagielski 	_GetNamespaceMap().Add( GetXMLToken(XML_NP_OFFICE), GetXMLToken(XML_N_OFFICE), XML_NAMESPACE_OFFICE );
210*b1cdbd2cSJim Jagielski 	_GetNamespaceMap().Add( GetXMLToken(XML_NP_OOO), GetXMLToken(XML_N_OOO), XML_NAMESPACE_OOO );
211*b1cdbd2cSJim Jagielski     _GetNamespaceMap().Add( GetXMLToken(XML_NP_SVG), GetXMLToken(XML_N_SVG), XML_NAMESPACE_SVG );
212*b1cdbd2cSJim Jagielski 
213*b1cdbd2cSJim Jagielski 	_GetNamespaceMap().Add( GetXMLToken(XML_NP_DB), GetXMLToken(XML_N_DB_OASIS), XML_NAMESPACE_DB );
214*b1cdbd2cSJim Jagielski 
215*b1cdbd2cSJim Jagielski 	if( (nExportFlag & (EXPORT_STYLES|EXPORT_MASTERSTYLES|EXPORT_AUTOSTYLES|EXPORT_FONTDECLS) ) != 0 )
216*b1cdbd2cSJim Jagielski 		_GetNamespaceMap().Add( GetXMLToken(XML_NP_FO), GetXMLToken(XML_N_FO_COMPAT), XML_NAMESPACE_FO );
217*b1cdbd2cSJim Jagielski 
218*b1cdbd2cSJim Jagielski 	if( (nExportFlag & (EXPORT_META|EXPORT_STYLES|EXPORT_MASTERSTYLES|EXPORT_AUTOSTYLES|EXPORT_CONTENT|EXPORT_SCRIPTS|EXPORT_SETTINGS) ) != 0 )
219*b1cdbd2cSJim Jagielski 	{
220*b1cdbd2cSJim Jagielski 		_GetNamespaceMap().Add( GetXMLToken(XML_NP_XLINK), GetXMLToken(XML_N_XLINK), XML_NAMESPACE_XLINK );
221*b1cdbd2cSJim Jagielski 	}
222*b1cdbd2cSJim Jagielski 	if( (nExportFlag & EXPORT_SETTINGS) != 0 )
223*b1cdbd2cSJim Jagielski 	{
224*b1cdbd2cSJim Jagielski 		_GetNamespaceMap().Add( GetXMLToken(XML_NP_CONFIG), GetXMLToken(XML_N_CONFIG), XML_NAMESPACE_CONFIG );
225*b1cdbd2cSJim Jagielski 	}
226*b1cdbd2cSJim Jagielski 
227*b1cdbd2cSJim Jagielski 	if( (nExportFlag & (EXPORT_STYLES|EXPORT_MASTERSTYLES|EXPORT_AUTOSTYLES|EXPORT_CONTENT|EXPORT_FONTDECLS) ) != 0 )
228*b1cdbd2cSJim Jagielski 	{
229*b1cdbd2cSJim Jagielski 		_GetNamespaceMap().Add( GetXMLToken(XML_NP_STYLE), GetXMLToken(XML_N_STYLE), XML_NAMESPACE_STYLE );
230*b1cdbd2cSJim Jagielski 	}
231*b1cdbd2cSJim Jagielski 
232*b1cdbd2cSJim Jagielski 	_GetNamespaceMap().Add( GetXMLToken(XML_NP_TABLE), GetXMLToken(XML_N_TABLE), XML_NAMESPACE_TABLE );
233*b1cdbd2cSJim Jagielski 	_GetNamespaceMap().Add( GetXMLToken(XML_NP_NUMBER), GetXMLToken(XML_N_NUMBER), XML_NAMESPACE_NUMBER );
234*b1cdbd2cSJim Jagielski 
235*b1cdbd2cSJim Jagielski 	m_xExportHelper = new SvXMLExportPropertyMapper(GetTableStylesPropertySetMapper());
236*b1cdbd2cSJim Jagielski 	m_xColumnExportHelper = new OSpecialHanldeXMLExportPropertyMapper(GetColumnStylesPropertySetMapper());
237*b1cdbd2cSJim Jagielski 
238*b1cdbd2cSJim Jagielski     //UniReference < XMLPropertySetMapper > xCellStylesPropertySetMapper = new XMLPropertySetMapper(OXMLHelper::GetCellStylesPropertySetMapper(),m_xPropHdlFactory);
239*b1cdbd2cSJim Jagielski     //m_xCellExportHelper = new OSpecialHanldeXMLExportPropertyMapper(xCellStylesPropertySetMapper);
240*b1cdbd2cSJim Jagielski     //m_xCellExportHelper = new OSpecialHanldeXMLExportPropertyMapper(GetCellStylesPropertySetMapper());
241*b1cdbd2cSJim Jagielski     //m_xCellExportHelper->ChainExportMapper(XMLTextParagraphExport::CreateParaExtPropMapper(*this));
242*b1cdbd2cSJim Jagielski     m_xCellExportHelper = new OSpecialHanldeXMLExportPropertyMapper(GetCellStylesPropertySetMapper());
243*b1cdbd2cSJim Jagielski     m_xRowExportHelper = new OSpecialHanldeXMLExportPropertyMapper(OXMLHelper::GetRowStylesPropertySetMapper());
244*b1cdbd2cSJim Jagielski 
245*b1cdbd2cSJim Jagielski 	GetAutoStylePool()->AddFamily(
246*b1cdbd2cSJim Jagielski 		XML_STYLE_FAMILY_TABLE_TABLE,
247*b1cdbd2cSJim Jagielski 		rtl::OUString::createFromAscii( XML_STYLE_FAMILY_TABLE_TABLE_STYLES_NAME ),
248*b1cdbd2cSJim Jagielski 		m_xExportHelper.get(),
249*b1cdbd2cSJim Jagielski 		rtl::OUString::createFromAscii( XML_STYLE_FAMILY_TABLE_TABLE_STYLES_PREFIX ));
250*b1cdbd2cSJim Jagielski 
251*b1cdbd2cSJim Jagielski 	GetAutoStylePool()->AddFamily(
252*b1cdbd2cSJim Jagielski 		XML_STYLE_FAMILY_TABLE_COLUMN,
253*b1cdbd2cSJim Jagielski 		rtl::OUString::createFromAscii( XML_STYLE_FAMILY_TABLE_COLUMN_STYLES_NAME ),
254*b1cdbd2cSJim Jagielski 		m_xColumnExportHelper.get(),
255*b1cdbd2cSJim Jagielski 		rtl::OUString::createFromAscii( XML_STYLE_FAMILY_TABLE_COLUMN_STYLES_PREFIX ));
256*b1cdbd2cSJim Jagielski 
257*b1cdbd2cSJim Jagielski     GetAutoStylePool()->AddFamily(
258*b1cdbd2cSJim Jagielski 		XML_STYLE_FAMILY_TABLE_CELL,
259*b1cdbd2cSJim Jagielski 		rtl::OUString::createFromAscii( XML_STYLE_FAMILY_TABLE_CELL_STYLES_NAME ),
260*b1cdbd2cSJim Jagielski 		m_xCellExportHelper.get(),
261*b1cdbd2cSJim Jagielski 		rtl::OUString::createFromAscii( XML_STYLE_FAMILY_TABLE_CELL_STYLES_PREFIX ));
262*b1cdbd2cSJim Jagielski 
263*b1cdbd2cSJim Jagielski     GetAutoStylePool()->AddFamily(
264*b1cdbd2cSJim Jagielski 		XML_STYLE_FAMILY_TABLE_ROW,
265*b1cdbd2cSJim Jagielski 		rtl::OUString::createFromAscii( XML_STYLE_FAMILY_TABLE_ROW_STYLES_NAME ),
266*b1cdbd2cSJim Jagielski 		m_xRowExportHelper.get(),
267*b1cdbd2cSJim Jagielski 		rtl::OUString::createFromAscii( XML_STYLE_FAMILY_TABLE_ROW_STYLES_PREFIX ));
268*b1cdbd2cSJim Jagielski }
269*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
270*b1cdbd2cSJim Jagielski IMPLEMENT_SERVICE_INFO1_STATIC( ODBExport, "com.sun.star.comp.sdb.DBExportFilter", "com.sun.star.document.ExportFilter")
271*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
exportDataSource()272*b1cdbd2cSJim Jagielski void ODBExport::exportDataSource()
273*b1cdbd2cSJim Jagielski {
274*b1cdbd2cSJim Jagielski     try
275*b1cdbd2cSJim Jagielski     {
276*b1cdbd2cSJim Jagielski 	    Reference<XPropertySet> xProp( getDataSource(), UNO_SET_THROW );
277*b1cdbd2cSJim Jagielski 
278*b1cdbd2cSJim Jagielski 		sal_Bool bAutoIncrementEnabled = sal_True;
279*b1cdbd2cSJim Jagielski 		TStringPair aAutoIncrement;
280*b1cdbd2cSJim Jagielski 
281*b1cdbd2cSJim Jagielski         Reference< XPropertySet > xDataSourceSettings;
282*b1cdbd2cSJim Jagielski 		OSL_VERIFY( xProp->getPropertyValue( PROPERTY_SETTINGS ) >>= xDataSourceSettings );
283*b1cdbd2cSJim Jagielski         Reference< XPropertyState > xSettingsState( xDataSourceSettings, UNO_QUERY_THROW );
284*b1cdbd2cSJim Jagielski         Reference< XPropertySetInfo > xSettingsInfo( xDataSourceSettings->getPropertySetInfo(), UNO_SET_THROW );
285*b1cdbd2cSJim Jagielski 
286*b1cdbd2cSJim Jagielski 		TDelimiter aDelimiter;
287*b1cdbd2cSJim Jagielski         xSettingsState->getPropertyDefault( INFO_TEXTDELIMITER ) >>= aDelimiter.sText;
288*b1cdbd2cSJim Jagielski         xSettingsState->getPropertyDefault( INFO_FIELDDELIMITER ) >>= aDelimiter.sField;
289*b1cdbd2cSJim Jagielski         xSettingsState->getPropertyDefault( INFO_DECIMALDELIMITER ) >>= aDelimiter.sDecimal;
290*b1cdbd2cSJim Jagielski         xSettingsState->getPropertyDefault( INFO_THOUSANDSDELIMITER ) >>= aDelimiter.sThousand;
291*b1cdbd2cSJim Jagielski 
292*b1cdbd2cSJim Jagielski         ::connectivity::DriversConfig aDriverConfig(getServiceFactory());
293*b1cdbd2cSJim Jagielski         const ::rtl::OUString sURL = ::comphelper::getString(xProp->getPropertyValue(PROPERTY_URL));
294*b1cdbd2cSJim Jagielski         ::comphelper::NamedValueCollection aDriverSupportedProperties( aDriverConfig.getProperties( sURL ) );
295*b1cdbd2cSJim Jagielski 
296*b1cdbd2cSJim Jagielski         static ::rtl::OUString s_sTrue(::xmloff::token::GetXMLToken( XML_TRUE ));
297*b1cdbd2cSJim Jagielski         static ::rtl::OUString s_sFalse(::xmloff::token::GetXMLToken( XML_FALSE ));
298*b1cdbd2cSJim Jagielski         // loop through the properties, and export only those which are not defaulted
299*b1cdbd2cSJim Jagielski         TSettingsMap aSettingsMap;
300*b1cdbd2cSJim Jagielski         Sequence< Property > aProperties = xSettingsInfo->getProperties();
301*b1cdbd2cSJim Jagielski         const Property* pProperties = aProperties.getConstArray();
302*b1cdbd2cSJim Jagielski         const Property* pPropertiesEnd = pProperties + aProperties.getLength();
303*b1cdbd2cSJim Jagielski         for ( ; pProperties != pPropertiesEnd; ++pProperties )
304*b1cdbd2cSJim Jagielski         {
305*b1cdbd2cSJim Jagielski             ::rtl::OUString sValue;
306*b1cdbd2cSJim Jagielski             Any aValue = xDataSourceSettings->getPropertyValue( pProperties->Name );
307*b1cdbd2cSJim Jagielski 			switch ( aValue.getValueTypeClass() )
308*b1cdbd2cSJim Jagielski 			{
309*b1cdbd2cSJim Jagielski 				case TypeClass_STRING:
310*b1cdbd2cSJim Jagielski 					aValue >>= sValue;
311*b1cdbd2cSJim Jagielski 				break;
312*b1cdbd2cSJim Jagielski 				case TypeClass_DOUBLE:
313*b1cdbd2cSJim Jagielski 					// let the unit converter format is as string
314*b1cdbd2cSJim Jagielski 					sValue = ::rtl::OUString::valueOf( getDouble( aValue ) );
315*b1cdbd2cSJim Jagielski 					break;
316*b1cdbd2cSJim Jagielski 				case TypeClass_BOOLEAN:
317*b1cdbd2cSJim Jagielski 					sValue = ::xmloff::token::GetXMLToken( getBOOL( aValue ) ? XML_TRUE : XML_FALSE );
318*b1cdbd2cSJim Jagielski 					break;
319*b1cdbd2cSJim Jagielski 				case TypeClass_BYTE:
320*b1cdbd2cSJim Jagielski 				case TypeClass_SHORT:
321*b1cdbd2cSJim Jagielski 				case TypeClass_LONG:
322*b1cdbd2cSJim Jagielski 					// let the unit converter format is as string
323*b1cdbd2cSJim Jagielski 					sValue = ::rtl::OUString::valueOf( getINT32( aValue ) );
324*b1cdbd2cSJim Jagielski 					break;
325*b1cdbd2cSJim Jagielski                 default:
326*b1cdbd2cSJim Jagielski                     break;
327*b1cdbd2cSJim Jagielski 			}
328*b1cdbd2cSJim Jagielski 
329*b1cdbd2cSJim Jagielski 			::xmloff::token::XMLTokenEnum eToken = XML_TOKEN_INVALID;
330*b1cdbd2cSJim Jagielski 
331*b1cdbd2cSJim Jagielski             struct PropertyMap
332*b1cdbd2cSJim Jagielski             {
333*b1cdbd2cSJim Jagielski                 const ::rtl::OUString                       sPropertyName;
334*b1cdbd2cSJim Jagielski                 const XMLTokenEnum                          eAttributeToken;
335*b1cdbd2cSJim Jagielski                 const ::boost::optional< ::rtl::OUString >  aXMLDefault;
336*b1cdbd2cSJim Jagielski 
337*b1cdbd2cSJim Jagielski                 PropertyMap( const ::rtl::OUString& _rPropertyName, const XMLTokenEnum _eToken )
338*b1cdbd2cSJim Jagielski                     :sPropertyName( _rPropertyName )
339*b1cdbd2cSJim Jagielski                     ,eAttributeToken( _eToken )
340*b1cdbd2cSJim Jagielski                     ,aXMLDefault()
341*b1cdbd2cSJim Jagielski                 {
342*b1cdbd2cSJim Jagielski                 }
343*b1cdbd2cSJim Jagielski 
344*b1cdbd2cSJim Jagielski                 PropertyMap( const ::rtl::OUString& _rPropertyName, const XMLTokenEnum _eToken, const ::rtl::OUString& _rDefault )
345*b1cdbd2cSJim Jagielski                     :sPropertyName( _rPropertyName )
346*b1cdbd2cSJim Jagielski                     ,eAttributeToken( _eToken )
347*b1cdbd2cSJim Jagielski                     ,aXMLDefault( _rDefault )
348*b1cdbd2cSJim Jagielski                 {
349*b1cdbd2cSJim Jagielski                 }
350*b1cdbd2cSJim Jagielski             };
351*b1cdbd2cSJim Jagielski 
352*b1cdbd2cSJim Jagielski             PropertyMap aTokens[] =
353*b1cdbd2cSJim Jagielski             {
354*b1cdbd2cSJim Jagielski                 PropertyMap( INFO_TEXTFILEHEADER,       XML_IS_FIRST_ROW_HEADER_LINE,       s_sTrue     ),
355*b1cdbd2cSJim Jagielski                 PropertyMap( INFO_SHOWDELETEDROWS,      XML_SHOW_DELETED,                   s_sFalse    ),
356*b1cdbd2cSJim Jagielski                 PropertyMap( INFO_ALLOWLONGTABLENAMES,  XML_IS_TABLE_NAME_LENGTH_LIMITED,   s_sTrue     ),
357*b1cdbd2cSJim Jagielski                 PropertyMap( INFO_ADDITIONALOPTIONS,    XML_SYSTEM_DRIVER_SETTINGS                      ),
358*b1cdbd2cSJim Jagielski                 PropertyMap( PROPERTY_ENABLESQL92CHECK, XML_ENABLE_SQL92_CHECK,             s_sFalse    ),
359*b1cdbd2cSJim Jagielski                 PropertyMap( INFO_APPEND_TABLE_ALIAS,   XML_APPEND_TABLE_ALIAS_NAME,        s_sTrue     ),
360*b1cdbd2cSJim Jagielski                 PropertyMap( INFO_PARAMETERNAMESUBST,   XML_PARAMETER_NAME_SUBSTITUTION,    s_sTrue     ),
361*b1cdbd2cSJim Jagielski                 PropertyMap( INFO_IGNOREDRIVER_PRIV,    XML_IGNORE_DRIVER_PRIVILEGES,       s_sTrue     ),
362*b1cdbd2cSJim Jagielski                 PropertyMap( INFO_USECATALOG,           XML_USE_CATALOG,                    s_sFalse    ),
363*b1cdbd2cSJim Jagielski                 PropertyMap( PROPERTY_SUPPRESSVERSIONCL,XML_SUPPRESS_VERSION_COLUMNS,       s_sTrue     ),
364*b1cdbd2cSJim Jagielski                 PropertyMap( INFO_CONN_LDAP_BASEDN,     XML_BASE_DN                                     ),
365*b1cdbd2cSJim Jagielski                 PropertyMap( INFO_CONN_LDAP_ROWCOUNT,   XML_MAX_ROW_COUNT                               )
366*b1cdbd2cSJim Jagielski             };
367*b1cdbd2cSJim Jagielski 
368*b1cdbd2cSJim Jagielski             bool bIsXMLDefault = false;
369*b1cdbd2cSJim Jagielski             for ( size_t i=0; i < sizeof( aTokens ) / sizeof( aTokens[0] ); ++i )
370*b1cdbd2cSJim Jagielski             {
371*b1cdbd2cSJim Jagielski                 if ( pProperties->Name == aTokens[i].sPropertyName )
372*b1cdbd2cSJim Jagielski                 {
373*b1cdbd2cSJim Jagielski                     eToken = aTokens[i].eAttributeToken;
374*b1cdbd2cSJim Jagielski 
375*b1cdbd2cSJim Jagielski                     if  (   !!aTokens[i].aXMLDefault
376*b1cdbd2cSJim Jagielski                         &&  ( sValue == *aTokens[i].aXMLDefault )
377*b1cdbd2cSJim Jagielski                         )
378*b1cdbd2cSJim Jagielski                     {
379*b1cdbd2cSJim Jagielski                         bIsXMLDefault = true;
380*b1cdbd2cSJim Jagielski                     }
381*b1cdbd2cSJim Jagielski                     break;
382*b1cdbd2cSJim Jagielski                 }
383*b1cdbd2cSJim Jagielski             }
384*b1cdbd2cSJim Jagielski 
385*b1cdbd2cSJim Jagielski             if ( bIsXMLDefault )
386*b1cdbd2cSJim Jagielski                 // the property has the value which is specified as default in the XML schema -> no need to write it
387*b1cdbd2cSJim Jagielski                 continue;
388*b1cdbd2cSJim Jagielski 
389*b1cdbd2cSJim Jagielski             if ( eToken == XML_TOKEN_INVALID )
390*b1cdbd2cSJim Jagielski             {
391*b1cdbd2cSJim Jagielski                 // for properties which are not REMOVEABLE, we care for their state, and
392*b1cdbd2cSJim Jagielski                 // only export them if they're not DEFAULTed
393*b1cdbd2cSJim Jagielski                 if ( ( pProperties->Attributes & PropertyAttribute::REMOVEABLE ) == 0 )
394*b1cdbd2cSJim Jagielski                 {
395*b1cdbd2cSJim Jagielski                     PropertyState ePropertyState = xSettingsState->getPropertyState( pProperties->Name );
396*b1cdbd2cSJim Jagielski                     if ( PropertyState_DEFAULT_VALUE == ePropertyState )
397*b1cdbd2cSJim Jagielski                         continue;
398*b1cdbd2cSJim Jagielski                 }
399*b1cdbd2cSJim Jagielski 
400*b1cdbd2cSJim Jagielski                 // special handlings
401*b1cdbd2cSJim Jagielski 			    if ( pProperties->Name == PROPERTY_BOOLEANCOMPARISONMODE )
402*b1cdbd2cSJim Jagielski 			    {
403*b1cdbd2cSJim Jagielski 				    sal_Int32 nValue = 0;
404*b1cdbd2cSJim Jagielski 				    aValue >>= nValue;
405*b1cdbd2cSJim Jagielski 				    if ( sValue.equalsAscii("0") )
406*b1cdbd2cSJim Jagielski 					    sValue = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("equal-integer"));
407*b1cdbd2cSJim Jagielski 				    else if ( sValue.equalsAscii("1") )
408*b1cdbd2cSJim Jagielski 					    sValue = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("is-boolean"));
409*b1cdbd2cSJim Jagielski 				    else if ( sValue.equalsAscii("2") )
410*b1cdbd2cSJim Jagielski 					    sValue = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("equal-boolean"));
411*b1cdbd2cSJim Jagielski 				    else if ( sValue.equalsAscii("3") )
412*b1cdbd2cSJim Jagielski 					    sValue = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("equal-use-only-zero"));
413*b1cdbd2cSJim Jagielski                     if ( sValue.equalsAscii("equal-integer") )
414*b1cdbd2cSJim Jagielski                         continue;
415*b1cdbd2cSJim Jagielski 				    eToken = XML_BOOLEAN_COMPARISON_MODE;
416*b1cdbd2cSJim Jagielski 			    }
417*b1cdbd2cSJim Jagielski 			    else if ( pProperties->Name == INFO_AUTORETRIEVEENABLED )
418*b1cdbd2cSJim Jagielski 			    {
419*b1cdbd2cSJim Jagielski 				    aValue >>= bAutoIncrementEnabled;
420*b1cdbd2cSJim Jagielski 				    continue;
421*b1cdbd2cSJim Jagielski 			    }
422*b1cdbd2cSJim Jagielski 			    else if ( pProperties->Name == INFO_AUTORETRIEVEVALUE )
423*b1cdbd2cSJim Jagielski 			    {
424*b1cdbd2cSJim Jagielski 				    aAutoIncrement.first = sValue;
425*b1cdbd2cSJim Jagielski 				    continue;
426*b1cdbd2cSJim Jagielski 			    }
427*b1cdbd2cSJim Jagielski 			    else if ( pProperties->Name == PROPERTY_AUTOINCREMENTCREATION )
428*b1cdbd2cSJim Jagielski 			    {
429*b1cdbd2cSJim Jagielski 				    aAutoIncrement.second = sValue;
430*b1cdbd2cSJim Jagielski 				    continue;
431*b1cdbd2cSJim Jagielski 			    }
432*b1cdbd2cSJim Jagielski 			    else if ( pProperties->Name == INFO_TEXTDELIMITER )
433*b1cdbd2cSJim Jagielski 			    {
434*b1cdbd2cSJim Jagielski 				    aDelimiter.sText = sValue;
435*b1cdbd2cSJim Jagielski                     aDelimiter.bUsed = true;
436*b1cdbd2cSJim Jagielski 				    continue;
437*b1cdbd2cSJim Jagielski 			    }
438*b1cdbd2cSJim Jagielski 			    else if ( pProperties->Name == INFO_FIELDDELIMITER )
439*b1cdbd2cSJim Jagielski 			    {
440*b1cdbd2cSJim Jagielski 				    aDelimiter.sField = sValue;
441*b1cdbd2cSJim Jagielski                     aDelimiter.bUsed = true;
442*b1cdbd2cSJim Jagielski 				    continue;
443*b1cdbd2cSJim Jagielski 			    }
444*b1cdbd2cSJim Jagielski 			    else if ( pProperties->Name == INFO_DECIMALDELIMITER )
445*b1cdbd2cSJim Jagielski 			    {
446*b1cdbd2cSJim Jagielski 				    aDelimiter.sDecimal = sValue;
447*b1cdbd2cSJim Jagielski                     aDelimiter.bUsed = true;
448*b1cdbd2cSJim Jagielski 				    continue;
449*b1cdbd2cSJim Jagielski 			    }
450*b1cdbd2cSJim Jagielski 			    else if ( pProperties->Name == INFO_THOUSANDSDELIMITER )
451*b1cdbd2cSJim Jagielski 			    {
452*b1cdbd2cSJim Jagielski 				    aDelimiter.sThousand = sValue;
453*b1cdbd2cSJim Jagielski                     aDelimiter.bUsed = true;
454*b1cdbd2cSJim Jagielski 				    continue;
455*b1cdbd2cSJim Jagielski 			    }
456*b1cdbd2cSJim Jagielski 			    else if ( pProperties->Name == INFO_CHARSET )
457*b1cdbd2cSJim Jagielski 			    {
458*b1cdbd2cSJim Jagielski 				    m_sCharSet = sValue;
459*b1cdbd2cSJim Jagielski 				    continue;
460*b1cdbd2cSJim Jagielski 			    }
461*b1cdbd2cSJim Jagielski 			    else
462*b1cdbd2cSJim Jagielski 			    {
463*b1cdbd2cSJim Jagielski                     if ( !aDriverSupportedProperties.has(pProperties->Name) || aDriverSupportedProperties.get(pProperties->Name) != aValue )
464*b1cdbd2cSJim Jagielski                     {
465*b1cdbd2cSJim Jagielski 				        m_aDataSourceSettings.push_back( TypedPropertyValue(
466*b1cdbd2cSJim Jagielski                             pProperties->Name, pProperties->Type, aValue ) );
467*b1cdbd2cSJim Jagielski                     }
468*b1cdbd2cSJim Jagielski 				    continue;
469*b1cdbd2cSJim Jagielski 			    }
470*b1cdbd2cSJim Jagielski             }
471*b1cdbd2cSJim Jagielski 
472*b1cdbd2cSJim Jagielski             aSettingsMap.insert(TSettingsMap::value_type(eToken,sValue));
473*b1cdbd2cSJim Jagielski 		}
474*b1cdbd2cSJim Jagielski 		if ( bAutoIncrementEnabled && (aAutoIncrement.first.getLength() || aAutoIncrement.second.getLength()) )
475*b1cdbd2cSJim Jagielski 			m_aAutoIncrement.reset( new TStringPair(aAutoIncrement));
476*b1cdbd2cSJim Jagielski 		if ( aDelimiter.bUsed )
477*b1cdbd2cSJim Jagielski 			m_aDelimiter.reset( new TDelimiter( aDelimiter ) );
478*b1cdbd2cSJim Jagielski 
479*b1cdbd2cSJim Jagielski 		SvXMLElementExport aElem(*this,XML_NAMESPACE_DB, XML_DATASOURCE, sal_True, sal_True);
480*b1cdbd2cSJim Jagielski 
481*b1cdbd2cSJim Jagielski         exportConnectionData();
482*b1cdbd2cSJim Jagielski         exportDriverSettings(aSettingsMap);
483*b1cdbd2cSJim Jagielski         exportApplicationConnectionSettings(aSettingsMap);
484*b1cdbd2cSJim Jagielski     }
485*b1cdbd2cSJim Jagielski     catch( const Exception& )
486*b1cdbd2cSJim Jagielski     {
487*b1cdbd2cSJim Jagielski     	DBG_UNHANDLED_EXCEPTION();
488*b1cdbd2cSJim Jagielski     }
489*b1cdbd2cSJim Jagielski }
490*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
exportApplicationConnectionSettings(const TSettingsMap & _aSettings)491*b1cdbd2cSJim Jagielski void ODBExport::exportApplicationConnectionSettings(const TSettingsMap& _aSettings)
492*b1cdbd2cSJim Jagielski {
493*b1cdbd2cSJim Jagielski     const ::xmloff::token::XMLTokenEnum pSettings[] = {
494*b1cdbd2cSJim Jagielski         XML_IS_TABLE_NAME_LENGTH_LIMITED
495*b1cdbd2cSJim Jagielski         ,XML_ENABLE_SQL92_CHECK
496*b1cdbd2cSJim Jagielski         ,XML_APPEND_TABLE_ALIAS_NAME
497*b1cdbd2cSJim Jagielski         ,XML_IGNORE_DRIVER_PRIVILEGES
498*b1cdbd2cSJim Jagielski         ,XML_BOOLEAN_COMPARISON_MODE
499*b1cdbd2cSJim Jagielski         ,XML_USE_CATALOG
500*b1cdbd2cSJim Jagielski         ,XML_MAX_ROW_COUNT
501*b1cdbd2cSJim Jagielski         ,XML_SUPPRESS_VERSION_COLUMNS
502*b1cdbd2cSJim Jagielski     };
503*b1cdbd2cSJim Jagielski     for (size_t i = 0; i< sizeof(pSettings)/sizeof(pSettings[0]); ++i)
504*b1cdbd2cSJim Jagielski     {
505*b1cdbd2cSJim Jagielski         TSettingsMap::const_iterator aFind = _aSettings.find(pSettings[i]);
506*b1cdbd2cSJim Jagielski         if ( aFind != _aSettings.end() )
507*b1cdbd2cSJim Jagielski             AddAttribute(XML_NAMESPACE_DB, aFind->first,aFind->second);
508*b1cdbd2cSJim Jagielski     }
509*b1cdbd2cSJim Jagielski     SvXMLElementExport aElem(*this,XML_NAMESPACE_DB, XML_APPLICATION_CONNECTION_SETTINGS, sal_True, sal_True);
510*b1cdbd2cSJim Jagielski 
511*b1cdbd2cSJim Jagielski     Reference<XPropertySet> xProp(getDataSource());
512*b1cdbd2cSJim Jagielski 	Sequence< ::rtl::OUString> aValue;
513*b1cdbd2cSJim Jagielski 	xProp->getPropertyValue(PROPERTY_TABLEFILTER) >>= aValue;
514*b1cdbd2cSJim Jagielski     if ( aValue.getLength() )
515*b1cdbd2cSJim Jagielski     {
516*b1cdbd2cSJim Jagielski         SvXMLElementExport aElem2(*this,XML_NAMESPACE_DB, XML_TABLE_FILTER, sal_True, sal_True);
517*b1cdbd2cSJim Jagielski 	    exportSequence(aValue,XML_TABLE_INCLUDE_FILTER,XML_TABLE_FILTER_PATTERN);
518*b1cdbd2cSJim Jagielski     }
519*b1cdbd2cSJim Jagielski 
520*b1cdbd2cSJim Jagielski     xProp->getPropertyValue(PROPERTY_TABLETYPEFILTER) >>= aValue;
521*b1cdbd2cSJim Jagielski     if ( aValue.getLength() )
522*b1cdbd2cSJim Jagielski 	    exportSequence(aValue,XML_TABLE_TYPE_FILTER,XML_TABLE_TYPE);
523*b1cdbd2cSJim Jagielski 
524*b1cdbd2cSJim Jagielski     exportDataSourceSettings();
525*b1cdbd2cSJim Jagielski }
526*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
exportDriverSettings(const TSettingsMap & _aSettings)527*b1cdbd2cSJim Jagielski void ODBExport::exportDriverSettings(const TSettingsMap& _aSettings)
528*b1cdbd2cSJim Jagielski {
529*b1cdbd2cSJim Jagielski     const ::xmloff::token::XMLTokenEnum pSettings[] = {
530*b1cdbd2cSJim Jagielski         XML_SHOW_DELETED
531*b1cdbd2cSJim Jagielski         ,XML_SYSTEM_DRIVER_SETTINGS
532*b1cdbd2cSJim Jagielski         ,XML_BASE_DN
533*b1cdbd2cSJim Jagielski         ,XML_IS_FIRST_ROW_HEADER_LINE
534*b1cdbd2cSJim Jagielski         ,XML_PARAMETER_NAME_SUBSTITUTION
535*b1cdbd2cSJim Jagielski     };
536*b1cdbd2cSJim Jagielski     for (size_t i = 0; i< sizeof(pSettings)/sizeof(pSettings[0]); ++i)
537*b1cdbd2cSJim Jagielski     {
538*b1cdbd2cSJim Jagielski         TSettingsMap::const_iterator aFind = _aSettings.find(pSettings[i]);
539*b1cdbd2cSJim Jagielski         if ( aFind != _aSettings.end() )
540*b1cdbd2cSJim Jagielski             AddAttribute(XML_NAMESPACE_DB, aFind->first,aFind->second);
541*b1cdbd2cSJim Jagielski     }
542*b1cdbd2cSJim Jagielski     SvXMLElementExport aElem(*this,XML_NAMESPACE_DB, XML_DRIVER_SETTINGS, sal_True, sal_True);
543*b1cdbd2cSJim Jagielski     exportAutoIncrement();
544*b1cdbd2cSJim Jagielski     exportDelimiter();
545*b1cdbd2cSJim Jagielski     exportCharSet();
546*b1cdbd2cSJim Jagielski }
547*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
exportConnectionData()548*b1cdbd2cSJim Jagielski void ODBExport::exportConnectionData()
549*b1cdbd2cSJim Jagielski {
550*b1cdbd2cSJim Jagielski     SvXMLElementExport aConnData(*this,XML_NAMESPACE_DB, XML_CONNECTION_DATA, sal_True, sal_True);
551*b1cdbd2cSJim Jagielski 
552*b1cdbd2cSJim Jagielski     {
553*b1cdbd2cSJim Jagielski         ::rtl::OUString sValue;
554*b1cdbd2cSJim Jagielski         Reference<XPropertySet> xProp(getDataSource());
555*b1cdbd2cSJim Jagielski 	    xProp->getPropertyValue(PROPERTY_URL) >>= sValue;
556*b1cdbd2cSJim Jagielski         if ( m_aTypeCollection.isFileSystemBased(sValue) )
557*b1cdbd2cSJim Jagielski         {
558*b1cdbd2cSJim Jagielski             SvXMLElementExport aDatabaseDescription(*this,XML_NAMESPACE_DB, XML_DATABASE_DESCRIPTION, sal_True, sal_True);
559*b1cdbd2cSJim Jagielski             {
560*b1cdbd2cSJim Jagielski                 SvtPathOptions aPathOptions;
561*b1cdbd2cSJim Jagielski                 const String sOrigUrl = m_aTypeCollection.cutPrefix(sValue);
562*b1cdbd2cSJim Jagielski 			    String sFileName = aPathOptions.SubstituteVariable(sOrigUrl);
563*b1cdbd2cSJim Jagielski                 if ( sOrigUrl == sFileName )
564*b1cdbd2cSJim Jagielski                 {
565*b1cdbd2cSJim Jagielski                     ::svt::OFileNotation aTransformer( sFileName );
566*b1cdbd2cSJim Jagielski                     ::rtl::OUStringBuffer sURL( aTransformer.get( ::svt::OFileNotation::N_URL ) );
567*b1cdbd2cSJim Jagielski                     if ( sURL.charAt(sURL.getLength()-1) != '/' )
568*b1cdbd2cSJim Jagielski                         sURL.append(sal_Unicode('/'));
569*b1cdbd2cSJim Jagielski 
570*b1cdbd2cSJim Jagielski                     AddAttribute(XML_NAMESPACE_XLINK,XML_HREF,GetRelativeReference(sURL.makeStringAndClear()));
571*b1cdbd2cSJim Jagielski                 } // if ( sOrigUrl == sFileName )
572*b1cdbd2cSJim Jagielski                 else
573*b1cdbd2cSJim Jagielski                     AddAttribute(XML_NAMESPACE_XLINK,XML_HREF,sOrigUrl);
574*b1cdbd2cSJim Jagielski                 AddAttribute(XML_NAMESPACE_DB,XML_MEDIA_TYPE,m_aTypeCollection.getMediaType(sValue));
575*b1cdbd2cSJim Jagielski                 const ::dbaccess::DATASOURCE_TYPE eType = m_aTypeCollection.determineType(sValue);
576*b1cdbd2cSJim Jagielski                 try
577*b1cdbd2cSJim Jagielski                 {
578*b1cdbd2cSJim Jagielski                     ::rtl::OUString sExtension;
579*b1cdbd2cSJim Jagielski                     if ( eType == dbaccess::DST_MSACCESS )
580*b1cdbd2cSJim Jagielski                         sExtension = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("mdb"));
581*b1cdbd2cSJim Jagielski                     else
582*b1cdbd2cSJim Jagielski                     {
583*b1cdbd2cSJim Jagielski                         Reference< XPropertySet > xDataSourceSettings;
584*b1cdbd2cSJim Jagielski 		                OSL_VERIFY( xProp->getPropertyValue( PROPERTY_SETTINGS ) >>= xDataSourceSettings );
585*b1cdbd2cSJim Jagielski                         xDataSourceSettings->getPropertyValue( INFO_TEXTFILEEXTENSION ) >>= sExtension;
586*b1cdbd2cSJim Jagielski                     }
587*b1cdbd2cSJim Jagielski                     if ( sExtension.getLength() )
588*b1cdbd2cSJim Jagielski                         AddAttribute(XML_NAMESPACE_DB,XML_EXTENSION,sExtension);
589*b1cdbd2cSJim Jagielski                 }
590*b1cdbd2cSJim Jagielski                 catch(const Exception&)
591*b1cdbd2cSJim Jagielski                 {
592*b1cdbd2cSJim Jagielski                     // nii
593*b1cdbd2cSJim Jagielski                 }
594*b1cdbd2cSJim Jagielski                 SvXMLElementExport aFileBasedDB(*this,XML_NAMESPACE_DB, XML_FILE_BASED_DATABASE, sal_True, sal_True);
595*b1cdbd2cSJim Jagielski             }
596*b1cdbd2cSJim Jagielski         }
597*b1cdbd2cSJim Jagielski         else
598*b1cdbd2cSJim Jagielski         {
599*b1cdbd2cSJim Jagielski             String sDatabaseName,sHostName;
600*b1cdbd2cSJim Jagielski             sal_Int32 nPort = -1;
601*b1cdbd2cSJim Jagielski             m_aTypeCollection.extractHostNamePort(sValue,sDatabaseName,sHostName,nPort);
602*b1cdbd2cSJim Jagielski             if ( sHostName.Len() )
603*b1cdbd2cSJim Jagielski             {
604*b1cdbd2cSJim Jagielski                 SvXMLElementExport aDatabaseDescription(*this,XML_NAMESPACE_DB, XML_DATABASE_DESCRIPTION, sal_True, sal_True);
605*b1cdbd2cSJim Jagielski                 {
606*b1cdbd2cSJim Jagielski                     String sType = m_aTypeCollection.getPrefix(sValue);
607*b1cdbd2cSJim Jagielski                     sType.EraseTrailingChars(':');
608*b1cdbd2cSJim Jagielski                     AddAttribute(XML_NAMESPACE_DB,XML_TYPE,sType);
609*b1cdbd2cSJim Jagielski                     AddAttribute(XML_NAMESPACE_DB,XML_HOSTNAME,sHostName);
610*b1cdbd2cSJim Jagielski                     if ( nPort != -1 )
611*b1cdbd2cSJim Jagielski                         AddAttribute(XML_NAMESPACE_DB,XML_PORT,::rtl::OUString::valueOf(nPort));
612*b1cdbd2cSJim Jagielski                     if ( sDatabaseName.Len() )
613*b1cdbd2cSJim Jagielski                         AddAttribute(XML_NAMESPACE_DB,XML_DATABASE_NAME,sDatabaseName);
614*b1cdbd2cSJim Jagielski 
615*b1cdbd2cSJim Jagielski                     try
616*b1cdbd2cSJim Jagielski                     {
617*b1cdbd2cSJim Jagielski                         Reference< XPropertySet > xDataSourceSettings( xProp->getPropertyValue( PROPERTY_SETTINGS ), UNO_QUERY_THROW );
618*b1cdbd2cSJim Jagielski                         Reference< XPropertySetInfo > xSettingsInfo( xDataSourceSettings->getPropertySetInfo(), UNO_SET_THROW );
619*b1cdbd2cSJim Jagielski 
620*b1cdbd2cSJim Jagielski                         struct PropertyMap
621*b1cdbd2cSJim Jagielski                         {
622*b1cdbd2cSJim Jagielski                             const sal_Char* pAsciiPropertyName;
623*b1cdbd2cSJim Jagielski                             sal_uInt16      nAttributeId;
624*b1cdbd2cSJim Jagielski 
625*b1cdbd2cSJim Jagielski                             PropertyMap() :pAsciiPropertyName( NULL ), nAttributeId(0) { }
626*b1cdbd2cSJim Jagielski                             PropertyMap( const sal_Char* _pAsciiPropertyName, const sal_uInt16 _nAttributeId )
627*b1cdbd2cSJim Jagielski                                 :pAsciiPropertyName( _pAsciiPropertyName )
628*b1cdbd2cSJim Jagielski                                 ,nAttributeId( _nAttributeId )
629*b1cdbd2cSJim Jagielski                             {
630*b1cdbd2cSJim Jagielski                             }
631*b1cdbd2cSJim Jagielski                         };
632*b1cdbd2cSJim Jagielski                         PropertyMap aProperties[] =
633*b1cdbd2cSJim Jagielski                         {
634*b1cdbd2cSJim Jagielski                             PropertyMap( "LocalSocket", XML_LOCAL_SOCKET )
635*b1cdbd2cSJim Jagielski                             //PropertyMap( "NamedPipe", 0 /* TODO */ )
636*b1cdbd2cSJim Jagielski                         };
637*b1cdbd2cSJim Jagielski 
638*b1cdbd2cSJim Jagielski                         for (   size_t i=0;
639*b1cdbd2cSJim Jagielski                                 i < sizeof( aProperties ) / sizeof( aProperties[0] );
640*b1cdbd2cSJim Jagielski                                 ++i
641*b1cdbd2cSJim Jagielski                             )
642*b1cdbd2cSJim Jagielski                         {
643*b1cdbd2cSJim Jagielski                             const ::rtl::OUString sPropertyName = ::rtl::OUString::createFromAscii( aProperties[i].pAsciiPropertyName );
644*b1cdbd2cSJim Jagielski                             if ( xSettingsInfo->hasPropertyByName( sPropertyName ) )
645*b1cdbd2cSJim Jagielski                             {
646*b1cdbd2cSJim Jagielski                                 ::rtl::OUString sPropertyValue;
647*b1cdbd2cSJim Jagielski                                 if ( ( xDataSourceSettings->getPropertyValue( sPropertyName ) >>= sPropertyValue ) && sPropertyValue.getLength() )
648*b1cdbd2cSJim Jagielski                                     AddAttribute( XML_NAMESPACE_DB, XML_LOCAL_SOCKET, sPropertyValue );
649*b1cdbd2cSJim Jagielski 
650*b1cdbd2cSJim Jagielski                             }
651*b1cdbd2cSJim Jagielski                         }
652*b1cdbd2cSJim Jagielski                     }
653*b1cdbd2cSJim Jagielski                     catch( const Exception& )
654*b1cdbd2cSJim Jagielski                     {
655*b1cdbd2cSJim Jagielski                     	DBG_UNHANDLED_EXCEPTION();
656*b1cdbd2cSJim Jagielski                     }
657*b1cdbd2cSJim Jagielski 
658*b1cdbd2cSJim Jagielski                     SvXMLElementExport aServerDB(*this,XML_NAMESPACE_DB, XML_SERVER_DATABASE, sal_True, sal_True);
659*b1cdbd2cSJim Jagielski                 }
660*b1cdbd2cSJim Jagielski             }
661*b1cdbd2cSJim Jagielski             else
662*b1cdbd2cSJim Jagielski             {
663*b1cdbd2cSJim Jagielski 	            AddAttribute(XML_NAMESPACE_XLINK, XML_HREF,sValue);
664*b1cdbd2cSJim Jagielski                 SvXMLElementExport aElem(*this,XML_NAMESPACE_DB, XML_CONNECTION_RESOURCE, sal_True, sal_True);
665*b1cdbd2cSJim Jagielski             }
666*b1cdbd2cSJim Jagielski         }
667*b1cdbd2cSJim Jagielski 
668*b1cdbd2cSJim Jagielski     }
669*b1cdbd2cSJim Jagielski 
670*b1cdbd2cSJim Jagielski     exportLogin();
671*b1cdbd2cSJim Jagielski }
672*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
exportDataSourceSettings()673*b1cdbd2cSJim Jagielski void ODBExport::exportDataSourceSettings()
674*b1cdbd2cSJim Jagielski {
675*b1cdbd2cSJim Jagielski 	if ( m_aDataSourceSettings.empty() )
676*b1cdbd2cSJim Jagielski         return;
677*b1cdbd2cSJim Jagielski 
678*b1cdbd2cSJim Jagielski     SvXMLElementExport aElem(*this,XML_NAMESPACE_DB, XML_DATA_SOURCE_SETTINGS, sal_True, sal_True);
679*b1cdbd2cSJim Jagielski 	::std::vector< TypedPropertyValue >::iterator aIter = m_aDataSourceSettings.begin();
680*b1cdbd2cSJim Jagielski 	::std::vector< TypedPropertyValue >::iterator aEnd = m_aDataSourceSettings.end();
681*b1cdbd2cSJim Jagielski 	for ( ; aIter != aEnd; ++aIter )
682*b1cdbd2cSJim Jagielski 	{
683*b1cdbd2cSJim Jagielski 		sal_Bool bIsSequence = TypeClass_SEQUENCE == aIter->Type.getTypeClass();
684*b1cdbd2cSJim Jagielski 
685*b1cdbd2cSJim Jagielski 		Type aSimpleType;
686*b1cdbd2cSJim Jagielski 		if ( bIsSequence )
687*b1cdbd2cSJim Jagielski 			aSimpleType = ::comphelper::getSequenceElementType( aIter->Value.getValueType() );
688*b1cdbd2cSJim Jagielski 		else
689*b1cdbd2cSJim Jagielski 			aSimpleType = aIter->Type;
690*b1cdbd2cSJim Jagielski 
691*b1cdbd2cSJim Jagielski 		AddAttribute( XML_NAMESPACE_DB, XML_DATA_SOURCE_SETTING_IS_LIST,bIsSequence ? XML_TRUE : XML_FALSE );
692*b1cdbd2cSJim Jagielski 		AddAttribute( XML_NAMESPACE_DB, XML_DATA_SOURCE_SETTING_NAME, aIter->Name );
693*b1cdbd2cSJim Jagielski 
694*b1cdbd2cSJim Jagielski         ::rtl::OUString sTypeName = lcl_implGetPropertyXMLType( aSimpleType );
695*b1cdbd2cSJim Jagielski         if ( bIsSequence && aSimpleType.getTypeClass() == TypeClass_ANY )
696*b1cdbd2cSJim Jagielski         {
697*b1cdbd2cSJim Jagielski             Sequence<Any> aSeq;
698*b1cdbd2cSJim Jagielski             aIter->Value >>= aSeq;
699*b1cdbd2cSJim Jagielski             if ( aSeq.getLength() )
700*b1cdbd2cSJim Jagielski                 sTypeName = lcl_implGetPropertyXMLType(aSeq[0].getValueType());
701*b1cdbd2cSJim Jagielski         }
702*b1cdbd2cSJim Jagielski 
703*b1cdbd2cSJim Jagielski 		AddAttribute( XML_NAMESPACE_DB, XML_DATA_SOURCE_SETTING_TYPE, sTypeName );
704*b1cdbd2cSJim Jagielski 
705*b1cdbd2cSJim Jagielski 		SvXMLElementExport aDataSourceSetting( *this, XML_NAMESPACE_DB, XML_DATA_SOURCE_SETTING, sal_True, sal_True );
706*b1cdbd2cSJim Jagielski 
707*b1cdbd2cSJim Jagielski 		if ( !bIsSequence )
708*b1cdbd2cSJim Jagielski 		{
709*b1cdbd2cSJim Jagielski 			SvXMLElementExport aDataValue( *this, XML_NAMESPACE_DB, XML_DATA_SOURCE_SETTING_VALUE, sal_True, sal_False );
710*b1cdbd2cSJim Jagielski 			// (no whitespace inside the tag)
711*b1cdbd2cSJim Jagielski 			Characters( implConvertAny( aIter->Value ) );
712*b1cdbd2cSJim Jagielski 		}
713*b1cdbd2cSJim Jagielski 		else
714*b1cdbd2cSJim Jagielski 		{
715*b1cdbd2cSJim Jagielski 			// the not-that-simple case, we need to iterate through the sequence elements
716*b1cdbd2cSJim Jagielski 			::std::auto_ptr<IIterator> pSequenceIterator;
717*b1cdbd2cSJim Jagielski 			switch (aSimpleType.getTypeClass())
718*b1cdbd2cSJim Jagielski 			{
719*b1cdbd2cSJim Jagielski 				case TypeClass_STRING:
720*b1cdbd2cSJim Jagielski 					pSequenceIterator.reset( new OSequenceIterator< ::rtl::OUString >( aIter->Value ) );
721*b1cdbd2cSJim Jagielski 					break;
722*b1cdbd2cSJim Jagielski 				case TypeClass_DOUBLE:
723*b1cdbd2cSJim Jagielski 					pSequenceIterator.reset( new OSequenceIterator< double >( aIter->Value ) );
724*b1cdbd2cSJim Jagielski 					break;
725*b1cdbd2cSJim Jagielski 				case TypeClass_BOOLEAN:
726*b1cdbd2cSJim Jagielski 					pSequenceIterator.reset( new OSequenceIterator< sal_Bool >( aIter->Value ) );
727*b1cdbd2cSJim Jagielski 					break;
728*b1cdbd2cSJim Jagielski 				case TypeClass_BYTE:
729*b1cdbd2cSJim Jagielski 					pSequenceIterator.reset( new OSequenceIterator< sal_Int8 >( aIter->Value ) );
730*b1cdbd2cSJim Jagielski 					break;
731*b1cdbd2cSJim Jagielski 				case TypeClass_SHORT:
732*b1cdbd2cSJim Jagielski 					pSequenceIterator.reset( new OSequenceIterator< sal_Int16 >( aIter->Value ) );
733*b1cdbd2cSJim Jagielski 					break;
734*b1cdbd2cSJim Jagielski 				case TypeClass_LONG:
735*b1cdbd2cSJim Jagielski 					pSequenceIterator.reset( new OSequenceIterator< sal_Int32 >( aIter->Value ) );
736*b1cdbd2cSJim Jagielski 					break;
737*b1cdbd2cSJim Jagielski                 case TypeClass_ANY:
738*b1cdbd2cSJim Jagielski                     pSequenceIterator.reset( new OSequenceIterator< Any >( aIter->Value ) );
739*b1cdbd2cSJim Jagielski 					break;
740*b1cdbd2cSJim Jagielski 				default:
741*b1cdbd2cSJim Jagielski 					OSL_ENSURE(sal_False, "unsupported sequence type !");
742*b1cdbd2cSJim Jagielski 					break;
743*b1cdbd2cSJim Jagielski 			}
744*b1cdbd2cSJim Jagielski 			if ( pSequenceIterator.get() )
745*b1cdbd2cSJim Jagielski 			{
746*b1cdbd2cSJim Jagielski 				::rtl::OUString sCurrent;
747*b1cdbd2cSJim Jagielski 				while (pSequenceIterator->hasMoreElements())
748*b1cdbd2cSJim Jagielski 				{
749*b1cdbd2cSJim Jagielski 					SvXMLElementExport aDataValue(*this,XML_NAMESPACE_DB, XML_DATA_SOURCE_SETTING_VALUE, sal_True, sal_False);
750*b1cdbd2cSJim Jagielski 					// (no whitespace inside the tag)
751*b1cdbd2cSJim Jagielski 					Characters(implConvertAny(pSequenceIterator->nextElement()));
752*b1cdbd2cSJim Jagielski 				}
753*b1cdbd2cSJim Jagielski 			}
754*b1cdbd2cSJim Jagielski 		}
755*b1cdbd2cSJim Jagielski 	}
756*b1cdbd2cSJim Jagielski }
757*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
exportCharSet()758*b1cdbd2cSJim Jagielski void ODBExport::exportCharSet()
759*b1cdbd2cSJim Jagielski {
760*b1cdbd2cSJim Jagielski 	if ( m_sCharSet.getLength() )
761*b1cdbd2cSJim Jagielski 	{
762*b1cdbd2cSJim Jagielski 		AddAttribute(XML_NAMESPACE_DB, XML_ENCODING,m_sCharSet);
763*b1cdbd2cSJim Jagielski 
764*b1cdbd2cSJim Jagielski 		SvXMLElementExport aElem(*this,XML_NAMESPACE_DB, XML_FONT_CHARSET, sal_True, sal_True);
765*b1cdbd2cSJim Jagielski 	}
766*b1cdbd2cSJim Jagielski }
767*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
exportDelimiter()768*b1cdbd2cSJim Jagielski void ODBExport::exportDelimiter()
769*b1cdbd2cSJim Jagielski {
770*b1cdbd2cSJim Jagielski 	if ( m_aDelimiter.get() && m_aDelimiter->bUsed )
771*b1cdbd2cSJim Jagielski 	{
772*b1cdbd2cSJim Jagielski 		AddAttribute(XML_NAMESPACE_DB, XML_FIELD,m_aDelimiter->sField);
773*b1cdbd2cSJim Jagielski 		AddAttribute(XML_NAMESPACE_DB, XML_STRING,m_aDelimiter->sText);
774*b1cdbd2cSJim Jagielski 		AddAttribute(XML_NAMESPACE_DB, XML_DECIMAL,m_aDelimiter->sDecimal);
775*b1cdbd2cSJim Jagielski 		AddAttribute(XML_NAMESPACE_DB, XML_THOUSAND,m_aDelimiter->sThousand);
776*b1cdbd2cSJim Jagielski 		SvXMLElementExport aElem(*this,XML_NAMESPACE_DB, XML_DELIMITER, sal_True, sal_True);
777*b1cdbd2cSJim Jagielski 	}
778*b1cdbd2cSJim Jagielski }
779*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
exportAutoIncrement()780*b1cdbd2cSJim Jagielski void ODBExport::exportAutoIncrement()
781*b1cdbd2cSJim Jagielski {
782*b1cdbd2cSJim Jagielski 	if ( m_aAutoIncrement.get() )
783*b1cdbd2cSJim Jagielski 	{
784*b1cdbd2cSJim Jagielski 		AddAttribute(XML_NAMESPACE_DB, XML_ADDITIONAL_COLUMN_STATEMENT,m_aAutoIncrement->second);
785*b1cdbd2cSJim Jagielski 		AddAttribute(XML_NAMESPACE_DB, XML_ROW_RETRIEVING_STATEMENT,m_aAutoIncrement->first);
786*b1cdbd2cSJim Jagielski 		SvXMLElementExport aElem(*this,XML_NAMESPACE_DB, XML_AUTO_INCREMENT, sal_True, sal_True);
787*b1cdbd2cSJim Jagielski 	}
788*b1cdbd2cSJim Jagielski }
789*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
exportSequence(const Sequence<::rtl::OUString> & _aValue,::xmloff::token::XMLTokenEnum _eTokenFilter,::xmloff::token::XMLTokenEnum _eTokenType)790*b1cdbd2cSJim Jagielski void ODBExport::exportSequence(const Sequence< ::rtl::OUString>& _aValue
791*b1cdbd2cSJim Jagielski 							,::xmloff::token::XMLTokenEnum _eTokenFilter
792*b1cdbd2cSJim Jagielski 							,::xmloff::token::XMLTokenEnum _eTokenType)
793*b1cdbd2cSJim Jagielski {
794*b1cdbd2cSJim Jagielski 	Reference<XPropertySet> xProp(getDataSource());
795*b1cdbd2cSJim Jagielski 	Sequence< ::rtl::OUString> aValue;
796*b1cdbd2cSJim Jagielski 	if ( _aValue.getLength() )
797*b1cdbd2cSJim Jagielski 	{
798*b1cdbd2cSJim Jagielski 		SvXMLElementExport aElem(*this,XML_NAMESPACE_DB, _eTokenFilter, sal_True, sal_True);
799*b1cdbd2cSJim Jagielski 
800*b1cdbd2cSJim Jagielski 		const ::rtl::OUString* pIter = _aValue.getConstArray();
801*b1cdbd2cSJim Jagielski 		const ::rtl::OUString* pEnd	  = pIter + _aValue.getLength();
802*b1cdbd2cSJim Jagielski 		for(;pIter != pEnd;++pIter)
803*b1cdbd2cSJim Jagielski 		{
804*b1cdbd2cSJim Jagielski 			SvXMLElementExport aDataSource(*this,XML_NAMESPACE_DB, _eTokenType, sal_True, sal_False);
805*b1cdbd2cSJim Jagielski 			Characters(*pIter);
806*b1cdbd2cSJim Jagielski 		}
807*b1cdbd2cSJim Jagielski 	}
808*b1cdbd2cSJim Jagielski }
809*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
exportLogin()810*b1cdbd2cSJim Jagielski void ODBExport::exportLogin()
811*b1cdbd2cSJim Jagielski {
812*b1cdbd2cSJim Jagielski 	Reference<XPropertySet> xProp(getDataSource());
813*b1cdbd2cSJim Jagielski 	::rtl::OUString sValue;
814*b1cdbd2cSJim Jagielski 	xProp->getPropertyValue(PROPERTY_USER) >>= sValue;
815*b1cdbd2cSJim Jagielski     sal_Bool bAddLogin = sValue.getLength() > 0;
816*b1cdbd2cSJim Jagielski 	if ( bAddLogin )
817*b1cdbd2cSJim Jagielski 		AddAttribute(XML_NAMESPACE_DB, XML_USER_NAME,sValue);
818*b1cdbd2cSJim Jagielski 	sal_Bool bValue = sal_False;
819*b1cdbd2cSJim Jagielski 	if ( xProp->getPropertyValue(PROPERTY_ISPASSWORDREQUIRED) >>= bValue )
820*b1cdbd2cSJim Jagielski     {
821*b1cdbd2cSJim Jagielski         bAddLogin = sal_True;
822*b1cdbd2cSJim Jagielski 	    AddAttribute(XML_NAMESPACE_DB, XML_IS_PASSWORD_REQUIRED,bValue ? XML_TRUE : XML_FALSE);
823*b1cdbd2cSJim Jagielski     }
824*b1cdbd2cSJim Jagielski     if ( bAddLogin )
825*b1cdbd2cSJim Jagielski 	    SvXMLElementExport aElem(*this,XML_NAMESPACE_DB, XML_LOGIN, sal_True, sal_True);
826*b1cdbd2cSJim Jagielski }
827*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
exportCollection(const Reference<XNameAccess> & _xCollection,enum::xmloff::token::XMLTokenEnum _eComponents,enum::xmloff::token::XMLTokenEnum _eSubComponents,sal_Bool _bExportContext,const::comphelper::mem_fun1_t<ODBExport,XPropertySet * > & _aMemFunc)828*b1cdbd2cSJim Jagielski void ODBExport::exportCollection(const Reference< XNameAccess >& _xCollection
829*b1cdbd2cSJim Jagielski 								,enum ::xmloff::token::XMLTokenEnum _eComponents
830*b1cdbd2cSJim Jagielski 								,enum ::xmloff::token::XMLTokenEnum _eSubComponents
831*b1cdbd2cSJim Jagielski 								,sal_Bool _bExportContext
832*b1cdbd2cSJim Jagielski 								,const ::comphelper::mem_fun1_t<ODBExport,XPropertySet* >& _aMemFunc
833*b1cdbd2cSJim Jagielski                                 )
834*b1cdbd2cSJim Jagielski {
835*b1cdbd2cSJim Jagielski 	if ( _xCollection.is() )
836*b1cdbd2cSJim Jagielski 	{
837*b1cdbd2cSJim Jagielski 		::std::auto_ptr<SvXMLElementExport> pComponents;
838*b1cdbd2cSJim Jagielski 		if ( _bExportContext )
839*b1cdbd2cSJim Jagielski 			pComponents.reset( new SvXMLElementExport(*this,XML_NAMESPACE_DB, _eComponents, sal_True, sal_True));
840*b1cdbd2cSJim Jagielski 		Sequence< ::rtl::OUString> aSeq = _xCollection->getElementNames();
841*b1cdbd2cSJim Jagielski 		const ::rtl::OUString* pIter = aSeq.getConstArray();
842*b1cdbd2cSJim Jagielski 		const ::rtl::OUString* pEnd	  = pIter + aSeq.getLength();
843*b1cdbd2cSJim Jagielski 		for(;pIter != pEnd;++pIter)
844*b1cdbd2cSJim Jagielski 		{
845*b1cdbd2cSJim Jagielski 			Reference<XPropertySet> xProp(_xCollection->getByName(*pIter),UNO_QUERY);
846*b1cdbd2cSJim Jagielski 			if ( _bExportContext && XML_TABLE_REPRESENTATIONS != _eComponents )
847*b1cdbd2cSJim Jagielski 				AddAttribute(XML_NAMESPACE_DB, XML_NAME,*pIter);
848*b1cdbd2cSJim Jagielski 			Reference< XNameAccess > xSub(xProp,UNO_QUERY);
849*b1cdbd2cSJim Jagielski 			if ( xSub.is() )
850*b1cdbd2cSJim Jagielski 			{
851*b1cdbd2cSJim Jagielski 				exportCollection(xSub,_eSubComponents,_eSubComponents,_bExportContext,_aMemFunc);
852*b1cdbd2cSJim Jagielski 			}
853*b1cdbd2cSJim Jagielski 			else if ( xProp.is() )
854*b1cdbd2cSJim Jagielski 				_aMemFunc(this,xProp.get());
855*b1cdbd2cSJim Jagielski 		}
856*b1cdbd2cSJim Jagielski 	}
857*b1cdbd2cSJim Jagielski }
858*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
exportComponent(XPropertySet * _xProp)859*b1cdbd2cSJim Jagielski void ODBExport::exportComponent(XPropertySet* _xProp)
860*b1cdbd2cSJim Jagielski {
861*b1cdbd2cSJim Jagielski 	::rtl::OUString sValue;
862*b1cdbd2cSJim Jagielski 	_xProp->getPropertyValue(PROPERTY_PERSISTENT_NAME) >>= sValue;
863*b1cdbd2cSJim Jagielski 	sal_Bool bIsForm = sal_True;
864*b1cdbd2cSJim Jagielski 	_xProp->getPropertyValue(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("IsForm"))) >>= bIsForm;
865*b1cdbd2cSJim Jagielski 	if ( bIsForm )
866*b1cdbd2cSJim Jagielski 		sValue = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("forms/")) + sValue;
867*b1cdbd2cSJim Jagielski 	else
868*b1cdbd2cSJim Jagielski 		sValue = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("reports/")) + sValue;
869*b1cdbd2cSJim Jagielski 
870*b1cdbd2cSJim Jagielski 	AddAttribute(XML_NAMESPACE_XLINK, XML_HREF,sValue);
871*b1cdbd2cSJim Jagielski 	sal_Bool bAsTemplate = sal_False;
872*b1cdbd2cSJim Jagielski 	_xProp->getPropertyValue(PROPERTY_AS_TEMPLATE) >>= bAsTemplate;
873*b1cdbd2cSJim Jagielski 	AddAttribute(XML_NAMESPACE_DB, XML_AS_TEMPLATE,bAsTemplate ? XML_TRUE : XML_FALSE);
874*b1cdbd2cSJim Jagielski 	SvXMLElementExport aComponents(*this,XML_NAMESPACE_DB, XML_COMPONENT, sal_True, sal_True);
875*b1cdbd2cSJim Jagielski }
876*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
exportQuery(XPropertySet * _xProp)877*b1cdbd2cSJim Jagielski void ODBExport::exportQuery(XPropertySet* _xProp)
878*b1cdbd2cSJim Jagielski {
879*b1cdbd2cSJim Jagielski 	AddAttribute(XML_NAMESPACE_DB, XML_COMMAND,getString(_xProp->getPropertyValue(PROPERTY_COMMAND)));
880*b1cdbd2cSJim Jagielski 
881*b1cdbd2cSJim Jagielski 	if ( getBOOL(_xProp->getPropertyValue(PROPERTY_APPLYFILTER)) )
882*b1cdbd2cSJim Jagielski 		AddAttribute(XML_NAMESPACE_DB, XML_APPLY_FILTER,XML_TRUE);
883*b1cdbd2cSJim Jagielski 
884*b1cdbd2cSJim Jagielski 	if ( _xProp->getPropertySetInfo()->hasPropertyByName(PROPERTY_APPLYORDER)
885*b1cdbd2cSJim Jagielski 		&& getBOOL(_xProp->getPropertyValue(PROPERTY_APPLYORDER)) )
886*b1cdbd2cSJim Jagielski 		AddAttribute(XML_NAMESPACE_DB, XML_APPLY_ORDER,XML_TRUE);
887*b1cdbd2cSJim Jagielski 
888*b1cdbd2cSJim Jagielski 	if ( ! getBOOL(_xProp->getPropertyValue(PROPERTY_ESCAPE_PROCESSING)) )
889*b1cdbd2cSJim Jagielski 		AddAttribute(XML_NAMESPACE_DB, XML_ESCAPE_PROCESSING,XML_FALSE);
890*b1cdbd2cSJim Jagielski 
891*b1cdbd2cSJim Jagielski 	exportStyleName(_xProp,GetAttrList());
892*b1cdbd2cSJim Jagielski 
893*b1cdbd2cSJim Jagielski 	SvXMLElementExport aComponents(*this,XML_NAMESPACE_DB, XML_QUERY, sal_True, sal_True);
894*b1cdbd2cSJim Jagielski 	Reference<XColumnsSupplier> xCol(_xProp,UNO_QUERY);
895*b1cdbd2cSJim Jagielski 	exportColumns(xCol);
896*b1cdbd2cSJim Jagielski 	exportFilter(_xProp,PROPERTY_FILTER,XML_FILTER_STATEMENT);
897*b1cdbd2cSJim Jagielski 	exportFilter(_xProp,PROPERTY_ORDER,XML_ORDER_STATEMENT);
898*b1cdbd2cSJim Jagielski 	exportTableName(_xProp,sal_True);
899*b1cdbd2cSJim Jagielski }
900*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
exportTable(XPropertySet * _xProp)901*b1cdbd2cSJim Jagielski void ODBExport::exportTable(XPropertySet* _xProp)
902*b1cdbd2cSJim Jagielski {
903*b1cdbd2cSJim Jagielski 	exportTableName(_xProp,sal_False);
904*b1cdbd2cSJim Jagielski 
905*b1cdbd2cSJim Jagielski 	if ( _xProp->getPropertySetInfo()->hasPropertyByName(PROPERTY_DESCRIPTION) )
906*b1cdbd2cSJim Jagielski 		AddAttribute(XML_NAMESPACE_DB, XML_DESCRIPTION,getString(_xProp->getPropertyValue(PROPERTY_DESCRIPTION)));
907*b1cdbd2cSJim Jagielski 
908*b1cdbd2cSJim Jagielski 	if ( getBOOL(_xProp->getPropertyValue(PROPERTY_APPLYFILTER)) )
909*b1cdbd2cSJim Jagielski 		AddAttribute(XML_NAMESPACE_DB, XML_APPLY_FILTER,XML_TRUE);
910*b1cdbd2cSJim Jagielski 
911*b1cdbd2cSJim Jagielski 	if ( _xProp->getPropertySetInfo()->hasPropertyByName(PROPERTY_APPLYORDER)
912*b1cdbd2cSJim Jagielski 		&& getBOOL(_xProp->getPropertyValue(PROPERTY_APPLYORDER)) )
913*b1cdbd2cSJim Jagielski 		AddAttribute(XML_NAMESPACE_DB, XML_APPLY_ORDER,XML_TRUE);
914*b1cdbd2cSJim Jagielski 
915*b1cdbd2cSJim Jagielski 	exportStyleName(_xProp,GetAttrList());
916*b1cdbd2cSJim Jagielski 
917*b1cdbd2cSJim Jagielski 	SvXMLElementExport aComponents(*this,XML_NAMESPACE_DB, XML_TABLE_REPRESENTATION, sal_True, sal_True);
918*b1cdbd2cSJim Jagielski 	Reference<XColumnsSupplier> xCol(_xProp,UNO_QUERY);
919*b1cdbd2cSJim Jagielski 	exportColumns(xCol);
920*b1cdbd2cSJim Jagielski 	exportFilter(_xProp,PROPERTY_FILTER,XML_FILTER_STATEMENT);
921*b1cdbd2cSJim Jagielski 	exportFilter(_xProp,PROPERTY_ORDER,XML_ORDER_STATEMENT);
922*b1cdbd2cSJim Jagielski }
923*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
exportStyleName(XPropertySet * _xProp,SvXMLAttributeList & _rAtt)924*b1cdbd2cSJim Jagielski void ODBExport::exportStyleName(XPropertySet* _xProp,SvXMLAttributeList& _rAtt)
925*b1cdbd2cSJim Jagielski {
926*b1cdbd2cSJim Jagielski 	Reference<XPropertySet> xFind(_xProp);
927*b1cdbd2cSJim Jagielski     exportStyleName(XML_STYLE_NAME,xFind,_rAtt,m_aAutoStyleNames);
928*b1cdbd2cSJim Jagielski     exportStyleName(XML_DEFAULT_CELL_STYLE_NAME,xFind,_rAtt,m_aCellAutoStyleNames);
929*b1cdbd2cSJim Jagielski     exportStyleName(XML_DEFAULT_ROW_STYLE_NAME,xFind,_rAtt,m_aRowAutoStyleNames);
930*b1cdbd2cSJim Jagielski }
931*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
exportStyleName(const::xmloff::token::XMLTokenEnum _eToken,const uno::Reference<beans::XPropertySet> & _xProp,SvXMLAttributeList & _rAtt,TPropertyStyleMap & _rMap)932*b1cdbd2cSJim Jagielski void ODBExport::exportStyleName(const ::xmloff::token::XMLTokenEnum _eToken,const uno::Reference<beans::XPropertySet>& _xProp,SvXMLAttributeList& _rAtt,TPropertyStyleMap& _rMap)
933*b1cdbd2cSJim Jagielski {
934*b1cdbd2cSJim Jagielski 	TPropertyStyleMap::iterator aFind = _rMap.find(_xProp);
935*b1cdbd2cSJim Jagielski 	if ( aFind != _rMap.end() )
936*b1cdbd2cSJim Jagielski 	{
937*b1cdbd2cSJim Jagielski 		_rAtt.AddAttribute( GetNamespaceMap().GetQNameByKey( XML_NAMESPACE_DB, GetXMLToken(_eToken) ),
938*b1cdbd2cSJim Jagielski 							aFind->second );
939*b1cdbd2cSJim Jagielski         _rMap.erase(aFind);
940*b1cdbd2cSJim Jagielski 	}
941*b1cdbd2cSJim Jagielski }
942*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
exportTableName(XPropertySet * _xProp,sal_Bool _bUpdate)943*b1cdbd2cSJim Jagielski void ODBExport::exportTableName(XPropertySet* _xProp,sal_Bool _bUpdate)
944*b1cdbd2cSJim Jagielski {
945*b1cdbd2cSJim Jagielski 	::rtl::OUString sValue;
946*b1cdbd2cSJim Jagielski 	_xProp->getPropertyValue(_bUpdate ? PROPERTY_UPDATE_TABLENAME : PROPERTY_NAME) >>= sValue;
947*b1cdbd2cSJim Jagielski 	if ( sValue.getLength() )
948*b1cdbd2cSJim Jagielski 	{
949*b1cdbd2cSJim Jagielski 		AddAttribute(XML_NAMESPACE_DB, XML_NAME,sValue);
950*b1cdbd2cSJim Jagielski 		_xProp->getPropertyValue(_bUpdate ? PROPERTY_UPDATE_SCHEMANAME : PROPERTY_SCHEMANAME) >>= sValue;
951*b1cdbd2cSJim Jagielski 		if ( sValue.getLength() )
952*b1cdbd2cSJim Jagielski 			AddAttribute(XML_NAMESPACE_DB, XML_SCHEMA_NAME,sValue);
953*b1cdbd2cSJim Jagielski 		_xProp->getPropertyValue(_bUpdate ? PROPERTY_UPDATE_CATALOGNAME : PROPERTY_CATALOGNAME) >>= sValue;
954*b1cdbd2cSJim Jagielski 		if ( sValue.getLength() )
955*b1cdbd2cSJim Jagielski 			AddAttribute(XML_NAMESPACE_DB, XML_CATALOG_NAME,sValue);
956*b1cdbd2cSJim Jagielski 
957*b1cdbd2cSJim Jagielski 		if ( _bUpdate )
958*b1cdbd2cSJim Jagielski 		{
959*b1cdbd2cSJim Jagielski 			SvXMLElementExport aComponents(*this,XML_NAMESPACE_DB, XML_UPDATE_TABLE, sal_True, sal_True);
960*b1cdbd2cSJim Jagielski 		}
961*b1cdbd2cSJim Jagielski 	}
962*b1cdbd2cSJim Jagielski }
963*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
exportFilter(XPropertySet * _xProp,const::rtl::OUString & _sProp,enum::xmloff::token::XMLTokenEnum _eStatementType)964*b1cdbd2cSJim Jagielski void ODBExport::exportFilter(XPropertySet* _xProp
965*b1cdbd2cSJim Jagielski 							 ,const ::rtl::OUString& _sProp
966*b1cdbd2cSJim Jagielski 							 ,enum ::xmloff::token::XMLTokenEnum _eStatementType)
967*b1cdbd2cSJim Jagielski {
968*b1cdbd2cSJim Jagielski 	OSL_PRECOND(!GetAttrList().getLength(),"Invalid attribute length!");
969*b1cdbd2cSJim Jagielski 	::rtl::OUString sCommand;
970*b1cdbd2cSJim Jagielski 	_xProp->getPropertyValue(_sProp) >>= sCommand;
971*b1cdbd2cSJim Jagielski 	if ( sCommand.getLength() )
972*b1cdbd2cSJim Jagielski 	{
973*b1cdbd2cSJim Jagielski 		AddAttribute(XML_NAMESPACE_DB, XML_COMMAND,sCommand);
974*b1cdbd2cSJim Jagielski 		SvXMLElementExport aComponents(*this,XML_NAMESPACE_DB, _eStatementType, sal_True, sal_True);
975*b1cdbd2cSJim Jagielski 	}
976*b1cdbd2cSJim Jagielski 	OSL_POSTCOND(!GetAttrList().getLength(),"Invalid attribute length!");
977*b1cdbd2cSJim Jagielski }
978*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
exportColumns(const Reference<XColumnsSupplier> & _xColSup)979*b1cdbd2cSJim Jagielski void ODBExport::exportColumns(const Reference<XColumnsSupplier>& _xColSup)
980*b1cdbd2cSJim Jagielski {
981*b1cdbd2cSJim Jagielski     OSL_PRECOND( _xColSup.is(), "ODBExport::exportColumns: invalid columns supplier!" );
982*b1cdbd2cSJim Jagielski 	if ( !_xColSup.is() )
983*b1cdbd2cSJim Jagielski         return;
984*b1cdbd2cSJim Jagielski 
985*b1cdbd2cSJim Jagielski     try
986*b1cdbd2cSJim Jagielski     {
987*b1cdbd2cSJim Jagielski 	    Reference<XNameAccess> xNameAccess( _xColSup->getColumns(), UNO_SET_THROW );
988*b1cdbd2cSJim Jagielski 	    if ( !xNameAccess->hasElements() )
989*b1cdbd2cSJim Jagielski         {
990*b1cdbd2cSJim Jagielski             Reference< XPropertySet > xComponent(_xColSup,UNO_QUERY);
991*b1cdbd2cSJim Jagielski             TTableColumnMap::iterator aFind = m_aTableDummyColumns.find(xComponent);
992*b1cdbd2cSJim Jagielski             if ( aFind != m_aTableDummyColumns.end() )
993*b1cdbd2cSJim Jagielski             {
994*b1cdbd2cSJim Jagielski                 SvXMLElementExport aColumns(*this,XML_NAMESPACE_DB, XML_COLUMNS, sal_True, sal_True);
995*b1cdbd2cSJim Jagielski                 SvXMLAttributeList* pAtt = new SvXMLAttributeList;
996*b1cdbd2cSJim Jagielski 			    Reference<XAttributeList> xAtt = pAtt;
997*b1cdbd2cSJim Jagielski                 exportStyleName(aFind->second.get(),*pAtt);
998*b1cdbd2cSJim Jagielski                 AddAttributeList(xAtt);
999*b1cdbd2cSJim Jagielski                 SvXMLElementExport aColumn(*this,XML_NAMESPACE_DB, XML_COLUMN, sal_True, sal_True);
1000*b1cdbd2cSJim Jagielski 
1001*b1cdbd2cSJim Jagielski             }
1002*b1cdbd2cSJim Jagielski             return;
1003*b1cdbd2cSJim Jagielski         }
1004*b1cdbd2cSJim Jagielski 
1005*b1cdbd2cSJim Jagielski         SvXMLElementExport aColumns(*this,XML_NAMESPACE_DB, XML_COLUMNS, sal_True, sal_True);
1006*b1cdbd2cSJim Jagielski 	    Sequence< ::rtl::OUString> aSeq = xNameAccess->getElementNames();
1007*b1cdbd2cSJim Jagielski 	    const ::rtl::OUString* pIter = aSeq.getConstArray();
1008*b1cdbd2cSJim Jagielski 	    const ::rtl::OUString* pEnd	  = pIter + aSeq.getLength();
1009*b1cdbd2cSJim Jagielski 	    for( ; pIter != pEnd ; ++pIter)
1010*b1cdbd2cSJim Jagielski 	    {
1011*b1cdbd2cSJim Jagielski 		    Reference<XPropertySet> xProp(xNameAccess->getByName(*pIter),UNO_QUERY);
1012*b1cdbd2cSJim Jagielski 		    if ( xProp.is() )
1013*b1cdbd2cSJim Jagielski 		    {
1014*b1cdbd2cSJim Jagielski 			    SvXMLAttributeList* pAtt = new SvXMLAttributeList;
1015*b1cdbd2cSJim Jagielski 			    Reference<XAttributeList> xAtt = pAtt;
1016*b1cdbd2cSJim Jagielski 			    exportStyleName(xProp.get(),*pAtt);
1017*b1cdbd2cSJim Jagielski 
1018*b1cdbd2cSJim Jagielski 			    sal_Bool bHidden = getBOOL(xProp->getPropertyValue(PROPERTY_HIDDEN));
1019*b1cdbd2cSJim Jagielski 
1020*b1cdbd2cSJim Jagielski 			    ::rtl::OUString sValue;
1021*b1cdbd2cSJim Jagielski 			    xProp->getPropertyValue(PROPERTY_HELPTEXT) >>= sValue;
1022*b1cdbd2cSJim Jagielski                 Any aColumnDefault;
1023*b1cdbd2cSJim Jagielski                 aColumnDefault = xProp->getPropertyValue(PROPERTY_CONTROLDEFAULT);
1024*b1cdbd2cSJim Jagielski 
1025*b1cdbd2cSJim Jagielski 			    if ( bHidden || sValue.getLength() || aColumnDefault.hasValue() || pAtt->getLength() )
1026*b1cdbd2cSJim Jagielski 			    {
1027*b1cdbd2cSJim Jagielski 				    AddAttribute(XML_NAMESPACE_DB, XML_NAME,*pIter);
1028*b1cdbd2cSJim Jagielski 				    if ( bHidden )
1029*b1cdbd2cSJim Jagielski 					    AddAttribute(XML_NAMESPACE_DB, XML_VISIBLE,XML_FALSE);
1030*b1cdbd2cSJim Jagielski 
1031*b1cdbd2cSJim Jagielski 				    if ( sValue.getLength() )
1032*b1cdbd2cSJim Jagielski 					    AddAttribute(XML_NAMESPACE_DB, XML_HELP_MESSAGE,sValue);
1033*b1cdbd2cSJim Jagielski 
1034*b1cdbd2cSJim Jagielski                     if ( aColumnDefault.hasValue() )
1035*b1cdbd2cSJim Jagielski                     {
1036*b1cdbd2cSJim Jagielski                         ::rtl::OUStringBuffer sColumnDefaultString,sType;
1037*b1cdbd2cSJim Jagielski                         SvXMLUnitConverter::convertAny( sColumnDefaultString, sType, aColumnDefault );
1038*b1cdbd2cSJim Jagielski                         AddAttribute(XML_NAMESPACE_DB, XML_TYPE_NAME,sType.makeStringAndClear());
1039*b1cdbd2cSJim Jagielski 					    AddAttribute(XML_NAMESPACE_DB, XML_DEFAULT_VALUE,sColumnDefaultString.makeStringAndClear());
1040*b1cdbd2cSJim Jagielski                     }
1041*b1cdbd2cSJim Jagielski 
1042*b1cdbd2cSJim Jagielski 				    if ( pAtt->getLength() )
1043*b1cdbd2cSJim Jagielski 					    AddAttributeList(xAtt);
1044*b1cdbd2cSJim Jagielski 			    }
1045*b1cdbd2cSJim Jagielski 
1046*b1cdbd2cSJim Jagielski 			    if ( GetAttrList().getLength() )
1047*b1cdbd2cSJim Jagielski 			    {
1048*b1cdbd2cSJim Jagielski 				    SvXMLElementExport aComponents(*this,XML_NAMESPACE_DB, XML_COLUMN, sal_True, sal_True);
1049*b1cdbd2cSJim Jagielski 			    }
1050*b1cdbd2cSJim Jagielski 		    }
1051*b1cdbd2cSJim Jagielski 	    }
1052*b1cdbd2cSJim Jagielski     }
1053*b1cdbd2cSJim Jagielski     catch( const Exception& )
1054*b1cdbd2cSJim Jagielski     {
1055*b1cdbd2cSJim Jagielski     	DBG_UNHANDLED_EXCEPTION();
1056*b1cdbd2cSJim Jagielski     }
1057*b1cdbd2cSJim Jagielski }
1058*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
exportForms()1059*b1cdbd2cSJim Jagielski void ODBExport::exportForms()
1060*b1cdbd2cSJim Jagielski {
1061*b1cdbd2cSJim Jagielski     Any aValue;
1062*b1cdbd2cSJim Jagielski     ::rtl::OUString sService;
1063*b1cdbd2cSJim Jagielski     dbtools::getDataSourceSetting(getDataSource(),"Forms",aValue);
1064*b1cdbd2cSJim Jagielski     aValue >>= sService;
1065*b1cdbd2cSJim Jagielski     if ( !sService.getLength() )
1066*b1cdbd2cSJim Jagielski     {
1067*b1cdbd2cSJim Jagielski 	    Reference<XFormDocumentsSupplier> xSup(GetModel(),UNO_QUERY);
1068*b1cdbd2cSJim Jagielski 	    if ( xSup.is() )
1069*b1cdbd2cSJim Jagielski 	    {
1070*b1cdbd2cSJim Jagielski 		    Reference< XNameAccess > xCollection = xSup->getFormDocuments();
1071*b1cdbd2cSJim Jagielski 		    if ( xCollection.is() && xCollection->hasElements() )
1072*b1cdbd2cSJim Jagielski 		    {
1073*b1cdbd2cSJim Jagielski 			    ::comphelper::mem_fun1_t<ODBExport,XPropertySet* > aMemFunc(&ODBExport::exportComponent);
1074*b1cdbd2cSJim Jagielski 			    exportCollection(xCollection,XML_FORMS,XML_COMPONENT_COLLECTION,sal_True,aMemFunc);
1075*b1cdbd2cSJim Jagielski 		    }
1076*b1cdbd2cSJim Jagielski 	    }
1077*b1cdbd2cSJim Jagielski     }
1078*b1cdbd2cSJim Jagielski }
1079*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
exportReports()1080*b1cdbd2cSJim Jagielski void ODBExport::exportReports()
1081*b1cdbd2cSJim Jagielski {
1082*b1cdbd2cSJim Jagielski     Any aValue;
1083*b1cdbd2cSJim Jagielski     ::rtl::OUString sService;
1084*b1cdbd2cSJim Jagielski     dbtools::getDataSourceSetting(getDataSource(),"Reports",aValue);
1085*b1cdbd2cSJim Jagielski     aValue >>= sService;
1086*b1cdbd2cSJim Jagielski     if ( !sService.getLength() )
1087*b1cdbd2cSJim Jagielski     {
1088*b1cdbd2cSJim Jagielski 	    Reference<XReportDocumentsSupplier> xSup(GetModel(),UNO_QUERY);
1089*b1cdbd2cSJim Jagielski 	    if ( xSup.is() )
1090*b1cdbd2cSJim Jagielski 	    {
1091*b1cdbd2cSJim Jagielski 		    Reference< XNameAccess > xCollection = xSup->getReportDocuments();
1092*b1cdbd2cSJim Jagielski 		    if ( xCollection.is() && xCollection->hasElements() )
1093*b1cdbd2cSJim Jagielski 		    {
1094*b1cdbd2cSJim Jagielski 			    ::comphelper::mem_fun1_t<ODBExport,XPropertySet* > aMemFunc(&ODBExport::exportComponent);
1095*b1cdbd2cSJim Jagielski 			    exportCollection(xCollection,XML_REPORTS,XML_COMPONENT_COLLECTION,sal_True,aMemFunc);
1096*b1cdbd2cSJim Jagielski 		    }
1097*b1cdbd2cSJim Jagielski 	    }
1098*b1cdbd2cSJim Jagielski     }
1099*b1cdbd2cSJim Jagielski }
1100*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
exportQueries(sal_Bool _bExportContext)1101*b1cdbd2cSJim Jagielski void ODBExport::exportQueries(sal_Bool _bExportContext)
1102*b1cdbd2cSJim Jagielski {
1103*b1cdbd2cSJim Jagielski     Any aValue;
1104*b1cdbd2cSJim Jagielski     ::rtl::OUString sService;
1105*b1cdbd2cSJim Jagielski     dbtools::getDataSourceSetting(getDataSource(),"CommandDefinitions",aValue);
1106*b1cdbd2cSJim Jagielski     aValue >>= sService;
1107*b1cdbd2cSJim Jagielski     if ( !sService.getLength() )
1108*b1cdbd2cSJim Jagielski     {
1109*b1cdbd2cSJim Jagielski 	    Reference<XQueryDefinitionsSupplier> xSup(getDataSource(),UNO_QUERY);
1110*b1cdbd2cSJim Jagielski 	    if ( xSup.is() )
1111*b1cdbd2cSJim Jagielski 	    {
1112*b1cdbd2cSJim Jagielski 		    Reference< XNameAccess > xCollection = xSup->getQueryDefinitions();
1113*b1cdbd2cSJim Jagielski 		    if ( xCollection.is() && xCollection->hasElements() )
1114*b1cdbd2cSJim Jagielski 		    {
1115*b1cdbd2cSJim Jagielski 			    ::std::auto_ptr< ::comphelper::mem_fun1_t<ODBExport,XPropertySet* > > pMemFunc;
1116*b1cdbd2cSJim Jagielski 			    if ( _bExportContext )
1117*b1cdbd2cSJim Jagielski 				    pMemFunc.reset( new ::comphelper::mem_fun1_t<ODBExport,XPropertySet* >(&ODBExport::exportQuery) );
1118*b1cdbd2cSJim Jagielski 			    else
1119*b1cdbd2cSJim Jagielski 				    pMemFunc.reset( new ::comphelper::mem_fun1_t<ODBExport,XPropertySet* >(&ODBExport::exportAutoStyle) );
1120*b1cdbd2cSJim Jagielski 
1121*b1cdbd2cSJim Jagielski 			    exportCollection(xCollection,XML_QUERIES,XML_QUERY_COLLECTION,_bExportContext,*pMemFunc);
1122*b1cdbd2cSJim Jagielski 		    }
1123*b1cdbd2cSJim Jagielski 	    }
1124*b1cdbd2cSJim Jagielski     }
1125*b1cdbd2cSJim Jagielski }
1126*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
exportTables(sal_Bool _bExportContext)1127*b1cdbd2cSJim Jagielski void ODBExport::exportTables(sal_Bool _bExportContext)
1128*b1cdbd2cSJim Jagielski {
1129*b1cdbd2cSJim Jagielski 	Reference<XTablesSupplier> xSup(getDataSource(),UNO_QUERY);
1130*b1cdbd2cSJim Jagielski 	if ( xSup.is() )
1131*b1cdbd2cSJim Jagielski 	{
1132*b1cdbd2cSJim Jagielski 		Reference< XNameAccess > xCollection = xSup->getTables();
1133*b1cdbd2cSJim Jagielski 		if ( xCollection.is() && xCollection->hasElements() )
1134*b1cdbd2cSJim Jagielski 		{
1135*b1cdbd2cSJim Jagielski 			::std::auto_ptr< ::comphelper::mem_fun1_t<ODBExport,XPropertySet* > > pMemFunc;
1136*b1cdbd2cSJim Jagielski 			if ( _bExportContext )
1137*b1cdbd2cSJim Jagielski 				pMemFunc.reset( new ::comphelper::mem_fun1_t<ODBExport,XPropertySet* >(&ODBExport::exportTable) );
1138*b1cdbd2cSJim Jagielski 			else
1139*b1cdbd2cSJim Jagielski 				pMemFunc.reset( new ::comphelper::mem_fun1_t<ODBExport,XPropertySet* >(&ODBExport::exportAutoStyle) );
1140*b1cdbd2cSJim Jagielski 			exportCollection(xCollection,XML_TABLE_REPRESENTATIONS,XML_TOKEN_INVALID,_bExportContext,*pMemFunc);
1141*b1cdbd2cSJim Jagielski 		}
1142*b1cdbd2cSJim Jagielski 	}
1143*b1cdbd2cSJim Jagielski }
1144*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
exportAutoStyle(XPropertySet * _xProp)1145*b1cdbd2cSJim Jagielski void ODBExport::exportAutoStyle(XPropertySet* _xProp)
1146*b1cdbd2cSJim Jagielski {
1147*b1cdbd2cSJim Jagielski     typedef ::std::pair<TPropertyStyleMap*,sal_uInt16> TEnumMapperPair;
1148*b1cdbd2cSJim Jagielski     typedef ::std::pair< UniReference < SvXMLExportPropertyMapper> , TEnumMapperPair> TExportPropMapperPair;
1149*b1cdbd2cSJim Jagielski 	Reference<XColumnsSupplier> xSup(_xProp,UNO_QUERY);
1150*b1cdbd2cSJim Jagielski 	if ( xSup.is() )
1151*b1cdbd2cSJim Jagielski 	{
1152*b1cdbd2cSJim Jagielski         const TExportPropMapperPair pExportHelper[] = {
1153*b1cdbd2cSJim Jagielski              TExportPropMapperPair(m_xExportHelper,TEnumMapperPair(&m_aAutoStyleNames,XML_STYLE_FAMILY_TABLE_TABLE ))
1154*b1cdbd2cSJim Jagielski             // ,TExportPropMapperPair(m_xCellExportHelper,TEnumMapperPair(&m_aCellAutoStyleNames,XML_STYLE_FAMILY_TABLE_CELL))
1155*b1cdbd2cSJim Jagielski             ,TExportPropMapperPair(m_xRowExportHelper,TEnumMapperPair(&m_aRowAutoStyleNames,XML_STYLE_FAMILY_TABLE_ROW))
1156*b1cdbd2cSJim Jagielski         };
1157*b1cdbd2cSJim Jagielski 
1158*b1cdbd2cSJim Jagielski         ::std::vector< XMLPropertyState > aPropertyStates;
1159*b1cdbd2cSJim Jagielski         for (size_t i = 0 ; i < sizeof(pExportHelper)/sizeof(pExportHelper[0]); ++i)
1160*b1cdbd2cSJim Jagielski         {
1161*b1cdbd2cSJim Jagielski             aPropertyStates = pExportHelper[i].first->Filter(_xProp);
1162*b1cdbd2cSJim Jagielski 		    if ( !aPropertyStates.empty() )
1163*b1cdbd2cSJim Jagielski 			    pExportHelper[i].second.first->insert( TPropertyStyleMap::value_type(_xProp,GetAutoStylePool()->Add( pExportHelper[i].second.second, aPropertyStates )));
1164*b1cdbd2cSJim Jagielski         }
1165*b1cdbd2cSJim Jagielski 
1166*b1cdbd2cSJim Jagielski         Reference< XNameAccess > xCollection;
1167*b1cdbd2cSJim Jagielski         try
1168*b1cdbd2cSJim Jagielski         {
1169*b1cdbd2cSJim Jagielski 		    xCollection.set( xSup->getColumns(), UNO_SET_THROW );
1170*b1cdbd2cSJim Jagielski             awt::FontDescriptor aFont;
1171*b1cdbd2cSJim Jagielski             _xProp->getPropertyValue(PROPERTY_FONT) >>= aFont;
1172*b1cdbd2cSJim Jagielski 			GetFontAutoStylePool()->Add(aFont.Name,aFont.StyleName,aFont.Family,aFont.Pitch,aFont.CharSet );
1173*b1cdbd2cSJim Jagielski 
1174*b1cdbd2cSJim Jagielski             m_aCurrentPropertyStates = m_xCellExportHelper->Filter(_xProp);
1175*b1cdbd2cSJim Jagielski             if ( !m_aCurrentPropertyStates.empty() && !xCollection->hasElements() )
1176*b1cdbd2cSJim Jagielski             {
1177*b1cdbd2cSJim Jagielski                 Reference< XDataDescriptorFactory> xFac(xCollection,UNO_QUERY);
1178*b1cdbd2cSJim Jagielski                 if ( xFac.is() )
1179*b1cdbd2cSJim Jagielski                 {
1180*b1cdbd2cSJim Jagielski                     Reference< XPropertySet> xColumn = xFac->createDataDescriptor();
1181*b1cdbd2cSJim Jagielski                     m_aTableDummyColumns.insert(TTableColumnMap::value_type(Reference< XPropertySet>(_xProp),xColumn));
1182*b1cdbd2cSJim Jagielski                     exportAutoStyle(xColumn.get());
1183*b1cdbd2cSJim Jagielski                 }
1184*b1cdbd2cSJim Jagielski             }
1185*b1cdbd2cSJim Jagielski             else
1186*b1cdbd2cSJim Jagielski             {
1187*b1cdbd2cSJim Jagielski 		        ::comphelper::mem_fun1_t<ODBExport,XPropertySet* > aMemFunc(&ODBExport::exportAutoStyle);
1188*b1cdbd2cSJim Jagielski 		        exportCollection(xCollection,XML_TOKEN_INVALID,XML_TOKEN_INVALID,sal_False,aMemFunc);
1189*b1cdbd2cSJim Jagielski             }
1190*b1cdbd2cSJim Jagielski         }
1191*b1cdbd2cSJim Jagielski         catch(Exception&)
1192*b1cdbd2cSJim Jagielski         {
1193*b1cdbd2cSJim Jagielski             DBG_UNHANDLED_EXCEPTION();
1194*b1cdbd2cSJim Jagielski         }
1195*b1cdbd2cSJim Jagielski         m_aCurrentPropertyStates.clear();
1196*b1cdbd2cSJim Jagielski 	}
1197*b1cdbd2cSJim Jagielski 	else
1198*b1cdbd2cSJim Jagielski 	{ // here I know I have a column
1199*b1cdbd2cSJim Jagielski         TExportPropMapperPair pExportHelper[] = {
1200*b1cdbd2cSJim Jagielski              TExportPropMapperPair(m_xColumnExportHelper,TEnumMapperPair(&m_aAutoStyleNames,XML_STYLE_FAMILY_TABLE_COLUMN ))
1201*b1cdbd2cSJim Jagielski             ,TExportPropMapperPair(m_xCellExportHelper,TEnumMapperPair(&m_aCellAutoStyleNames,XML_STYLE_FAMILY_TABLE_CELL))
1202*b1cdbd2cSJim Jagielski         };
1203*b1cdbd2cSJim Jagielski         for (size_t i = 0 ; i < sizeof(pExportHelper)/sizeof(pExportHelper[0]); ++i)
1204*b1cdbd2cSJim Jagielski         {
1205*b1cdbd2cSJim Jagielski 		    ::std::vector< XMLPropertyState > aPropStates = pExportHelper[i].first->Filter( _xProp );
1206*b1cdbd2cSJim Jagielski 		    if ( !aPropStates.empty() )
1207*b1cdbd2cSJim Jagielski 		    {
1208*b1cdbd2cSJim Jagielski 			    ::std::vector< XMLPropertyState >::iterator aItr = aPropStates.begin();
1209*b1cdbd2cSJim Jagielski 			    ::std::vector< XMLPropertyState >::iterator aEnd = aPropStates.end();
1210*b1cdbd2cSJim Jagielski 			    const UniReference < XMLPropertySetMapper >& pStyle = pExportHelper[i].first->getPropertySetMapper();
1211*b1cdbd2cSJim Jagielski 			    while ( aItr != aEnd )
1212*b1cdbd2cSJim Jagielski 			    {
1213*b1cdbd2cSJim Jagielski 				    if ( aItr->mnIndex != -1 )
1214*b1cdbd2cSJim Jagielski 				    {
1215*b1cdbd2cSJim Jagielski 					    switch ( pStyle->GetEntryContextId(aItr->mnIndex) )
1216*b1cdbd2cSJim Jagielski 					    {
1217*b1cdbd2cSJim Jagielski 						    case CTF_DB_NUMBERFORMAT:
1218*b1cdbd2cSJim Jagielski 							    {
1219*b1cdbd2cSJim Jagielski 								    sal_Int32 nNumberFormat = -1;
1220*b1cdbd2cSJim Jagielski 								    if ( aItr->maValue >>= nNumberFormat )
1221*b1cdbd2cSJim Jagielski 									    addDataStyle(nNumberFormat);
1222*b1cdbd2cSJim Jagielski 							    }
1223*b1cdbd2cSJim Jagielski 							    break;
1224*b1cdbd2cSJim Jagielski                             case CTF_DB_COLUMN_TEXT_ALIGN:
1225*b1cdbd2cSJim Jagielski                                 if ( !aItr->maValue.hasValue() )
1226*b1cdbd2cSJim Jagielski                                     aItr->maValue <<= ::com::sun::star::awt::TextAlign::LEFT;
1227*b1cdbd2cSJim Jagielski                                 break;
1228*b1cdbd2cSJim Jagielski 					    }
1229*b1cdbd2cSJim Jagielski 				    }
1230*b1cdbd2cSJim Jagielski 				    ++aItr;
1231*b1cdbd2cSJim Jagielski 			    } // while ( aItr != aEnd )
1232*b1cdbd2cSJim Jagielski 
1233*b1cdbd2cSJim Jagielski 		    } // if ( !aPropStates.empty() )
1234*b1cdbd2cSJim Jagielski             if ( XML_STYLE_FAMILY_TABLE_CELL == pExportHelper[i].second.second )
1235*b1cdbd2cSJim Jagielski                 ::std::copy( m_aCurrentPropertyStates.begin(), m_aCurrentPropertyStates.end(), ::std::back_inserter( aPropStates ));
1236*b1cdbd2cSJim Jagielski             if ( !aPropStates.empty() )
1237*b1cdbd2cSJim Jagielski                 pExportHelper[i].second.first->insert( TPropertyStyleMap::value_type(_xProp,GetAutoStylePool()->Add( pExportHelper[i].second.second, aPropStates )));
1238*b1cdbd2cSJim Jagielski         }
1239*b1cdbd2cSJim Jagielski 	}
1240*b1cdbd2cSJim Jagielski }
1241*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
_ExportContent()1242*b1cdbd2cSJim Jagielski void ODBExport::_ExportContent()
1243*b1cdbd2cSJim Jagielski {
1244*b1cdbd2cSJim Jagielski 	exportDataSource();
1245*b1cdbd2cSJim Jagielski 	exportForms();
1246*b1cdbd2cSJim Jagielski 	exportReports();
1247*b1cdbd2cSJim Jagielski 	exportQueries(sal_True);
1248*b1cdbd2cSJim Jagielski 	exportTables(sal_True);
1249*b1cdbd2cSJim Jagielski }
1250*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
_ExportMasterStyles()1251*b1cdbd2cSJim Jagielski void ODBExport::_ExportMasterStyles()
1252*b1cdbd2cSJim Jagielski {
1253*b1cdbd2cSJim Jagielski 	GetPageExport()->exportMasterStyles( sal_True );
1254*b1cdbd2cSJim Jagielski }
1255*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
_ExportAutoStyles()1256*b1cdbd2cSJim Jagielski void ODBExport::_ExportAutoStyles()
1257*b1cdbd2cSJim Jagielski {
1258*b1cdbd2cSJim Jagielski 	// there are no styles that require their own autostyles
1259*b1cdbd2cSJim Jagielski 	if ( getExportFlags() & EXPORT_CONTENT )
1260*b1cdbd2cSJim Jagielski 	{
1261*b1cdbd2cSJim Jagielski 		collectComponentStyles();
1262*b1cdbd2cSJim Jagielski 		GetAutoStylePool()->exportXML(XML_STYLE_FAMILY_TABLE_TABLE
1263*b1cdbd2cSJim Jagielski 										,GetDocHandler()
1264*b1cdbd2cSJim Jagielski 										,GetMM100UnitConverter()
1265*b1cdbd2cSJim Jagielski 										,GetNamespaceMap()
1266*b1cdbd2cSJim Jagielski         );
1267*b1cdbd2cSJim Jagielski 		GetAutoStylePool()->exportXML(XML_STYLE_FAMILY_TABLE_COLUMN
1268*b1cdbd2cSJim Jagielski 										,GetDocHandler()
1269*b1cdbd2cSJim Jagielski 										,GetMM100UnitConverter()
1270*b1cdbd2cSJim Jagielski 										,GetNamespaceMap()
1271*b1cdbd2cSJim Jagielski         );
1272*b1cdbd2cSJim Jagielski         GetAutoStylePool()->exportXML(XML_STYLE_FAMILY_TABLE_CELL
1273*b1cdbd2cSJim Jagielski 										,GetDocHandler()
1274*b1cdbd2cSJim Jagielski 										,GetMM100UnitConverter()
1275*b1cdbd2cSJim Jagielski 										,GetNamespaceMap()
1276*b1cdbd2cSJim Jagielski         );
1277*b1cdbd2cSJim Jagielski         GetAutoStylePool()->exportXML(XML_STYLE_FAMILY_TABLE_ROW
1278*b1cdbd2cSJim Jagielski 										,GetDocHandler()
1279*b1cdbd2cSJim Jagielski 										,GetMM100UnitConverter()
1280*b1cdbd2cSJim Jagielski 										,GetNamespaceMap()
1281*b1cdbd2cSJim Jagielski         );
1282*b1cdbd2cSJim Jagielski 		exportDataStyles();
1283*b1cdbd2cSJim Jagielski 	}
1284*b1cdbd2cSJim Jagielski }
1285*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
_ExportStyles(sal_Bool bUsed)1286*b1cdbd2cSJim Jagielski void ODBExport::_ExportStyles(sal_Bool bUsed)
1287*b1cdbd2cSJim Jagielski {
1288*b1cdbd2cSJim Jagielski 	SvXMLExport::_ExportStyles(bUsed);
1289*b1cdbd2cSJim Jagielski }
1290*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
exportDoc(enum::xmloff::token::XMLTokenEnum eClass)1291*b1cdbd2cSJim Jagielski sal_uInt32 ODBExport::exportDoc(enum ::xmloff::token::XMLTokenEnum eClass)
1292*b1cdbd2cSJim Jagielski {
1293*b1cdbd2cSJim Jagielski 	return SvXMLExport::exportDoc( eClass );
1294*b1cdbd2cSJim Jagielski }
1295*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
GetViewSettings(Sequence<PropertyValue> & aProps)1296*b1cdbd2cSJim Jagielski void ODBExport::GetViewSettings(Sequence<PropertyValue>& aProps)
1297*b1cdbd2cSJim Jagielski {
1298*b1cdbd2cSJim Jagielski 	Reference<XQueryDefinitionsSupplier> xSup(getDataSource(),UNO_QUERY);
1299*b1cdbd2cSJim Jagielski 	if ( xSup.is() )
1300*b1cdbd2cSJim Jagielski 	{
1301*b1cdbd2cSJim Jagielski 		Reference< XNameAccess > xCollection = xSup->getQueryDefinitions();
1302*b1cdbd2cSJim Jagielski 		if ( xCollection.is() && xCollection->hasElements() )
1303*b1cdbd2cSJim Jagielski 		{
1304*b1cdbd2cSJim Jagielski 			try
1305*b1cdbd2cSJim Jagielski 			{
1306*b1cdbd2cSJim Jagielski 				sal_Int32 nLength = aProps.getLength();
1307*b1cdbd2cSJim Jagielski 				aProps.realloc(nLength + 1);
1308*b1cdbd2cSJim Jagielski 				aProps[nLength].Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Queries"));
1309*b1cdbd2cSJim Jagielski 				Sequence< ::rtl::OUString> aSeq = xCollection->getElementNames();
1310*b1cdbd2cSJim Jagielski 				const ::rtl::OUString* pIter = aSeq.getConstArray();
1311*b1cdbd2cSJim Jagielski 				const ::rtl::OUString* pEnd	  = pIter + aSeq.getLength();
1312*b1cdbd2cSJim Jagielski 
1313*b1cdbd2cSJim Jagielski 				Sequence<PropertyValue> aQueries(aSeq.getLength());
1314*b1cdbd2cSJim Jagielski 				for(sal_Int32 i = 0;pIter != pEnd;++pIter,++i)
1315*b1cdbd2cSJim Jagielski 				{
1316*b1cdbd2cSJim Jagielski 					Reference<XPropertySet> xProp(xCollection->getByName(*pIter),UNO_QUERY);
1317*b1cdbd2cSJim Jagielski 					if ( xProp.is() )
1318*b1cdbd2cSJim Jagielski 					{
1319*b1cdbd2cSJim Jagielski 						aQueries[i].Name = *pIter;
1320*b1cdbd2cSJim Jagielski 						aQueries[i].Value = xProp->getPropertyValue(PROPERTY_LAYOUTINFORMATION);
1321*b1cdbd2cSJim Jagielski 					}
1322*b1cdbd2cSJim Jagielski 				}
1323*b1cdbd2cSJim Jagielski 				aProps[nLength].Value <<= aQueries;
1324*b1cdbd2cSJim Jagielski 			}
1325*b1cdbd2cSJim Jagielski 			catch(Exception)
1326*b1cdbd2cSJim Jagielski 			{
1327*b1cdbd2cSJim Jagielski 				OSL_ENSURE(0,"ODBExport::GetViewSettings: Exception catched!");
1328*b1cdbd2cSJim Jagielski 			}
1329*b1cdbd2cSJim Jagielski 		}
1330*b1cdbd2cSJim Jagielski 	}
1331*b1cdbd2cSJim Jagielski 
1332*b1cdbd2cSJim Jagielski }
1333*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
GetConfigurationSettings(Sequence<PropertyValue> & aProps)1334*b1cdbd2cSJim Jagielski void ODBExport::GetConfigurationSettings(Sequence<PropertyValue>& aProps)
1335*b1cdbd2cSJim Jagielski {
1336*b1cdbd2cSJim Jagielski 	Reference<XPropertySet> xProp(getDataSource());
1337*b1cdbd2cSJim Jagielski 	if ( xProp.is() )
1338*b1cdbd2cSJim Jagielski 	{
1339*b1cdbd2cSJim Jagielski 		sal_Int32 nLength = aProps.getLength();
1340*b1cdbd2cSJim Jagielski 		try
1341*b1cdbd2cSJim Jagielski 		{
1342*b1cdbd2cSJim Jagielski 			Any aValue = xProp->getPropertyValue(PROPERTY_LAYOUTINFORMATION);
1343*b1cdbd2cSJim Jagielski 			Sequence< PropertyValue > aPropValues;
1344*b1cdbd2cSJim Jagielski 			aValue >>= aPropValues;
1345*b1cdbd2cSJim Jagielski 			if ( aPropValues.getLength() )
1346*b1cdbd2cSJim Jagielski 			{
1347*b1cdbd2cSJim Jagielski 				aProps.realloc(nLength + 1);
1348*b1cdbd2cSJim Jagielski 				aProps[nLength].Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("layout-settings"));
1349*b1cdbd2cSJim Jagielski 				aProps[nLength].Value = aValue;
1350*b1cdbd2cSJim Jagielski 			}
1351*b1cdbd2cSJim Jagielski 		}
1352*b1cdbd2cSJim Jagielski 		catch(Exception)
1353*b1cdbd2cSJim Jagielski 		{
1354*b1cdbd2cSJim Jagielski 			OSL_ENSURE(0,"Could not access layout information from the data source!");
1355*b1cdbd2cSJim Jagielski 		}
1356*b1cdbd2cSJim Jagielski 	}
1357*b1cdbd2cSJim Jagielski }
1358*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
implConvertAny(const Any & _rValue)1359*b1cdbd2cSJim Jagielski ::rtl::OUString ODBExport::implConvertAny(const Any& _rValue)
1360*b1cdbd2cSJim Jagielski {
1361*b1cdbd2cSJim Jagielski 	::rtl::OUStringBuffer aBuffer;
1362*b1cdbd2cSJim Jagielski 	switch (_rValue.getValueTypeClass())
1363*b1cdbd2cSJim Jagielski 	{
1364*b1cdbd2cSJim Jagielski 		case TypeClass_STRING:
1365*b1cdbd2cSJim Jagielski 		{	// extract the string
1366*b1cdbd2cSJim Jagielski 			::rtl::OUString sCurrentValue;
1367*b1cdbd2cSJim Jagielski 			_rValue >>= sCurrentValue;
1368*b1cdbd2cSJim Jagielski 			aBuffer.append(sCurrentValue);
1369*b1cdbd2cSJim Jagielski 		}
1370*b1cdbd2cSJim Jagielski 		break;
1371*b1cdbd2cSJim Jagielski 		case TypeClass_DOUBLE:
1372*b1cdbd2cSJim Jagielski 			// let the unit converter format is as string
1373*b1cdbd2cSJim Jagielski 			GetMM100UnitConverter().convertDouble(aBuffer, getDouble(_rValue));
1374*b1cdbd2cSJim Jagielski 			break;
1375*b1cdbd2cSJim Jagielski 		case TypeClass_BOOLEAN:
1376*b1cdbd2cSJim Jagielski 			aBuffer = getBOOL(_rValue) ? ::xmloff::token::GetXMLToken(XML_TRUE) : ::xmloff::token::GetXMLToken(XML_FALSE);
1377*b1cdbd2cSJim Jagielski 			break;
1378*b1cdbd2cSJim Jagielski 		case TypeClass_BYTE:
1379*b1cdbd2cSJim Jagielski 		case TypeClass_SHORT:
1380*b1cdbd2cSJim Jagielski 		case TypeClass_LONG:
1381*b1cdbd2cSJim Jagielski 			// let the unit converter format is as string
1382*b1cdbd2cSJim Jagielski 			GetMM100UnitConverter().convertNumber(aBuffer, getINT32(_rValue));
1383*b1cdbd2cSJim Jagielski 			break;
1384*b1cdbd2cSJim Jagielski 		default:
1385*b1cdbd2cSJim Jagielski 			OSL_ENSURE(0,"ODBExport::implConvertAny: Invalid type");
1386*b1cdbd2cSJim Jagielski 	}
1387*b1cdbd2cSJim Jagielski 
1388*b1cdbd2cSJim Jagielski 	return aBuffer.makeStringAndClear();
1389*b1cdbd2cSJim Jagielski }
1390*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
GetTableStylesPropertySetMapper() const1391*b1cdbd2cSJim Jagielski UniReference < XMLPropertySetMapper > ODBExport::GetTableStylesPropertySetMapper() const
1392*b1cdbd2cSJim Jagielski {
1393*b1cdbd2cSJim Jagielski 	if ( !m_xTableStylesPropertySetMapper.is() )
1394*b1cdbd2cSJim Jagielski 	{
1395*b1cdbd2cSJim Jagielski 		m_xTableStylesPropertySetMapper = OXMLHelper::GetTableStylesPropertySetMapper();
1396*b1cdbd2cSJim Jagielski 	}
1397*b1cdbd2cSJim Jagielski 	return m_xTableStylesPropertySetMapper;
1398*b1cdbd2cSJim Jagielski }
1399*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
GetCellStylesPropertySetMapper() const1400*b1cdbd2cSJim Jagielski UniReference < XMLPropertySetMapper > ODBExport::GetCellStylesPropertySetMapper() const
1401*b1cdbd2cSJim Jagielski {
1402*b1cdbd2cSJim Jagielski 	if ( !m_xCellStylesPropertySetMapper.is() )
1403*b1cdbd2cSJim Jagielski 	{
1404*b1cdbd2cSJim Jagielski 		m_xCellStylesPropertySetMapper = OXMLHelper::GetCellStylesPropertySetMapper();
1405*b1cdbd2cSJim Jagielski 	}
1406*b1cdbd2cSJim Jagielski 	return m_xCellStylesPropertySetMapper;
1407*b1cdbd2cSJim Jagielski }
1408*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
GetColumnStylesPropertySetMapper() const1409*b1cdbd2cSJim Jagielski UniReference < XMLPropertySetMapper > ODBExport::GetColumnStylesPropertySetMapper() const
1410*b1cdbd2cSJim Jagielski {
1411*b1cdbd2cSJim Jagielski 	if ( !m_xColumnStylesPropertySetMapper.is() )
1412*b1cdbd2cSJim Jagielski 	{
1413*b1cdbd2cSJim Jagielski 		m_xColumnStylesPropertySetMapper = OXMLHelper::GetColumnStylesPropertySetMapper();
1414*b1cdbd2cSJim Jagielski 	}
1415*b1cdbd2cSJim Jagielski 	return m_xColumnStylesPropertySetMapper;
1416*b1cdbd2cSJim Jagielski }
1417*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
CreateAutoStylePool()1418*b1cdbd2cSJim Jagielski SvXMLAutoStylePoolP* ODBExport::CreateAutoStylePool()
1419*b1cdbd2cSJim Jagielski {
1420*b1cdbd2cSJim Jagielski 	return new OXMLAutoStylePoolP(*this);
1421*b1cdbd2cSJim Jagielski }
1422*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
setSourceDocument(const Reference<XComponent> & xDoc)1423*b1cdbd2cSJim Jagielski void SAL_CALL ODBExport::setSourceDocument( const Reference< XComponent >& xDoc ) throw(IllegalArgumentException, RuntimeException)
1424*b1cdbd2cSJim Jagielski {
1425*b1cdbd2cSJim Jagielski 	Reference<XOfficeDatabaseDocument> xOfficeDoc(xDoc,UNO_QUERY_THROW);
1426*b1cdbd2cSJim Jagielski 	m_xDataSource.set(xOfficeDoc->getDataSource(),UNO_QUERY_THROW);
1427*b1cdbd2cSJim Jagielski 	OSL_ENSURE(m_xDataSource.is(),"DataSource is NULL!");
1428*b1cdbd2cSJim Jagielski 	Reference< XNumberFormatsSupplier > xNum(m_xDataSource->getPropertyValue(PROPERTY_NUMBERFORMATSSUPPLIER),UNO_QUERY);
1429*b1cdbd2cSJim Jagielski 	SetNumberFormatsSupplier(xNum);
1430*b1cdbd2cSJim Jagielski 	SvXMLExport::setSourceDocument(xDoc);
1431*b1cdbd2cSJim Jagielski }
1432*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
_ExportFontDecls()1433*b1cdbd2cSJim Jagielski void ODBExport::_ExportFontDecls()
1434*b1cdbd2cSJim Jagielski {
1435*b1cdbd2cSJim Jagielski 	GetFontAutoStylePool();	// make sure the pool is created
1436*b1cdbd2cSJim Jagielski 	collectComponentStyles();
1437*b1cdbd2cSJim Jagielski 	SvXMLExport::_ExportFontDecls();
1438*b1cdbd2cSJim Jagielski }
1439*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
collectComponentStyles()1440*b1cdbd2cSJim Jagielski void ODBExport::collectComponentStyles()
1441*b1cdbd2cSJim Jagielski {
1442*b1cdbd2cSJim Jagielski 	if ( m_bAllreadyFilled )
1443*b1cdbd2cSJim Jagielski 		return;
1444*b1cdbd2cSJim Jagielski 
1445*b1cdbd2cSJim Jagielski 	m_bAllreadyFilled = sal_True;
1446*b1cdbd2cSJim Jagielski     exportQueries(sal_False);
1447*b1cdbd2cSJim Jagielski     exportTables(sal_False);
1448*b1cdbd2cSJim Jagielski }
1449*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
1450*b1cdbd2cSJim Jagielski }// dbaxml
1451*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
1452