do not reveal the DOMController to the outside

Signed-off-by: Florian Thienel <florian@thienel.org>
diff --git a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/widget/DOMController.java b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/widget/DOMController.java
index 04e68d6..aaaef98 100644
--- a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/widget/DOMController.java
+++ b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/widget/DOMController.java
@@ -18,6 +18,7 @@
 import org.eclipse.vex.core.internal.visualization.IBoxModelBuilder;
 import org.eclipse.vex.core.provisional.dom.AttributeChangeEvent;
 import org.eclipse.vex.core.provisional.dom.ContentChangeEvent;
+import org.eclipse.vex.core.provisional.dom.DocumentValidationException;
 import org.eclipse.vex.core.provisional.dom.IComment;
 import org.eclipse.vex.core.provisional.dom.IDocument;
 import org.eclipse.vex.core.provisional.dom.IDocumentListener;
@@ -121,19 +122,22 @@
 		moveCursor(toOffset(cursor.getOffset() + 1));
 	}
 
-	public void insertElement(final QualifiedName elementName) {
+	public IElement insertElement(final QualifiedName elementName) throws DocumentValidationException {
 		final IElement element = document.insertElement(cursor.getOffset(), elementName);
 		moveCursor(toOffset(element.getEndOffset()));
+		return element;
 	}
 
-	public void insertComment() {
+	public IComment insertComment() throws DocumentValidationException {
 		final IComment comment = document.insertComment(cursor.getOffset());
 		moveCursor(toOffset(comment.getEndOffset()));
+		return comment;
 	}
 
-	public void insertProcessingInstruction(final String target) {
+	public IProcessingInstruction insertProcessingInstruction(final String target) {
 		final IProcessingInstruction pi = document.insertProcessingInstruction(cursor.getOffset(), target);
 		moveCursor(toOffset(pi.getEndOffset()));
+		return pi;
 	}
 
 }
diff --git a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/widget/swt/BoxWidget.java b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/widget/swt/BoxWidget.java
index 4ee642c..b0e95ef 100644
--- a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/widget/swt/BoxWidget.java
+++ b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/widget/swt/BoxWidget.java
@@ -19,6 +19,7 @@
 
 import org.eclipse.core.runtime.Assert;
 import org.eclipse.core.runtime.ListenerList;
+import org.eclipse.core.runtime.QualifiedName;
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.ISelectionChangedListener;
 import org.eclipse.jface.viewers.ISelectionProvider;
@@ -41,13 +42,19 @@
 import org.eclipse.vex.core.internal.cursor.Cursor;
 import org.eclipse.vex.core.internal.cursor.ICursorMove;
 import org.eclipse.vex.core.internal.cursor.ICursorPositionListener;
+import org.eclipse.vex.core.internal.undo.CannotRedoException;
 import org.eclipse.vex.core.internal.visualization.IBoxModelBuilder;
 import org.eclipse.vex.core.internal.widget.BalancingSelector;
 import org.eclipse.vex.core.internal.widget.BoxView;
 import org.eclipse.vex.core.internal.widget.DOMController;
 import org.eclipse.vex.core.internal.widget.IRenderer;
 import org.eclipse.vex.core.internal.widget.IViewPort;
+import org.eclipse.vex.core.internal.widget.ReadOnlyException;
+import org.eclipse.vex.core.provisional.dom.DocumentValidationException;
+import org.eclipse.vex.core.provisional.dom.IComment;
 import org.eclipse.vex.core.provisional.dom.IDocument;
+import org.eclipse.vex.core.provisional.dom.IElement;
+import org.eclipse.vex.core.provisional.dom.IProcessingInstruction;
 
 /**
  * A widget to display the new box model.
@@ -97,10 +104,6 @@
 		controller.setBoxModelBuilder(visualizationChain);
 	}
 
-	public DOMController getDOMController() {
-		return controller;
-	}
-
 	private void connectDispose() {
 		addDisposeListener(new DisposeListener() {
 			@Override
@@ -276,6 +279,22 @@
 		};
 	}
 
+	public void refresh() {
+		controller.rebuildBoxModel();
+	}
+
+	public IElement insertElement(final QualifiedName elementName) throws DocumentValidationException {
+		return controller.insertElement(elementName);
+	}
+
+	public IComment insertComment() throws DocumentValidationException {
+		return controller.insertComment();
+	}
+
+	public IProcessingInstruction insertProcessingInstruction(final String target) throws CannotRedoException, ReadOnlyException {
+		return controller.insertProcessingInstruction(target);
+	}
+
 	private final class ViewPort implements IViewPort {
 		@Override
 		public void reconcile(final int maximumHeight) {
@@ -299,4 +318,5 @@
 			return new Rectangle(0, getVerticalBar().getSelection(), getSize().x, getSize().y);
 		}
 	}
+
 }
diff --git a/org.eclipse.vex.ui/src/org/eclipse/vex/ui/boxview/BoxDemoView.java b/org.eclipse.vex.ui/src/org/eclipse/vex/ui/boxview/BoxDemoView.java
index decddb7..729da7a 100644
--- a/org.eclipse.vex.ui/src/org/eclipse/vex/ui/boxview/BoxDemoView.java
+++ b/org.eclipse.vex.ui/src/org/eclipse/vex/ui/boxview/BoxDemoView.java
@@ -14,6 +14,9 @@
 import static org.eclipse.vex.core.internal.core.TextUtils.CURRENCY_SIGN;
 import static org.eclipse.vex.core.internal.core.TextUtils.PARAGRAPH_SIGN;
 import static org.eclipse.vex.core.internal.core.TextUtils.RAQUO;
+import static org.eclipse.vex.core.internal.io.UniversalTestDocument.ANCHOR;
+import static org.eclipse.vex.core.internal.io.UniversalTestDocument.B;
+import static org.eclipse.vex.core.internal.io.UniversalTestDocument.I;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -29,7 +32,6 @@
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.Path;
-import org.eclipse.core.runtime.QualifiedName;
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.ISelectionChangedListener;
 import org.eclipse.jface.viewers.SelectionChangedEvent;
@@ -48,7 +50,6 @@
 import org.eclipse.vex.core.internal.css.StyleSheetReader;
 import org.eclipse.vex.core.internal.io.UniversalTestDocument;
 import org.eclipse.vex.core.internal.visualization.CssBasedBoxModelBuilder;
-import org.eclipse.vex.core.internal.widget.DOMController;
 import org.eclipse.vex.core.internal.widget.swt.BoxWidget;
 import org.eclipse.vex.core.internal.widget.swt.IVexSelection;
 import org.eclipse.vex.core.provisional.dom.ContentRange;
@@ -223,33 +224,27 @@
 	}
 
 	public void rebuildBoxModel() {
-		final DOMController controller = boxWidget.getDOMController();
-		controller.rebuildBoxModel();
+		boxWidget.refresh();
 	}
 
 	public void insertBold() {
-		final DOMController controller = boxWidget.getDOMController();
-		controller.insertElement(new QualifiedName(null, "b"));
+		boxWidget.insertElement(B);
 	}
 
 	public void insertItalic() {
-		final DOMController controller = boxWidget.getDOMController();
-		controller.insertElement(new QualifiedName(null, "i"));
+		boxWidget.insertElement(I);
 	}
 
 	public void insertAnchor() {
-		final DOMController controller = boxWidget.getDOMController();
-		controller.insertElement(new QualifiedName(null, "anchor"));
+		boxWidget.insertElement(ANCHOR);
 	}
 
 	public void insertComment() {
-		final DOMController controller = boxWidget.getDOMController();
-		controller.insertComment();
+		boxWidget.insertComment();
 	}
 
 	public void insertProcessingInstruction(final String target) {
-		final DOMController controller = boxWidget.getDOMController();
-		controller.insertProcessingInstruction(target);
+		boxWidget.insertProcessingInstruction(target);
 	}
 
 }