rearranged methods into topics

Signed-off-by: Florian Thienel <florian@thienel.org>
diff --git a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/dom/Document.java b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/dom/Document.java
index e592655..ebe2fa2 100644
--- a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/dom/Document.java
+++ b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/dom/Document.java
@@ -74,6 +74,10 @@
 		addChild(rootElement);
 	}
 
+	/*
+	 * Node
+	 */
+
 	@Override
 	public int getStartOffset() {
 		return 0;
@@ -99,6 +103,10 @@
 		return getDocumentURI();
 	}
 
+	/*
+	 * Document
+	 */
+
 	public void setDocumentURI(final String documentURI) {
 		this.documentURI = documentURI;
 	}
@@ -143,22 +151,6 @@
 		return rootElement;
 	}
 
-	public boolean isUndoEnabled() {
-		return undoEnabled;
-	}
-
-	public void setUndoEnabled(final boolean undoEnabled) {
-		this.undoEnabled = undoEnabled;
-	}
-
-	public void addDocumentListener(final DocumentListener listener) {
-		listeners.add(listener);
-	}
-
-	public void removeDocumentListener(final DocumentListener listener) {
-		listeners.remove(listener);
-	}
-
 	public int getLength() {
 		return getContent().length();
 	}
@@ -167,6 +159,10 @@
 		return getContent().createPosition(offset);
 	}
 
+	/*
+	 * L1 Operations
+	 */
+
 	private boolean canInsertAt(final Element insertionParent, final int offset, final QualifiedName... nodeNames) {
 		return canInsertAt(insertionParent, offset, Arrays.asList(nodeNames));
 	}
@@ -372,6 +368,10 @@
 		fireContentDeleted(new DocumentEvent(this, surroundingElement, range.getStartOffset(), range.length(), edit));
 	}
 
+	/*
+	 * Miscellaneous
+	 */
+
 	public char getCharacterAt(final int offset) {
 		final String text = getContent().getText(new Range(offset, offset));
 		if (text.length() == 0) {
@@ -406,17 +406,17 @@
 	}
 
 	public Element getElementAt(final int offset) {
-		return getContainerElement(getChildNodeAt(offset));
+		return getParentElement(getChildNodeAt(offset));
 	}
 
-	private static Element getContainerElement(final Node node) {
+	private static Element getParentElement(final Node node) {
 		if (node == null) {
 			return null;
 		}
 		if (node instanceof Element) {
 			return (Element) node;
 		}
-		return getContainerElement(node.getParent());
+		return getParentElement(node.getParent());
 	}
 
 	public boolean isElementAt(final int offset) {
@@ -445,6 +445,18 @@
 		return getParentOfRange(range).getChildNodes(range);
 	}
 
+	/*
+	 * Events
+	 */
+
+	public void addDocumentListener(final DocumentListener listener) {
+		listeners.add(listener);
+	}
+
+	public void removeDocumentListener(final DocumentListener listener) {
+		listeners.remove(listener);
+	}
+
 	public void fireAttributeChanged(final DocumentEvent e) {
 		listeners.fireEvent("attributeChanged", e);
 	}
@@ -469,7 +481,17 @@
 		listeners.fireEvent("contentInserted", e);
 	}
 
-	// TODO move undoable edits int L2
+	/*
+	 * Edits
+	 */
+
+	public boolean isUndoEnabled() {
+		return undoEnabled;
+	}
+
+	public void setUndoEnabled(final boolean undoEnabled) {
+		this.undoEnabled = undoEnabled;
+	}
 
 	private class DeleteEdit implements IUndoableEdit {
 
diff --git a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/dom/Element.java b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/dom/Element.java
index 18b0fb2..e34fe5c 100644
--- a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/dom/Element.java
+++ b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/dom/Element.java
@@ -31,7 +31,7 @@
  */
 public class Element extends Parent {
 
-	/**
+	/*
 	 * The xml:base attribute re-defines the base URI for a part of an XML document, according to the XML Base
 	 * Recommendation.
 	 * 
@@ -52,6 +52,23 @@
 		name = qualifiedName;
 	}
 
+	/*
+	 * Node
+	 */
+
+	@Override
+	public String getBaseURI() {
+		final Attribute baseAttribute = getAttribute(XML_BASE_ATTRIBUTE);
+		if (baseAttribute != null) {
+			return baseAttribute.getValue();
+		}
+		return super.getBaseURI();
+	}
+
+	public void setBaseURI(final String baseURI) {
+		setAttribute(XML_BASE_ATTRIBUTE, baseURI);
+	}
+
 	@Override
 	public boolean isKindOf(final Node node) {
 		if (!(node instanceof Element)) {
@@ -70,6 +87,34 @@
 		return visitor.visit(this);
 	}
 
+	/*
+	 * Element Name
+	 */
+
+	public QualifiedName getQualifiedName() {
+		return name;
+	}
+
+	public String getLocalName() {
+		return name.getLocalName();
+	}
+
+	public String getPrefix() {
+		return getNamespacePrefix(name.getQualifier());
+	}
+
+	public String getPrefixedName() {
+		final String prefix = getPrefix();
+		if (prefix == null) {
+			return getLocalName();
+		}
+		return prefix + ":" + getLocalName();
+	}
+
+	/*
+	 * Attributes
+	 */
+
 	public Attribute getAttribute(final String localName) {
 		return getAttribute(qualify(localName));
 	}
@@ -165,71 +210,9 @@
 		return result;
 	}
 
-	public List<Element> getChildElements() {
-		final List<Node> nodes = getChildNodes();
-		final List<Element> elements = new ArrayList<Element>();
-		for (final Node node : nodes) {
-			node.accept(new BaseNodeVisitor() {
-				@Override
-				public void visit(final Element element) {
-					elements.add(element);
-				}
-			});
-		}
-		return elements;
-	}
-
-	public String getLocalName() {
-		return name.getLocalName();
-	}
-
-	public QualifiedName getQualifiedName() {
-		return name;
-	}
-
-	public String getPrefix() {
-		return getNamespacePrefix(name.getQualifier());
-	}
-
-	public String getPrefixedName() {
-		final String prefix = getPrefix();
-		if (prefix == null) {
-			return getLocalName();
-		}
-		return prefix + ":" + getLocalName();
-	}
-
-	public boolean isEmpty() {
-		return getStartOffset() + 1 == getEndOffset();
-	}
-
-	@Override
-	public String toString() {
-
-		final StringBuffer sb = new StringBuffer();
-		sb.append("<");
-		sb.append(getPrefixedName().toString());
-
-		for (final Attribute attribute : getAttributes()) {
-			sb.append(" ");
-			sb.append(attribute.getPrefixedName());
-			sb.append("=\"");
-			sb.append(attribute.getValue());
-			sb.append("\"");
-		}
-
-		sb.append("> (");
-		if (isAssociated()) {
-			sb.append(getStartOffset());
-			sb.append(",");
-			sb.append(getEndOffset());
-		} else {
-			sb.append("n/a");
-		}
-		sb.append(")");
-
-		return sb.toString();
-	}
+	/*
+	 * Element Structure
+	 */
 
 	public Element getParentElement() {
 		return getParentElement(this);
@@ -246,6 +229,24 @@
 		return getParentElement(parent);
 	}
 
+	public List<Element> getChildElements() {
+		final List<Node> nodes = getChildNodes();
+		final List<Element> elements = new ArrayList<Element>();
+		for (final Node node : nodes) {
+			node.accept(new BaseNodeVisitor() {
+				@Override
+				public void visit(final Element element) {
+					elements.add(element);
+				}
+			});
+		}
+		return elements;
+	}
+
+	/*
+	 * Namespaces
+	 */
+
 	public String getNamespaceURI(final String namespacePrefix) {
 		if (namespaceDeclarations.containsKey(namespacePrefix)) {
 			return namespaceDeclarations.get(namespacePrefix);
@@ -352,15 +353,46 @@
 		removeNamespace(null);
 	}
 
-	@Override
-	public String getBaseURI() {
-		final Attribute baseAttribute = getAttribute(XML_BASE_ATTRIBUTE);
-		if (baseAttribute != null) {
-			return baseAttribute.getValue();
-		}
-		return super.getBaseURI();
+	/*
+	 * Miscellaneous
+	 */
+
+	public boolean isEmpty() {
+		return getStartOffset() + 1 == getEndOffset();
 	}
 
+	@Override
+	public String toString() {
+
+		final StringBuffer sb = new StringBuffer();
+		sb.append("<");
+		sb.append(getPrefixedName().toString());
+
+		for (final Attribute attribute : getAttributes()) {
+			sb.append(" ");
+			sb.append(attribute.getPrefixedName());
+			sb.append("=\"");
+			sb.append(attribute.getValue());
+			sb.append("\"");
+		}
+
+		sb.append("> (");
+		if (isAssociated()) {
+			sb.append(getStartOffset());
+			sb.append(",");
+			sb.append(getEndOffset());
+		} else {
+			sb.append("n/a");
+		}
+		sb.append(")");
+
+		return sb.toString();
+	}
+
+	/*
+	 * Edits
+	 */
+
 	private class AttributeChangeEdit implements IUndoableEdit {
 
 		private final QualifiedName name;