package com.alfresco.designer.gui.property; import org.activiti.designer.util.eclipse.ActivitiUiUtil; import org.activiti.designer.util.property.ActivitiPropertySection; import org.eclipse.bpmn2.AlfrescoMailTask; 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 PropertyAlfrescoMailTaskSection extends ActivitiPropertySection implements ITabbedPropertyConstants { private Text toText; private Text toManyText; private Text fromText; private Text subjectText; private Text htmlText; private Text nonHtmlText; private Text templateText; private Text templateModelText; @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$ toManyText = createControl(composite, toText, false); createLabel(composite, "To many:", toManyText); //$NON-NLS-1$ fromText = createControl(composite, toManyText, false); createLabel(composite, "From:", fromText); //$NON-NLS-1$ subjectText = createControl(composite, fromText, false); createLabel(composite, "Subject:", subjectText); //$NON-NLS-1$ templateText = createControl(composite, subjectText, false); createLabel(composite, "Template:", templateText); //$NON-NLS-1$ templateModelText = createControl(composite, templateText, false); createLabel(composite, "Template model:", templateModelText); //$NON-NLS-1$ htmlText = createControl(composite, templateModelText, true); createLabel(composite, "Html:", htmlText); //$NON-NLS-1$ nonHtmlText = createControl(composite, htmlText, true); createLabel(composite, "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); toManyText.removeFocusListener(listener); fromText.removeFocusListener(listener); subjectText.removeFocusListener(listener); templateText.removeFocusListener(listener); templateModelText.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; AlfrescoMailTask mailTask = (AlfrescoMailTask) bo; toText.setText(mailTask.getTo() == null ? "" : mailTask.getTo()); toManyText.setText(mailTask.getToMany() == null ? "" : mailTask.getToMany()); fromText.setText(mailTask.getFrom() == null ? "" : mailTask.getFrom()); subjectText.setText(mailTask.getSubject() == null ? "" : mailTask.getSubject()); templateText.setText(mailTask.getTemplate() == null ? "" : mailTask.getTemplate()); templateModelText.setText(mailTask.getTemplateModel() == null ? "" : mailTask.getTemplateModel()); htmlText.setText(mailTask.getHtml() == null ? "" : mailTask.getHtml()); nonHtmlText.setText(mailTask.getText() == null ? "" : mailTask.getText()); toText.addFocusListener(listener); toManyText.addFocusListener(listener); fromText.addFocusListener(listener); subjectText.addFocusListener(listener); templateText.addFocusListener(listener); templateModelText.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 AlfrescoMailTask) { 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; } AlfrescoMailTask mailTask = (AlfrescoMailTask) bo; if (toText.getText() != null) { mailTask.setTo(toText.getText()); } if (toManyText.getText() != null) { mailTask.setToMany(toManyText.getText()); } if (fromText.getText() != null) { mailTask.setFrom(fromText.getText()); } if (subjectText.getText() != null) { mailTask.setSubject(subjectText.getText()); } if (templateText.getText() != null) { mailTask.setTemplate(templateText.getText()); } if (templateModelText.getText() != null) { mailTask.setTemplateModel(templateModelText.getText()); } if (htmlText.getText() != null) { mailTask.setHtml(htmlText.getText()); } if (nonHtmlText.getText() != null) { mailTask.setText(nonHtmlText.getText()); } } }, editingDomain, "Model Update"); } } } }; }