package org.activiti.designer.validation.bpmn20.validation.worker.impl;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.activiti.bpmn.model.FlowElement;
import org.activiti.bpmn.model.ServiceTask;
import org.activiti.bpmn.model.SubProcess;
import org.activiti.designer.validation.bpmn20.validation.worker.ProcessValidationWorker;
import org.activiti.designer.validation.bpmn20.validation.worker.ProcessValidationWorkerMarker;
import org.eclipse.graphiti.mm.pictograms.Diagram;
/**
* Validates process according to {@link ValidationCode#VAL_004}.
*
* @author Tiese Barrell
* @since 5.6
* @version 1
*/
public class ServiceTaskValidationWorker implements ProcessValidationWorker {
private static final String NO_CLASS_EXCEPTION_MESSAGE_PATTERN = "ServiceTask '%s' has no class specified";
@Override
public Collection<ProcessValidationWorkerMarker> validate(final Diagram diagram, final Map<String, List<Object>> processNodes) {
final Collection<ProcessValidationWorkerMarker> result = new ArrayList<ProcessValidationWorkerMarker>();
final List<Object> serviceTasks = processNodes.get(ServiceTask.class.getCanonicalName());
if (serviceTasks != null && !serviceTasks.isEmpty()) {
for (final Object object : serviceTasks) {
}
}
final List<Object> subProcesses = processNodes.get(SubProcess.class.getCanonicalName());
if (subProcesses != null && !subProcesses.isEmpty()) {
for (final Object object : subProcesses) {
final SubProcess subProcess = (SubProcess) object;
final Map<String, List<Object>> subElementsMap = new HashMap<String, List<Object>>();
for (final FlowElement subElement : subProcess.getFlowElements()) {
String nodeType = subElement.getClass().getCanonicalName();
if (nodeType != null) {
if (!subElementsMap.containsKey(nodeType)) {
subElementsMap.put(nodeType, new ArrayList<Object>());
}
subElementsMap.get(nodeType).add(subElement);
}
}
result.addAll(validate(diagram, subElementsMap));
}
}
return result;
}
}