User: hr Date: 2006/08/15 03:48:12 Modified: dba/dbaccess/source/filter/xml/xmlExport.cxx
Log: INTEGRATION: CWS dba30 (1.6.8); FILE MERGED 2006/07/19 12:29:15 fs 1.6.8.4: RESYNC: (1.8-1.11); FILE MERGED 2005/10/13 14:59:30 fs 1.6.8.3: RESYNC: (1.7-1.8); FILE MERGED 2005/09/30 06:38:36 fs 1.6.8.2: RESYNC: (1.6-1.7); FILE MERGED 2005/04/06 07:18:40 fs 1.6.8.1: #i46768# also properly write and read empty properties from the DataSource's Info sequence File Changes: Directory: /dba/dbaccess/source/filter/xml/ =========================================== File [changed]: xmlExport.cxx Url: http://dba.openoffice.org/source/browse/dba/dbaccess/source/filter/xml/xmlExport.cxx?r1=1.12&r2=1.13 Delta lines: +77 -49 --------------------- --- xmlExport.cxx 19 Jul 2006 16:00:35 -0000 1.12 +++ xmlExport.cxx 15 Aug 2006 10:48:10 -0000 1.13 @@ -72,6 +72,12 @@ #ifndef _XMLOFF_NMSPMAP_HXX #include <xmloff/nmspmap.hxx> #endif +#ifndef _COM_SUN_STAR_BEANS_XPROPERTYSTATE_HPP_ +#include <com/sun/star/beans/XPropertyState.hpp> +#endif +#ifndef _COM_SUN_STAR_BEANS_PROPERTYATTRIBUTE_HPP_ +#include <com/sun/star/beans/PropertyAttribute.hpp> +#endif #ifndef _COM_SUN_STAR_SDB_XFORMDOCUMENTSSUPPLIER_HPP_ #include <com/sun/star/sdb/XFormDocumentsSupplier.hpp> #endif @@ -307,60 +313,83 @@ sal_Bool bAutoIncrementEnabled = sal_True; TStringPair aAutoIncrement; + + Reference< XPropertySet > xDataSourceSettings; + OSL_VERIFY( xProp->getPropertyValue( PROPERTY_SETTINGS ) >>= xDataSourceSettings ); + Reference< XPropertyState > xSettingsState( xDataSourceSettings, UNO_QUERY ); + Reference< XPropertySetInfo > xSettingsInfo; + if ( xDataSourceSettings.is() ) + xSettingsInfo = xDataSourceSettings->getPropertySetInfo(); + OSL_ENSURE( xSettingsState.is() && xSettingsInfo.is(), "ODBExport::exportDataSource: invalid Setting property of the data source!" ); + TDelimiter aDelimiter; - Sequence< PropertyValue> aInfo; - xProp->getPropertyValue(PROPERTY_INFO) >>= aInfo; - const PropertyValue* pIter = aInfo.getConstArray(); - const PropertyValue* pEnd = pIter + aInfo.getLength(); - for(;pIter != pEnd;++pIter) + xSettingsState->getPropertyDefault( INFO_TEXTDELIMITER ) >>= aDelimiter.sText; + xSettingsState->getPropertyDefault( INFO_FIELDDELIMITER ) >>= aDelimiter.sField; + xSettingsState->getPropertyDefault( INFO_DECIMALDELIMITER ) >>= aDelimiter.sDecimal; + xSettingsState->getPropertyDefault( INFO_THOUSANDSDELIMITER ) >>= aDelimiter.sThousand; + + // loop through the properties, and export only those which are not defaulted + Sequence< Property > aProperties = xSettingsInfo->getProperties(); + const Property* pProperties = aProperties.getConstArray(); + const Property* pPropertiesEnd = pProperties + aProperties.getLength(); + for ( ; pProperties != pPropertiesEnd; ++pProperties ) + { + // for properties which are not REMOVEABLE, we care for their state, and + // only export them if they're not DEFAULTed + if ( ( pProperties->Attributes & PropertyAttribute::REMOVEABLE ) == 0 ) { - switch ( pIter->Value.getValueTypeClass() ) + PropertyState ePropertyState = xSettingsState->getPropertyState( pProperties->Name ); + if ( PropertyState_DEFAULT_VALUE == ePropertyState ) + continue; + } + Any aValue = xDataSourceSettings->getPropertyValue( pProperties->Name ); + switch ( aValue.getValueTypeClass() ) { case TypeClass_STRING: - pIter->Value >>= sValue; + aValue >>= sValue; break; case TypeClass_DOUBLE: // let the unit converter format is as string - sValue = ::rtl::OUString::valueOf(getDouble(pIter->Value)); + sValue = ::rtl::OUString::valueOf( getDouble( aValue ) ); break; case TypeClass_BOOLEAN: - sValue = ::xmloff::token::GetXMLToken(getBOOL(pIter->Value) ? XML_TRUE : XML_FALSE); + sValue = ::xmloff::token::GetXMLToken( getBOOL( aValue ) ? XML_TRUE : XML_FALSE ); break; case TypeClass_BYTE: case TypeClass_SHORT: case TypeClass_LONG: // let the unit converter format is as string - sValue = ::rtl::OUString::valueOf(getINT32(pIter->Value)); + sValue = ::rtl::OUString::valueOf( getINT32( aValue ) ); break; default: break; } ::xmloff::token::XMLTokenEnum eToken = XML_TOKEN_INVALID; - if ( pIter->Name == INFO_JDBCDRIVERCLASS ) + if ( pProperties->Name == INFO_JDBCDRIVERCLASS ) eToken = XML_JAVA_DRIVER_CLASS; - else if ( pIter->Name == INFO_TEXTFILEEXTENSION ) + else if ( pProperties->Name == INFO_TEXTFILEEXTENSION ) eToken = XML_EXTENSION; - else if ( pIter->Name == INFO_TEXTFILEHEADER ) + else if ( pProperties->Name == INFO_TEXTFILEHEADER ) eToken = XML_IS_FIRST_ROW_HEADER_LINE; - else if ( pIter->Name == INFO_SHOWDELETEDROWS ) + else if ( pProperties->Name == INFO_SHOWDELETEDROWS ) eToken = XML_SHOW_DELETED; - else if ( pIter->Name == INFO_ALLOWLONGTABLENAMES ) + else if ( pProperties->Name == INFO_ALLOWLONGTABLENAMES ) eToken = XML_IS_TABLE_NAME_LENGTH_LIMITED; - else if ( pIter->Name == INFO_ADDITIONALOPTIONS ) + else if ( pProperties->Name == INFO_ADDITIONALOPTIONS ) eToken = XML_SYSTEM_DRIVER_SETTINGS; - else if ( pIter->Name == PROPERTY_ENABLESQL92CHECK ) + else if ( pProperties->Name == PROPERTY_ENABLESQL92CHECK ) eToken = XML_ENABLE_SQL92_CHECK; - else if ( pIter->Name == INFO_APPEND_TABLE_ALIAS ) + else if ( pProperties->Name == INFO_APPEND_TABLE_ALIAS ) eToken = XML_APPEND_TABLE_ALIAS_NAME; - else if ( pIter->Name == INFO_PARAMETERNAMESUBST ) + else if ( pProperties->Name == INFO_PARAMETERNAMESUBST ) eToken = XML_PARAMETER_NAME_SUBSTITUTION; - else if ( pIter->Name == INFO_IGNOREDRIVER_PRIV ) + else if ( pProperties->Name == INFO_IGNOREDRIVER_PRIV ) eToken = XML_IGNORE_DRIVER_PRIVILEGES; - else if ( pIter->Name == PROPERTY_BOOLEANCOMPARISONMODE ) + else if ( pProperties->Name == PROPERTY_BOOLEANCOMPARISONMODE ) { sal_Int32 nValue = 0; - pIter->Value >>= nValue; + aValue >>= nValue; if ( sValue.equalsAscii("0") ) sValue = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("equal-integer")); else if ( sValue.equalsAscii("1") ) @@ -371,68 +400,72 @@ sValue = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("equal-use-only-zero")); eToken = XML_BOOLEAN_COMPARISON_MODE; } - else if ( pIter->Name == INFO_USECATALOG ) + else if ( pProperties->Name == INFO_USECATALOG ) eToken = XML_USE_CATALOG; - else if ( pIter->Name == INFO_CONN_LDAP_BASEDN ) + else if ( pProperties->Name == INFO_CONN_LDAP_BASEDN ) eToken = XML_BASE_DN; - else if ( pIter->Name == INFO_CONN_LDAP_ROWCOUNT ) + else if ( pProperties->Name == INFO_CONN_LDAP_ROWCOUNT ) eToken = XML_MAX_ROW_COUNT; - else if ( pIter->Name == INFO_AUTORETRIEVEENABLED ) + else if ( pProperties->Name == INFO_AUTORETRIEVEENABLED ) { - pIter->Value >>= bAutoIncrementEnabled; + aValue >>= bAutoIncrementEnabled; // special handling continue; } - else if ( pIter->Name == INFO_AUTORETRIEVEVALUE ) + else if ( pProperties->Name == INFO_AUTORETRIEVEVALUE ) { aAutoIncrement.first = sValue; // special handling continue; } - else if ( pIter->Name == PROPERTY_AUTOINCREMENTCREATION ) + else if ( pProperties->Name == PROPERTY_AUTOINCREMENTCREATION ) { aAutoIncrement.second = sValue; // special handling continue; } - else if ( pIter->Name == INFO_TEXTDELIMITER ) + else if ( pProperties->Name == INFO_TEXTDELIMITER ) { aDelimiter.sText = sValue; + aDelimiter.bUsed = true; // special handling continue; } - else if ( pIter->Name == INFO_FIELDDELIMITER ) + else if ( pProperties->Name == INFO_FIELDDELIMITER ) { aDelimiter.sField = sValue; + aDelimiter.bUsed = true; // special handling continue; } - else if ( pIter->Name == INFO_DECIMALDELIMITER ) + else if ( pProperties->Name == INFO_DECIMALDELIMITER ) { aDelimiter.sDecimal = sValue; + aDelimiter.bUsed = true; // special handling continue; } - else if ( pIter->Name == INFO_THOUSANDSDELIMITER ) + else if ( pProperties->Name == INFO_THOUSANDSDELIMITER ) { aDelimiter.sThousand = sValue; + aDelimiter.bUsed = true; // special handling continue; } - else if ( pIter->Name == INFO_CHARSET ) + else if ( pProperties->Name == INFO_CHARSET ) { m_sCharSet = sValue; // special handling continue; } - else if ( pIter->Name == INFO_PREVIEW ) - { - m_aPreviewMode = pIter->Value; - continue; - } else { - m_aDataSourceSettings.push_back(makeAny(*pIter)); + m_aDataSourceSettings.push_back( makeAny( PropertyValue( + pProperties->Name, + -1, + aValue, + PropertyState_DIRECT_VALUE + ) ) ); // special handling continue; } @@ -441,13 +474,8 @@ } if ( bAutoIncrementEnabled && (aAutoIncrement.first.getLength() || aAutoIncrement.second.getLength()) ) m_aAutoIncrement.reset( new TStringPair(aAutoIncrement)); - if ( aDelimiter.sText.getLength() - || aDelimiter.sField.getLength() - || aDelimiter.sDecimal.getLength() - || aDelimiter.sThousand.getLength() ) - { - m_aDelimiter.reset( new TDelimiter(aDelimiter)); - } + if ( aDelimiter.bUsed ) + m_aDelimiter.reset( new TDelimiter( aDelimiter ) ); SvXMLElementExport aElem(*this,XML_NAMESPACE_DB, XML_DATASOURCE, sal_True, sal_True); @@ -554,7 +582,7 @@ // ----------------------------------------------------------------------------- void ODBExport::exportDelimiter() { - if ( m_aDelimiter.get() ) + if ( m_aDelimiter.get() && m_aDelimiter->bUsed ) { AddAttribute(XML_NAMESPACE_DB, XML_FIELD,m_aDelimiter->sField); AddAttribute(XML_NAMESPACE_DB, XML_STRING,m_aDelimiter->sText); --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
