Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import com.codingapi.flow.context.RepositoryContext;
import com.codingapi.flow.event.FlowRecordTodoEvent;
import com.codingapi.flow.event.IFlowEvent;
import com.codingapi.flow.exception.FlowConfigException;
import com.codingapi.flow.node.IFlowNode;
import com.codingapi.flow.record.FlowRecord;
import com.codingapi.flow.script.action.RejectActionScript;
Expand Down Expand Up @@ -74,7 +75,7 @@ public List<FlowRecord> generateRecords(FlowSession flowSession) {
currentNode = flowSession.getWorkflow().getEndNode();
}
if (currentNode == null) {
throw new IllegalArgumentException("currentNode is null");
throw FlowConfigException.currentNodeNotNull();
}
flowSession = flowSession.updateSession(currentNode);
return currentNode.generateCurrentRecords(flowSession);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,128 @@
package com.codingapi.flow.exception;

/**
* 流程配置异常
* <p>
* 当流程配置不正确时抛出此异常
* 例如:节点配置错误、边配置错误、策略配置错误等
*
* @since 1.0.0
*/
public class FlowConfigException extends FlowException {

private static final long serialVersionUID = 1L;

/**
* 错误码前缀
*/
public static final String ERROR_CODE_PREFIX = "FLOW_CONFIG_";

/**
* 构造函数
*
* @param message 错误信息
*/
public FlowConfigException(String message) {
super(ERROR_CODE_PREFIX + "000", message);
}

/**
* 构造函数
*
* @param errorCode 错误码
* @param message 错误信息
*/
public FlowConfigException(String errorCode, String message) {
super(ERROR_CODE_PREFIX + errorCode, message);
}

/**
* 构造函数
*
* @param errorCode 错误码
* @param message 错误信息
* @param cause 原因
*/
public FlowConfigException(String errorCode, String message, Throwable cause) {
super(ERROR_CODE_PREFIX + errorCode, message, cause);
}

/**
* 策略不能为空
*
* @return 异常
*/
public static FlowConfigException strategiesNotNull() {
return new FlowConfigException("001", "strategies can not be null");
}

/**
* 动作不能为空
*
* @return 异常
*/
public static FlowConfigException actionsNotNull() {
return new FlowConfigException("002", "actions can not be null");
}

/**
* 节点配置错误
*
* @param nodeName 节点名称
* @param reason 原因
* @return 异常
*/
public static FlowConfigException nodeConfigError(String nodeName, String reason) {
return new FlowConfigException("003",
String.format("node '%s' configuration error: %s", nodeName, reason));
}

/**
* 边配置错误
*
* @param reason 原因
* @return 异常
*/
public static FlowConfigException edgeConfigError(String reason) {
return new FlowConfigException("004", String.format("edge configuration error: %s", reason));
}

/**
* 表单配置错误
*
* @param formName 表单名称
* @param reason 原因
* @return 异常
*/
public static FlowConfigException formConfigError(String formName, String reason) {
return new FlowConfigException("005",
String.format("form '%s' configuration error: %s", formName, reason));
}

/**
* 视图不能为空
*
* @return 异常
*/
public static FlowConfigException viewNotNull() {
return new FlowConfigException("006", "view can not be null");
}

/**
* 并行结束节点不能为空
*
* @return 异常
*/
public static FlowConfigException parallelEndNodeNotNull() {
return new FlowConfigException("007", "parallel end node is null");
}

/**
* 当前节点不能为空
*
* @return 异常
*/
public static FlowConfigException currentNodeNotNull() {
return new FlowConfigException("008", "currentNode is null");
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
package com.codingapi.flow.exception;

/**
* 流程引擎框架异常基类
* <p>
* 所有流程引擎相关的异常都应该继承此类
*
* @since 1.0.0
*/
public abstract class FlowException extends RuntimeException {

private static final long serialVersionUID = 1L;

/**
* 错误码
*/
private final String errorCode;

/**
* 构造函数
*
* @param errorCode 错误码
* @param message 错误信息
*/
public FlowException(String errorCode, String message) {
super(message);
this.errorCode = errorCode;
}

/**
* 构造函数
*
* @param errorCode 错误码
* @param message 错误信息
* @param cause 原因
*/
public FlowException(String errorCode, String message, Throwable cause) {
super(message, cause);
this.errorCode = errorCode;
}

/**
* 获取错误码
*
* @return 错误码
*/
public String getErrorCode() {
return errorCode;
}

@Override
public String toString() {
return String.format("[%s] %s", errorCode, getMessage());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
package com.codingapi.flow.exception;

/**
* 流程执行异常
* <p>
* 当流程执行过程中发生错误时抛出此异常
* 例如:脚本执行错误、节点执行错误、动作执行错误等
*
* @since 1.0.0
*/
public class FlowExecutionException extends FlowException {

private static final long serialVersionUID = 1L;

/**
* 错误码前缀
*/
public static final String ERROR_CODE_PREFIX = "FLOW_EXECUTION_";

/**
* 构造函数
*
* @param message 错误信息
*/
public FlowExecutionException(String message) {
super(ERROR_CODE_PREFIX + "000", message);
}

/**
* 构造函数
*
* @param message 错误信息
* @param cause 原因
*/
public FlowExecutionException(String message, Throwable cause) {
super(ERROR_CODE_PREFIX + "000", message, cause);
}

/**
* 构造函数
*
* @param errorCode 错误码
* @param message 错误信息
*/
public FlowExecutionException(String errorCode, String message) {
super(ERROR_CODE_PREFIX + errorCode, message);
}

/**
* 构造函数
*
* @param errorCode 错误码
* @param message 错误信息
* @param cause 原因
*/
public FlowExecutionException(String errorCode, String message, Throwable cause) {
super(ERROR_CODE_PREFIX + errorCode, message, cause);
}

/**
* 脚本执行错误
*
* @param scriptType 脚本类型
* @param cause 原因
* @return 异常
*/
public static FlowExecutionException scriptExecutionError(String scriptType, Throwable cause) {
return new FlowExecutionException("001",
String.format("script execution error: %s", scriptType), cause);
}

/**
* 节点执行错误
*
* @param nodeId 节点ID
* @param cause 原因
* @return 异常
*/
public static FlowExecutionException nodeExecutionError(String nodeId, Throwable cause) {
return new FlowExecutionException("002",
String.format("node execution error: %s", nodeId), cause);
}

/**
* 动作执行错误
*
* @param actionId 动作ID
* @param cause 原因
* @return 异常
*/
public static FlowExecutionException actionExecutionError(String actionId, Throwable cause) {
return new FlowExecutionException("003",
String.format("action execution error: %s", actionId), cause);
}

/**
* 流程执行错误
*
* @param processId 流程实例ID
* @param cause 原因
* @return 异常
*/
public static FlowExecutionException workflowExecutionError(String processId, Throwable cause) {
return new FlowExecutionException("004",
String.format("workflow execution error: %s", processId), cause);
}

/**
* 数据库操作错误
*
* @param operation 操作类型
* @param cause 原因
* @return 异常
*/
public static FlowExecutionException databaseError(String operation, Throwable cause) {
return new FlowExecutionException("005",
String.format("database operation error: %s", operation), cause);
}
}
Loading