package org.activiti.designer.property;
import org.activiti.bpmn.model.ServiceTask;
import org.activiti.designer.util.eclipse.ActivitiUiUtil;
import org.activiti.designer.util.property.ActivitiPropertySection;
import org.eclipse.emf.transaction.TransactionalEditingDomain;
import org.eclipse.graphiti.mm.pictograms.PictogramElement;
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 charsetText;
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$
charsetText = createControl(composite, bccText, false);
createLabel(composite, "Charset:", charsetText); //$NON-NLS-1$
htmlText = createControl(composite, charsetText, 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);
charsetText.removeFocusListener(listener);
htmlText.removeFocusListener(listener);
nonHtmlText.removeFocusListener(listener);
Object bo = getBusinessObject(pe);
// the filter assured, that it is a EClass
if (bo == null)
return;
ServiceTask mailTask = (ServiceTask) bo;
toText.setText(getFieldString("to", mailTask));
fromText.setText(getFieldString("from", mailTask));
subjectText.setText(getFieldString("subject", mailTask));
ccText.setText(getFieldString("cc", mailTask));
bccText.setText(getFieldString("bcc", mailTask));
charsetText.setText(getFieldString("charset", mailTask));
htmlText.setText(getFieldString("html", mailTask));
nonHtmlText.setText(getFieldString("text", mailTask));
toText.addFocusListener(listener);
fromText.addFocusListener(listener);
subjectText.addFocusListener(listener);
ccText.addFocusListener(listener);
bccText.addFocusListener(listener);
charsetText.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) {
final Object bo = getBusinessObject(pe);
if (bo instanceof ServiceTask) {
DiagramEditor diagramEditor = (DiagramEditor) getDiagramEditor();
TransactionalEditingDomain editingDomain = diagramEditor.getEditingDomain();
ActivitiUiUtil.runModelChange(new Runnable() {
public void run() {
ServiceTask mailTask = (ServiceTask) bo;
setFieldString("to", toText.getText(), mailTask);
setFieldString("from", fromText.getText(), mailTask);
setFieldString("subject", subjectText.getText(), mailTask);
setFieldString("cc", ccText.getText(), mailTask);
setFieldString("bcc", bccText.getText(), mailTask);
setFieldString("charset", charsetText.getText(), mailTask);
setFieldString("html", htmlText.getText(), mailTask);
setFieldString("text", nonHtmlText.getText(), mailTask);
}
}, editingDomain, "Model Update");
}
}
}
};
}