package org.jbpm.gd.jpdl.properties; import org.eclipse.swt.custom.CCombo; import org.eclipse.swt.events.FocusEvent; import org.eclipse.swt.events.FocusListener; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; 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.EsbElement; public class EsbGeneralConfigurationComposite implements FocusListener, SelectionListener { public static EsbGeneralConfigurationComposite create(TabbedPropertySheetWidgetFactory widgetFactory, Composite parent) { EsbGeneralConfigurationComposite result = new EsbGeneralConfigurationComposite(); result.widgetFactory = widgetFactory; result.parent = parent; result.create(); return result; } private TabbedPropertySheetWidgetFactory widgetFactory; private Composite parent; private Label serviceNameLabel; private Text serviceNameText; private Label categoryNameLabel; private Text categoryNameText; private Label replyToFaultToLabel; private CCombo replyToFaultToCombo; private EsbElement esbElement; private EsbGeneralConfigurationComposite() {} public void setEsbElement(EsbElement esbElement) { if (this.esbElement == esbElement) return; unhookListeners(); clearControls(); this.esbElement = esbElement; if (esbElement != null) { updateControls(); hookListeners(); } } private void hookListeners() { serviceNameText.addFocusListener(this); categoryNameText.addFocusListener(this); replyToFaultToCombo.addSelectionListener(this); } private void unhookListeners() { serviceNameText.removeFocusListener(this); categoryNameText.removeFocusListener(this); replyToFaultToCombo.removeSelectionListener(this); } private void clearControls() { serviceNameText.setText(""); categoryNameText.setText(""); replyToFaultToCombo.setText(""); } private void updateControls() { serviceNameText.setText(esbElement.getServiceName() == null ? "" : esbElement.getServiceName()); categoryNameText.setText(esbElement.getCategoryName() == null ? "" : esbElement.getCategoryName()); replyToFaultToCombo.setText(esbElement.getReplyToOriginator() == null ? "" : esbElement.getReplyToOriginator()); } private void create() { serviceNameLabel = widgetFactory.createLabel(parent, "Service"); serviceNameText = widgetFactory.createText(parent, ""); categoryNameLabel = widgetFactory.createLabel(parent, "Category"); categoryNameText = widgetFactory.createText(parent, ""); replyToFaultToLabel = widgetFactory.createLabel(parent, "Reply/Fault"); replyToFaultToCombo = widgetFactory.createCCombo(parent); replyToFaultToCombo.add(""); replyToFaultToCombo.add("reply"); replyToFaultToCombo.add("fault"); replyToFaultToCombo.setText(""); serviceNameLabel.setLayoutData(createServiceNameLabelLayoutData()); serviceNameText.setLayoutData(createServiceNameTextLayoutData()); categoryNameLabel.setLayoutData(createCategoryNameLabelLayoutData()); categoryNameText.setLayoutData(createCategoryNameTextLayoutData()); replyToFaultToLabel.setLayoutData(createReplyToFaultToLabelLayoutData()); replyToFaultToCombo.setLayoutData(createReplyToFaultToComboLayoutData()); } private FormData createReplyToFaultToLabelLayoutData() { FormData data = new FormData(); data.left = new FormAttachment(0, 0); data.top = new FormAttachment(categoryNameText, 5); return data; } private FormData createReplyToFaultToComboLayoutData() { FormData data = new FormData(); data.left = new FormAttachment(replyToFaultToLabel, 5); data.top = new FormAttachment(categoryNameText, 0); return data; } private FormData createServiceNameTextLayoutData() { FormData data = new FormData(); data.left = new FormAttachment(replyToFaultToLabel, 5); data.top = new FormAttachment(0, 0); data.right = new FormAttachment(100, 0); return data; } private FormData createCategoryNameTextLayoutData() { FormData data = new FormData(); data.left = new FormAttachment(replyToFaultToLabel, 5); data.top = new FormAttachment(serviceNameText, 0); data.right = new FormAttachment(100, 0); return data; } private FormData createServiceNameLabelLayoutData() { FormData data = new FormData(); data.left = new FormAttachment(0, 0); data.top = new FormAttachment(0, 5); return data; } private FormData createCategoryNameLabelLayoutData() { FormData data = new FormData(); data.left = new FormAttachment(0, 0); data.top = new FormAttachment(serviceNameText, 5); return data; } public void focusGained(FocusEvent e) { } public void focusLost(FocusEvent e) { if (e.widget == serviceNameText) { updateServiceName(); } else if (e.widget == categoryNameText) { updateCategoryName(); } } public void widgetDefaultSelected(SelectionEvent e) { } public void widgetSelected(SelectionEvent e) { if (e.widget == replyToFaultToCombo) { updateReplyToFaultTo(); } } private void updateServiceName() { String name = serviceNameText.getText(); if ("".equals(name)) { name = null; } esbElement.setServiceName(name); } private void updateCategoryName() { String name = categoryNameText.getText(); if ("".equals(name)) { name = null; } esbElement.setCategoryName(name); } private void updateReplyToFaultTo() { String value = replyToFaultToCombo.getText(); if ("".equals(value)) { value = null; } esbElement.setReplyToOriginator(value); } }