Fix compile problem.
diff --git a/plugins/org.eclipse.bpel.ui/src/org/eclipse/bpel/ui/editors/xpath/XPathTextEditor.java b/plugins/org.eclipse.bpel.ui/src/org/eclipse/bpel/ui/editors/xpath/XPathTextEditor.java
index 63be9f2..6475252 100644
--- a/plugins/org.eclipse.bpel.ui/src/org/eclipse/bpel/ui/editors/xpath/XPathTextEditor.java
+++ b/plugins/org.eclipse.bpel.ui/src/org/eclipse/bpel/ui/editors/xpath/XPathTextEditor.java
@@ -1,551 +1,552 @@
-/*******************************************************************************

- * Copyright (c) 2006, 2012 Oracle Corporation 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

- *

- * Contributors:

- *     Oracle Corporation - initial API and implementation

- *******************************************************************************/

-package org.eclipse.bpel.ui.editors.xpath;

-

-import java.util.ResourceBundle;

-

-import org.eclipse.bpel.ui.BPELUIPlugin;

-import org.eclipse.bpel.ui.contentassist.ExpressionContentAssistProcessor;

-import org.eclipse.bpel.ui.editors.TextEditor;

-import org.eclipse.bpel.ui.expressions.IEditorConstants;

-import org.eclipse.bpel.ui.preferences.PreferenceConstants;

-import org.eclipse.core.runtime.CoreException;

-import org.eclipse.emf.ecore.EObject;

-import org.eclipse.jface.action.Action;

-import org.eclipse.jface.action.IAction;

-import org.eclipse.jface.action.IMenuManager;

-import org.eclipse.jface.action.Separator;

-import org.eclipse.jface.fieldassist.ControlDecoration;

-import org.eclipse.jface.fieldassist.FieldDecoration;

-import org.eclipse.jface.fieldassist.FieldDecorationRegistry;

-import org.eclipse.jface.preference.IPreferenceStore;

-import org.eclipse.jface.text.BadLocationException;

-import org.eclipse.jface.text.IDocument;

-import org.eclipse.jface.text.IRegion;

-import org.eclipse.jface.text.ITextViewerExtension;

-import org.eclipse.jface.text.rules.IWhitespaceDetector;

-import org.eclipse.jface.text.source.ISourceViewer;

-import org.eclipse.jface.util.PropertyChangeEvent;

-import org.eclipse.swt.SWT;

-import org.eclipse.swt.custom.VerifyKeyListener;

-import org.eclipse.swt.events.FocusListener;

-import org.eclipse.swt.events.VerifyEvent;

-import org.eclipse.swt.graphics.Point;

-import org.eclipse.swt.widgets.Composite;

-import org.eclipse.ui.IEditorInput;

-import org.eclipse.ui.texteditor.AbstractTextEditor;

-import org.eclipse.ui.texteditor.ContentAssistAction;

-import org.eclipse.ui.texteditor.ITextEditorActionDefinitionIds;

-import org.eclipse.ui.texteditor.SourceViewerDecorationSupport;

-

-

-/**

- * The XPath Text Editor.

- * 

- * A bunch of the code is borrowed from the Java Text Editor. 

- * 

- * @author Michal Chmielewski (michal.chmielewski@oracle.com)

- * @date Oct 26, 2006

- */

-

-

-public class XPathTextEditor extends TextEditor {

-	

-	/** The editor id, based on the name of our class */

-	public static final String XPATH_EDITOR_ID = XPathTextEditor.class.getName();

-	

-	/** Matchable character pairs */

-	protected final static char[] BRACKETS= { '(', ')', '[', ']' };

-	

-	/** The editor's bracket maTtcher */

-	protected XPathCharPairMatcher fBracketMatcher= new XPathCharPairMatcher(BRACKETS);

-	

-	/** The bracket inserter. */

-	BracketInserter fBracketInserter= new BracketInserter();	

-	

-	private ColorManager fColorManager;

-	

-	IWhitespaceDetector fWhitespaceDetector = new XPathWhitespaceDetector();

-

-	VariablePickerAction fVariablePickerAction;

-

-	/** Decoration for the content assist */

-	private ControlDecoration decoration;

-	

-	/**

-	 * 

-	 */

-	public XPathTextEditor() {

-		super();

-		fColorManager = new ColorManager();

-		

-		setSourceViewerConfiguration(new XPathSourceViewerConfiguration(fColorManager) ); 

-	}

-	

-	/**

-	 * 

-	 */

-	@Override

-	

-	protected void createActions() {

-		super.createActions();

-		

-		ResourceBundle bundle = ResourceBundle.getBundle("bpelexpression"); //$NON-NLS-1$

-		Action action = new ContentAssistAction(bundle, "ContentAssistProposal.", this);  //$NON-NLS-1$

-		String id = ITextEditorActionDefinitionIds.CONTENT_ASSIST_PROPOSALS;

-		action.setActionDefinitionId(id);

-		setAction("ContentAssistProposal", action);  //$NON-NLS-1$

-		markAsStateDependentAction("ContentAssistProposal", true); //$NON-NLS-1$

-		

-

-		

-		fVariablePickerAction = new VariablePickerAction(XPathEditorMessages.getBundleForConstructedKeys(), "Editor.VariablePicker.", this); //$NON-NLS-1$

-		// action.setHelpContextId(IAbstractTextEditorHelpContextIds.GOTO_LINE_ACTION);

-		fVariablePickerAction.setActionDefinitionId(IXPathEditorActionDefinitionIds.VARIABLE_PICKER);

-		setAction(IXPathEditorActionConstants.VARIABLE_PICKER, fVariablePickerAction);

-		

-		

-	}

-	

-	

-	@Override

-	protected void doSetInput (IEditorInput input) throws CoreException {

-		

-		super.doSetInput(input);

-		

-		ExpressionContentAssistProcessor caproc = (ExpressionContentAssistProcessor)

-							this.getSourceViewerConfiguration().

-							getContentAssistant( this.getSourceViewer() ).

-							getContentAssistProcessor(IDocument.DEFAULT_CONTENT_TYPE);

-	

-		EObject eObj = (EObject) input.getAdapter(EObject.class);

-		

-		if (eObj != null) {

-			caproc.setModelObject( eObj );

-		}

-		

-		String expressionContext = (String) input.getAdapter(Integer.class);

-		if (expressionContext != null) {

-			caproc.setExpressionContext(expressionContext);

-			// 

-			if (fVariablePickerAction != null) {

-				fVariablePickerAction.setEnabled(expressionContext.indexOf(IEditorConstants.ET_JOIN) < 0);

-			}

-		}

-	}		

-	

-	/**

-	 * @see AbstractTextEditor#createPartControl(Composite)

-	 */

-	@Override

-	public void createPartControl(Composite parent) {

-		

-		super.createPartControl(parent);

-					

-		IPreferenceStore preferenceStore= getPreferenceStore();

-		boolean closeBrackets= preferenceStore.getBoolean(PreferenceConstants.EDITOR_CLOSE_BRACKETS);

-		boolean closeStrings= preferenceStore.getBoolean(PreferenceConstants.EDITOR_CLOSE_STRINGS);

-		

-		fBracketInserter.setCloseBracketsEnabled(closeBrackets);

-		fBracketInserter.setCloseStringsEnabled(closeStrings);

-		

-		ISourceViewer sourceViewer = getSourceViewer();

-		

-		if (sourceViewer instanceof ITextViewerExtension) {

-			((ITextViewerExtension) sourceViewer).prependVerifyKeyListener(fBracketInserter);

-		}

-		

-	}

-	

-	

-	/**

-	 * @see org.eclipse.ui.texteditor.AbstractTextEditor#editorContextMenuAboutToShow(org.eclipse.jface.action.IMenuManager)

-	 * @since 3.1

-	 */

-	

-	@Override

-	protected void editorContextMenuAboutToShow(IMenuManager menu) {

-		

-		super.editorContextMenuAboutToShow(menu);

-

-		IAction variablePicker = getAction(IXPathEditorActionConstants.VARIABLE_PICKER);

-		menu.add( new Separator() );

-		menu.add( variablePicker );

-		

-//		menu.appendToGroup(IWorkbenchActionConstants.MB_ADDITIONS, new Separator(ITextEditorActionConstants.GROUP_SETTINGS));

-//		menu.appendToGroup(ITextEditorActionConstants.GROUP_SETTINGS, preferencesAction);

-//		

-//		menu.appendToGroup(ITextEditorActionConstants.GROUP_SAVE, new Separator(ITextEditorActionConstants.GROUP_OPEN));

-//		MenuManager showInSubMenu= new MenuManager(getShowInMenuLabel());

-//		showInSubMenu.add(ContributionItemFactory.VIEWS_SHOW_IN.create(getEditorSite().getWorkbenchWindow()));

-//		menu.appendToGroup(ITextEditorActionConstants.GROUP_OPEN, showInSubMenu); 

-	}

-

-

-	/**

-	 * 

-	 * @see org.eclipse.ui.texteditor.AbstractTextEditor#dispose()

-	 */

-	@Override

-	

-	public void dispose() 

-    {

-		fColorManager.dispose();

-		fBracketMatcher.dispose();

-		

-		ISourceViewer sourceViewer= getSourceViewer();

-		if (sourceViewer instanceof ITextViewerExtension) {

-			((ITextViewerExtension) sourceViewer).removeVerifyKeyListener(fBracketInserter);

-		}

-		

-		super.dispose();		

-	}

-

-    

-	

-    

-   

-    

-    

-    @Override

-	protected void configureSourceViewerDecorationSupport(SourceViewerDecorationSupport support) {

-		

-		support.setCharacterPairMatcher(fBracketMatcher);

-		support.setMatchingCharacterPainterPreferenceKeys(

-				PreferenceConstants.EDITOR_MATCHING_BRACKETS, 

-				PreferenceConstants.EDITOR_MATCHING_BRACKETS_COLOR);

-		

-		super.configureSourceViewerDecorationSupport(support);

-	}

-

-	@Override

-	protected void setPreferenceStore (IPreferenceStore store) {

-		if (store != null) {

-			PreferenceConstants.initializeDefaultValues( store );

-		}

-		super.setPreferenceStore(store);

-	}

-	

-	

-	/**

-	 * @see AbstractTextEditor#handlePreferenceStoreChanged(PropertyChangeEvent)

-	 */

-	@Override

-	protected void handlePreferenceStoreChanged (PropertyChangeEvent event) {

-		

-		String p = event.getProperty();		

-		

-		if (PreferenceConstants.EDITOR_CLOSE_BRACKETS.equals(p)) {

-			fBracketInserter.setCloseBracketsEnabled(getPreferenceStore().getBoolean(p));

-			return;	

-		}

-

-		if (PreferenceConstants.EDITOR_CLOSE_STRINGS.equals(p)) {

-			fBracketInserter.setCloseStringsEnabled(getPreferenceStore().getBoolean(p));

-			return;

-		}

-								

-		super.handlePreferenceStoreChanged(event);

-	}

-	

-	/**

-	 * Enable/disable content assist decoration

-	 * @param enabled

-	 */

-	public void setDecoration(boolean enabled) {

-		if (enabled){

-			decoration = new ControlDecoration(getSourceViewer().getTextWidget(), SWT.TOP | SWT.LEFT);

-			decoration.setMarginWidth(25);

-			decoration.setDescriptionText("Content Assist Available (Ctrl+Space)");

-			decoration.setShowOnlyOnFocus(true);

-			FieldDecoration dec = FieldDecorationRegistry.getDefault().getFieldDecoration(FieldDecorationRegistry.DEC_CONTENT_PROPOSAL);

-			decoration.setImage(dec.getImage());

-		} else {

-			decoration.dispose();

-		}

-	}

-

-	/*** Private Classes */

-	

-	class BracketInserter implements VerifyKeyListener  {

-		

-		private boolean fCloseBrackets = true;

-		private boolean fCloseStrings  = true;		

-		

-		/**

-		 * @param enabled

-		 */

-		public void setCloseBracketsEnabled(boolean enabled) {

-			fCloseBrackets= enabled;

-		}

-

-		/**

-		 * @param enabled

-		 */

-		public void setCloseStringsEnabled(boolean enabled) {

-			fCloseStrings= enabled ;

-			

-		}

-

-		private boolean hasIdentifierToTheRight(IDocument document, int offset) {

-			try {

-				int end= offset;

-				IRegion endLine= document.getLineInformationOfOffset(end);

-				int maxEnd= endLine.getOffset() + endLine.getLength();

-				while (end != maxEnd &&  fWhitespaceDetector.isWhitespace(document.getChar(end)))

-					++end;

-

-				return end != maxEnd && Character.isJavaIdentifierPart(document.getChar(end));

-

-			} catch (BadLocationException e) {

-				// be conservative

-				return true;

-			}

-		}

-

-		private boolean hasIdentifierToTheLeft(IDocument document, int offset) {

-			try {

-				int start= offset;

-				IRegion startLine= document.getLineInformationOfOffset(start);

-				int minStart= startLine.getOffset();

-				while (start != minStart && fWhitespaceDetector.isWhitespace(document.getChar(start - 1)))

-					--start;

-				

-				return start != minStart && Character.isJavaIdentifierPart(document.getChar(start - 1));

-

-			} catch (BadLocationException e) {

-				return true;

-			}			

-		}

-

-		private boolean hasCharacterToTheRight(IDocument document, int offset, char character) {

-			try {

-				int end= offset;

-				IRegion endLine= document.getLineInformationOfOffset(end);

-				int maxEnd= endLine.getOffset() + endLine.getLength();

-				while (end != maxEnd && fWhitespaceDetector.isWhitespace(document.getChar(end)))

-					++end;

-				

-				return end != maxEnd && document.getChar(end) == character;

-

-

-			} catch (BadLocationException e) {

-				// be conservative

-				return true;

-			}			

-		}

-

-

-		

-		private boolean hasCharacterAtOffset (IDocument document, int offset, char character) {

-			try {

-				return document.getChar(offset) == character ;

-			} catch (BadLocationException e) {

-				return false;

-			}		

-		}

-

-		

-		/**

-		 *  (non-Javadoc)

-		 * @see org.eclipse.swt.custom.VerifyKeyListener#verifyKey(org.eclipse.swt.events.VerifyEvent)

-		 */

-		

-		@SuppressWarnings("fallthrough")

-		public void verifyKey(VerifyEvent event) {			

-

-			if (!event.doit || getInsertMode() != SMART_INSERT) {

-				return;

-			}

-				

-			ISourceViewer sourceViewer = getSourceViewer();

-			IDocument document= sourceViewer.getDocument();

-

-			final Point selection= sourceViewer.getSelectedRange();

-			final int offset= selection.x;

-			final int length= selection.y;

-

-			switch (event.character) {

-			

-			case ']' :

-				if (!fCloseBrackets) {

-					return ;

-				}

-				// Fall through

-				

-			case ')':				

-				if (hasCharacterAtOffset(document, offset + length, event.character ) ) {

-					sourceViewer.setSelectedRange(offset + length + 1,0);

-					event.doit = false;

-					return ;

-				}

-				break; 				

-				

-			case '(':

-				if (hasCharacterToTheRight(document, offset + length, '('))

-					return;

-

-				// fall through

-

-			case '[':

-					if (!fCloseBrackets)

-						return;

-					if (hasIdentifierToTheRight(document, offset + length))

-						return;

-			

-				// fall through

-			

-			case '\'':

-				if (event.character == '\'') {

-					if (!fCloseStrings)

-						return;

-					

-					if ( hasCharacterAtOffset(document,offset-1,'\\')) {

-						return ;

-					}					

-

-					if ( hasCharacterAtOffset(document,offset + length,'\'') ) { 

-						sourceViewer.setSelectedRange(offset + length + 1,0);

-						event.doit = false;

-						return ;

-					}

-					

-					if (hasIdentifierToTheLeft(document, offset) || hasIdentifierToTheRight(document, offset + length)) {

-						return;

-					}					

-				}

-				

-				// fall through

-

-			case '"':

-				if (event.character == '"') {

-					if (!fCloseStrings)

-						return;

-					

-					if ( hasCharacterAtOffset(document,offset-1,'\\')) {

-						return ;

-					}					

-					if ( hasCharacterAtOffset(document,offset+length,'"') ) {																

-						sourceViewer.setSelectedRange(offset+length+1,0);	

-						event.doit = false;

-						return ;

-					}

-					

-					if (hasIdentifierToTheLeft(document, offset) || hasIdentifierToTheRight(document, offset + length))

-						return;

-					

-				}

-				

-				try {		

-//					ITypedRegion partition= TextUtilities.getPartition(document, IJavaPartitions.JAVA_PARTITIONING, offset, true);

-////					if (! IDocument.DEFAULT_CONTENT_TYPE.equals(partition.getType()) && partition.getOffset() != offset)

-//					if (! IDocument.DEFAULT_CONTENT_TYPE.equals(partition.getType()))

-//						return;

-//						

-					if (!validateEditorInputState()) {

-						return ;

-					}

-

-					final StringBuffer buffer= new StringBuffer();

-					buffer.append( event.character );

-					buffer.append( getPeerCharacter(event.character) );

-

-					document.replace(offset, length, buffer.toString());

-					

-					// move to the right of the inserted element

-					sourceViewer.setSelectedRange(offset+1,0);

-					

-//					

-//					BracketLevel level= new BracketLevel();

-//					fBracketLevelStack.push(level);

-//					

-//					LinkedPositionGroup group= new LinkedPositionGroup(); 

-//					group.addPosition(new LinkedPosition(document, offset + 1, 0, LinkedPositionGroup.NO_STOP));

-//

-//					LinkedModeModel model= new LinkedModeModel();

-//					model.addLinkingListener(this);

-//					model.addGroup(group);

-//					model.forceInstall();

-//					

-//					level.fOffset= offset;

-//					level.fLength= 2;

-//			

-//					// set up position tracking for our magic peers

-//					if (fBracketLevelStack.size() == 1) {

-//						document.addPositionCategory(CATEGORY);

-//						document.addPositionUpdater(fUpdater);

-//					}

-//					level.fFirstPosition= new Position(offset, 1);

-//					level.fSecondPosition= new Position(offset + 1, 1);

-//					document.addPosition(CATEGORY, level.fFirstPosition);

-//					document.addPosition(CATEGORY, level.fSecondPosition);

-//					

-//					level.fUI= new EditorLinkedModeUI(model, sourceViewer);

-//					level.fUI.setSimpleMode(true);

-//					level.fUI.setExitPolicy(new ExitPolicy(closingCharacter, getEscapeCharacter(closingCharacter), fBracketLevelStack));

-//					level.fUI.setExitPosition(sourceViewer, offset + 2, 0, Integer.MAX_VALUE);

-//					level.fUI.setCyclingMode(LinkedModeUI.CYCLE_NEVER);

-//					level.fUI.enter();

-//					

-//					

-//					IRegion newSelection= level.fUI.getSelectedRegion();

-					// sourceViewer.setSelectedRange(newSelection.getOffset(), newSelection.getLength());

-	

-					event.doit= false;

-

-				} catch (BadLocationException e) {

-					BPELUIPlugin.log(e);

-				}

-//					catch (BadPositionCategoryException e) {

-//					BPELUIPlugin.log(e);

-//				}

-				break;	

-			}

-		}

-	}

-	

-	static char getEscapeCharacter (char character) {

-		switch (character) {

-			case '"':

-			case '\'':

-				return '\\';

-			default:

-				return 0;

-		}

-	}

-	

-	static char getPeerCharacter(char character) {

-		switch (character) {

-			case '(':

-				return ')';

-				

-			case ')':

-				return '(';

-				

-			case '[':

-				return ']';

-				

-			case '"':

-				return character;

-				

-			case '\'':

-				return character;

-			

-			default:

-				throw new IllegalArgumentException();

-		}					

-	}

-

-	public void addFocusListener(FocusListener focusListener) {

-		getSourceViewer().getTextWidget().addFocusListener(focusListener);

-	}

-	

-}

+/*******************************************************************************
+ * Copyright (c) 2006, 2012 Oracle Corporation 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
+ *
+ * Contributors:
+ *     Oracle Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.bpel.ui.editors.xpath;
+
+import java.util.ResourceBundle;
+
+import org.eclipse.bpel.ui.BPELUIPlugin;
+import org.eclipse.bpel.ui.contentassist.ExpressionContentAssistProcessor;
+import org.eclipse.bpel.ui.editors.TextEditor;
+import org.eclipse.bpel.ui.expressions.IEditorConstants;
+import org.eclipse.bpel.ui.preferences.PreferenceConstants;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.fieldassist.ControlDecoration;
+import org.eclipse.jface.fieldassist.FieldDecoration;
+import org.eclipse.jface.fieldassist.FieldDecorationRegistry;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.jface.text.BadLocationException;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.IRegion;
+import org.eclipse.jface.text.ITextViewerExtension;
+import org.eclipse.jface.text.rules.IWhitespaceDetector;
+import org.eclipse.jface.text.source.ISourceViewer;
+import org.eclipse.jface.util.PropertyChangeEvent;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.VerifyKeyListener;
+import org.eclipse.swt.events.FocusListener;
+import org.eclipse.swt.events.VerifyEvent;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.texteditor.AbstractTextEditor;
+import org.eclipse.ui.texteditor.ContentAssistAction;
+import org.eclipse.ui.texteditor.ITextEditorActionDefinitionIds;
+import org.eclipse.ui.texteditor.SourceViewerDecorationSupport;
+
+
+/**
+ * The XPath Text Editor.
+ * 
+ * A bunch of the code is borrowed from the Java Text Editor. 
+ * 
+ * @author Michal Chmielewski (michal.chmielewski@oracle.com)
+ * @date Oct 26, 2006
+ */
+
+
+public class XPathTextEditor extends TextEditor {
+	
+	/** The editor id, based on the name of our class */
+	public static final String XPATH_EDITOR_ID = XPathTextEditor.class.getName();
+	
+	/** Matchable character pairs */
+	protected final static char[] BRACKETS= { '(', ')', '[', ']' };
+	
+	/** The editor's bracket maTtcher */
+	protected XPathCharPairMatcher fBracketMatcher= new XPathCharPairMatcher(BRACKETS);
+	
+	/** The bracket inserter. */
+	BracketInserter fBracketInserter= new BracketInserter();	
+	
+	private ColorManager fColorManager;
+	
+	IWhitespaceDetector fWhitespaceDetector = new XPathWhitespaceDetector();
+
+	VariablePickerAction fVariablePickerAction;
+
+	/** Decoration for the content assist */
+	private ControlDecoration decoration;
+	
+	/**
+	 * 
+	 */
+	public XPathTextEditor() {
+		super();
+		fColorManager = new ColorManager();
+		
+		setSourceViewerConfiguration(new XPathSourceViewerConfiguration(fColorManager) ); 
+	}
+	
+	/**
+	 * 
+	 */
+	@Override
+	
+	protected void createActions() {
+		super.createActions();
+		
+		ResourceBundle bundle = ResourceBundle.getBundle("bpelexpression"); //$NON-NLS-1$
+		Action action = new ContentAssistAction(bundle, "ContentAssistProposal.", this);  //$NON-NLS-1$
+		String id = ITextEditorActionDefinitionIds.CONTENT_ASSIST_PROPOSALS;
+		action.setActionDefinitionId(id);
+		setAction("ContentAssistProposal", action);  //$NON-NLS-1$
+		markAsStateDependentAction("ContentAssistProposal", true); //$NON-NLS-1$
+		
+
+		
+		fVariablePickerAction = new VariablePickerAction(XPathEditorMessages.getBundleForConstructedKeys(), "Editor.VariablePicker.", this); //$NON-NLS-1$
+		// action.setHelpContextId(IAbstractTextEditorHelpContextIds.GOTO_LINE_ACTION);
+		fVariablePickerAction.setActionDefinitionId(IXPathEditorActionDefinitionIds.VARIABLE_PICKER);
+		setAction(IXPathEditorActionConstants.VARIABLE_PICKER, fVariablePickerAction);
+		
+		
+	}
+	
+	
+	@Override
+	protected void doSetInput (IEditorInput input) throws CoreException {
+		
+		super.doSetInput(input);
+		
+		ExpressionContentAssistProcessor caproc = (ExpressionContentAssistProcessor)
+							this.getSourceViewerConfiguration().
+							getContentAssistant( this.getSourceViewer() ).
+							getContentAssistProcessor(IDocument.DEFAULT_CONTENT_TYPE);
+	
+		EObject eObj = (EObject) input.getAdapter(EObject.class);
+		
+		if (eObj != null) {
+			caproc.setModelObject( eObj );
+		}
+		
+		Integer value = input.getAdapter(Integer.class);
+		if (value != null) {
+			String expressionContext = value.toString();
+			caproc.setExpressionContext(expressionContext);
+			// 
+			if (fVariablePickerAction != null) {
+				fVariablePickerAction.setEnabled(expressionContext.indexOf(IEditorConstants.ET_JOIN) < 0);
+			}
+		}
+	}		
+	
+	/**
+	 * @see AbstractTextEditor#createPartControl(Composite)
+	 */
+	@Override
+	public void createPartControl(Composite parent) {
+		
+		super.createPartControl(parent);
+					
+		IPreferenceStore preferenceStore= getPreferenceStore();
+		boolean closeBrackets= preferenceStore.getBoolean(PreferenceConstants.EDITOR_CLOSE_BRACKETS);
+		boolean closeStrings= preferenceStore.getBoolean(PreferenceConstants.EDITOR_CLOSE_STRINGS);
+		
+		fBracketInserter.setCloseBracketsEnabled(closeBrackets);
+		fBracketInserter.setCloseStringsEnabled(closeStrings);
+		
+		ISourceViewer sourceViewer = getSourceViewer();
+		
+		if (sourceViewer instanceof ITextViewerExtension) {
+			((ITextViewerExtension) sourceViewer).prependVerifyKeyListener(fBracketInserter);
+		}
+		
+	}
+	
+	
+	/**
+	 * @see org.eclipse.ui.texteditor.AbstractTextEditor#editorContextMenuAboutToShow(org.eclipse.jface.action.IMenuManager)
+	 * @since 3.1
+	 */
+	
+	@Override
+	protected void editorContextMenuAboutToShow(IMenuManager menu) {
+		
+		super.editorContextMenuAboutToShow(menu);
+
+		IAction variablePicker = getAction(IXPathEditorActionConstants.VARIABLE_PICKER);
+		menu.add( new Separator() );
+		menu.add( variablePicker );
+		
+//		menu.appendToGroup(IWorkbenchActionConstants.MB_ADDITIONS, new Separator(ITextEditorActionConstants.GROUP_SETTINGS));
+//		menu.appendToGroup(ITextEditorActionConstants.GROUP_SETTINGS, preferencesAction);
+//		
+//		menu.appendToGroup(ITextEditorActionConstants.GROUP_SAVE, new Separator(ITextEditorActionConstants.GROUP_OPEN));
+//		MenuManager showInSubMenu= new MenuManager(getShowInMenuLabel());
+//		showInSubMenu.add(ContributionItemFactory.VIEWS_SHOW_IN.create(getEditorSite().getWorkbenchWindow()));
+//		menu.appendToGroup(ITextEditorActionConstants.GROUP_OPEN, showInSubMenu); 
+	}
+
+
+	/**
+	 * 
+	 * @see org.eclipse.ui.texteditor.AbstractTextEditor#dispose()
+	 */
+	@Override
+	
+	public void dispose() 
+    {
+		fColorManager.dispose();
+		fBracketMatcher.dispose();
+		
+		ISourceViewer sourceViewer= getSourceViewer();
+		if (sourceViewer instanceof ITextViewerExtension) {
+			((ITextViewerExtension) sourceViewer).removeVerifyKeyListener(fBracketInserter);
+		}
+		
+		super.dispose();		
+	}
+
+    
+	
+    
+   
+    
+    
+    @Override
+	protected void configureSourceViewerDecorationSupport(SourceViewerDecorationSupport support) {
+		
+		support.setCharacterPairMatcher(fBracketMatcher);
+		support.setMatchingCharacterPainterPreferenceKeys(
+				PreferenceConstants.EDITOR_MATCHING_BRACKETS, 
+				PreferenceConstants.EDITOR_MATCHING_BRACKETS_COLOR);
+		
+		super.configureSourceViewerDecorationSupport(support);
+	}
+
+	@Override
+	protected void setPreferenceStore (IPreferenceStore store) {
+		if (store != null) {
+			PreferenceConstants.initializeDefaultValues( store );
+		}
+		super.setPreferenceStore(store);
+	}
+	
+	
+	/**
+	 * @see AbstractTextEditor#handlePreferenceStoreChanged(PropertyChangeEvent)
+	 */
+	@Override
+	protected void handlePreferenceStoreChanged (PropertyChangeEvent event) {
+		
+		String p = event.getProperty();		
+		
+		if (PreferenceConstants.EDITOR_CLOSE_BRACKETS.equals(p)) {
+			fBracketInserter.setCloseBracketsEnabled(getPreferenceStore().getBoolean(p));
+			return;	
+		}
+
+		if (PreferenceConstants.EDITOR_CLOSE_STRINGS.equals(p)) {
+			fBracketInserter.setCloseStringsEnabled(getPreferenceStore().getBoolean(p));
+			return;
+		}
+								
+		super.handlePreferenceStoreChanged(event);
+	}
+	
+	/**
+	 * Enable/disable content assist decoration
+	 * @param enabled
+	 */
+	public void setDecoration(boolean enabled) {
+		if (enabled){
+			decoration = new ControlDecoration(getSourceViewer().getTextWidget(), SWT.TOP | SWT.LEFT);
+			decoration.setMarginWidth(25);
+			decoration.setDescriptionText("Content Assist Available (Ctrl+Space)");
+			decoration.setShowOnlyOnFocus(true);
+			FieldDecoration dec = FieldDecorationRegistry.getDefault().getFieldDecoration(FieldDecorationRegistry.DEC_CONTENT_PROPOSAL);
+			decoration.setImage(dec.getImage());
+		} else {
+			decoration.dispose();
+		}
+	}
+
+	/*** Private Classes */
+	
+	class BracketInserter implements VerifyKeyListener  {
+		
+		private boolean fCloseBrackets = true;
+		private boolean fCloseStrings  = true;		
+		
+		/**
+		 * @param enabled
+		 */
+		public void setCloseBracketsEnabled(boolean enabled) {
+			fCloseBrackets= enabled;
+		}
+
+		/**
+		 * @param enabled
+		 */
+		public void setCloseStringsEnabled(boolean enabled) {
+			fCloseStrings= enabled ;
+			
+		}
+
+		private boolean hasIdentifierToTheRight(IDocument document, int offset) {
+			try {
+				int end= offset;
+				IRegion endLine= document.getLineInformationOfOffset(end);
+				int maxEnd= endLine.getOffset() + endLine.getLength();
+				while (end != maxEnd &&  fWhitespaceDetector.isWhitespace(document.getChar(end)))
+					++end;
+
+				return end != maxEnd && Character.isJavaIdentifierPart(document.getChar(end));
+
+			} catch (BadLocationException e) {
+				// be conservative
+				return true;
+			}
+		}
+
+		private boolean hasIdentifierToTheLeft(IDocument document, int offset) {
+			try {
+				int start= offset;
+				IRegion startLine= document.getLineInformationOfOffset(start);
+				int minStart= startLine.getOffset();
+				while (start != minStart && fWhitespaceDetector.isWhitespace(document.getChar(start - 1)))
+					--start;
+				
+				return start != minStart && Character.isJavaIdentifierPart(document.getChar(start - 1));
+
+			} catch (BadLocationException e) {
+				return true;
+			}			
+		}
+
+		private boolean hasCharacterToTheRight(IDocument document, int offset, char character) {
+			try {
+				int end= offset;
+				IRegion endLine= document.getLineInformationOfOffset(end);
+				int maxEnd= endLine.getOffset() + endLine.getLength();
+				while (end != maxEnd && fWhitespaceDetector.isWhitespace(document.getChar(end)))
+					++end;
+				
+				return end != maxEnd && document.getChar(end) == character;
+
+
+			} catch (BadLocationException e) {
+				// be conservative
+				return true;
+			}			
+		}
+
+
+		
+		private boolean hasCharacterAtOffset (IDocument document, int offset, char character) {
+			try {
+				return document.getChar(offset) == character ;
+			} catch (BadLocationException e) {
+				return false;
+			}		
+		}
+
+		
+		/**
+		 *  (non-Javadoc)
+		 * @see org.eclipse.swt.custom.VerifyKeyListener#verifyKey(org.eclipse.swt.events.VerifyEvent)
+		 */
+		
+		@SuppressWarnings("fallthrough")
+		public void verifyKey(VerifyEvent event) {			
+
+			if (!event.doit || getInsertMode() != SMART_INSERT) {
+				return;
+			}
+				
+			ISourceViewer sourceViewer = getSourceViewer();
+			IDocument document= sourceViewer.getDocument();
+
+			final Point selection= sourceViewer.getSelectedRange();
+			final int offset= selection.x;
+			final int length= selection.y;
+
+			switch (event.character) {
+			
+			case ']' :
+				if (!fCloseBrackets) {
+					return ;
+				}
+				// Fall through
+				
+			case ')':				
+				if (hasCharacterAtOffset(document, offset + length, event.character ) ) {
+					sourceViewer.setSelectedRange(offset + length + 1,0);
+					event.doit = false;
+					return ;
+				}
+				break; 				
+				
+			case '(':
+				if (hasCharacterToTheRight(document, offset + length, '('))
+					return;
+
+				// fall through
+
+			case '[':
+					if (!fCloseBrackets)
+						return;
+					if (hasIdentifierToTheRight(document, offset + length))
+						return;
+			
+				// fall through
+			
+			case '\'':
+				if (event.character == '\'') {
+					if (!fCloseStrings)
+						return;
+					
+					if ( hasCharacterAtOffset(document,offset-1,'\\')) {
+						return ;
+					}					
+
+					if ( hasCharacterAtOffset(document,offset + length,'\'') ) { 
+						sourceViewer.setSelectedRange(offset + length + 1,0);
+						event.doit = false;
+						return ;
+					}
+					
+					if (hasIdentifierToTheLeft(document, offset) || hasIdentifierToTheRight(document, offset + length)) {
+						return;
+					}					
+				}
+				
+				// fall through
+
+			case '"':
+				if (event.character == '"') {
+					if (!fCloseStrings)
+						return;
+					
+					if ( hasCharacterAtOffset(document,offset-1,'\\')) {
+						return ;
+					}					
+					if ( hasCharacterAtOffset(document,offset+length,'"') ) {																
+						sourceViewer.setSelectedRange(offset+length+1,0);	
+						event.doit = false;
+						return ;
+					}
+					
+					if (hasIdentifierToTheLeft(document, offset) || hasIdentifierToTheRight(document, offset + length))
+						return;
+					
+				}
+				
+				try {		
+//					ITypedRegion partition= TextUtilities.getPartition(document, IJavaPartitions.JAVA_PARTITIONING, offset, true);
+////					if (! IDocument.DEFAULT_CONTENT_TYPE.equals(partition.getType()) && partition.getOffset() != offset)
+//					if (! IDocument.DEFAULT_CONTENT_TYPE.equals(partition.getType()))
+//						return;
+//						
+					if (!validateEditorInputState()) {
+						return ;
+					}
+
+					final StringBuffer buffer= new StringBuffer();
+					buffer.append( event.character );
+					buffer.append( getPeerCharacter(event.character) );
+
+					document.replace(offset, length, buffer.toString());
+					
+					// move to the right of the inserted element
+					sourceViewer.setSelectedRange(offset+1,0);
+					
+//					
+//					BracketLevel level= new BracketLevel();
+//					fBracketLevelStack.push(level);
+//					
+//					LinkedPositionGroup group= new LinkedPositionGroup(); 
+//					group.addPosition(new LinkedPosition(document, offset + 1, 0, LinkedPositionGroup.NO_STOP));
+//
+//					LinkedModeModel model= new LinkedModeModel();
+//					model.addLinkingListener(this);
+//					model.addGroup(group);
+//					model.forceInstall();
+//					
+//					level.fOffset= offset;
+//					level.fLength= 2;
+//			
+//					// set up position tracking for our magic peers
+//					if (fBracketLevelStack.size() == 1) {
+//						document.addPositionCategory(CATEGORY);
+//						document.addPositionUpdater(fUpdater);
+//					}
+//					level.fFirstPosition= new Position(offset, 1);
+//					level.fSecondPosition= new Position(offset + 1, 1);
+//					document.addPosition(CATEGORY, level.fFirstPosition);
+//					document.addPosition(CATEGORY, level.fSecondPosition);
+//					
+//					level.fUI= new EditorLinkedModeUI(model, sourceViewer);
+//					level.fUI.setSimpleMode(true);
+//					level.fUI.setExitPolicy(new ExitPolicy(closingCharacter, getEscapeCharacter(closingCharacter), fBracketLevelStack));
+//					level.fUI.setExitPosition(sourceViewer, offset + 2, 0, Integer.MAX_VALUE);
+//					level.fUI.setCyclingMode(LinkedModeUI.CYCLE_NEVER);
+//					level.fUI.enter();
+//					
+//					
+//					IRegion newSelection= level.fUI.getSelectedRegion();
+					// sourceViewer.setSelectedRange(newSelection.getOffset(), newSelection.getLength());
+	
+					event.doit= false;
+
+				} catch (BadLocationException e) {
+					BPELUIPlugin.log(e);
+				}
+//					catch (BadPositionCategoryException e) {
+//					BPELUIPlugin.log(e);
+//				}
+				break;	
+			}
+		}
+	}
+	
+	static char getEscapeCharacter (char character) {
+		switch (character) {
+			case '"':
+			case '\'':
+				return '\\';
+			default:
+				return 0;
+		}
+	}
+	
+	static char getPeerCharacter(char character) {
+		switch (character) {
+			case '(':
+				return ')';
+				
+			case ')':
+				return '(';
+				
+			case '[':
+				return ']';
+				
+			case '"':
+				return character;
+				
+			case '\'':
+				return character;
+			
+			default:
+				throw new IllegalArgumentException();
+		}					
+	}
+
+	public void addFocusListener(FocusListener focusListener) {
+		getSourceViewer().getTextWidget().addFocusListener(focusListener);
+	}
+	
+}