/******************************************************************************* | |
* Copyright (c) 2005, 2012 IBM 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: | |
* IBM Corporation - initial API and implementation | |
*******************************************************************************/ | |
package org.eclipse.bpel.ui.expressions; | |
import org.eclipse.bpel.ui.editors.TextEditor; | |
import org.eclipse.bpel.ui.editors.TextEditorInput; | |
import org.eclipse.core.resources.IMarker; | |
import org.eclipse.swt.SWT; | |
import org.eclipse.swt.events.FocusAdapter; | |
import org.eclipse.swt.events.FocusEvent; | |
import org.eclipse.swt.events.FocusListener; | |
import org.eclipse.swt.layout.FillLayout; | |
import org.eclipse.swt.widgets.Composite; | |
import org.eclipse.ui.IEditorInput; | |
import org.eclipse.ui.IEditorPart; | |
import org.eclipse.ui.IPropertyListener; | |
import org.eclipse.ui.forms.widgets.FormToolkit; | |
/** | |
* When an editor is not found for a given expression language this | |
* default editor is used instead. | |
* | |
* TODO: reconcile differences between this class and XPathExpressionEditor ? | |
*/ | |
public class DefaultExpressionEditor extends AbstractExpressionEditor { | |
protected Composite editorComposite; | |
protected TextEditor editor; | |
protected IPropertyListener propertyListener; | |
protected String undoRedoLabel; | |
protected String fBody; | |
protected boolean updating = false; | |
protected FocusListener focusListener; | |
/** | |
* | |
* @see org.eclipse.bpel.ui.expressions.AbstractExpressionEditor#getEditorContent() | |
*/ | |
@Override | |
public String getEditorContent() { | |
if (editor != null) { | |
return editor.getContents(); | |
} | |
return fBody; | |
} | |
/** | |
* | |
* @see org.eclipse.bpel.ui.expressions.AbstractExpressionEditor#createControls(org.eclipse.swt.widgets.Composite, org.eclipse.bpel.ui.properties.BPELPropertySection) | |
*/ | |
@Override | |
public void createControls(Composite parent, FormToolkit toolkit) { | |
super.createControls(parent, toolkit); | |
createEditor(parent); | |
} | |
/** | |
* (non-Javadoc) | |
* @see org.eclipse.bpel.ui.expressions.AbstractExpressionEditor#setEditorContent(java.lang.String) | |
*/ | |
@Override | |
public void setEditorContent (String aBody) { | |
this.fBody = aBody; | |
try { | |
updating = true; | |
if (editor != null) { | |
editor.setInput(new TextEditorInput( fBody, getModelObject(), getExprType() )); | |
} | |
} finally { | |
updating = false; | |
} | |
} | |
protected void createEditor(Composite parent) { | |
IEditorInput input = new TextEditorInput( fBody, getModelObject(), getExprType() ); | |
editorComposite = wf.createComposite(parent, SWT.BORDER); | |
editorComposite.setLayout( new FillLayout() ); | |
editor = (TextEditor) createEditor(TextEditor.TEXT_EDITOR_ID, | |
input, | |
editorComposite); | |
} | |
/** (non-Javadoc) | |
* @see org.eclipse.bpel.ui.expressions.IExpressionEditor#dispose() | |
*/ | |
public void dispose() { | |
disposeEditor(); | |
} | |
protected void disposeEditor() { | |
if (editor != null) { | |
getEditorManager().disposeEditor(editor); | |
if (editorComposite != null && !editorComposite.isDisposed()) { | |
editorComposite.dispose(); | |
editorComposite = null; | |
} | |
editor = null; | |
} | |
} | |
/** | |
* About to be Hidden. | |
*/ | |
public void aboutToBeHidden() { | |
if (editor != null) { | |
editor.removePropertyListener(getPropertyListener()); | |
editor.removeFocusListener(getFocusListener()); | |
} | |
} | |
/** | |
* Editor is about to be shown. | |
* @see org.eclipse.bpel.ui.expressions.IExpressionEditor#aboutToBeShown() | |
*/ | |
public void aboutToBeShown() { | |
if (editor != null) { | |
editor.addPropertyListener(getPropertyListener()); | |
editor.addFocusListener(getFocusListener()); | |
} | |
} | |
/** | |
* If the editor is dirty it registers an ongoing change. | |
*/ | |
protected IPropertyListener getPropertyListener() { | |
if (propertyListener == null) { | |
propertyListener = new IPropertyListener() { | |
public void propertyChanged(Object source, int propId) { | |
if (!updating && propId == IEditorPart.PROP_DIRTY && editor.isDirty()) { | |
notifyChanged(); | |
} | |
} | |
}; | |
} | |
return propertyListener; | |
} | |
protected FocusListener getFocusListener() { | |
if (focusListener == null){ | |
focusListener = new FocusAdapter(){ | |
public void focusLost(FocusEvent e) { | |
notifyFocusOut(); | |
} | |
};} | |
return focusListener; | |
} | |
/** | |
* Get the user context to remember for next invocation. | |
* | |
* @see org.eclipse.bpel.ui.expressions.IExpressionEditor#getUserContext() | |
*/ | |
public Object getUserContext() { | |
return null; | |
} | |
/** | |
* Restore the user context. | |
* | |
* @see org.eclipse.bpel.ui.expressions.IExpressionEditor#restoreUserContext(java.lang.Object) | |
*/ | |
public void restoreUserContext(Object userContext) { | |
editor.setFocus(); | |
} | |
/** | |
* Return the default body for this type of expression. Since the editor is not aware of any syntax | |
* for any particular language, the empty string is returned. | |
* @see org.eclipse.bpel.ui.expressions.IExpressionEditor#getDefaultContent() | |
*/ | |
public String getDefaultContent() { | |
return ""; //$NON-NLS-1$ | |
} | |
/** (non-Javadoc) | |
* @see org.eclipse.bpel.ui.expressions.IExpressionEditor#gotoTextMarker(org.eclipse.core.resources.IMarker, java.lang.String, java.lang.Object) | |
*/ | |
public void gotoTextMarker(IMarker marker, String codeType, Object modelObject) { | |
// TODO: Goto text marker in default text editor. | |
} | |
/** | |
* Answer true, because a generic text editor will simply do everything. | |
* | |
* @see org.eclipse.bpel.ui.expressions.IExpressionEditor#supportsExpressionType(java.lang.String) | |
*/ | |
public boolean supportsExpressionType( String exprType ) { | |
return true; | |
} | |
/** | |
* Mark it clean. | |
* @see org.eclipse.bpel.ui.expressions.IExpressionEditor#markAsClean() | |
*/ | |
public void markAsClean() { | |
if (editor != null) { | |
editor.markAsClean(); | |
} | |
} | |
} |