summaryrefslogtreecommitdiff
path: root/configmgr/source/xml/basicparser.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'configmgr/source/xml/basicparser.cxx')
-rw-r--r--configmgr/source/xml/basicparser.cxx533
1 files changed, 0 insertions, 533 deletions
diff --git a/configmgr/source/xml/basicparser.cxx b/configmgr/source/xml/basicparser.cxx
deleted file mode 100644
index 94d97e34fc45..000000000000
--- a/configmgr/source/xml/basicparser.cxx
+++ /dev/null
@@ -1,533 +0,0 @@
-/*************************************************************************
- *
- * 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
- * <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 "basicparser.hxx"
-#include <com/sun/star/xml/sax/SAXException.hpp>
-#include "valuetypeconverter.hxx"
-// -----------------------------------------------------------------------------
-
-namespace configmgr
-{
-// -----------------------------------------------------------------------------
- namespace xml
- {
-// -----------------------------------------------------------------------------
- namespace uno = ::com::sun::star::uno;
- namespace sax = ::com::sun::star::xml::sax;
-// -----------------------------------------------------------------------------
-
-namespace
-{
- static inline
- uno::Reference< script::XTypeConverter > createTCV(uno::Reference< uno::XComponentContext > const & _xContext)
- {
- OSL_ENSURE(_xContext.is(),"Cannot create Parser without a Context");
-
- static const rtl::OUString k_sTCVService(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.script.Converter"));
-
- uno::Reference< lang::XMultiComponentFactory > xSvcFactory = _xContext->getServiceManager();
- return uno::Reference< script::XTypeConverter >::query(xSvcFactory->createInstanceWithContext(k_sTCVService,_xContext));
- }
-}
-// -----------------------------------------------------------------------------
-
-struct BasicParser::ValueData : ValueConverter
-{
- rtl::OUString content;
- rtl::OUString locale;
- bool isLocalized;
-
- ValueData(uno::Type const& _aType, uno::Reference< script::XTypeConverter > const & _xTCV)
- : ValueConverter(_aType, _xTCV)
- , content()
- , locale()
- , isLocalized(false)
- {
- }
-
- uno::Any convertToAny() const
- {
- return ValueConverter::convertToAny(this->content);
- }
-
- rtl::OUString toString() const
- {
- return this->content;
- }
-
- uno::Sequence<rtl::OUString> toStringList() const
- {
- return ValueConverter::splitStringList(this->content);
- }
-
- void setLocalized(rtl::OUString const & _aLocale)
- {
- isLocalized = true;
- locale = _aLocale;
- }
-};
-// -----------------------------------------------------------------------------
-
-BasicParser::BasicParser(uno::Reference< uno::XComponentContext > const & _xContext)
-: m_xTypeConverter( createTCV(_xContext) )
-, m_xLocator(NULL)
-, m_aDataParser(Logger(_xContext))
-, m_aNodes()
-, m_aValueType()
-, m_pValueData(NULL)
-, m_nSkipLevels(0)
-, m_bEmpty(true)
-, m_bInProperty(false)
-{
- if (!m_xTypeConverter.is())
- throw uno::RuntimeException();
-
- OSL_DEBUG_ONLY( dbgUpdateLocation() );
-}
-// -----------------------------------------------------------------------------
-
-BasicParser::~BasicParser()
-{
- delete m_pValueData;
-}
-// -----------------------------------------------------------------------------
-
-#if OSL_DEBUG_LEVEL > 0
-void BasicParser::dbgUpdateLocation()
-{
-#ifndef DBG_UTIL
- rtl::OUString dbgPublicId, dbgSystemId;
- sal_Int32 dbgLineNo, dbgColumnNo;
-#endif // OSL_DEBUG_LEVEL
-
- if (m_xLocator.is())
- {
- dbgPublicId = m_xLocator->getPublicId();
- dbgSystemId = m_xLocator->getSystemId();
- dbgLineNo = m_xLocator->getLineNumber();
- dbgColumnNo = m_xLocator->getColumnNumber();
- }
- else
- {
- dbgPublicId = dbgSystemId = rtl::OUString::createFromAscii("<<<unknown>>>");
- dbgLineNo = dbgColumnNo = -1;
- }
-}
-#endif
-// -----------------------------------------------------------------------------
-void SAL_CALL BasicParser::startDocument( )
- throw (sax::SAXException, uno::RuntimeException)
-{
- m_aDataParser.reset();
- m_aValueType = uno::Type();
- m_bInProperty = false;
- m_nSkipLevels = 0;
-
- delete m_pValueData, m_pValueData = NULL;
-
- while (!m_aNodes.empty()) m_aNodes.pop();
-
- m_bEmpty = true;
-
- OSL_DEBUG_ONLY( dbgUpdateLocation() );
-}
-// -----------------------------------------------------------------------------
-
-void SAL_CALL BasicParser::endDocument( ) throw (sax::SAXException, uno::RuntimeException)
-{
- OSL_DEBUG_ONLY( dbgUpdateLocation() );
-
- if (!m_aNodes.empty() || isSkipping() || isInValueData())
- raiseParseException( "Configuration XML Parser - Invalid XML: Unexpected end of document" );
-
- m_xLocator.clear();
-}
-// -----------------------------------------------------------------------------
-
-void SAL_CALL BasicParser::characters( const rtl::OUString& aChars )
- throw (sax::SAXException, uno::RuntimeException)
-{
- OSL_DEBUG_ONLY( dbgUpdateLocation() );
-
- if (isInValueData())
- {
- m_pValueData->content += aChars;
- }
-#ifdef CONFIG_XMLPARSER_VALIDATE_WHITESPACE
- else
- OSL_ENSURE( isSkipping() || aChars.trim().getLength() == 0, "Unexpected text content in configuration XML");
-#endif
-}
-// -----------------------------------------------------------------------------
-
-void SAL_CALL BasicParser::ignorableWhitespace( const rtl::OUString& aWhitespaces )
- throw (sax::SAXException, uno::RuntimeException)
-{
- OSL_DEBUG_ONLY( dbgUpdateLocation() );
- if (isInValueData())
- {
- OSL_ENSURE(false, "Configuration XML: Unexpected ignorable (!) whitespace instruction in value data");
- if (!m_pValueData->isNull())
- m_pValueData->content += aWhitespaces;
- }
-#ifdef CONFIG_XMLPARSER_VALIDATE_WHITESPACE
- else
- OSL_ENSURE( aChars.trim().getLength() == 0, "Unexpected non-space content in ignorable whitespace");
-#endif
-}
-// -----------------------------------------------------------------------------
-
-void SAL_CALL BasicParser::processingInstruction( const rtl::OUString& /*aTarget*/, const rtl::OUString& /*aData*/ )
- throw (sax::SAXException, uno::RuntimeException)
-{
- OSL_DEBUG_ONLY( dbgUpdateLocation() );
- OSL_ENSURE(false, "Unexpected processing instruction in Configuration XML");
-}
-// -----------------------------------------------------------------------------
-
-void SAL_CALL BasicParser::setDocumentLocator( const uno::Reference< sax::XLocator >& xLocator )
- throw (sax::SAXException, uno::RuntimeException)
-{
- m_xLocator = xLocator;
- OSL_DEBUG_ONLY( dbgUpdateLocation() );
-}
-// -----------------------------------------------------------------------------
-
-void BasicParser::startNode( ElementInfo const & aInfo, const uno::Reference< sax::XAttributeList >& /*xAttribs*/ )
-{
- { (void)aInfo; }
- OSL_DEBUG_ONLY( dbgUpdateLocation() );
-
- OSL_ENSURE( !isSkipping(), "While skipping, call startSkipping() instead of startNode()");
- OSL_ENSURE( aInfo.type != ElementType::property, "For properties, call startProperty() instead of startNode()");
-
- if (isInProperty())
- raiseParseException( "Configuration XML Parser - Invalid Data: Cannot have a node nested in a property" );
-
- m_aNodes.push(aInfo);
- m_bEmpty = (aInfo.flags != 0) || (aInfo.op > Operation::modify);
-
- OSL_POSTCOND( isInNode(), "Could not start a node ");
-}
-// -----------------------------------------------------------------------------
-
-void BasicParser::endNode( )
-{
- OSL_DEBUG_ONLY( dbgUpdateLocation() );
-
- OSL_ENSURE( !isSkipping(), "While skipping, honor wasSkipping() instead of calling endNode()");
- OSL_ENSURE( !isInProperty(), "For properties, call endProperty() instead of endNode()" );
-
- ensureInNode();
-
- m_aNodes.pop();
- m_bEmpty = false;
-}
-// -----------------------------------------------------------------------------
-
-void BasicParser::ensureInNode( )
-{
- if (!isInNode())
- raiseParseException("Unexpected endElement without matching startElement");
-}
-// -----------------------------------------------------------------------------
-
-bool BasicParser::isInNode( )
-{
- return ! m_aNodes.empty();
-}
-// -----------------------------------------------------------------------------
-
-bool BasicParser::isEmptyNode( )
-{
- return m_bEmpty;
-}
-// -----------------------------------------------------------------------------
-
-ElementInfo const & BasicParser::getActiveNodeInfo( )
-{
- ensureInNode();
-
- return m_aNodes.top();
-}
-// -----------------------------------------------------------------------------
-
-void BasicParser::startProperty( ElementInfo const & aInfo, const uno::Reference< sax::XAttributeList >& xAttribs )
-{
- OSL_DEBUG_ONLY( dbgUpdateLocation() );
-
- OSL_ENSURE( !isSkipping(), "While skipping, call startSkipping() instead of startProperty()");
- OSL_ENSURE( aInfo.type == ElementType::property, "For non-property nodes, call startNode() instead of startProperty()");
-
- if (isInProperty())
- raiseParseException( "Configuration XML Parser - Invalid Data: Properties may not nest" );
-
- try
- {
- m_aValueType = getDataParser().getPropertyValueType(xAttribs);
- }
- catch (ElementParser::BadValueType & error)
- {
- raiseParseException(error.message());
- }
-
- m_bInProperty = true;
-
- m_aNodes.push(aInfo);
- m_bEmpty = true;
-
- OSL_POSTCOND( isInProperty(), "Could not get data to start a property" );
- OSL_POSTCOND( isInUnhandledProperty(), "Could not mark property as unhandled");
-}
-// -----------------------------------------------------------------------------
-
-void BasicParser::endProperty( )
-{
- OSL_DEBUG_ONLY( dbgUpdateLocation() );
-
- OSL_ENSURE( !isSkipping(), "While skipping, honor wasSkipping() instead of calling endProperty()");
- OSL_ENSURE( isInProperty(), "For non-property nodes, call endNode() instead of endProperty()" );
-
- ensureInNode();
-
- m_aNodes.pop();
- m_bEmpty = false;
-
- m_aValueType = uno::Type();
- m_bInProperty = false;
-
- OSL_POSTCOND( !isInProperty(), "Could not get mark end of property" );
-}
-// -----------------------------------------------------------------------------
-
-uno::Type BasicParser::getActivePropertyType()
-{
- return m_aValueType;
-}
-// -----------------------------------------------------------------------------
-
-bool BasicParser::isInProperty()
-{
- return m_bInProperty;
-}
-// -----------------------------------------------------------------------------
-
-bool BasicParser::isInUnhandledProperty()
-{
- return m_bEmpty && m_bInProperty;
-}
-// -----------------------------------------------------------------------------
-
-void BasicParser::startValueData(const uno::Reference< sax::XAttributeList >& xAttribs)
-{
- OSL_DEBUG_ONLY( dbgUpdateLocation() );
-
- if (!isInProperty())
- raiseParseException( "Configuration XML Parser - Invalid Data: A value may occur only within a property" );
-
- if (m_aValueType.getTypeClass() == uno::TypeClass_ANY)
- raiseParseException( "Configuration XML Parser - Invalid Data: Cannot have values for properties of type 'Any'" );
-
- if (isInValueData())
- raiseParseException( "Configuration XML Parser - Invalid Data: Unexpected element while parsing value data" );
-
- m_pValueData = new ValueData(m_aValueType, m_xTypeConverter);
-
- m_pValueData->setIsNull( getDataParser().isNull(xAttribs) );
-
- m_pValueData->setSeparator( getDataParser().getSeparator(xAttribs) );
-
- OSL_ENSURE( !m_pValueData->hasSeparator() ||
- !m_pValueData->isTypeSet() ||
- m_pValueData->isList(),
- "Warning: Spurious oor:separator on value that is not a list");
- OSL_ENSURE( !m_pValueData->hasSeparator() ||
- !m_pValueData->isNull(),
- "Warning: Spurious oor:separator on value that is not a list");
-
- rtl::OUString aLocale;
- if ( getDataParser().getLanguage(xAttribs,aLocale) )
- m_pValueData->setLocalized( aLocale );
-}
-// -----------------------------------------------------------------------------
-
-bool BasicParser::isInValueData()
-{
- return m_pValueData != NULL;
-}
-// -----------------------------------------------------------------------------
-
-bool BasicParser::isValueDataLocalized()
-{
- OSL_ENSURE(isInValueData(), "There is no value data that could be localized");
-
- return m_pValueData && m_pValueData->isLocalized;
-}
-// -----------------------------------------------------------------------------
-
-rtl::OUString BasicParser::getValueDataLocale()
-{
- OSL_ENSURE(isValueDataLocalized(), "There is no value data or it is not localized");
-
- return m_pValueData->locale;
-}
-// -----------------------------------------------------------------------------
-
-uno::Any BasicParser::getCurrentValue()
-{
- OSL_DEBUG_ONLY( dbgUpdateLocation() );
-
- OSL_ASSERT( isInValueData() );
-
- uno::Any aResult;
-
- if (m_pValueData->isTypeSet())
- try
- {
- aResult = m_pValueData->convertToAny();
- }
- catch (script::CannotConvertException & e)
- {
- this->raiseParseException(uno::makeAny(e),"Configuration XML Parser - Invalid Data: Cannot convert value to type of property" );
- }
- else if (m_pValueData->isNull())
- {
- // nothing to do
- }
- else if (m_pValueData->hasSeparator() || m_pValueData->isList())
- {
- aResult <<= m_pValueData->toStringList();
- }
- else
- {
- aResult <<= m_pValueData->toString();
- }
- return aResult;
-}
-// -----------------------------------------------------------------------------
-
-/// end collecting data for a value
-void BasicParser::endValueData()
-{
- OSL_DEBUG_ONLY( dbgUpdateLocation() );
-
- OSL_ASSERT( isInValueData() );
-
- delete m_pValueData, m_pValueData = NULL;
- m_bEmpty = false;
-
- OSL_POSTCOND( !isInValueData(), "Could not end value data tag" );
- OSL_POSTCOND( !isInUnhandledProperty(), "Could not mark property as handled" );
-}
-// -----------------------------------------------------------------------------
-
-void BasicParser::startSkipping( const rtl::OUString& aName, const uno::Reference< sax::XAttributeList >& /*xAttribs*/ )
-{
- OSL_DEBUG_ONLY( dbgUpdateLocation() );
-
- m_aNodes.push( ElementInfo(aName) );
- ++m_nSkipLevels;
-}
-// -----------------------------------------------------------------------------
-
-bool BasicParser::wasSkipping( const rtl::OUString& aName )
-{
- OSL_DEBUG_ONLY( dbgUpdateLocation() );
-
- if (m_nSkipLevels == 0) return false;
-
- if (m_aNodes.empty())
- raiseParseException( "Configuration XML Parser - Invalid XML: Unexpected end of element (while skipping data)" );
-
- if (aName != m_aNodes.top().name)
- raiseParseException( "Configuration XML Parser - Invalid XML: End tag does not match start tag (while skipping data)" );
-
- --m_nSkipLevels;
- m_aNodes.pop();
-
- return true;
-}
-// -----------------------------------------------------------------------------
-
-bool BasicParser::isSkipping( )
-{
- return m_nSkipLevels != 0;
-}
-// -----------------------------------------------------------------------------
-
-void BasicParser::raiseParseException( uno::Any const & _aTargetException, sal_Char const * _pMsg )
- SAL_THROW((sax::SAXException, uno::RuntimeException))
-{
- OSL_DEBUG_ONLY( dbgUpdateLocation() );
-
- if (_pMsg == 0) _pMsg = "Configuration XML Parser: Invalid Data: ";
-
- rtl::OUString sMessage = rtl::OUString::createFromAscii(_pMsg);
-
- uno::Exception aEx;
- if (_aTargetException >>= aEx)
- sMessage += aEx.Message;
-
- getLogger().error(sMessage,"parse","configuration::xml::BasicParser");
- throw sax::SAXException( sMessage, *this, _aTargetException );
-}
-// -----------------------------------------------------------------------------
-
-void BasicParser::raiseParseException( sal_Char const * _pMsg )
- SAL_THROW((sax::SAXException, uno::RuntimeException))
-{
- OSL_DEBUG_ONLY( dbgUpdateLocation() );
-
- if (_pMsg == 0) _pMsg = "Configuration XML Parser: Invalid XML";
-
- rtl::OUString const sMessage = rtl::OUString::createFromAscii(_pMsg);
-
- getLogger().error(sMessage,"parse","configuration::xml::BasicParser");
- throw sax::SAXException( sMessage, *this, uno::Any() );
-}
-// -----------------------------------------------------------------------------
-
-void BasicParser::raiseParseException( rtl::OUString const & sMessage )
- SAL_THROW((sax::SAXException, uno::RuntimeException))
-{
- OSL_DEBUG_ONLY( dbgUpdateLocation() );
-
- if (sMessage.getLength() == 0) raiseParseException(NULL);
-
- getLogger().error(sMessage,"parse","configuration::xml::BasicParser");
- throw sax::SAXException( sMessage, *this, uno::Any() );
-}
-// -----------------------------------------------------------------------------
-// -----------------------------------------------------------------------------
- } // namespace
-
-// -----------------------------------------------------------------------------
-} // namespace
-