git-svn-id: https://svn.middleware.georgetown.edu/cpp-xmltooling/branches/REL_1@711
de75baf8-a10c-0410-a50a-
987c0e22f00f
m_attributeMap[qualifiedName]=XMLString::replicate(value);
if (ID)
m_idAttribute = m_attributeMap.find(qualifiedName);
m_attributeMap[qualifiedName]=XMLString::replicate(value);
if (ID)
m_idAttribute = m_attributeMap.find(qualifiedName);
- Namespace newNamespace(qualifiedName.getNamespaceURI(), qualifiedName.getPrefix());
+ Namespace newNamespace(qualifiedName.getNamespaceURI(), qualifiedName.getPrefix(), false, Namespace::VisiblyUsed);
addNamespace(newNamespace);
}
}
addNamespace(newNamespace);
}
}
setAttribute(qualifiedName, value.getLocalPart());
}
setAttribute(qualifiedName, value.getLocalPart());
}
- // Attach a non-visibly used namespace.
- Namespace newNamespace(value.getNamespaceURI(), value.getPrefix(), false, false);
+ Namespace newNamespace(value.getNamespaceURI(), value.getPrefix(), false, Namespace::NonVisiblyUsed);
addNamespace(newNamespace);
}
addNamespace(newNamespace);
}
m_schemaLocation(NULL), m_noNamespaceSchemaLocation(NULL), m_nil(xmlconstants::XML_BOOL_NULL),
m_parent(NULL), m_elementQname(nsURI, localName, prefix), m_typeQname(NULL)
{
m_schemaLocation(NULL), m_noNamespaceSchemaLocation(NULL), m_nil(xmlconstants::XML_BOOL_NULL),
m_parent(NULL), m_elementQname(nsURI, localName, prefix), m_typeQname(NULL)
{
- addNamespace(Namespace(nsURI, prefix));
+ addNamespace(Namespace(nsURI, prefix, false, Namespace::VisiblyUsed));
if (schemaType) {
m_typeQname = new QName(*schemaType);
if (schemaType) {
m_typeQname = new QName(*schemaType);
- // Attach a non-visibly used namespace.
- addNamespace(Namespace(m_typeQname->getNamespaceURI(), m_typeQname->getPrefix(), false, false));
+ addNamespace(Namespace(m_typeQname->getNamespaceURI(), m_typeQname->getPrefix(), false, Namespace::NonVisiblyUsed));
else {
if (ns.alwaysDeclare())
const_cast<Namespace&>(*i).setAlwaysDeclare(true);
else {
if (ns.alwaysDeclare())
const_cast<Namespace&>(*i).setAlwaysDeclare(true);
- if (ns.visiblyUsed())
- const_cast<Namespace&>(*i).setVisiblyUsed(true);
+ switch (ns.usage()) {
+ case Namespace::Indeterminate:
+ break;
+ case Namespace::VisiblyUsed:
+ const_cast<Namespace&>(*i).setUsage(Namespace::VisiblyUsed);
+ break;
+ case Namespace::NonVisiblyUsed:
+ if (i->usage() == Namespace::Indeterminate)
+ const_cast<Namespace&>(*i).setUsage(Namespace::NonVisiblyUsed);
+ break;
+ }
if (!oldValue) {
if (newValue) {
releaseThisandParentDOM();
if (!oldValue) {
if (newValue) {
releaseThisandParentDOM();
- // Attach a non-visibly used namespace.
- addNamespace(Namespace(newValue->getNamespaceURI(), newValue->getPrefix(), false, false));
+ addNamespace(Namespace(newValue->getNamespaceURI(), newValue->getPrefix(), false, Namespace::NonVisiblyUsed));
return new QName(*newValue);
}
return NULL;
return new QName(*newValue);
}
return NULL;
releaseThisandParentDOM();
if (newValue) {
// Attach a non-visibly used namespace.
releaseThisandParentDOM();
if (newValue) {
// Attach a non-visibly used namespace.
- addNamespace(Namespace(newValue->getNamespaceURI(), newValue->getPrefix(), false, false));
+ addNamespace(Namespace(newValue->getNamespaceURI(), newValue->getPrefix(), false, Namespace::NonVisiblyUsed));
return new QName(*newValue);
}
return NULL;
return new QName(*newValue);
}
return NULL;
- * Representing XML namespace attributes
+ * Representing XML namespace attributes.
using xercesc::XMLString;
using xercesc::XMLString;
-Namespace::Namespace(const XMLCh* uri, const XMLCh* prefix, bool alwaysDeclare, bool visiblyUsed)
- : m_pinned(alwaysDeclare), m_visiblyUsed(visiblyUsed)
+Namespace::Namespace(const XMLCh* uri, const XMLCh* prefix, bool alwaysDeclare, namespace_usage_t usage)
+ : m_pinned(alwaysDeclare), m_usage(usage)
{
setNamespaceURI(uri);
setNamespacePrefix(prefix);
{
setNamespaceURI(uri);
setNamespacePrefix(prefix);
/**
* @file xmltooling/Namespace.h
*
/**
* @file xmltooling/Namespace.h
*
- * Representing XML namespace attributes
+ * Representing XML namespace attributes.
*/
#if !defined(__xmltooling_namespace_h__)
*/
#if !defined(__xmltooling_namespace_h__)
- * A data structure for encapsulating XML Namespace attributes
+ * A data structure for encapsulating XML Namespace attributes.
*/
class XMLTOOL_API Namespace
{
public:
/**
*/
class XMLTOOL_API Namespace
{
public:
/**
+ * Tri-state indicator of namespace usage.
+ */
+ enum namespace_usage_t {
+ Indeterminate,
+ NonVisiblyUsed,
+ VisiblyUsed
+ };
+
+ /**
* Constructor
* @param uri namespace URI
* @param prefix namespace prefix (without the colon)
* @param alwaysDeclare true iff the namespace should always be declared regardless of in-scope declarations
* Constructor
* @param uri namespace URI
* @param prefix namespace prefix (without the colon)
* @param alwaysDeclare true iff the namespace should always be declared regardless of in-scope declarations
- * @param visiblyUsed true iff the namespace is visibly used by an XMLObject its attached to
+ * @param usage indicates usage of namespace in the context of an XMLObject
- Namespace(const XMLCh* uri=NULL, const XMLCh* prefix=NULL, bool alwaysDeclare=false, bool visiblyUsed=true);
+ Namespace(const XMLCh* uri=NULL, const XMLCh* prefix=NULL, bool alwaysDeclare=false, namespace_usage_t usage=Indeterminate);
const bool alwaysDeclare() const { return m_pinned; }
/**
const bool alwaysDeclare() const { return m_pinned; }
/**
- * Returns true iff the namespace is visibly used by an XMLObject its attached to
- * @return the visiblyUsed setting
+ * Returns the usage of the namespace by an XMLObject
+ * @return the usage setting
- const bool visiblyUsed() const { return m_visiblyUsed; }
+ const namespace_usage_t usage() const { return m_usage; }
/**
* Sets the namespace prefix
/**
* Sets the namespace prefix
void setAlwaysDeclare(bool alwaysDeclare) { m_pinned = alwaysDeclare; }
/**
void setAlwaysDeclare(bool alwaysDeclare) { m_pinned = alwaysDeclare; }
/**
- * Sets the visiblyUsed property
- * @param visiblyUsed true iff the namespace is visibly used by an XMLObject its attached to
+ * Sets the usage property
+ * @param usage usage of the namespace by an XMLObject
- void setVisiblyUsed(bool visiblyUsed) { m_visiblyUsed = visiblyUsed; }
+ void setUsage(namespace_usage_t usage) { m_usage = usage; }
- bool m_pinned,m_visiblyUsed;
+ bool m_pinned;
+ namespace_usage_t m_usage;
xstring m_uri;
xstring m_prefix;
};
xstring m_uri;
xstring m_prefix;
};
targetElement->setAttributeNS(XSI_NS, _nil, xmlconstants::XML_ZERO);
break;
}
targetElement->setAttributeNS(XSI_NS, _nil, xmlconstants::XML_ZERO);
break;
}
- m_log.debug("adding XSI namespace to list of namespaces used by XMLObject");
- addNamespace(Namespace(XSI_NS, XSI_PREFIX));
+ m_log.debug("adding XSI namespace to list of namespaces visibly used by XMLObject");
+ addNamespace(Namespace(XSI_NS, XSI_PREFIX, false, Namespace::VisiblyUsed));
}
marshallElementType(targetElement);
}
marshallElementType(targetElement);
if (xsivalue != typeLocalName)
XMLString::release(&xsivalue);
if (xsivalue != typeLocalName)
XMLString::release(&xsivalue);
- m_log.debug("adding XSI namespace to list of namespaces used by XMLObject");
- addNamespace(Namespace(XSI_NS, XSI_PREFIX));
+ m_log.debug("adding XSI namespace to list of namespaces visibly used by XMLObject");
+ addNamespace(Namespace(XSI_NS, XSI_PREFIX, false, Namespace::VisiblyUsed));
if (XMLString::equals(nsuri,XMLNS_NS)) {
if (XMLString::equals(attribute->getLocalName(),XMLNS_PREFIX)) {
m_log.debug("found default namespace declaration, adding it to the list of namespaces on the XMLObject");
if (XMLString::equals(nsuri,XMLNS_NS)) {
if (XMLString::equals(attribute->getLocalName(),XMLNS_PREFIX)) {
m_log.debug("found default namespace declaration, adding it to the list of namespaces on the XMLObject");
- addNamespace(Namespace(attribute->getValue(), NULL, true, false));
+ addNamespace(Namespace(attribute->getValue(), NULL, true));
}
else if (XMLString::equals(attribute->getLocalName(),XML_PREFIX) && XMLString::equals(attribute->getNodeValue(),XML_NS)) {
m_log.debug("found standard xml prefix declaration, ignoring as superfluous");
}
else {
m_log.debug("found namespace declaration, adding it to the list of namespaces on the XMLObject");
}
else if (XMLString::equals(attribute->getLocalName(),XML_PREFIX) && XMLString::equals(attribute->getNodeValue(),XML_NS)) {
m_log.debug("found standard xml prefix declaration, ignoring as superfluous");
}
else {
m_log.debug("found namespace declaration, adding it to the list of namespaces on the XMLObject");
- addNamespace(Namespace(attribute->getValue(), attribute->getLocalName(), true, false));
+ addNamespace(Namespace(attribute->getValue(), attribute->getLocalName(), true));
continue;
}
// Note that the prefix is visibly used.
continue;
}
// Note that the prefix is visibly used.
- addNamespace(Namespace(nsuri, attribute->getPrefix()));
+ addNamespace(Namespace(nsuri, attribute->getPrefix(), false, Namespace::VisiblyUsed));
}
else if (nsuri && !XMLString::equals(nsuri,XML_NS)) {
}
else if (nsuri && !XMLString::equals(nsuri,XML_NS)) {
- m_log.debug("found namespace-qualified attribute, adding prefix to the list of namespaces on the XMLObject");
- addNamespace(Namespace(nsuri, attribute->getPrefix()));
+ m_log.debug("found namespace-qualified attribute, adding prefix to the list of visible namespaces on the XMLObject");
+ addNamespace(Namespace(nsuri, attribute->getPrefix(), false, Namespace::VisiblyUsed));
}
m_log.debug("processing generic attribute");
}
m_log.debug("processing generic attribute");
bool cond1=false, cond2=false, cond3 = false;
for (set<Namespace>::const_iterator ns = namespaces.begin(); ns != namespaces.end(); ++ns) {
if (XMLString::equals(ns->getNamespacePrefix(), SimpleXMLObject::NAMESPACE_PREFIX)) {
bool cond1=false, cond2=false, cond3 = false;
for (set<Namespace>::const_iterator ns = namespaces.begin(); ns != namespaces.end(); ++ns) {
if (XMLString::equals(ns->getNamespacePrefix(), SimpleXMLObject::NAMESPACE_PREFIX)) {
- TSM_ASSERT("'test' namespace was visibly used", !ns->visiblyUsed());
+ TSM_ASSERT("'test' namespace was visibly used", ns->usage() != Namespace::VisiblyUsed);
cond1 = true;
}
else if (XMLString::equals(ns->getNamespacePrefix(), TEST2_PREFIX)) {
cond1 = true;
}
else if (XMLString::equals(ns->getNamespacePrefix(), TEST2_PREFIX)) {
- TSM_ASSERT("'test2' namespace was visibly used", !ns->visiblyUsed());
+ TSM_ASSERT("'test2' namespace was visibly used", ns->usage() != Namespace::VisiblyUsed);
cond2 = true;
}
else if (XMLString::equals(ns->getNamespacePrefix(), &chNull)) {
cond2 = true;
}
else if (XMLString::equals(ns->getNamespacePrefix(), &chNull)) {
- TSM_ASSERT("Default namespace was not visibly used", ns->visiblyUsed());
+ TSM_ASSERT("Default namespace was not visibly used", ns->usage() == Namespace::VisiblyUsed);
bool cond1=false, cond2=false, cond3=false;
for (set<Namespace>::const_iterator ns = namespaces.begin(); ns != namespaces.end(); ++ns) {
if (XMLString::equals(ns->getNamespacePrefix(), SimpleXMLObject::NAMESPACE_PREFIX)) {
bool cond1=false, cond2=false, cond3=false;
for (set<Namespace>::const_iterator ns = namespaces.begin(); ns != namespaces.end(); ++ns) {
if (XMLString::equals(ns->getNamespacePrefix(), SimpleXMLObject::NAMESPACE_PREFIX)) {
- TSM_ASSERT("'test' namespace was visibly used", !ns->visiblyUsed());
+ TSM_ASSERT("'test' namespace was visibly used", ns->usage() != Namespace::VisiblyUsed);
cond1 = true;
}
else if (XMLString::equals(ns->getNamespacePrefix(), &chNull)) {
cond1 = true;
}
else if (XMLString::equals(ns->getNamespacePrefix(), &chNull)) {
- TSM_ASSERT("Default namespace was not visibly used", ns->visiblyUsed());
+ TSM_ASSERT("Default namespace was not visibly used", ns->usage() == Namespace::VisiblyUsed);