blob: e22292df31de36b9a0137ba82ba0b6c1b0b77d8a [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include "XercesWrapperNavigator.hpp"
#include <xalanc/XalanDOM/XalanNode.hpp>
#include <xalanc/XalanDOM/XalanElement.hpp>
#include "XercesAttrWrapper.hpp"
#include "XercesDocumentWrapper.hpp"
#include "XercesTextWrapper.hpp"
#include "XercesDOMWrapperException.hpp"
namespace XALAN_CPP_NAMESPACE {
const XalanDOMString XercesWrapperNavigator::s_emptyString(XalanMemMgrs::getDummyMemMgr());
XercesWrapperNavigator::XercesWrapperNavigator(
XercesDocumentWrapper* theOwnerDocument) :
m_ownerDocument(theOwnerDocument),
m_parentNode(0),
m_previousSibling(0),
m_nextSibling(0),
m_firstChild(0),
m_lastChild(0),
m_index(0)
{
assert(theOwnerDocument != 0);
}
XercesWrapperNavigator::XercesWrapperNavigator(const XercesWrapperNavigator& theSource) :
m_ownerDocument(theSource.m_ownerDocument),
m_parentNode(theSource.m_parentNode),
m_previousSibling(theSource.m_previousSibling),
m_nextSibling(theSource.m_nextSibling),
m_firstChild(theSource.m_firstChild),
m_lastChild(theSource.m_lastChild),
m_index(theSource.m_index)
{
}
XercesWrapperNavigator::~XercesWrapperNavigator()
{
}
XalanNode*
XercesWrapperNavigator::mapNode(const DOMNodeType* theXercesNode) const
{
return m_ownerDocument->mapNode(theXercesNode);
}
XalanAttr*
XercesWrapperNavigator::mapNode(const DOMAttrType* theXercesNode) const
{
return m_ownerDocument->mapNode(theXercesNode);
}
const DOMNodeType*
XercesWrapperNavigator::mapNode(XalanNode* theXalanNode) const
{
return m_ownerDocument->mapNode(theXalanNode);
}
XalanNode*
XercesWrapperNavigator::getParentNode(const DOMNodeType* theXercesNode) const
{
if (m_parentNode == 0)
{
return m_ownerDocument->mapNode(theXercesNode->getParentNode());
}
else
{
return m_parentNode;
}
}
XalanNode*
XercesWrapperNavigator::getPreviousSibling(const DOMNodeType* theXercesNode) const
{
if (m_previousSibling == 0)
{
return m_ownerDocument->mapNode(theXercesNode->getPreviousSibling());
}
else
{
return m_previousSibling;
}
}
XalanNode*
XercesWrapperNavigator::getNextSibling(const DOMNodeType* theXercesNode) const
{
if (m_nextSibling == 0)
{
return m_ownerDocument->mapNode(theXercesNode->getNextSibling());
}
else
{
return m_nextSibling;
}
}
XalanNode*
XercesWrapperNavigator::getFirstChild(const DOMNodeType* theXercesNode) const
{
if (m_firstChild == 0)
{
return m_ownerDocument->mapNode(theXercesNode->getFirstChild());
}
else
{
return m_firstChild;
}
}
XalanNode*
XercesWrapperNavigator::getLastChild(const DOMNodeType* theXercesNode) const
{
if (m_lastChild == 0)
{
return m_ownerDocument->mapNode(theXercesNode->getLastChild());
}
else
{
return m_lastChild;
}
}
XalanElement*
XercesWrapperNavigator::getOwnerElement(const DOMAttrType* theXercesAttr) const
{
assert(theXercesAttr != 0);
if (m_parentNode != 0)
{
assert(m_parentNode->getNodeType() == XalanNode::ELEMENT_NODE);
return static_cast<XalanElement*>(m_parentNode);
}
else
{
return m_ownerDocument->mapNode(theXercesAttr->getOwnerElement());
}
}
const XalanDOMString&
XercesWrapperNavigator::getPooledString(const XMLCh* theString) const
{
if (theString == 0)
{
return s_emptyString;
}
else
{
return m_ownerDocument->getPooledString(theString, XalanDOMString::length(theString));
}
}
}