package org.jbpm.gd.jpdl.properties;
import org.eclipse.swt.events.FocusEvent;
import org.eclipse.swt.events.FocusListener;
import org.eclipse.swt.layout.FormAttachment;
import org.eclipse.swt.layout.FormData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
import org.jbpm.gd.jpdl.model.ExceptionHandler;
public class ExceptionHandlerConfigurationComposite implements FocusListener {
public static ExceptionHandlerConfigurationComposite create(TabbedPropertySheetWidgetFactory widgetFactory, Composite parent) {
ExceptionHandlerConfigurationComposite result = new ExceptionHandlerConfigurationComposite();
result.widgetFactory = widgetFactory;
result.parent = parent;
result.create();
return result;
}
private TabbedPropertySheetWidgetFactory widgetFactory;
private Composite parent;
private Label exceptionClassLabel;
private Text exceptionClassText;
private ExceptionHandler exceptionHandler;
private ExceptionHandlerConfigurationComposite() {}
public void setExceptionHandler(ExceptionHandler exceptionHandler) {
if (this.exceptionHandler == exceptionHandler) return;
unhookListeners();
this.exceptionHandler = exceptionHandler;
if (exceptionHandler == null) {
clearControls();
} else {
updateControls();
hookListeners();
}
}
private void hookListeners() {
exceptionClassText.addFocusListener(this);
}
private void unhookListeners() {
exceptionClassText.removeFocusListener(this);
}
private void clearControls() {
exceptionClassText.setText("");
}
private void updateControls() {
String exceptionClass = exceptionHandler.getExceptionClass();
if (exceptionClass != null) {
exceptionClassText.setText(exceptionClass);
} else {
exceptionClassText.setText("");
}
}
private void create() {
exceptionClassLabel = widgetFactory.createLabel(parent, "Exception class");
exceptionClassText = widgetFactory.createText(parent, "");
exceptionClassText.setText("");
exceptionClassLabel.setLayoutData(createExceptionClassLabelLayoutData());
exceptionClassText.setLayoutData(createExceptionClassTextLayoutData());
}
private FormData createExceptionClassTextLayoutData() {
FormData data = new FormData();
data.left = new FormAttachment(exceptionClassLabel, 0);
data.right = new FormAttachment(100, 0);
data.top = new FormAttachment(0, 0);
return data;
}
private FormData createExceptionClassLabelLayoutData() {
FormData data = new FormData();
data.left = new FormAttachment(0, 0);
data.top = new FormAttachment(0, 2);
data.bottom = new FormAttachment(100, 0);
return data;
}
public void focusGained(FocusEvent e) {
}
public void focusLost(FocusEvent e) {
if (e.widget == exceptionClassText) {
exceptionHandler.setExceptionClass(exceptionClassText.getText());
}
}
}