package org.activiti.designer.features;
import java.util.List;
import org.activiti.bpmn.model.ImplementationType;
import org.activiti.bpmn.model.ServiceTask;
import org.activiti.designer.PluginImage;
import org.activiti.designer.integration.servicetask.CustomServiceTask;
import org.activiti.designer.util.eclipse.ActivitiUiUtil;
import org.activiti.designer.util.extension.ExtensionUtil;
import org.eclipse.graphiti.features.IFeatureProvider;
import org.eclipse.graphiti.features.context.ICreateContext;
public class CreateServiceTaskFeature extends AbstractCreateFastBPMNFeature {
public static final String FEATURE_ID_KEY = "servicetask";
private String customServiceTaskId;
public CreateServiceTaskFeature(IFeatureProvider fp) {
super(fp, "ServiceTask", "Add service task");
}
public CreateServiceTaskFeature(IFeatureProvider fp, String name, String description, String customServiceTaskId) {
super(fp, name, description);
this.customServiceTaskId = customServiceTaskId;
}
@Override
public Object[] create(ICreateContext context) {
ServiceTask newServiceTask = new ServiceTask();
newServiceTask.setName("Service Task");
newServiceTask.setExtensionId(customServiceTaskId);
// Process custom service tasks
if (newServiceTask.isExtended()) {
CustomServiceTask targetTask = findCustomServiceTask(newServiceTask);
if (targetTask != null) {
newServiceTask.setImplementationType(ImplementationType.IMPLEMENTATION_TYPE_CLASS);
newServiceTask.setImplementation(targetTask.getRuntimeClassname());
newServiceTask.setName(targetTask.getName());
}
}
addObjectToContainer(context, newServiceTask, newServiceTask.getName());
return new Object[] { newServiceTask };
}
private CustomServiceTask findCustomServiceTask(ServiceTask serviceTask) {
CustomServiceTask result = null;
if (serviceTask.isExtended()) {
final List<CustomServiceTask> customServiceTasks = ExtensionUtil.getCustomServiceTasks(ActivitiUiUtil.getProjectFromDiagram(getDiagram()));
for (final CustomServiceTask customServiceTask : customServiceTasks) {
if (serviceTask.getExtensionId().equals(customServiceTask.getId())) {
result = customServiceTask;
break;
}
}
}
return result;
}
@Override
public String getCreateImageId() {
return PluginImage.IMG_SERVICETASK.getImageKey();
}
@Override
protected String getFeatureIdKey() {
return FEATURE_ID_KEY;
}
}