diff options
Diffstat (limited to 'configmgr/source/xml/schemaparser.cxx')
-rw-r--r-- | configmgr/source/xml/schemaparser.cxx | 409 |
1 files changed, 0 insertions, 409 deletions
diff --git a/configmgr/source/xml/schemaparser.cxx b/configmgr/source/xml/schemaparser.cxx deleted file mode 100644 index 1fd1cea90bb7..000000000000 --- a/configmgr/source/xml/schemaparser.cxx +++ /dev/null @@ -1,409 +0,0 @@ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2008 by Sun Microsystems, Inc. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * $RCSfile: schemaparser.cxx,v $ - * $Revision: 1.13 $ - * - * 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 - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_configmgr.hxx" - -#include "schemaparser.hxx" - -// ----------------------------------------------------------------------------- -#include "wrapexception.hxx" - -#define WRAP_PARSE_EXCEPTIONS() \ - PASS_EXCEPTION(sax::SAXException) \ - PASS_EXCEPTION(uno::RuntimeException) \ - WRAP_CONFIGDATA_EXCEPTIONS( raiseParseException ) \ - WRAP_OTHER_EXCEPTIONS( raiseParseException ) - -#define WRAP_PARSE_EXCEPTIONS_MSG( msg ) \ - PASS_EXCEPTION(sax::SAXException) \ - PASS_EXCEPTION(uno::RuntimeException) \ - WRAP_CONFIGDATA_EXCEPTIONS1( raiseParseException, msg ) \ - WRAP_OTHER_EXCEPTIONS1( raiseParseException, msg ) - -// ----------------------------------------------------------------------------- - -namespace configmgr -{ -// ----------------------------------------------------------------------------- - namespace xml - { -// ----------------------------------------------------------------------------- - namespace uno = ::com::sun::star::uno; - namespace sax = ::com::sun::star::xml::sax; -// ----------------------------------------------------------------------------- - -SchemaParser::SchemaParser(uno::Reference< uno::XComponentContext > const & _xContext, uno::Reference< backenduno::XSchemaHandler > const & _xHandler, Select _selector) -: BasicParser(_xContext) -, m_xHandler(_xHandler) -, m_sComponent() -, m_selector(_selector) -, m_selected(selectNone) -{ - if (!m_xHandler.is()) - { - rtl::OUString sMessage(RTL_CONSTASCII_USTRINGPARAM("Cannot create SchemaParser: Unexpected NULL Handler")); - throw uno::RuntimeException(sMessage, *this); - } - OSL_ENSURE(m_selector != selectNone, "Warning: Schema handler will handle no part of the schema"); -} -// ----------------------------------------------------------------------------- - -SchemaParser::~SchemaParser() -{ -} -// ----------------------------------------------------------------------------- - -void SAL_CALL SchemaParser::startDocument( ) - throw (sax::SAXException, uno::RuntimeException) -{ - BasicParser::startDocument(); - - OSL_ENSURE(isEmptyNode(), "BasicParser does not mark new document as empty"); - - m_sComponent = rtl::OUString(); - m_selected = selectNone; -} -// ----------------------------------------------------------------------------- - -void SAL_CALL SchemaParser::endDocument( ) throw (sax::SAXException, uno::RuntimeException) -{ - if (isSelected()) - raiseParseException("Schema XML Parser: Invalid XML: Document ends while section is open"); - - if (isEmptyNode()) OSL_TRACE("Configuration Parser: XML schema document ended without any data"); - - BasicParser::endDocument(); -} -// ----------------------------------------------------------------------------- - -void SAL_CALL SchemaParser::startElement( const rtl::OUString& aName, const uno::Reference< sax::XAttributeList >& xAttribs ) - throw (sax::SAXException, uno::RuntimeException) -{ - if ( this->isSkipping() ) - { - this->startSkipping( aName, xAttribs ); - return; - } - - ElementInfo aInfo = getDataParser().parseElementInfo(aName,xAttribs); - - try - { - switch (aInfo.type) - { - case ElementType::schema: - this->startSchema(aInfo,xAttribs); - break; - - case ElementType::component: - this->startSection(selectComponent, aInfo, xAttribs); - break; - - case ElementType::templates: - this->startSection(selectTemplates, aInfo, xAttribs); - break; - - case ElementType::import: - this->handleImport(aInfo,xAttribs); - this->startSkipping( aName, xAttribs ); - break; - - case ElementType::uses: - this->startSkipping( aName, xAttribs ); - break; - - case ElementType::instance: - this->handleInstance(aInfo,xAttribs); - this->startSkipping( aName, xAttribs ); - break; - - case ElementType::item_type: - this->handleItemType(aInfo,xAttribs); - this->startSkipping( aName, xAttribs ); - break; - - case ElementType::layer: - case ElementType::node: - raiseParseException( "Schema XML parser - Invalid data: found unspecified 'node' element.\n"); - // fall thru - case ElementType::group: case ElementType::set: - this->startNode(aInfo,xAttribs); - OSL_ASSERT( this->isInNode() ); - break; - - case ElementType::property: - this->startProperty(aInfo,xAttribs); - OSL_ASSERT( this->isInUnhandledProperty() ); - break; - - case ElementType::value: - this->startValueData(xAttribs); - OSL_ASSERT( this->isInValueData() ); - break; - - default: // skip unknown elements - OSL_ENSURE( aInfo.type <= ElementType::other, "Schema XML parser - Error: invalid element type value\n"); - OSL_ENSURE( aInfo.type >= ElementType::other, "Schema XML parser - Unexpected: found layer element in schema data\n"); - // accept (and skip) unknown (ElementType::other) tags in schema to allow documentation and constraints to pass without assertion - //OSL_ENSURE( aInfo.type < ElementType::other, "Schema XML parser - Warning: ignoring unknown element tag\n"); - - this->startSkipping( aName, xAttribs ); - OSL_ASSERT( this->isSkipping() ); - return; - } - } - WRAP_PARSE_EXCEPTIONS_MSG("LayerParser - Starting Element") - - OSL_ENSURE(aInfo.op == Operation::none || this->isSkipping(), - "Schema Parser: The 'op' attribute is not supported in a schema"); -} -// ----------------------------------------------------------------------------- - -void SAL_CALL SchemaParser::endElement( const rtl::OUString& aName ) - throw (sax::SAXException, uno::RuntimeException) -{ - if ( this->wasSkipping(aName) ) - return; - - try - { - if ( this->isInValueData()) - this->endValueData(); - - else if (this->isInProperty()) - this->endProperty(); - - else if (this->isInNode()) - this->endNode(); - - else if (this->isSelected()) - this->endSection(); - - else - this->endSchema(); - } - WRAP_PARSE_EXCEPTIONS_MSG("LayerParser - Ending Element") -} -// ----------------------------------------------------------------------------- -// ----------------------------------------------------------------------------- - -void SchemaParser::startSchema( ElementInfo const & aInfo, const uno::Reference< sax::XAttributeList >& /*xAttribs*/ ) -{ - m_sComponent = aInfo.name; - m_xHandler->startSchema(); -} -// ----------------------------------------------------------------------------- - -void SchemaParser::endSchema( ) -{ - m_xHandler->endSchema(); - m_sComponent = rtl::OUString(); -} -// ----------------------------------------------------------------------------- - -bool SchemaParser::select(Select _select) -{ - if (isSelected()) - raiseParseException("Schema XML parser - Invalid data: found start of section while a section is still open.\n"); - - m_selected = static_cast<Select>(m_selector & _select); - - return m_selected != 0; -} -// ----------------------------------------------------------------------------- - -void SchemaParser::startSection( Select _select, ElementInfo const & aInfo, const uno::Reference< sax::XAttributeList >& xAttribs ) -{ - if (this->select(_select)) - { - if (_select == selectComponent) - { - m_xHandler->startComponent(m_sComponent); - } - } - else - startSkipping(aInfo.name,xAttribs); -} -// ----------------------------------------------------------------------------- - -void SchemaParser::endSection( ) -{ - if (m_selected == selectComponent) - { - m_xHandler->endComponent(); - } - m_selected = selectNone; -} -// ----------------------------------------------------------------------------- - -void SchemaParser::handleImport( ElementInfo const & /*aInfo*/, const uno::Reference< sax::XAttributeList >& xAttribs ) -{ - rtl::OUString aComponent; - if (getDataParser().getImportComponent(xAttribs,aComponent)) - m_xHandler->importComponent(aComponent); - - else - raiseParseException("Schema XML parser - Invalid data: Missing component attribute for import directive.\n"); -} -// ----------------------------------------------------------------------------- - -void SchemaParser::handleInstance( ElementInfo const & aInfo, const uno::Reference< sax::XAttributeList >& xAttribs ) -{ - backenduno::TemplateIdentifier aTemplate; - if (getDataParser().getInstanceType(xAttribs, aTemplate.Name, aTemplate.Component)) - m_xHandler->addInstance(aInfo.name, aTemplate); - - else - raiseParseException("Schema XML parser - Invalid data: Missing type information for instantiation directive.\n"); -} -// ----------------------------------------------------------------------------- - -void SchemaParser::handleItemType( ElementInfo const & /*aInfo*/, const uno::Reference< sax::XAttributeList >& xAttribs ) -{ - backenduno::TemplateIdentifier aTemplate; - if (getDataParser().getInstanceType(xAttribs, aTemplate.Name, aTemplate.Component)) - m_xHandler->addItemType(aTemplate); - - else - raiseParseException("Schema XML parser - Invalid data: Missing type information for instantiation directive.\n"); -} -// ----------------------------------------------------------------------------- - -void SchemaParser::startNode( ElementInfo const & aInfo, const uno::Reference< sax::XAttributeList >& xAttribs ) -{ - bool bStartTemplate = ( !isInNode() && m_selected == selectTemplates ); - - BasicParser::startNode(aInfo,xAttribs); - - OSL_ASSERT(aInfo.type == ElementType::set || aInfo.type == ElementType::group); - - if (aInfo.type == ElementType::group) - { - if (bStartTemplate) - m_xHandler->startGroupTemplate( backenduno::TemplateIdentifier(aInfo.name,m_sComponent), aInfo.flags ); - - else - m_xHandler->startGroup( aInfo.name, aInfo.flags ); - } - else - { - backenduno::TemplateIdentifier aItemType; - - if (!getDataParser().getSetElementType(xAttribs, aItemType.Name, aItemType.Component)) - raiseParseException("Schema XML parser - Invalid data: Missing item-type information for set node.\n"); - - if (bStartTemplate) - m_xHandler->startSetTemplate( backenduno::TemplateIdentifier(aInfo.name,m_sComponent), aInfo.flags, aItemType ); - - else - m_xHandler->startSet( aInfo.name, aInfo.flags, aItemType ); - } -} -// ----------------------------------------------------------------------------- - -void SchemaParser::endNode() -{ - BasicParser::endNode(); - - bool bEndedTemplate = ( !isInNode() && m_selected == selectTemplates ); - - if (bEndedTemplate) - m_xHandler->endTemplate(); - - else - m_xHandler->endNode(); -} -// ----------------------------------------------------------------------------- - -void SchemaParser::startProperty( ElementInfo const & aInfo, const uno::Reference< sax::XAttributeList >& xAttribs ) -{ - BasicParser::startProperty(aInfo,xAttribs); - - OSL_ENSURE( isInUnhandledProperty(), "Property not recognizable as unhandled"); -} -// ----------------------------------------------------------------------------- - -void SchemaParser::endProperty() -{ - if (isInUnhandledProperty()) - { - ElementInfo const & aInfo = this->getActiveNodeInfo(); - - m_xHandler->addProperty(aInfo.name, - aInfo.flags, - getActivePropertyType()); - } - - BasicParser::endProperty(); -} -// ----------------------------------------------------------------------------- - -void SchemaParser::startValueData(const uno::Reference< sax::XAttributeList >& xAttribs) -{ - OSL_ENSURE( this->isInUnhandledProperty(),"Schema XML parser - multiple values in property are not permitted in the schema.\n"); - - BasicParser::startValueData(xAttribs); - - if (this->isValueDataLocalized()) - getLogger().warning("Language attributes on values are ignored in the schema.", - "endValueData()","configuration::xml::SchemaParser"); -} -// ----------------------------------------------------------------------------- - -void SchemaParser::endValueData() -{ - uno::Any aValue = this->getCurrentValue(); - - ElementInfo const & aInfo = this->getActiveNodeInfo(); - - if (aValue.hasValue()) - { - m_xHandler->addPropertyWithDefault(aInfo.name,aInfo.flags,aValue); - } - else - { - getLogger().warning("Found deprecated explicit NIL value in schema data.", - "endValueData()","configuration::xml::SchemaParser"); - m_xHandler->addProperty(aInfo.name,aInfo.flags,getActivePropertyType()); - } - - BasicParser::endValueData(); - - OSL_ENSURE( !isInUnhandledProperty(), "Property not recognizable as handled"); -} -// ----------------------------------------------------------------------------- - -// ----------------------------------------------------------------------------- - } // namespace - -// ----------------------------------------------------------------------------- -} // namespace - |