DocumentFragment is a Parent
Signed-off-by: Florian Thienel <florian@thienel.org>
diff --git a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/dom/BaseNodeVisitor.java b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/dom/BaseNodeVisitor.java
index ae0d4d9..fd893ce 100644
--- a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/dom/BaseNodeVisitor.java
+++ b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/dom/BaseNodeVisitor.java
@@ -18,11 +18,15 @@
*/
public class BaseNodeVisitor implements INodeVisitor {
- public void visit(final Element element) {
+ public void visit(final Document document) {
// ignore
}
- public void visit(final Document document) {
+ public void visit(final DocumentFragment fragment) {
+ // ignore
+ }
+
+ public void visit(final Element element) {
// ignore
}
diff --git a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/dom/DocumentFragment.java b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/dom/DocumentFragment.java
index ba1feec..71e3ccf 100644
--- a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/dom/DocumentFragment.java
+++ b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/dom/DocumentFragment.java
@@ -19,10 +19,7 @@
/**
* Represents a fragment of an XML document.
*/
-public class DocumentFragment {
-
- private final Content content;
- private final List<Node> nodes;
+public class DocumentFragment extends Parent {
/**
* @param content
@@ -31,21 +28,19 @@
* Elements that make up this fragment.
*/
public DocumentFragment(final Content content, final List<Node> nodes) {
- this.content = content;
- this.nodes = nodes;
- }
-
- public Content getContent() {
- return content;
+ associate(content, 0, content.length() - 1);
+ for (final Node node : nodes) {
+ addChild(node);
+ }
}
public int getLength() {
- return content.length();
+ return getContent().length();
}
public List<Element> getElements() {
final List<Element> elements = new ArrayList<Element>();
- for (final Node node : nodes) {
+ for (final Node node : getNodes()) {
node.accept(new BaseNodeVisitor() {
@Override
public void visit(final Element element) {
@@ -71,7 +66,17 @@
}
public List<Node> getNodes() {
- return Document.createNodeList(getContent(), 0, getContent().length(), getElements());
+ return getChildNodes();
+ }
+
+ @Override
+ public String getBaseURI() {
+ return null;
+ }
+
+ @Override
+ public void accept(final INodeVisitor visitor) {
+ visitor.visit(this);
}
}
diff --git a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/dom/INodeVisitor.java b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/dom/INodeVisitor.java
index 84ea9db..43fad01 100644
--- a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/dom/INodeVisitor.java
+++ b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/dom/INodeVisitor.java
@@ -19,10 +19,12 @@
*/
public interface INodeVisitor {
- void visit(Element element);
-
void visit(Document document);
+ void visit(DocumentFragment fragment);
+
+ void visit(Element element);
+
void visit(Text text);
}