package tech.powerjob.server.core.service; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import tech.powerjob.common.enums.WorkflowNodeType; import tech.powerjob.server.core.validator.NodeValidator; import tech.powerjob.server.core.workflow.algorithm.WorkflowDAG; import tech.powerjob.server.persistence.remote.model.WorkflowNodeInfoDO; import java.util.EnumMap; import java.util.List; import java.util.Map; /** * @author Echo009 * @since 2021/12/14 */ @Service @Slf4j public class NodeValidateService { private final Map nodeValidatorMap; public NodeValidateService(List nodeValidators) { nodeValidatorMap = new EnumMap<>(WorkflowNodeType.class); nodeValidators.forEach(e -> nodeValidatorMap.put(e.matchingType(), e)); } public void complexValidate(WorkflowNodeInfoDO node, WorkflowDAG dag) { NodeValidator nodeValidator = getNodeValidator(node); if (nodeValidator == null) { // 默认不需要校验 return; } nodeValidator.complexValidate(node, dag); } public void simpleValidate(WorkflowNodeInfoDO node) { NodeValidator nodeValidator = getNodeValidator(node); if (nodeValidator == null) { // 默认不需要校验 return; } nodeValidator.simpleValidate(node); } private NodeValidator getNodeValidator(WorkflowNodeInfoDO node) { Integer nodeTypeCode = node.getType(); if (nodeTypeCode == null) { // 前向兼容,默认为 任务节点 return nodeValidatorMap.get(WorkflowNodeType.JOB); } return nodeValidatorMap.get(WorkflowNodeType.of(nodeTypeCode)); } }