package org.activiti.designer.validation.bpmn20.validation.worker.impl;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import org.activiti.bpmn.model.SequenceFlow;
import org.activiti.designer.validation.bpmn20.validation.worker.ProcessValidationWorker;
import org.activiti.designer.validation.bpmn20.validation.worker.ProcessValidationWorkerMarker;
import org.apache.commons.lang.StringUtils;
import org.eclipse.core.resources.IMarker;
import org.eclipse.graphiti.mm.pictograms.Diagram;
/**
* Validates process according to {@link ValidationCode#VAL_005} and
* {@link ValidationCode#VAL_006}.
*
* @author Tiese Barrell
* @since 5.6
* @version 1
*/
public class SequenceFlowValidationWorker implements ProcessValidationWorker {
private static final String NO_SOURCE_ACTIVITY_EXCEPTION_MESSAGE_PATTERN = "SequenceFlow '%s' has no source activity";
private static final String NO_TARGET_ACTIVITY_EXCEPTION_MESSAGE_PATTERN = "SequenceFlow '%s' has no target activity";
@Override
public Collection<ProcessValidationWorkerMarker> validate(final Diagram diagram, final Map<String, List<Object>> processNodes) {
final Collection<ProcessValidationWorkerMarker> result = new ArrayList<ProcessValidationWorkerMarker>();
final List<Object> sequenceFlows = processNodes.get(SequenceFlow.class.getCanonicalName());
if (sequenceFlows != null && !sequenceFlows.isEmpty()) {
for (final Object object : sequenceFlows) {
final SequenceFlow sequenceFlow = (SequenceFlow) object;
if (StringUtils.isEmpty(sequenceFlow.getSourceRef())) {
result.add(new ProcessValidationWorkerMarker(IMarker.SEVERITY_ERROR, String.format(NO_SOURCE_ACTIVITY_EXCEPTION_MESSAGE_PATTERN,
sequenceFlow.getName()), sequenceFlow.getId(), ValidationCode.VAL_005));
}
if (StringUtils.isEmpty(sequenceFlow.getTargetRef())) {
result.add(new ProcessValidationWorkerMarker(IMarker.SEVERITY_ERROR, String.format(NO_TARGET_ACTIVITY_EXCEPTION_MESSAGE_PATTERN,
sequenceFlow.getName()), sequenceFlow.getId(), ValidationCode.VAL_006));
}
}
}
return result;
}
}