Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
Copyright (c) 2011 itemis AG (http://www.itemis.eu) and others. All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html /
  
  package org.eclipse.xtext.ui.editor.embedded;
  
 
 import  org.eclipse.jface.text.BadLocationException;
 import  org.eclipse.jface.text.IDocument;
 import  org.eclipse.jface.text.IDocumentExtension4;
 import  org.eclipse.jface.text.IRegion;
 import  org.eclipse.jface.text.ISynchronizable;
 import  org.eclipse.jface.text.source.AnnotationModel;
 import  org.eclipse.jface.text.source.SourceViewer;
The model access allows to obtain or manipulate the edited text.

Author(s):
Sebastian Zarnekow - Initial contribution and API
Since:
2.2
Noinstantiate:
This class is not intended to be instantiated by clients.
 
 public class EmbeddedEditorModelAccess {
 
 	private final SourceViewer viewer;
 
 	private final boolean insertLineBreaks;
 
 
 	public EmbeddedEditorModelAccess(SourceViewer viewerIEditedResourceProvider resourceProvider,
 			boolean insertLineBreaks) {
 		this. = viewer;
 		this. = resourceProvider;
 		this. = insertLineBreaks;
 	}
 
 	protected void setModel(XtextDocument documentString prefixString editablePartString suffix) {
 		if (this.) {
 			String delimiter = document.getDefaultLineDelimiter();
 			prefix = prefix + delimiter;
 			suffix = delimiter + suffix;
 		}
 		String model = prefix + editablePart + suffix;
 		document.set(model);
 		XtextResource resource = createResource(model);
 		document.setInput(resource);
 		AnnotationModel annotationModel = new AnnotationModel();
 		if (document instanceof ISynchronizable) {
 			Object lock = ((ISynchronizable) document).getLockObject();
 			if (lock == null) {
 				lock = new Object();
 				((ISynchronizable) document).setLockObject(lock);
 			}
 			((ISynchronizable) annotationModel).setLockObject(lock);
 		}
 		this..setDocument(documentannotationModelprefix.length(), editablePart.length());
 	}
 
 	protected XtextResource createResource(String content) {
 		try {
 			result.load(new LazyStringInputStream(contentresult.getEncoding()), Collections.emptyMap());
 		} catch (Exception e) {
 			throw new RuntimeException(e);
 		}
 		return result;
 	}
 
 	public void updateModel(String model) {
 		IDocument document = this..getDocument();
 		this..setRedraw(false);
 		this..getUndoManager().disconnect();
 		document.set(model);
 		this..resetVisibleRegion();
 		this..getUndoManager().connect(this.);
 		this..setRedraw(true);
 	}
 
 	public void updateModel(String prefixString editablePartString suffix) {
 		IDocument document = this..getDocument();
 		if (this.) {
 			String delimiter = document.getLegalLineDelimiters()[0];
 			if (document instanceof IDocumentExtension4) {
 				delimiter = ((IDocumentExtension4) document).getDefaultLineDelimiter();
 			}
			prefix = prefix + delimiter;
			suffix = delimiter + suffix;
		}
		String model = prefix + editablePart + suffix;
		this..setRedraw(false);
		this..getUndoManager().disconnect();
		document.set(model);
		this..setVisibleRegion(prefix.length(), editablePart.length());
		this..getUndoManager().connect(this.);
		this..setRedraw(true);
	}
	public void updateModel(final String modelfinal String editablePartUriFragment) {
			public ITextRegion exec(XtextResource statethrows Exception {
				EObject editablePart = state.getEObject(editablePartUriFragment);
				ICompositeNode node = NodeModelUtils.findActualNodeFor(editablePart);
				if (node != null)
					return new TextRegion(node.getOffset(), node.getLength());
				return null;
			}
		});
	}
	public void updateModel(String modelfinal IUnitOfWork<ITextRegionXtextResourceeditablePartSelector) {
		XtextDocument document = (XtextDocumentthis..getDocument();
		this..setRedraw(false);
		this..getUndoManager().disconnect();
		document.set(model);
		ITextRegion textRegion = document.readOnly(editablePartSelector);
		if (textRegion == null) {
			this..resetVisibleRegion();
else {
			this..setVisibleRegion(textRegion.getOffset(), textRegion.getLength());
		}
		this..getUndoManager().connect(this.);
		this..setRedraw(true);
	}
	public void updatePrefix(String prefix) {
		try {
			IDocument document = this..getDocument();
			IRegion visibleRegion = this..getVisibleRegion();
			String editablePart = document.get(visibleRegion.getOffset(), visibleRegion.getLength());
			int suffixOffset = visibleRegion.getOffset() + visibleRegion.getLength();
			String suffix = "";
			if (document.getLength() - suffixOffset > 0) {
				suffix = document.get(suffixOffsetdocument.getLength() - suffixOffset);
				if (this.) {
					String delimiter = document.getLegalLineDelimiters()[0];
					if (document instanceof IDocumentExtension4) {
						delimiter = ((IDocumentExtension4) document).getDefaultLineDelimiter();
					}
					suffix = suffix.substring(delimiter.length());
				}
			}
			updateModel(prefixeditablePartsuffix);
catch (BadLocationException e) {
			throw new RuntimeException(e);
		}
	}
	public String getEditablePart() {
		IDocument doc = this..getDocument();
		IRegion visible = this..getVisibleRegion();
		try {
			return doc.get(visible.getOffset(), visible.getLength());
catch (BadLocationException e) {
			return ""//$NON-NLS-1$
		}
	}
		return this..getDocument().get();
	}
New to GrepCode? Check out our FAQ X