package org.activiti.designer.property;
import org.activiti.designer.util.eclipse.ActivitiUiUtil;
import org.activiti.designer.util.property.ActivitiPropertySection;
import org.eclipse.bpmn2.MailTask;
import org.eclipse.emf.transaction.TransactionalEditingDomain;
import org.eclipse.graphiti.mm.pictograms.PictogramElement;
import org.eclipse.graphiti.services.Graphiti;
import org.eclipse.graphiti.ui.editor.DiagramEditor;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.CLabel;
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.Text;
import org.eclipse.ui.views.properties.tabbed.ITabbedPropertyConstants;
import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage;
import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
public class PropertyMailTaskSection extends ActivitiPropertySection implements ITabbedPropertyConstants {
private Text toText;
private Text fromText;
private Text subjectText;
private Text ccText;
private Text bccText;
private Text htmlText;
private Text nonHtmlText;
@Override
public void createControls(Composite parent, TabbedPropertySheetPage tabbedPropertySheetPage) {
super.createControls(parent, tabbedPropertySheetPage);
TabbedPropertySheetWidgetFactory factory = getWidgetFactory();
Composite composite = factory.createFlatFormComposite(parent);
toText = createControl(composite, null, false);
createLabel(composite, "To:", toText); //$NON-NLS-1$
fromText = createControl(composite, toText, false);
createLabel(composite, "From:", fromText); //$NON-NLS-1$
subjectText = createControl(composite, fromText, false);
createLabel(composite, "Subject:", subjectText); //$NON-NLS-1$
ccText = createControl(composite, subjectText, false);
createLabel(composite, "Cc:", ccText); //$NON-NLS-1$
bccText = createControl(composite, ccText, false);
createLabel(composite, "Bcc:", bccText); //$NON-NLS-1$
htmlText = createControl(composite, bccText, true);
createLabel(composite, "Html text:", htmlText); //$NON-NLS-1$
nonHtmlText = createControl(composite, htmlText, true);
createLabel(composite, "Non-Html text:", nonHtmlText); //$NON-NLS-1$
}
private Text createControl(Composite composite, Text otherTextControl, boolean multi) {
Text textControl = null;
FormData data = null;
if(multi == true) {
textControl = getWidgetFactory().createText(composite, "", SWT.MULTI | SWT.BORDER | SWT.WRAP | SWT.V_SCROLL);
data = new FormData(SWT.DEFAULT, 100);
} else {
textControl = getWidgetFactory().createText(composite, "", SWT.NONE);
data = new FormData();
}
data.left = new FormAttachment(0, 120);
data.right = new FormAttachment(100, 0);
if(otherTextControl == null) {
data.top = new FormAttachment(0, VSPACE);
} else {
data.top = new FormAttachment(otherTextControl, VSPACE);
}
textControl.setLayoutData(data);
textControl.addFocusListener(listener);
return textControl;
}
private CLabel createLabel(Composite composite, String labelName, Text textControl) {
CLabel labelControl = getWidgetFactory().createCLabel(composite, labelName); //$NON-NLS-1$
FormData data = new FormData();
data.left = new FormAttachment(0, 0);
data.right = new FormAttachment(textControl, -HSPACE);
data.top = new FormAttachment(textControl, 0, SWT.CENTER);
labelControl.setLayoutData(data);
return labelControl;
}
@Override
public void refresh() {
PictogramElement pe = getSelectedPictogramElement();
if (pe != null) {
toText.removeFocusListener(listener);
fromText.removeFocusListener(listener);
subjectText.removeFocusListener(listener);
ccText.removeFocusListener(listener);
bccText.removeFocusListener(listener);
htmlText.removeFocusListener(listener);
nonHtmlText.removeFocusListener(listener);
Object bo = Graphiti.getLinkService().getBusinessObjectForLinkedPictogramElement(pe);
// the filter assured, that it is a EClass
if (bo == null)
return;
MailTask mailTask = (MailTask) bo;
toText.setText(mailTask.getTo() == null ? "" : mailTask.getTo());
fromText.setText(mailTask.getFrom() == null ? "" : mailTask.getFrom());
subjectText.setText(mailTask.getSubject() == null ? "" : mailTask.getSubject());
ccText.setText(mailTask.getCc() == null ? "" : mailTask.getCc());
bccText.setText(mailTask.getBcc() == null ? "" : mailTask.getBcc());
htmlText.setText(mailTask.getHtml() == null ? "" : mailTask.getHtml());
nonHtmlText.setText(mailTask.getText() == null ? "" : mailTask.getText());
toText.addFocusListener(listener);
fromText.addFocusListener(listener);
subjectText.addFocusListener(listener);
ccText.addFocusListener(listener);
bccText.addFocusListener(listener);
htmlText.addFocusListener(listener);
nonHtmlText.addFocusListener(listener);
}
}
private FocusListener listener = new FocusListener() {
public void focusGained(final FocusEvent e) {
}
public void focusLost(final FocusEvent e) {
PictogramElement pe = getSelectedPictogramElement();
if (pe != null) {
Object bo = Graphiti.getLinkService().getBusinessObjectForLinkedPictogramElement(pe);
if (bo instanceof MailTask) {
DiagramEditor diagramEditor = (DiagramEditor) getDiagramEditor();
TransactionalEditingDomain editingDomain = diagramEditor.getEditingDomain();
ActivitiUiUtil.runModelChange(new Runnable() {
public void run() {
Object bo = Graphiti.getLinkService().getBusinessObjectForLinkedPictogramElement(getSelectedPictogramElement());
if (bo == null) {
return;
}
MailTask mailTask = (MailTask) bo;
if (toText.getText() != null) {
mailTask.setTo(toText.getText());
}
if (fromText.getText() != null) {
mailTask.setFrom(fromText.getText());
}
if (subjectText.getText() != null) {
mailTask.setSubject(subjectText.getText());
}
if (ccText.getText() != null) {
mailTask.setCc(ccText.getText());
}
if (bccText.getText() != null) {
mailTask.setBcc(bccText.getText());
}
if (htmlText.getText() != null) {
mailTask.setHtml(htmlText.getText());
}
if (nonHtmlText.getText() != null) {
mailTask.setText(nonHtmlText.getText());
}
}
}, editingDomain, "Model Update");
}
}
}
};
}