/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /************************************************************************* * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License version 3 * only, as published by the Free Software Foundation. * * OpenOffice.org is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License version 3 for more details * (a copy is included in the LICENSE file that accompanied this code). * * You should have received a copy of the GNU Lesser General Public License * version 3 along with OpenOffice.org. If not, see * * for a copy of the LGPLv3 License. * ************************************************************************/ // MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_dbaccess.hxx" #include "xmlColumn.hxx" #include "xmlfilter.hxx" #include #include #include #include #include "xmlEnums.hxx" #include "xmlstrings.hrc" #include #include #include #include #include #include "xmlStyleImport.hxx" #include namespace dbaxml { using namespace ::com::sun::star::uno; using namespace ::com::sun::star::beans; using namespace ::com::sun::star::sdbcx; using namespace ::com::sun::star::container; using namespace ::com::sun::star::xml::sax; DBG_NAME(OXMLColumn) OXMLColumn::OXMLColumn( ODBFilter& rImport ,sal_uInt16 nPrfx ,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); OSL_ENSURE(_xAttrList.is(),"Attribute list is NULL!"); const SvXMLNamespaceMap& rMap = rImport.GetNamespaceMap(); const SvXMLTokenMap& rTokenMap = rImport.GetColumnElemTokenMap(); sal_Int16 nLength = (_xAttrList.is()) ? _xAttrList->getLength() : 0; ::rtl::OUString sType; for(sal_Int16 i = 0; i < nLength; ++i) { ::rtl::OUString sLocalName; rtl::OUString sAttrName = _xAttrList->getNameByIndex( i ); sal_uInt16 nPrefix = rMap.GetKeyByAttrName( sAttrName,&sLocalName ); rtl::OUString sValue = _xAttrList->getValueByIndex( i ); switch( rTokenMap.Get( nPrefix, sLocalName ) ) { case XML_TOK_COLUMN_NAME: m_sName = sValue; break; case XML_TOK_COLUMN_STYLE_NAME: m_sStyleName = sValue; break; case XML_TOK_COLUMN_HELP_MESSAGE: m_sHelpMessage = sValue; break; case XML_TOK_COLUMN_VISIBILITY: m_bHidden = !sValue.equalsAscii("visible"); break; case XML_TOK_COLUMN_TYPE_NAME: sType = sValue; OSL_ENSURE(sType.getLength(),"No type name set"); break; case XML_TOK_COLUMN_DEFAULT_VALUE: if ( sValue.getLength() && sType.getLength() ) m_aDefaultValue <<= sValue; // SvXMLUnitConverter::convertAny(m_aDefaultValue,sType,sValue); break; case XML_TOK_COLUMN_VISIBLE: m_bHidden = sValue.equalsAscii("false"); break; case XML_TOK_DEFAULT_CELL_STYLE_NAME: m_sCellStyleName = sValue; break; } } } // ----------------------------------------------------------------------------- OXMLColumn::~OXMLColumn() { DBG_DTOR(OXMLColumn,NULL); } // ----------------------------------------------------------------------------- void OXMLColumn::EndElement() { Reference xFac(m_xParentContainer,UNO_QUERY); if ( xFac.is() && m_sName.getLength() ) { Reference xProp(xFac->createDataDescriptor()); if ( xProp.is() ) { xProp->setPropertyValue(PROPERTY_NAME,makeAny(m_sName)); xProp->setPropertyValue(PROPERTY_HIDDEN,makeAny(m_bHidden)); if ( m_sHelpMessage.getLength() ) xProp->setPropertyValue(PROPERTY_HELPTEXT,makeAny(m_sHelpMessage)); if ( m_aDefaultValue.hasValue() ) xProp->setPropertyValue(PROPERTY_CONTROLDEFAULT,m_aDefaultValue); Reference 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(); if ( pAutoStyles ) { OTableStyleContext* pAutoStyle = PTR_CAST(OTableStyleContext,pAutoStyles->FindStyleChildContext(XML_STYLE_FAMILY_TABLE_COLUMN,m_sStyleName)); if ( pAutoStyle ) { 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); } } } } // ----------------------------------------------------------------------------- ODBFilter& OXMLColumn::GetOwnImport() { return static_cast(GetImport()); } //---------------------------------------------------------------------------- } // namespace dbaxml // ----------------------------------------------------------------------------- /* vim:set shiftwidth=4 softtabstop=4 expandtab: */