summaryrefslogtreecommitdiff
path: root/dbaccess/source/filter
diff options
context:
space:
mode:
Diffstat (limited to 'dbaccess/source/filter')
-rw-r--r--dbaccess/source/filter/xml/xmlColumn.cxx43
-rw-r--r--dbaccess/source/filter/xml/xmlColumn.hxx10
-rw-r--r--dbaccess/source/filter/xml/xmlDataSource.cxx19
-rw-r--r--dbaccess/source/filter/xml/xmlDataSource.hxx10
-rw-r--r--dbaccess/source/filter/xml/xmlDatabase.cxx2
-rw-r--r--dbaccess/source/filter/xml/xmlEnums.hxx3
-rw-r--r--dbaccess/source/filter/xml/xmlExport.cxx452
-rw-r--r--dbaccess/source/filter/xml/xmlExport.hxx20
-rw-r--r--dbaccess/source/filter/xml/xmlHierarchyCollection.cxx4
-rw-r--r--dbaccess/source/filter/xml/xmlHierarchyCollection.hxx9
-rw-r--r--dbaccess/source/filter/xml/xmlStyleImport.cxx29
-rw-r--r--dbaccess/source/filter/xml/xmlStyleImport.hxx6
-rw-r--r--dbaccess/source/filter/xml/xmlTable.cxx2
-rw-r--r--dbaccess/source/filter/xml/xmlfilter.cxx24
-rw-r--r--dbaccess/source/filter/xml/xmlfilter.hxx2
15 files changed, 369 insertions, 266 deletions
diff --git a/dbaccess/source/filter/xml/xmlColumn.cxx b/dbaccess/source/filter/xml/xmlColumn.cxx
index 3405f137a28d..c9670d98317a 100644
--- a/dbaccess/source/filter/xml/xmlColumn.cxx
+++ b/dbaccess/source/filter/xml/xmlColumn.cxx
@@ -66,6 +66,7 @@
#ifndef _COM_SUN_STAR_CONTAINER_XNAMECONTAINER_HPP_
#include <com/sun/star/container/XNameContainer.hpp>
#endif
+#include <com/sun/star/container/XChild.hpp>
#ifndef DBA_XMLSTYLEIMPORT_HXX
#include "xmlStyleImport.hxx"
#endif
@@ -87,9 +88,11 @@ OXMLColumn::OXMLColumn( ODBFilter& rImport
,const ::rtl::OUString& _sLocalName
,const Reference< XAttributeList > & _xAttrList
,const Reference< XNameAccess >& _xParentContainer
+ ,const Reference< XPropertySet >& _xTable
) :
SvXMLImportContext( rImport, nPrfx, _sLocalName )
,m_xParentContainer(_xParentContainer)
+ ,m_xTable(_xTable)
,m_bHidden(sal_False)
{
DBG_CTOR(OXMLColumn,NULL);
@@ -132,9 +135,11 @@ OXMLColumn::OXMLColumn( ODBFilter& rImport
case XML_TOK_COLUMN_VISIBLE:
m_bHidden = sValue.equalsAscii("false");
break;
+ case XML_TOK_DEFAULT_CELL_STYLE_NAME:
+ m_sCellStyleName = sValue;
+ break;
}
}
- OSL_ENSURE(m_sName.getLength(),"Invalid column name of length: ZERO");
}
// -----------------------------------------------------------------------------
@@ -160,6 +165,11 @@ void OXMLColumn::EndElement()
if ( m_aDefaultValue.hasValue() )
xProp->setPropertyValue(PROPERTY_CONTROLDEFAULT,m_aDefaultValue);
+ Reference<XAppend> xAppend(m_xParentContainer,UNO_QUERY);
+ if ( xAppend.is() )
+ xAppend->appendByDescriptor(xProp);
+ m_xParentContainer->getByName(m_sName) >>= xProp;
+
if ( m_sStyleName.getLength() )
{
const SvXMLStylesContext* pAutoStyles = GetOwnImport().GetAutoStyles();
@@ -171,10 +181,35 @@ void OXMLColumn::EndElement()
pAutoStyle->FillPropertySet(xProp);
}
}
+ } // if ( m_sStyleName.getLength() )
+ if ( m_sCellStyleName.getLength() )
+ {
+ const SvXMLStylesContext* pAutoStyles = GetOwnImport().GetAutoStyles();
+ if ( pAutoStyles )
+ {
+ OTableStyleContext* pAutoStyle = PTR_CAST(OTableStyleContext,pAutoStyles->FindStyleChildContext(XML_STYLE_FAMILY_TABLE_CELL,m_sCellStyleName));
+ if ( pAutoStyle )
+ {
+ pAutoStyle->FillPropertySet(xProp);
+ // we also have to do this on the table to import text-properties
+ pAutoStyle->FillPropertySet(m_xTable);
+ }
+ }
+ }
+
+ }
+ } // if ( xFac.is() && m_sName.getLength() )
+ else if ( m_sCellStyleName.getLength() )
+ {
+ const SvXMLStylesContext* pAutoStyles = GetOwnImport().GetAutoStyles();
+ if ( pAutoStyles )
+ {
+ OTableStyleContext* pAutoStyle = PTR_CAST(OTableStyleContext,pAutoStyles->FindStyleChildContext(XML_STYLE_FAMILY_TABLE_CELL,m_sCellStyleName));
+ if ( pAutoStyle )
+ {
+ // we also have to do this on the table to import text-properties
+ pAutoStyle->FillPropertySet(m_xTable);
}
- Reference<XAppend> xAppend(m_xParentContainer,UNO_QUERY);
- if ( xAppend.is() )
- xAppend->appendByDescriptor(xProp);
}
}
}
diff --git a/dbaccess/source/filter/xml/xmlColumn.hxx b/dbaccess/source/filter/xml/xmlColumn.hxx
index af436a3cc54e..bab8d7660120 100644
--- a/dbaccess/source/filter/xml/xmlColumn.hxx
+++ b/dbaccess/source/filter/xml/xmlColumn.hxx
@@ -30,13 +30,9 @@
#ifndef DBA_XMLCOLUMN_HXX
#define DBA_XMLCOLUMN_HXX
-#ifndef _XMLOFF_XMLICTXT_HXX
#include <xmloff/xmlictxt.hxx>
-#endif
-#ifndef _COM_SUN_STAR_CONTAINER_XNAMEACCESS_HPP_
#include <com/sun/star/container/XNameAccess.hpp>
-#endif
-
+#include <com/sun/star/beans/XPropertySet.hpp>
namespace dbaxml
{
@@ -44,8 +40,11 @@ namespace dbaxml
class OXMLColumn : public SvXMLImportContext
{
::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess > m_xParentContainer;
+ ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > m_xTable;
+
::rtl::OUString m_sName;
::rtl::OUString m_sStyleName;
+ ::rtl::OUString m_sCellStyleName;
::rtl::OUString m_sHelpMessage;
::com::sun::star::uno::Any m_aDefaultValue;
sal_Bool m_bHidden;
@@ -58,6 +57,7 @@ namespace dbaxml
,const ::rtl::OUString& rLName
,const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList > & xAttrList
,const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess >& _xParentContainer
+ ,const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& _xTable
);
virtual ~OXMLColumn();
virtual void EndElement();
diff --git a/dbaccess/source/filter/xml/xmlDataSource.cxx b/dbaccess/source/filter/xml/xmlDataSource.cxx
index 169ebdb2ab65..5ec715764073 100644
--- a/dbaccess/source/filter/xml/xmlDataSource.cxx
+++ b/dbaccess/source/filter/xml/xmlDataSource.cxx
@@ -82,9 +82,8 @@ DBG_NAME(OXMLDataSource)
OXMLDataSource::OXMLDataSource( ODBFilter& rImport,
sal_uInt16 nPrfx, const ::rtl::OUString& _sLocalName,
- const Reference< XAttributeList > & _xAttrList,bool _bAsDataSource ) :
+ const Reference< XAttributeList > & _xAttrList, const UsedFor _eUsedFor ) :
SvXMLImportContext( rImport, nPrfx, _sLocalName )
- ,m_bAsDataSource(_bAsDataSource)
{
DBG_CTOR(OXMLDataSource,NULL);
@@ -95,7 +94,7 @@ OXMLDataSource::OXMLDataSource( ODBFilter& rImport,
Reference<XPropertySet> xDataSource = rImport.getDataSource();
PropertyValue aProperty;
- bool bParameter_name_substitution = false;
+ bool bFoundParamNameSubstitution = false;
bool bFoundTableNameLengthLimited = false;
bool bFoundAppendTableAliasName = false;
bool bFoundSuppressVersionColumns = false;
@@ -169,7 +168,7 @@ OXMLDataSource::OXMLDataSource( ODBFilter& rImport,
case XML_TOK_PARAMETER_NAME_SUBSTITUTION:
aProperty.Name = INFO_PARAMETERNAMESUBST;
aProperty.Value <<= (sValue == s_sTRUE ? sal_True : sal_False);
- bParameter_name_substitution = true;
+ bFoundParamNameSubstitution = true;
break;
case XML_TOK_IGNORE_DRIVER_PRIVILEGES:
aProperty.Name = INFO_IGNOREDRIVER_PRIV;
@@ -207,25 +206,25 @@ OXMLDataSource::OXMLDataSource( ODBFilter& rImport,
}
if ( rImport.isNewFormat() )
{
- if ( !bFoundTableNameLengthLimited )
+ if ( !bFoundTableNameLengthLimited && ( _eUsedFor == eAppSettings ) )
{
aProperty.Name = INFO_ALLOWLONGTABLENAMES;
aProperty.Value <<= sal_True;
rImport.addInfo(aProperty);
}
- if ( !bParameter_name_substitution )
+ if ( !bFoundParamNameSubstitution && ( _eUsedFor == eDriverSettings ) )
{
aProperty.Name = INFO_PARAMETERNAMESUBST;
aProperty.Value <<= sal_True;
rImport.addInfo(aProperty);
}
- if ( !bFoundAppendTableAliasName )
+ if ( !bFoundAppendTableAliasName && ( _eUsedFor == eAppSettings ) )
{
aProperty.Name = INFO_APPEND_TABLE_ALIAS;
aProperty.Value <<= sal_True;
rImport.addInfo(aProperty);
}
- if ( !bFoundSuppressVersionColumns )
+ if ( !bFoundSuppressVersionColumns && ( _eUsedFor == eAppSettings ) )
{
try
{
@@ -285,7 +284,7 @@ SvXMLImportContext* OXMLDataSource::CreateChildContext(
break;
case XML_TOK_DRIVER_SETTINGS:
GetOwnImport().GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP );
- pContext = new OXMLDataSource( GetOwnImport(), nPrefix, rLocalName, xAttrList,false);
+ pContext = new OXMLDataSource( GetOwnImport(), nPrefix, rLocalName, xAttrList, OXMLDataSource::eDriverSettings );
break;
case XML_TOK_JAVA_CLASSPATH:
GetOwnImport().GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP );
@@ -293,7 +292,7 @@ SvXMLImportContext* OXMLDataSource::CreateChildContext(
break;
case XML_TOK_APPLICATION_CONNECTION_SETTINGS:
GetOwnImport().GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP );
- pContext = new OXMLDataSource( GetOwnImport(), nPrefix, rLocalName, xAttrList,false);
+ pContext = new OXMLDataSource( GetOwnImport(), nPrefix, rLocalName, xAttrList, OXMLDataSource::eAppSettings );
break;
}
diff --git a/dbaccess/source/filter/xml/xmlDataSource.hxx b/dbaccess/source/filter/xml/xmlDataSource.hxx
index e5b73a8c3056..5475efc67b07 100644
--- a/dbaccess/source/filter/xml/xmlDataSource.hxx
+++ b/dbaccess/source/filter/xml/xmlDataSource.hxx
@@ -43,15 +43,19 @@ namespace dbaxml
class ODBFilter;
class OXMLDataSource : public SvXMLImportContext
{
- bool m_bAsDataSource;
-
ODBFilter& GetOwnImport();
public:
+ enum UsedFor
+ {
+ eDataSource,
+ eDriverSettings,
+ eAppSettings
+ };
OXMLDataSource( ODBFilter& rImport, sal_uInt16 nPrfx,
const ::rtl::OUString& rLName,
const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList > & xAttrList,
- bool _bAsDataSource = true);
+ const UsedFor _eUsedFor = eDataSource );
virtual ~OXMLDataSource();
virtual SvXMLImportContext *CreateChildContext( sal_uInt16 nPrefix,
diff --git a/dbaccess/source/filter/xml/xmlDatabase.cxx b/dbaccess/source/filter/xml/xmlDatabase.cxx
index c75625fcfbe9..3f3f183ba038 100644
--- a/dbaccess/source/filter/xml/xmlDatabase.cxx
+++ b/dbaccess/source/filter/xml/xmlDatabase.cxx
@@ -106,7 +106,7 @@ SvXMLImportContext* OXMLDatabase::CreateChildContext(
{
case XML_TOK_DATASOURCE:
GetOwnImport().GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP );
- pContext = new OXMLDataSource( GetOwnImport(), nPrefix, rLocalName,xAttrList );
+ pContext = new OXMLDataSource( GetOwnImport(), nPrefix, rLocalName, xAttrList, OXMLDataSource::eDataSource );
break;
case XML_TOK_FORMS:
{
diff --git a/dbaccess/source/filter/xml/xmlEnums.hxx b/dbaccess/source/filter/xml/xmlEnums.hxx
index 7e4321e9f7cf..0bb680eca477 100644
--- a/dbaccess/source/filter/xml/xmlEnums.hxx
+++ b/dbaccess/source/filter/xml/xmlEnums.hxx
@@ -166,7 +166,8 @@ namespace dbaxml
XML_TOK_COLUMN_VISIBILITY,
XML_TOK_COLUMN_DEFAULT_VALUE,
XML_TOK_COLUMN_TYPE_NAME,
- XML_TOK_COLUMN_VISIBLE
+ XML_TOK_COLUMN_VISIBLE,
+ XML_TOK_DEFAULT_CELL_STYLE_NAME
};
// -----------------------------------------------------------------------------
} // namespace dbaxml
diff --git a/dbaccess/source/filter/xml/xmlExport.cxx b/dbaccess/source/filter/xml/xmlExport.cxx
index decfe6ac1b4e..efd744df1428 100644
--- a/dbaccess/source/filter/xml/xmlExport.cxx
+++ b/dbaccess/source/filter/xml/xmlExport.cxx
@@ -88,9 +88,9 @@
#ifndef _COM_SUN_STAR_SDB_XQUERYDEFINITIONSSUPPLIER_HPP_
#include <com/sun/star/sdb/XQueryDefinitionsSupplier.hpp>
#endif
-#ifndef _COM_SUN_STAR_SDBCX_XTABLESSUPPLIER_HPP_
#include <com/sun/star/sdbcx/XTablesSupplier.hpp>
-#endif
+#include <com/sun/star/sdbcx/XDataDescriptorFactory.hpp>
+
#ifndef _COM_SUN_STAR_AWT_TEXTALIGN_HPP_
#include <com/sun/star/awt/TextAlign.hpp>
#endif
@@ -107,6 +107,8 @@
#include <svtools/pathoptions.hxx>
#include <tools/diagnose_ex.h>
+#include <boost/optional.hpp>
+
namespace dbaxml
{
using namespace comphelper;
@@ -222,6 +224,7 @@ namespace dbaxml
return s_sTypeInteger;
default:
+ OSL_ENSURE( false, "lcl_implGetPropertyXMLType: unsupported value type!" );
return s_sTypeDouble;
}
}
@@ -318,19 +321,17 @@ IMPLEMENT_SERVICE_INFO1_STATIC( ODBExport, "com.sun.star.comp.sdb.DBExportFilter
// -----------------------------------------------------------------------------
void ODBExport::exportDataSource()
{
- Reference<XPropertySet> xProp(getDataSource());
- if ( xProp.is() )
+ try
{
+ Reference<XPropertySet> xProp( getDataSource(), UNO_SET_THROW );
+
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!" );
+ Reference< XPropertyState > xSettingsState( xDataSourceSettings, UNO_QUERY_THROW );
+ Reference< XPropertySetInfo > xSettingsInfo( xDataSourceSettings->getPropertySetInfo(), UNO_SET_THROW );
TDelimiter aDelimiter;
xSettingsState->getPropertyDefault( INFO_TEXTDELIMITER ) >>= aDelimiter.sText;
@@ -339,6 +340,7 @@ void ODBExport::exportDataSource()
xSettingsState->getPropertyDefault( INFO_THOUSANDSDELIMITER ) >>= aDelimiter.sThousand;
static ::rtl::OUString s_sTrue(::xmloff::token::GetXMLToken( XML_TRUE ));
+ static ::rtl::OUString s_sFalse(::xmloff::token::GetXMLToken( XML_FALSE ));
// loop through the properties, and export only those which are not defaulted
TSettingsMap aSettingsMap;
Sequence< Property > aProperties = xSettingsInfo->getProperties();
@@ -346,14 +348,6 @@ void ODBExport::exportDataSource()
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 )
- {
- PropertyState ePropertyState = xSettingsState->getPropertyState( pProperties->Name );
- if ( PropertyState_DEFAULT_VALUE == ePropertyState )
- continue;
- }
::rtl::OUString sValue;
Any aValue = xDataSourceSettings->getPropertyValue( pProperties->Name );
switch ( aValue.getValueTypeClass() )
@@ -379,146 +373,144 @@ void ODBExport::exportDataSource()
}
::xmloff::token::XMLTokenEnum eToken = XML_TOKEN_INVALID;
- if ( pProperties->Name == INFO_JDBCDRIVERCLASS )
- eToken = XML_JAVA_DRIVER_CLASS;
- else if ( pProperties->Name == INFO_TEXTFILEHEADER )
+
+ struct PropertyMap
{
- if ( sValue == s_sTrue )
- continue;
- eToken = XML_IS_FIRST_ROW_HEADER_LINE;
- }
- else if ( pProperties->Name == INFO_SHOWDELETEDROWS )
+ const ::rtl::OUString sPropertyName;
+ const XMLTokenEnum eAttributeToken;
+ const ::boost::optional< ::rtl::OUString > aXMLDefault;
+
+ PropertyMap( const ::rtl::OUString& _rPropertyName, const XMLTokenEnum _eToken )
+ :sPropertyName( _rPropertyName )
+ ,eAttributeToken( _eToken )
+ ,aXMLDefault()
+ {
+ }
+
+ PropertyMap( const ::rtl::OUString& _rPropertyName, const XMLTokenEnum _eToken, const ::rtl::OUString& _rDefault )
+ :sPropertyName( _rPropertyName )
+ ,eAttributeToken( _eToken )
+ ,aXMLDefault( _rDefault )
+ {
+ }
+ };
+
+ PropertyMap aTokens[] =
{
- if ( sValue != s_sTrue )
- continue;
- eToken = XML_SHOW_DELETED;
- }
- else if ( pProperties->Name == INFO_ALLOWLONGTABLENAMES )
+ PropertyMap( INFO_JDBCDRIVERCLASS, XML_JAVA_DRIVER_CLASS ),
+ PropertyMap( INFO_TEXTFILEHEADER, XML_IS_FIRST_ROW_HEADER_LINE, s_sTrue ),
+ PropertyMap( INFO_SHOWDELETEDROWS, XML_SHOW_DELETED, s_sFalse ),
+ PropertyMap( INFO_ALLOWLONGTABLENAMES, XML_IS_TABLE_NAME_LENGTH_LIMITED, s_sTrue ),
+ PropertyMap( INFO_ADDITIONALOPTIONS, XML_SYSTEM_DRIVER_SETTINGS ),
+ PropertyMap( PROPERTY_ENABLESQL92CHECK, XML_ENABLE_SQL92_CHECK, s_sFalse ),
+ PropertyMap( INFO_APPEND_TABLE_ALIAS, XML_APPEND_TABLE_ALIAS_NAME, s_sTrue ),
+ PropertyMap( INFO_PARAMETERNAMESUBST, XML_PARAMETER_NAME_SUBSTITUTION, s_sTrue ),
+ PropertyMap( INFO_IGNOREDRIVER_PRIV, XML_IGNORE_DRIVER_PRIVILEGES, s_sTrue ),
+ PropertyMap( INFO_USECATALOG, XML_USE_CATALOG, s_sFalse ),
+ PropertyMap( PROPERTY_SUPPRESSVERSIONCL,XML_SUPPRESS_VERSION_COLUMNS, s_sTrue ),
+ PropertyMap( INFO_CONN_LDAP_BASEDN, XML_BASE_DN ),
+ PropertyMap( INFO_CONN_LDAP_ROWCOUNT, XML_MAX_ROW_COUNT )
+ };
+
+ bool bIsXMLDefault = false;
+ for ( size_t i=0; i < sizeof( aTokens ) / sizeof( aTokens[0] ); ++i )
{
- if ( sValue == s_sTrue )
- continue;
- eToken = XML_IS_TABLE_NAME_LENGTH_LIMITED;
+ if ( pProperties->Name == aTokens[i].sPropertyName )
+ {
+ eToken = aTokens[i].eAttributeToken;
+
+ if ( !!aTokens[i].aXMLDefault
+ && ( sValue == *aTokens[i].aXMLDefault )
+ )
+ {
+ bIsXMLDefault = true;
+ }
+ break;
+ }
}
- else if ( pProperties->Name == INFO_ADDITIONALOPTIONS )
- eToken = XML_SYSTEM_DRIVER_SETTINGS;
- else if ( pProperties->Name == PROPERTY_ENABLESQL92CHECK )
+
+ if ( bIsXMLDefault )
+ // the property has the value which is specified as default in the XML schema -> no need to write it
+ continue;
+
+ if ( eToken == XML_TOKEN_INVALID )
{
- if ( sValue != s_sTrue )
+ // 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 )
+ {
+ PropertyState ePropertyState = xSettingsState->getPropertyState( pProperties->Name );
+ if ( PropertyState_DEFAULT_VALUE == ePropertyState )
+ continue;
+ }
+
+ // special handlings
+ if ( pProperties->Name == PROPERTY_BOOLEANCOMPARISONMODE )
+ {
+ sal_Int32 nValue = 0;
+ aValue >>= nValue;
+ if ( sValue.equalsAscii("0") )
+ sValue = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("equal-integer"));
+ else if ( sValue.equalsAscii("1") )
+ sValue = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("is-boolean"));
+ else if ( sValue.equalsAscii("2") )
+ sValue = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("equal-boolean"));
+ else if ( sValue.equalsAscii("3") )
+ sValue = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("equal-use-only-zero"));
+ if ( sValue.equalsAscii("equal-integer") )
+ continue;
+ eToken = XML_BOOLEAN_COMPARISON_MODE;
+ }
+ else if ( pProperties->Name == INFO_AUTORETRIEVEENABLED )
+ {
+ aValue >>= bAutoIncrementEnabled;
continue;
- eToken = XML_ENABLE_SQL92_CHECK;
- }
- else if ( pProperties->Name == INFO_APPEND_TABLE_ALIAS )
- {
- if ( sValue == s_sTrue )
+ }
+ else if ( pProperties->Name == INFO_AUTORETRIEVEVALUE )
+ {
+ aAutoIncrement.first = sValue;
continue;
- eToken = XML_APPEND_TABLE_ALIAS_NAME;
- }
- else if ( pProperties->Name == INFO_PARAMETERNAMESUBST )
- {
- if ( sValue == s_sTrue )
+ }
+ else if ( pProperties->Name == PROPERTY_AUTOINCREMENTCREATION )
+ {
+ aAutoIncrement.second = sValue;
continue;
- eToken = XML_PARAMETER_NAME_SUBSTITUTION;
- }
- else if ( pProperties->Name == INFO_IGNOREDRIVER_PRIV )
- {
- if ( sValue == s_sTrue )
+ }
+ else if ( pProperties->Name == INFO_TEXTDELIMITER )
+ {
+ aDelimiter.sText = sValue;
+ aDelimiter.bUsed = true;
continue;
- eToken = XML_IGNORE_DRIVER_PRIVILEGES;
- }
- else if ( pProperties->Name == PROPERTY_BOOLEANCOMPARISONMODE )
- {
- sal_Int32 nValue = 0;
- aValue >>= nValue;
- if ( sValue.equalsAscii("0") )
- sValue = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("equal-integer"));
- else if ( sValue.equalsAscii("1") )
- sValue = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("is-boolean"));
- else if ( sValue.equalsAscii("2") )
- sValue = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("equal-boolean"));
- else if ( sValue.equalsAscii("3") )
- sValue = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("equal-use-only-zero"));
- if ( sValue.equalsAscii("equal-integer") )
+ }
+ else if ( pProperties->Name == INFO_FIELDDELIMITER )
+ {
+ aDelimiter.sField = sValue;
+ aDelimiter.bUsed = true;
continue;
- eToken = XML_BOOLEAN_COMPARISON_MODE;
- }
- else if ( pProperties->Name == INFO_USECATALOG )
- {
- if ( sValue != s_sTrue )
+ }
+ else if ( pProperties->Name == INFO_DECIMALDELIMITER )
+ {
+ aDelimiter.sDecimal = sValue;
+ aDelimiter.bUsed = true;
continue;
- eToken = XML_USE_CATALOG;
- }
- else if ( pProperties->Name == PROPERTY_SUPPRESSVERSIONCL )
- {
- if ( sValue == s_sTrue )
+ }
+ else if ( pProperties->Name == INFO_THOUSANDSDELIMITER )
+ {
+ aDelimiter.sThousand = sValue;
+ aDelimiter.bUsed = true;
continue;
- eToken = XML_SUPPRESS_VERSION_COLUMNS;
- }
- else if ( pProperties->Name == INFO_CONN_LDAP_BASEDN )
- eToken = XML_BASE_DN;
- else if ( pProperties->Name == INFO_CONN_LDAP_ROWCOUNT )
- eToken = XML_MAX_ROW_COUNT;
- else if ( pProperties->Name == INFO_AUTORETRIEVEENABLED )
- {
- aValue >>= bAutoIncrementEnabled;
- // special handling
- continue;
- }
- else if ( pProperties->Name == INFO_AUTORETRIEVEVALUE )
- {
- aAutoIncrement.first = sValue;
- // special handling
- continue;
- }
- else if ( pProperties->Name == PROPERTY_AUTOINCREMENTCREATION )
- {
- aAutoIncrement.second = sValue;
- // special handling
- continue;
- }
- else if ( pProperties->Name == INFO_TEXTDELIMITER )
- {
- aDelimiter.sText = sValue;
- aDelimiter.bUsed = true;
- // special handling
- continue;
- }
- else if ( pProperties->Name == INFO_FIELDDELIMITER )
- {
- aDelimiter.sField = sValue;
- aDelimiter.bUsed = true;
- // special handling
- continue;
- }
- else if ( pProperties->Name == INFO_DECIMALDELIMITER )
- {
- aDelimiter.sDecimal = sValue;
- aDelimiter.bUsed = true;
- // special handling
- continue;
- }
- else if ( pProperties->Name == INFO_THOUSANDSDELIMITER )
- {
- aDelimiter.sThousand = sValue;
- aDelimiter.bUsed = true;
- // special handling
- continue;
- }
- else if ( pProperties->Name == INFO_CHARSET )
- {
- m_sCharSet = sValue;
- // special handling
- continue;
- }
- else
- {
- m_aDataSourceSettings.push_back( makeAny( PropertyValue(
- pProperties->Name,
- -1,
- aValue,
- PropertyState_DIRECT_VALUE
- ) ) );
- // special handling
- continue;
+ }
+ else if ( pProperties->Name == INFO_CHARSET )
+ {
+ m_sCharSet = sValue;
+ continue;
+ }
+ else
+ {
+ m_aDataSourceSettings.push_back( TypedPropertyValue(
+ pProperties->Name, pProperties->Type, aValue ) );
+ continue;
+ }
}
aSettingsMap.insert(TSettingsMap::value_type(eToken,sValue));
@@ -534,6 +526,10 @@ void ODBExport::exportDataSource()
exportDriverSettings(aSettingsMap);
exportApplicationConnectionSettings(aSettingsMap);
}
+ catch( const Exception& )
+ {
+ DBG_UNHANDLED_EXCEPTION();
+ }
}
// -----------------------------------------------------------------------------
void ODBExport::exportApplicationConnectionSettings(const TSettingsMap& _aSettings)
@@ -700,84 +696,83 @@ void ODBExport::exportConnectionData()
// -----------------------------------------------------------------------------
void ODBExport::exportDataSourceSettings()
{
- if ( !m_aDataSourceSettings.empty() )
+ if ( m_aDataSourceSettings.empty() )
+ return;
+
+ SvXMLElementExport aElem(*this,XML_NAMESPACE_DB, XML_DATA_SOURCE_SETTINGS, sal_True, sal_True);
+ ::std::vector< TypedPropertyValue >::iterator aIter = m_aDataSourceSettings.begin();
+ ::std::vector< TypedPropertyValue >::iterator aEnd = m_aDataSourceSettings.end();
+ for ( ; aIter != aEnd; ++aIter )
{
- SvXMLElementExport aElem(*this,XML_NAMESPACE_DB, XML_DATA_SOURCE_SETTINGS, sal_True, sal_True);
- PropertyValue aValue;
- ::std::vector< Any>::iterator aIter = m_aDataSourceSettings.begin();
- ::std::vector< Any>::iterator aEnd = m_aDataSourceSettings.end();
- for (; aIter != aEnd; ++aIter)
- {
- *aIter >>= aValue;
- sal_Bool bIsSequence = TypeClass_SEQUENCE == aValue.Value.getValueTypeClass();
+ sal_Bool bIsSequence = TypeClass_SEQUENCE == aIter->Type.getTypeClass();
- Type aSimpleType;
- if ( bIsSequence )
- aSimpleType = ::comphelper::getSequenceElementType(aValue.Value.getValueType());
- else
- aSimpleType = aValue.Value.getValueType();
+ Type aSimpleType;
+ if ( bIsSequence )
+ aSimpleType = ::comphelper::getSequenceElementType( aIter->Value.getValueType() );
+ else
+ aSimpleType = aIter->Type;
- AddAttribute(XML_NAMESPACE_DB, XML_DATA_SOURCE_SETTING_IS_LIST,bIsSequence ? XML_TRUE : XML_FALSE);
- AddAttribute(XML_NAMESPACE_DB, XML_DATA_SOURCE_SETTING_NAME,aValue.Name);
- ::rtl::OUString sTypeName = lcl_implGetPropertyXMLType(aSimpleType);
- if ( bIsSequence && aSimpleType.getTypeClass() == TypeClass_ANY )
- {
- Sequence<Any> aSeq;
- aValue.Value >>= aSeq;
- if ( aSeq.getLength() )
- sTypeName = lcl_implGetPropertyXMLType(aSeq[0].getValueType());
- }
+ AddAttribute( XML_NAMESPACE_DB, XML_DATA_SOURCE_SETTING_IS_LIST,bIsSequence ? XML_TRUE : XML_FALSE );
+ AddAttribute( XML_NAMESPACE_DB, XML_DATA_SOURCE_SETTING_NAME, aIter->Name );
- AddAttribute(XML_NAMESPACE_DB, XML_DATA_SOURCE_SETTING_TYPE,sTypeName);
+ ::rtl::OUString sTypeName = lcl_implGetPropertyXMLType( aSimpleType );
+ if ( bIsSequence && aSimpleType.getTypeClass() == TypeClass_ANY )
+ {
+ Sequence<Any> aSeq;
+ aIter->Value >>= aSeq;
+ if ( aSeq.getLength() )
+ sTypeName = lcl_implGetPropertyXMLType(aSeq[0].getValueType());
+ }
- SvXMLElementExport aDataSourceSetting(*this,XML_NAMESPACE_DB, XML_DATA_SOURCE_SETTING, sal_True, sal_True);
+ AddAttribute( XML_NAMESPACE_DB, XML_DATA_SOURCE_SETTING_TYPE, sTypeName );
- if ( !bIsSequence )
+ SvXMLElementExport aDataSourceSetting( *this, XML_NAMESPACE_DB, XML_DATA_SOURCE_SETTING, sal_True, sal_True );
+
+ if ( !bIsSequence )
+ {
+ SvXMLElementExport aDataValue( *this, XML_NAMESPACE_DB, XML_DATA_SOURCE_SETTING_VALUE, sal_True, sal_False );
+ // (no whitespace inside the tag)
+ Characters( implConvertAny( aIter->Value ) );
+ }
+ else
+ {
+ // the not-that-simple case, we need to iterate through the sequence elements
+ ::std::auto_ptr<IIterator> pSequenceIterator;
+ switch (aSimpleType.getTypeClass())
{
- SvXMLElementExport aDataValue(*this,XML_NAMESPACE_DB, XML_DATA_SOURCE_SETTING_VALUE, sal_True, sal_False);
- // (no whitespace inside the tag)
- Characters(implConvertAny(aValue.Value));
+ case TypeClass_STRING:
+ pSequenceIterator.reset( new OSequenceIterator< ::rtl::OUString >( aIter->Value ) );
+ break;
+ case TypeClass_DOUBLE:
+ pSequenceIterator.reset( new OSequenceIterator< double >( aIter->Value ) );
+ break;
+ case TypeClass_BOOLEAN:
+ pSequenceIterator.reset( new OSequenceIterator< sal_Bool >( aIter->Value ) );
+ break;
+ case TypeClass_BYTE:
+ pSequenceIterator.reset( new OSequenceIterator< sal_Int8 >( aIter->Value ) );
+ break;
+ case TypeClass_SHORT:
+ pSequenceIterator.reset( new OSequenceIterator< sal_Int16 >( aIter->Value ) );
+ break;
+ case TypeClass_LONG:
+ pSequenceIterator.reset( new OSequenceIterator< sal_Int32 >( aIter->Value ) );
+ break;
+ case TypeClass_ANY:
+ pSequenceIterator.reset( new OSequenceIterator< Any >( aIter->Value ) );
+ break;
+ default:
+ OSL_ENSURE(sal_False, "unsupported sequence type !");
+ break;
}
- else
+ if ( pSequenceIterator.get() )
{
- // the not-that-simple case, we need to iterate through the sequence elements
- ::std::auto_ptr<IIterator> pSequenceIterator;
- switch (aSimpleType.getTypeClass())
+ ::rtl::OUString sCurrent;
+ while (pSequenceIterator->hasMoreElements())
{
- case TypeClass_STRING:
- pSequenceIterator.reset(new OSequenceIterator< ::rtl::OUString >(aValue.Value));
- break;
- case TypeClass_DOUBLE:
- pSequenceIterator.reset(new OSequenceIterator< double >(aValue.Value));
- break;
- case TypeClass_BOOLEAN:
- pSequenceIterator.reset(new OSequenceIterator< sal_Bool >(aValue.Value));
- break;
- case TypeClass_BYTE:
- pSequenceIterator.reset(new OSequenceIterator< sal_Int8 >(aValue.Value));
- break;
- case TypeClass_SHORT:
- pSequenceIterator.reset(new OSequenceIterator< sal_Int16 >(aValue.Value));
- break;
- case TypeClass_LONG:
- pSequenceIterator.reset(new OSequenceIterator< sal_Int32 >(aValue.Value));
- break;
- case TypeClass_ANY:
- pSequenceIterator.reset(new OSequenceIterator< Any >(aValue.Value));
- break;
- default:
- OSL_ENSURE(sal_False, "unsupported sequence type !");
- break;
- }
- if ( pSequenceIterator.get() )
- {
- ::rtl::OUString sCurrent;
- while (pSequenceIterator->hasMoreElements())
- {
- SvXMLElementExport aDataValue(*this,XML_NAMESPACE_DB, XML_DATA_SOURCE_SETTING_VALUE, sal_True, sal_False);
- // (no whitespace inside the tag)
- Characters(implConvertAny(pSequenceIterator->nextElement()));
- }
+ SvXMLElementExport aDataValue(*this,XML_NAMESPACE_DB, XML_DATA_SOURCE_SETTING_VALUE, sal_True, sal_False);
+ // (no whitespace inside the tag)
+ Characters(implConvertAny(pSequenceIterator->nextElement()));
}
}
}
@@ -1015,7 +1010,21 @@ void ODBExport::exportColumns(const Reference<XColumnsSupplier>& _xColSup)
{
Reference<XNameAccess> xNameAccess( _xColSup->getColumns(), UNO_SET_THROW );
if ( !xNameAccess->hasElements() )
+ {
+ Reference< XPropertySet > xComponent(_xColSup,UNO_QUERY);
+ TTableColumnMap::iterator aFind = m_aTableDummyColumns.find(xComponent);
+ if ( aFind != m_aTableDummyColumns.end() )
+ {
+ SvXMLElementExport aColumns(*this,XML_NAMESPACE_DB, XML_COLUMNS, sal_True, sal_True);
+ SvXMLAttributeList* pAtt = new SvXMLAttributeList;
+ Reference<XAttributeList> xAtt = pAtt;
+ exportStyleName(aFind->second.get(),*pAtt);
+ AddAttributeList(xAtt);
+ SvXMLElementExport aColumn(*this,XML_NAMESPACE_DB, XML_COLUMN, sal_True, sal_True);
+
+ }
return;
+ }
SvXMLElementExport aColumns(*this,XML_NAMESPACE_DB, XML_COLUMNS, sal_True, sal_True);
Sequence< ::rtl::OUString> aSeq = xNameAccess->getElementNames();
@@ -1166,8 +1175,21 @@ void ODBExport::exportAutoStyle(XPropertySet* _xProp)
GetFontAutoStylePool()->Add(aFont.Name,aFont.StyleName,aFont.Family,aFont.Pitch,aFont.CharSet );
m_aCurrentPropertyStates = m_xCellExportHelper->Filter(_xProp);
- ::comphelper::mem_fun1_t<ODBExport,XPropertySet* > aMemFunc(&ODBExport::exportAutoStyle);
- exportCollection(xCollection,XML_TOKEN_INVALID,XML_TOKEN_INVALID,sal_False,aMemFunc);
+ if ( !m_aCurrentPropertyStates.empty() && !xCollection->hasElements() )
+ {
+ Reference< XDataDescriptorFactory> xFac(xCollection,UNO_QUERY);
+ if ( xFac.is() )
+ {
+ Reference< XPropertySet> xColumn = xFac->createDataDescriptor();
+ m_aTableDummyColumns.insert(TTableColumnMap::value_type(Reference< XPropertySet>(_xProp),xColumn));
+ exportAutoStyle(xColumn.get());
+ }
+ }
+ else
+ {
+ ::comphelper::mem_fun1_t<ODBExport,XPropertySet* > aMemFunc(&ODBExport::exportAutoStyle);
+ exportCollection(xCollection,XML_TOKEN_INVALID,XML_TOKEN_INVALID,sal_False,aMemFunc);
+ }
}
catch(Exception&)
{
diff --git a/dbaccess/source/filter/xml/xmlExport.hxx b/dbaccess/source/filter/xml/xmlExport.hxx
index e11f9b244cfd..ae10a9a20709 100644
--- a/dbaccess/source/filter/xml/xmlExport.hxx
+++ b/dbaccess/source/filter/xml/xmlExport.hxx
@@ -130,15 +130,31 @@ class ODBExport : public SvXMLExport
TDelimiter() : bUsed( false ) { }
};
- typedef ::std::map< Reference<XPropertySet> ,::rtl::OUString > TPropertyStyleMap;
+ typedef ::std::map< Reference<XPropertySet> ,::rtl::OUString > TPropertyStyleMap;
+ typedef ::std::map< Reference<XPropertySet> ,Reference<XPropertySet> > TTableColumnMap;
+
+ struct TypedPropertyValue
+ {
+ ::rtl::OUString Name;
+ ::com::sun::star::uno::Type Type;
+ ::com::sun::star::uno::Any Value;
+
+ TypedPropertyValue( const ::rtl::OUString& _name, const ::com::sun::star::uno::Type& _type, const ::com::sun::star::uno::Any& _value )
+ :Name( _name )
+ ,Type( _type )
+ ,Value( _value )
+ {
+ }
+ };
::std::auto_ptr< TStringPair > m_aAutoIncrement;
::std::auto_ptr< TDelimiter > m_aDelimiter;
- ::std::vector< Any> m_aDataSourceSettings;
+ ::std::vector< TypedPropertyValue > m_aDataSourceSettings;
::std::vector< XMLPropertyState > m_aCurrentPropertyStates;
TPropertyStyleMap m_aAutoStyleNames;
TPropertyStyleMap m_aCellAutoStyleNames;
TPropertyStyleMap m_aRowAutoStyleNames;
+ TTableColumnMap m_aTableDummyColumns;
::rtl::OUString m_sCharSet;
UniReference < SvXMLExportPropertyMapper> m_xExportHelper;
UniReference < SvXMLExportPropertyMapper> m_xColumnExportHelper;
diff --git a/dbaccess/source/filter/xml/xmlHierarchyCollection.cxx b/dbaccess/source/filter/xml/xmlHierarchyCollection.cxx
index 03487a1d9060..892b50bd610f 100644
--- a/dbaccess/source/filter/xml/xmlHierarchyCollection.cxx
+++ b/dbaccess/source/filter/xml/xmlHierarchyCollection.cxx
@@ -146,9 +146,11 @@ OXMLHierarchyCollection::OXMLHierarchyCollection( ODBFilter& rImport
,sal_uInt16 nPrfx
,const ::rtl::OUString& _sLocalName
,const Reference< XNameAccess >& _xContainer
+ ,const Reference< XPropertySet >& _xTable
) :
SvXMLImportContext( rImport, nPrfx, _sLocalName )
,m_xContainer(_xContainer)
+ ,m_xTable(_xTable)
{
DBG_CTOR(OXMLHierarchyCollection,NULL);
}
@@ -179,7 +181,7 @@ SvXMLImportContext* OXMLHierarchyCollection::CreateChildContext(
break;
case XML_TOK_COLUMN:
GetOwnImport().GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP );
- pContext = new OXMLColumn( GetOwnImport(), nPrefix, rLocalName,xAttrList,m_xContainer);
+ pContext = new OXMLColumn( GetOwnImport(), nPrefix, rLocalName,xAttrList,m_xContainer,m_xTable);
break;
// case XML_TOK_QUERY_COLLECTION:
case XML_TOK_COMPONENT_COLLECTION:
diff --git a/dbaccess/source/filter/xml/xmlHierarchyCollection.hxx b/dbaccess/source/filter/xml/xmlHierarchyCollection.hxx
index 35c93809a67d..23eb19d1a57c 100644
--- a/dbaccess/source/filter/xml/xmlHierarchyCollection.hxx
+++ b/dbaccess/source/filter/xml/xmlHierarchyCollection.hxx
@@ -30,15 +30,10 @@
#ifndef DBA_XMLHIERARCHYCOLLECTION_HXX
#define DBA_XMLHIERARCHYCOLLECTION_HXX
-#ifndef _XMLOFF_XMLICTXT_HXX
#include <xmloff/xmlictxt.hxx>
-#endif
-#ifndef DBA_XMLENUMS_HXX
#include "xmlEnums.hxx"
-#endif
-#ifndef _COM_SUN_STAR_CONTAINER_XNAMEACCESS_HPP_
#include <com/sun/star/container/XNameAccess.hpp>
-#endif
+#include <com/sun/star/beans/XPropertySet.hpp>
namespace dbaxml
@@ -48,6 +43,7 @@ namespace dbaxml
{
::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess > m_xParentContainer;
::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess > m_xContainer;
+ ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > m_xTable;
::rtl::OUString m_sName;
::rtl::OUString m_sCollectionServiceName;
::rtl::OUString m_sComponentServiceName;
@@ -67,6 +63,7 @@ namespace dbaxml
,sal_uInt16 nPrfx
,const ::rtl::OUString& rLName
,const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess >& _xContainer
+ ,const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& _xTable
);
virtual ~OXMLHierarchyCollection();
diff --git a/dbaccess/source/filter/xml/xmlStyleImport.cxx b/dbaccess/source/filter/xml/xmlStyleImport.cxx
index 35bf7934cc44..a373bb4c79c8 100644
--- a/dbaccess/source/filter/xml/xmlStyleImport.cxx
+++ b/dbaccess/source/filter/xml/xmlStyleImport.cxx
@@ -214,8 +214,9 @@ OTableStylesContext::OTableStylesContext( SvXMLImport& rImport,
const Reference< XAttributeList > & xAttrList,
const sal_Bool bTempAutoStyles ) :
SvXMLStylesContext( rImport, nPrfx, rLName, xAttrList ),
- sColumnStyleServiceName( rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( XML_STYLE_FAMILY_TABLE_COLUMN_STYLES_NAME ))),
sTableStyleServiceName( rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( XML_STYLE_FAMILY_TABLE_TABLE_STYLES_NAME ))),
+ sColumnStyleServiceName( rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( XML_STYLE_FAMILY_TABLE_COLUMN_STYLES_NAME ))),
+ sCellStyleServiceName( rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( XML_STYLE_FAMILY_TABLE_CELL_STYLES_NAME ))),
m_nNumberFormatIndex(-1),
bAutoStyles(bTempAutoStyles)
{
@@ -251,6 +252,13 @@ UniReference < SvXMLImportPropertyMapper >
{
switch( nFamily )
{
+ case XML_STYLE_FAMILY_TABLE_TABLE:
+ {
+ if ( !m_xTableImpPropMapper.is() )
+ m_xTableImpPropMapper = new SvXMLImportPropertyMapper( const_cast<OTableStylesContext*>(this)->GetOwnImport().GetTableStylesPropertySetMapper(), const_cast<SvXMLImport&>(GetImport()) );
+ xMapper = m_xTableImpPropMapper;
+ }
+ break;
case XML_STYLE_FAMILY_TABLE_COLUMN:
{
if ( !m_xColumnImpPropMapper.is() )
@@ -258,11 +266,11 @@ UniReference < SvXMLImportPropertyMapper >
xMapper = m_xColumnImpPropMapper;
}
break;
- case XML_STYLE_FAMILY_TABLE_TABLE:
+ case XML_STYLE_FAMILY_TABLE_CELL:
{
- if ( !m_xTableImpPropMapper.is() )
- m_xTableImpPropMapper = new SvXMLImportPropertyMapper( const_cast<OTableStylesContext*>(this)->GetOwnImport().GetTableStylesPropertySetMapper(), const_cast<SvXMLImport&>(GetImport()) );
- xMapper = m_xTableImpPropMapper;
+ if ( !m_xCellImpPropMapper.is() )
+ m_xCellImpPropMapper = new SvXMLImportPropertyMapper( const_cast<OTableStylesContext*>(this)->GetOwnImport().GetCellStylesPropertySetMapper(), const_cast<SvXMLImport&>(GetImport()) );
+ xMapper = m_xCellImpPropMapper;
}
break;
}
@@ -282,8 +290,9 @@ SvXMLStyleContext *OTableStylesContext::CreateStyleStyleChildContext(
{
switch( nFamily )
{
- case XML_STYLE_FAMILY_TABLE_COLUMN:
case XML_STYLE_FAMILY_TABLE_TABLE:
+ case XML_STYLE_FAMILY_TABLE_COLUMN:
+ case XML_STYLE_FAMILY_TABLE_CELL:
pStyle = new OTableStyleContext( GetOwnImport(), nPrefix, rLocalName,
xAttrList, *this, nFamily );
break;
@@ -308,12 +317,16 @@ Reference < XNameContainer >
{
switch( nFamily )
{
+ case XML_STYLE_FAMILY_TABLE_TABLE:
+ sServiceName = sTableStyleServiceName;
+ break;
case XML_STYLE_FAMILY_TABLE_COLUMN:
sServiceName = sColumnStyleServiceName;
break;
- case XML_STYLE_FAMILY_TABLE_TABLE:
- sServiceName = sTableStyleServiceName;
+ case XML_STYLE_FAMILY_TABLE_CELL:
+ sServiceName = sCellStyleServiceName;
break;
+
}
}
return sServiceName;
diff --git a/dbaccess/source/filter/xml/xmlStyleImport.hxx b/dbaccess/source/filter/xml/xmlStyleImport.hxx
index e8dfe4eedac6..95be65774e6d 100644
--- a/dbaccess/source/filter/xml/xmlStyleImport.hxx
+++ b/dbaccess/source/filter/xml/xmlStyleImport.hxx
@@ -111,14 +111,16 @@ namespace dbaxml
class OTableStylesContext : public SvXMLStylesContext
{
- const ::rtl::OUString sColumnStyleServiceName;
const ::rtl::OUString sTableStyleServiceName;
+ const ::rtl::OUString sColumnStyleServiceName;
+ const ::rtl::OUString sCellStyleServiceName;
sal_Int32 m_nNumberFormatIndex;
sal_Int32 nMasterPageNameIndex;
sal_Bool bAutoStyles : 1;
- mutable UniReference < SvXMLImportPropertyMapper > m_xColumnImpPropMapper;
mutable UniReference < SvXMLImportPropertyMapper > m_xTableImpPropMapper;
+ mutable UniReference < SvXMLImportPropertyMapper > m_xColumnImpPropMapper;
+ mutable UniReference < SvXMLImportPropertyMapper > m_xCellImpPropMapper;
ODBFilter& GetOwnImport();
diff --git a/dbaccess/source/filter/xml/xmlTable.cxx b/dbaccess/source/filter/xml/xmlTable.cxx
index fb85eecbb91a..86f4304b6eb5 100644
--- a/dbaccess/source/filter/xml/xmlTable.cxx
+++ b/dbaccess/source/filter/xml/xmlTable.cxx
@@ -184,7 +184,7 @@ SvXMLImportContext* OXMLTable::CreateChildContext(
{
xColumns = xColumnsSup->getColumns();
}
- pContext = new OXMLHierarchyCollection( GetOwnImport(), nPrefix, rLocalName ,xColumns);
+ pContext = new OXMLHierarchyCollection( GetOwnImport(), nPrefix, rLocalName ,xColumns,m_xTable);
}
break;
}
diff --git a/dbaccess/source/filter/xml/xmlfilter.cxx b/dbaccess/source/filter/xml/xmlfilter.cxx
index 128ad71ffc21..5e9374dcce77 100644
--- a/dbaccess/source/filter/xml/xmlfilter.cxx
+++ b/dbaccess/source/filter/xml/xmlfilter.cxx
@@ -753,13 +753,14 @@ const SvXMLTokenMap& ODBFilter::GetColumnElemTokenMap() const
{
static __FAR_DATA SvXMLTokenMapEntry aElemTokenMap[]=
{
- { XML_NAMESPACE_DB, XML_NAME, XML_TOK_COLUMN_NAME },
- { XML_NAMESPACE_DB, XML_STYLE_NAME, XML_TOK_COLUMN_STYLE_NAME },
- { XML_NAMESPACE_DB, XML_HELP_MESSAGE, XML_TOK_COLUMN_HELP_MESSAGE },
- { XML_NAMESPACE_DB, XML_VISIBILITY, XML_TOK_COLUMN_VISIBILITY },
- { XML_NAMESPACE_DB, XML_DEFAULT_VALUE, XML_TOK_COLUMN_DEFAULT_VALUE},
- { XML_NAMESPACE_DB, XML_TYPE_NAME, XML_TOK_COLUMN_TYPE_NAME },
- { XML_NAMESPACE_DB, XML_VISIBLE, XML_TOK_COLUMN_VISIBLE },
+ { XML_NAMESPACE_DB, XML_NAME, XML_TOK_COLUMN_NAME },
+ { XML_NAMESPACE_DB, XML_STYLE_NAME, XML_TOK_COLUMN_STYLE_NAME },
+ { XML_NAMESPACE_DB, XML_HELP_MESSAGE, XML_TOK_COLUMN_HELP_MESSAGE },
+ { XML_NAMESPACE_DB, XML_VISIBILITY, XML_TOK_COLUMN_VISIBILITY },
+ { XML_NAMESPACE_DB, XML_DEFAULT_VALUE, XML_TOK_COLUMN_DEFAULT_VALUE },
+ { XML_NAMESPACE_DB, XML_TYPE_NAME, XML_TOK_COLUMN_TYPE_NAME },
+ { XML_NAMESPACE_DB, XML_VISIBLE, XML_TOK_COLUMN_VISIBLE },
+ { XML_NAMESPACE_DB, XML_DEFAULT_CELL_STYLE_NAME, XML_TOK_DEFAULT_CELL_STYLE_NAME },
XML_TOKEN_MAP_END
};
m_pColumnElemTokenMap.reset(new SvXMLTokenMap( aElemTokenMap ));
@@ -807,6 +808,15 @@ UniReference < XMLPropertySetMapper > ODBFilter::GetColumnStylesPropertySetMappe
return m_xColumnStylesPropertySetMapper;
}
// -----------------------------------------------------------------------------
+UniReference < XMLPropertySetMapper > ODBFilter::GetCellStylesPropertySetMapper() const
+{
+ if ( !m_xCellStylesPropertySetMapper.is() )
+ {
+ m_xCellStylesPropertySetMapper = OXMLHelper::GetCellStylesPropertySetMapper();
+ }
+ return m_xCellStylesPropertySetMapper;
+}
+// -----------------------------------------------------------------------------
void ODBFilter::setPropertyInfo()
{
Reference<XPropertySet> xDataSource(getDataSource());
diff --git a/dbaccess/source/filter/xml/xmlfilter.hxx b/dbaccess/source/filter/xml/xmlfilter.hxx
index 4805e242055d..744770305469 100644
--- a/dbaccess/source/filter/xml/xmlfilter.hxx
+++ b/dbaccess/source/filter/xml/xmlfilter.hxx
@@ -129,6 +129,7 @@ private:
mutable UniReference < XMLPropertySetMapper > m_xTableStylesPropertySetMapper;
mutable UniReference < XMLPropertySetMapper > m_xColumnStylesPropertySetMapper;
+ mutable UniReference < XMLPropertySetMapper > m_xCellStylesPropertySetMapper;
Reference<XPropertySet> m_xDataSource;
sal_Int32 m_nPreviewMode;
bool m_bNewFormat;
@@ -188,6 +189,7 @@ public:
UniReference < XMLPropertySetMapper > GetTableStylesPropertySetMapper() const;
UniReference < XMLPropertySetMapper > GetColumnStylesPropertySetMapper() const;
+ UniReference < XMLPropertySetMapper > GetCellStylesPropertySetMapper() const;
/** add a Info to the sequence which will be appened to the data source
@param _rInfo The property to append.