1//
2// AbstractNode.h
3//
4// Library: XML
5// Package: DOM
6// Module: DOM
7//
8// Definition of the AbstractNode class.
9//
10// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH.
11// and Contributors.
12//
13// SPDX-License-Identifier: BSL-1.0
14//
15
16
17#ifndef DOM_AbstractNode_INCLUDED
18#define DOM_AbstractNode_INCLUDED
19
20
21#include "Poco/XML/XML.h"
22#include "Poco/DOM/Node.h"
23#include "Poco/DOM/MutationEvent.h"
24#include "Poco/XML/XMLString.h"
25
26
27namespace Poco {
28namespace XML {
29
30
31class AbstractContainerNode;
32class Attr;
33class EventDispatcher;
34
35
36class XML_API AbstractNode: public Node
37 /// AbstractNode provides a basic implementation
38 /// of the Node interface for all types of nodes
39 /// that do not contain other nodes.
40{
41public:
42 // Node
43 const XMLString& nodeName() const;
44 const XMLString& getNodeValue() const;
45 void setNodeValue(const XMLString& value);
46 Node* parentNode() const;
47 NodeList* childNodes() const;
48 Node* firstChild() const;
49 Node* lastChild() const;
50 Node* previousSibling() const;
51 Node* nextSibling() const;
52 NamedNodeMap* attributes() const;
53 Document* ownerDocument() const;
54 Node* insertBefore(Node* newChild, Node* refChild);
55 Node* replaceChild(Node* newChild, Node* oldChild);
56 Node* removeChild(Node* oldChild);
57 Node* appendChild(Node* newChild);
58 bool hasChildNodes() const;
59 Node* cloneNode(bool deep) const;
60 void normalize();
61 bool isSupported(const XMLString& feature, const XMLString& version) const;
62 const XMLString& namespaceURI() const;
63 XMLString prefix() const;
64 const XMLString& localName() const;
65 bool hasAttributes() const;
66
67 // EventTarget
68 void addEventListener(const XMLString& type, EventListener* listener, bool useCapture);
69 void removeEventListener(const XMLString& type, EventListener* listener, bool useCapture);
70 bool dispatchEvent(Event* evt);
71
72 // Extensions
73 XMLString innerText() const;
74 Node* getNodeByPath(const XMLString& path) const;
75 Node* getNodeByPathNS(const XMLString& path, const NSMap& nsMap) const;
76
77 virtual void autoRelease();
78
79protected:
80 AbstractNode(Document* pOwnerDocument);
81 AbstractNode(Document* pOwnerDocument, const AbstractNode& node);
82 ~AbstractNode();
83
84 virtual Node* copyNode(bool deep, Document* pOwnerDocument) const = 0;
85
86 virtual bool events() const;
87 virtual bool eventsSuspended() const;
88 void captureEvent(Event* evt);
89 void bubbleEvent(Event* evt);
90 void dispatchSubtreeModified();
91 void dispatchNodeInserted();
92 void dispatchNodeRemoved();
93 virtual void dispatchNodeRemovedFromDocument();
94 virtual void dispatchNodeInsertedIntoDocument();
95 void dispatchAttrModified(Attr* pAttr, MutationEvent::AttrChangeType changeType, const XMLString& prevValue, const XMLString& newValue);
96 void dispatchCharacterDataModified(const XMLString& prevValue, const XMLString& newValue);
97 void setOwnerDocument(Document* pOwnerDocument);
98
99 static const XMLString EMPTY_STRING;
100
101private:
102 AbstractNode();
103
104 AbstractContainerNode* _pParent;
105 AbstractNode* _pNext;
106 Document* _pOwner;
107 EventDispatcher* _pEventDispatcher;
108
109 static const XMLString NODE_NAME;
110
111 friend class AbstractContainerNode;
112 friend class Document;
113 friend class DocumentFragment;
114 friend class Element;
115 friend class Attr;
116 friend class CharacterData;
117 friend class DOMBuilder;
118 friend class NodeAppender;
119};
120
121
122} } // namespace Poco::XML
123
124
125#endif // DOM_AbstractNode_INCLUDED
126