package org.jbpm.gd.jpdl.properties; import org.eclipse.swt.SWT; 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.MailElement; import org.jbpm.gd.jpdl.model.Subject; public class MailElementMailInfoConfigurationComposite implements SelectionListener, FocusListener { public static MailElementMailInfoConfigurationComposite create(TabbedPropertySheetWidgetFactory widgetFactory, Composite parent) { MailElementMailInfoConfigurationComposite result = new MailElementMailInfoConfigurationComposite(); result.widgetFactory = widgetFactory; result.parent = parent; result.create(); return result; } private TabbedPropertySheetWidgetFactory widgetFactory; private Composite parent; private MailElement mailElement; private Label destinationLabel; private CCombo destinationCombo; private Text destinationText; private Label subjectLabel; private Text subjectText; private Label bodyLabel; private Text bodyText; public void setMailElement(MailElement mailElement) { if (this.mailElement == mailElement) return; unhookListeners(); this.mailElement = mailElement; if (mailElement == null) { clearControls(); } else { updateControls(); hookListeners(); } } private void hookListeners() { destinationCombo.addSelectionListener(this); destinationText.addFocusListener(this); subjectText.addFocusListener(this); bodyText.addFocusListener(this); } private void unhookListeners() { destinationCombo.removeSelectionListener(this); destinationText.addFocusListener(this); subjectText.removeFocusListener(this); bodyText.removeFocusListener(this); } private void clearControls() { destinationCombo.setText("To"); destinationText.setText(""); subjectText.setText(""); bodyText.setText(""); } private void updateControls() { destinationCombo.setText(mailElement.getActors() != null ? "Actors" : "To"); if (mailElement.getActors() != null) { destinationCombo.setText("Actors"); destinationText.setText(mailElement.getActors()); } else { destinationCombo.setText("To"); destinationText.setText(mailElement.getTo() == null ? "" : mailElement.getTo()); } subjectText.setText(getSubjectText()); bodyText.setText(getBodyText()); } private String getSubjectText() { String result = ""; Subject subject = mailElement.getSubject(); if (subject != null) { result = subject.getSubject() == null ? "" : subject.getSubject(); } return result; } private String getBodyText() { String result = ""; if (mailElement.getText() != null) { result = mailElement.getText().getText() == null ? "" : mailElement.getText().getText(); } return result; } private void create() { destinationLabel = widgetFactory.createLabel(parent, "Destination"); destinationCombo = widgetFactory.createCCombo(parent); destinationCombo.setItems(new String[] { "To", "Actors"}); destinationCombo.setText("To"); destinationText = widgetFactory.createText(parent, ""); subjectLabel = widgetFactory.createLabel(parent, "Subject"); subjectText = widgetFactory.createText(parent, ""); bodyLabel = widgetFactory.createLabel(parent, "Body"); bodyText = widgetFactory.createText(parent, "", SWT.MULTI | SWT.V_SCROLL); destinationLabel.setLayoutData(createDestinationLabelLayoutData()); destinationCombo.setLayoutData(createDestinationComboLayoutData()); destinationText.setLayoutData(createDestinationTextLayoutData()); subjectLabel.setLayoutData(createSubjectLabelLayoutData()); subjectText.setLayoutData(createSubjectTextLayoutData()); bodyLabel.setLayoutData(createBodyLabelLayoutData()); bodyText.setLayoutData(createBodyTextLayoutData()); } private FormData createDestinationLabelLayoutData() { FormData data = new FormData(); data.left = new FormAttachment(0, 0); data.top = new FormAttachment(0, 3); return data; } private FormData createDestinationComboLayoutData() { FormData data = new FormData(); data.left = new FormAttachment(destinationLabel, 0); data.top = new FormAttachment(0, 0); return data; } private FormData createDestinationTextLayoutData() { FormData data = new FormData(); data.left = new FormAttachment(destinationCombo, 0); data.top = new FormAttachment(0, 2); data.right = new FormAttachment(100, 0); return data; } private FormData createSubjectLabelLayoutData() { FormData data = new FormData(); data.left = new FormAttachment(0, 0); data.top = new FormAttachment(destinationCombo, 0); return data; } private FormData createSubjectTextLayoutData() { FormData data = new FormData(); data.left = new FormAttachment(destinationCombo, 0); data.left.alignment = SWT.LEFT; data.top = new FormAttachment(destinationCombo, 0); data.right = new FormAttachment(100, 0); return data; } private FormData createBodyLabelLayoutData() { FormData data = new FormData(); data.left = new FormAttachment(0, 0); data.top = new FormAttachment(subjectText, 0); return data; } private FormData createBodyTextLayoutData() { FormData data = new FormData(); data.left = new FormAttachment(destinationCombo, 0); data.left.alignment = SWT.LEFT; data.top = new FormAttachment(subjectText, 0); data.right = new FormAttachment(100, 0); data.bottom = new FormAttachment(100, 0); data.height = 50; return data; } public void widgetDefaultSelected(SelectionEvent e) { } private void updateSubject() { Subject subject = mailElement.getSubject(); if (subject == null) { subject = (Subject)mailElement.getFactory().createById("org.jbpm.gd.jpdl.subject"); mailElement.setSubject(subject); } subject.setSubject(subjectText.getText()); } private void updateBody() { org.jbpm.gd.jpdl.model.Text text = mailElement.getText(); if (text == null) { text = (org.jbpm.gd.jpdl.model.Text)mailElement.getFactory().createById("org.jbpm.gd.jpdl.text"); mailElement.setText(text); } text.setText(bodyText.getText()); } public void widgetSelected(SelectionEvent e) { if (e.widget == destinationCombo) { updateDestination(); } } private void updateDestination() { String str = destinationText.getText(); if ("To".equals(destinationCombo.getText())) { mailElement.setTo(str == null ? "" : str); mailElement.setActors(null); } else { mailElement.setTo(null); mailElement.setActors(str == null ? "" : str); } } public void focusGained(FocusEvent e) { } public void focusLost(FocusEvent e) { if (e.widget == destinationText) { updateDestination(); } else if (e.widget == subjectText) { updateSubject(); } else if (e.widget == bodyText) { updateBody(); } } }