package org.activiti.designer.util.property;
import org.activiti.bpmn.model.FieldExtension;
import org.activiti.bpmn.model.ServiceTask;
import org.activiti.designer.util.editor.Bpmn2MemoryModel;
import org.activiti.designer.util.editor.ModelHandler;
import org.apache.commons.lang.StringUtils;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.emf.transaction.TransactionalEditingDomain;
import org.eclipse.graphiti.features.IFeatureProvider;
import org.eclipse.graphiti.mm.pictograms.Diagram;
import org.eclipse.graphiti.mm.pictograms.PictogramElement;
import org.eclipse.graphiti.platform.IDiagramEditor;
import org.eclipse.graphiti.ui.platform.GFPropertySection;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.part.IContributedContentsView;
public abstract class ActivitiPropertySection extends GFPropertySection {
/**
* @return the {@link IDiagramEditor} diagram editor.
*/
@Override
protected IDiagramEditor getDiagramEditor() {
IWorkbenchPart part = getPart();
if (part instanceof IContributedContentsView) {
IContributedContentsView contributedView = (IContributedContentsView) part
.getAdapter(IContributedContentsView.class);
if (contributedView != null) {
part = contributedView.getContributingPart();
}
}
if (part instanceof IDiagramEditor) {
return (IDiagramEditor) part;
}
return null;
}
/**
* Returns the transactional editing domain of the current diagram editor.
*
* @return the transactional editing domain of the diagram editor.
*/
protected TransactionalEditingDomain getTransactionalEditingDomain() {
final IDiagramEditor de = getDiagramEditor();
if (de != null) {
return de.getEditingDomain();
}
return null;
}
/**
* Returns the default business object for the currently selected pictogram element in the
* diagram.
*
* @param clazz the class of the business object
* @return the business object or <code>null</code> if either no pictogram element is selected
* or no business object is found.
*/
protected <T> T getDefaultBusinessObject(Class<T> clazz) {
final PictogramElement pe = getSelectedPictogramElement();
if (pe == null) {
return null;
}
return clazz.cast(getBusinessObject(pe));
}
protected Object getBusinessObject(PictogramElement element) {
Diagram diagram = getContainer(element);
Bpmn2MemoryModel model = ModelHandler.getModel(EcoreUtil.getURI(diagram));
if(model != null) {
return model.getFeatureProvider().getBusinessObjectForPictogramElement(element);
}
return null;
}
protected IFeatureProvider getFeatureProvider(PictogramElement element) {
Diagram diagram = getContainer(element);
Bpmn2MemoryModel model = ModelHandler.getModel(EcoreUtil.getURI(diagram));
if(model != null) {
return model.getFeatureProvider();
}
return null;
}
private Diagram getContainer(EObject container) {
if(container instanceof Diagram) {
return (Diagram) container;
} else {
return getContainer(container.eContainer());
}
}
protected String getFieldString(String fieldname, ServiceTask mailTask) {
String result = null;
for(FieldExtension extension : mailTask.getFieldExtensions()) {
if (fieldname.equalsIgnoreCase(extension.getFieldName())) {
if (StringUtils.isNotEmpty(extension.getExpression())) {
result = extension.getExpression();
} else {
result = extension.getStringValue();
}
}
}
if (result == null) {
result = "";
}
return result;
}
protected void setFieldString(String fieldname, String fieldValue, ServiceTask mailTask) {
FieldExtension fieldExtension = null;
for(FieldExtension extension : mailTask.getFieldExtensions()) {
if (fieldname.equalsIgnoreCase(extension.getFieldName())) {
fieldExtension = extension;
}
}
if (fieldExtension == null) {
fieldExtension = new FieldExtension();
fieldExtension.setFieldName(fieldname);
mailTask.getFieldExtensions().add(fieldExtension);
}
if (fieldValue != null && fieldValue.contains("${") || fieldValue.contains("#{")) {
fieldExtension.setExpression(fieldValue);
} else {
fieldExtension.setStringValue(fieldValue);
}
}
}