-/*
- * Copyright 2001-2005 Internet2
- *
- * Licensed 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
+/**
+ * Licensed to the University Corporation for Advanced Internet
+ * Development, Inc. (UCAID) under one or more contributor license
+ * agreements. See the NOTICE file distributed with this work for
+ * additional information regarding copyright ownership.
*
- * http://www.apache.org/licenses/LICENSE-2.0
+ * UCAID 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
*
- * 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.
+ * 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 <cxxtest/TestSuite.h>
+#include <xmltooling/AbstractAttributeExtensibleXMLObject.h>
#include <xmltooling/AbstractComplexElement.h>
#include <xmltooling/ElementProxy.h>
#include <xmltooling/exceptions.h>
#endif
using namespace xmltooling;
+using namespace xercesc;
using namespace std;
extern string data_path;
#endif
class SimpleXMLObject
- : public AbstractComplexElement,
+ : public AbstractAttributeExtensibleXMLObject,
+ public AbstractComplexElement,
public AbstractDOMCachingXMLObject,
public AbstractXMLObjectMarshaller,
public AbstractXMLObjectUnmarshaller
{
protected:
- SimpleXMLObject(const SimpleXMLObject& src) : AbstractXMLObject(src), AbstractDOMCachingXMLObject(src),
- m_id(XMLString::replicate(src.m_id)), m_value(XMLString::replicate(src.m_value)) {
+ SimpleXMLObject(const SimpleXMLObject& src)
+ : AbstractXMLObject(src), AbstractAttributeExtensibleXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src),
+ m_id(XMLString::replicate(src.m_id)) {
#ifndef XMLTOOLING_NO_XMLSEC
- m_children.push_back(NULL);
+ m_children.push_back(nullptr);
m_signature=m_children.begin();
#endif
VectorOf(SimpleXMLObject) mine=getSimpleXMLObjects();
for (vector<SimpleXMLObject*>::const_iterator i=src.m_simples.begin(); i!=src.m_simples.end(); i++) {
- mine.push_back((*i) ? (*i)->clone() : NULL);
+ mine.push_back(dynamic_cast<SimpleXMLObject*>((*i)->clone()));
}
}
static const XMLCh ID_ATTRIB_NAME[];
SimpleXMLObject(
- const XMLCh* nsURI=NULL, const XMLCh* localName=NULL, const XMLCh* prefix=NULL, const QName* schemaType=NULL
- ) : AbstractXMLObject(nsURI, localName, prefix, schemaType), m_id(NULL), m_value(NULL) {
+ const XMLCh* nsURI=nullptr, const XMLCh* localName=nullptr, const XMLCh* prefix=nullptr, const xmltooling::QName* schemaType=nullptr
+ ) : AbstractXMLObject(nsURI, localName, prefix, schemaType), m_id(nullptr) {
#ifndef XMLTOOLING_NO_XMLSEC
- m_children.push_back(NULL);
+ m_children.push_back(nullptr);
m_signature=m_children.begin();
#endif
}
virtual ~SimpleXMLObject() {
XMLString::release(&m_id);
- XMLString::release(&m_value);
}
- SimpleXMLObject* clone() const {
+ XMLObject* clone() const {
auto_ptr<XMLObject> domClone(AbstractDOMCachingXMLObject::clone());
SimpleXMLObject* ret=dynamic_cast<SimpleXMLObject*>(domClone.get());
if (ret) {
const XMLCh* getId() const { return m_id; }
void setId(const XMLCh* id) { m_id=prepareForAssignment(m_id,id); }
- const XMLCh* getValue() const { return m_value; }
- void setValue(const XMLCh* value) { m_value=prepareForAssignment(m_value,value); }
+ const XMLCh* getValue() const { return getTextContent(); }
+ void setValue(const XMLCh* value) { setTextContent(value); }
#ifndef XMLTOOLING_NO_XMLSEC
Signature* getSignature() const {
}
protected:
- void marshallAttributes(DOMElement* domElement) const {
+ void marshallAttributes(xercesc::DOMElement* domElement) const {
if(getId()) {
- domElement->setAttributeNS(NULL, SimpleXMLObject::ID_ATTRIB_NAME, getId());
- domElement->setIdAttributeNS(NULL, SimpleXMLObject::ID_ATTRIB_NAME);
- }
- }
-
- void marshallElementContent(DOMElement* domElement) const {
- if(getValue()) {
- domElement->setTextContent(getValue());
+ domElement->setAttributeNS(nullptr, SimpleXMLObject::ID_ATTRIB_NAME, getId());
+#ifdef XMLTOOLING_XERCESC_BOOLSETIDATTRIBUTE
+ domElement->setIdAttributeNS(nullptr, SimpleXMLObject::ID_ATTRIB_NAME, true);
+#else
+ domElement->setIdAttributeNS(nullptr, SimpleXMLObject::ID_ATTRIB_NAME);
+#endif
}
+ marshallExtensionAttributes(domElement);
}
- void processChildElement(XMLObject* childXMLObject, const DOMElement* root) {
+ void processChildElement(XMLObject* childXMLObject, const xercesc::DOMElement* root) {
SimpleXMLObject* simple=dynamic_cast<SimpleXMLObject*>(childXMLObject);
if (simple) {
getSimpleXMLObjects().push_back(simple);
throw UnmarshallingException("Unknown child element cannot be added to parent object.");
}
- void processAttribute(const DOMAttr* attribute) {
- if (XMLHelper::isNodeNamed(attribute, NULL, SimpleXMLObject::ID_ATTRIB_NAME))
+ void processAttribute(const xercesc::DOMAttr* attribute) {
+ if (XMLHelper::isNodeNamed(attribute, nullptr, SimpleXMLObject::ID_ATTRIB_NAME)) {
setId(attribute->getValue());
- else
- throw UnmarshallingException("Unknown attribute cannot be processed by parent object.");
- }
-
- void processElementContent(const XMLCh* elementContent) {
- setValue(elementContent);
+ return;
+ }
+ unmarshallExtensionAttribute(attribute);
}
private:
XMLCh* m_id;
- XMLCh* m_value;
vector<SimpleXMLObject*> m_simples;
#ifndef XMLTOOLING_NO_XMLSEC
list<XMLObject*>::iterator m_signature;
class SimpleXMLObjectBuilder : public XMLObjectBuilder
{
public:
- SimpleXMLObject* buildObject() const {
+ XMLObject* buildObject() const {
return buildObject(SimpleXMLObject::NAMESPACE, SimpleXMLObject::LOCAL_NAME, SimpleXMLObject::NAMESPACE_PREFIX);
}
- SimpleXMLObject* buildObject(
- const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix=NULL, const QName* schemaType=NULL
+ XMLObject* buildObject(
+ const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix=nullptr, const xmltooling::QName* schemaType=nullptr
) const {
return new SimpleXMLObject(nsURI, localName, prefix, schemaType);
}
- static SimpleXMLObject* newSimpleXMLObject() {\r
- const SimpleXMLObjectBuilder* b = dynamic_cast<const SimpleXMLObjectBuilder*>(\r
- XMLObjectBuilder::getBuilder(QName(SimpleXMLObject::NAMESPACE,SimpleXMLObject::LOCAL_NAME))\r
- );\r
- if (b)\r
- return b->buildObject();\r
- throw XMLObjectException("Unable to obtain typed builder for SimpleXMLObject.");\r
- }\r
+ static SimpleXMLObject* buildSimpleXMLObject() {
+ const SimpleXMLObjectBuilder* b = dynamic_cast<const SimpleXMLObjectBuilder*>(
+ XMLObjectBuilder::getBuilder(xmltooling::QName(SimpleXMLObject::NAMESPACE,SimpleXMLObject::LOCAL_NAME))
+ );
+ if (b)
+ return dynamic_cast<SimpleXMLObject*>(b->buildObject());
+ throw XMLObjectException("Unable to obtain typed builder for SimpleXMLObject.");
+ }
};
#if defined (_MSC_VER)