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