
com.ups.oppo.push.server.sdk.util.ResultPack Maven / Gradle / Ivy
package com.ups.oppo.push.server.sdk.util;
import com.ups.oppo.push.server.sdk.exception.ErrorCode;
import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;
/**
* @param
* @author wangxinguo
* @date 2016年7月15日
* @time 下午8:02:20
*/
public final class ResultPack implements Serializable, Cloneable {
/**
*
*/
private static final long serialVersionUID = 1L;
public static final int VOID = 0;
public static final int FAILED = -1;
public static final int SUCCESS = 1;
private static final String ERROR_CODE = "500";
private static final String SUCCESS_CODE = "200";
private int _status = 0; // enum _value in -1 0 1
private String _code;
private String _comment = null;
private T _value = null;
private Throwable _error = null;
private ErrorCode _errorCode;
public ResultPack() {
}
private ResultPack(int status, T value, String code, String comment, Throwable error) {
_status = status;
_value = value;
_comment = comment;
_code = code;
_error = error;
}
public ErrorCode getErrorCode() {
return _errorCode;
}
/**
* Get pack _state _value
*
* @return
*/
public int status() {
return _status;
}
public ResultPack status(int status) {
_status = status;
return this;
}
public ResultPack code(String code) {
_code = code;
return this;
}
/**
* Get packed _message
*
* @return
*/
public String comment() {
return _comment;
}
/**
* 设置说明
*
* @param comment 说明信息
* @return 自身
*/
public ResultPack comment(String comment, Object... args) {
this._comment = String.format(comment, args);
return this;
}
/**
* Get packed _value
*
* @return
*/
public T value() {
return _value;
}
public String code() {
return _code;
}
public ResultPack value(T value) {
this._value = value;
return this;
}
public Throwable error() {
return _error;
}
public ResultPack error(Throwable error) {
this._error = error;
if (error != null) {
_status = ResultPack.FAILED;
_comment = error.getMessage();
}
return this;
}
private ResultPack errorCode() {
try {
int code = Integer.parseInt(this._code);
String comment = this.comment();
this._errorCode = ErrorCode.valueOf(code, comment);
} catch (NumberFormatException e) {
}
return this;
}
public boolean isFailed() {
return _status == ResultPack.FAILED;
}
/**
* 是否无结果
*
* @return
*/
public boolean isVoid() {
return _status == ResultPack.VOID;
}
/**
* 是否成功
*
* @return
*/
public boolean isSucceed() {
return _status == ResultPack.SUCCESS;
}
/**
* 重置Result为VOID状态。
*
* 废物利用,环保。
*
* @return
*/
public ResultPack reset() {
_status = VOID;
_value = null;
_comment = null;
_error = null;
return this;
}
/**
* 有时在一个串行化过程中,我们可能需要保留comment作为附加输出信息,这时候可以用这个方法
*
* @param keepComment 是否同时清除comment。
* @return
*/
public ResultPack reset(boolean keepComment) {
_status = VOID;
_value = null;
_error = null;
if (!keepComment) {
_comment = null;
}
return this;
}
@Override
public String toString() {
return (new StringBuilder("RESULT:[").append(_status).append("] code:[").append(_code).
append("] comment:[").append(_comment).append("] value:[").
append(String.valueOf(_value))
.append("] error:[").append(String.valueOf(_error)).append("]"))
.append("] errorCode:[").append(_errorCode).append("]")
.toString();
}
public Map toJson() {
return toJson(null);
}
public Map toJson(Map jsons) {
if (jsons == null) {
jsons = new HashMap();
}
jsons.put("status", _status);
jsons.put("comment", _comment);
jsons.put("value", String.valueOf(_value));
jsons.put("error", String.valueOf(_error));
return jsons;
}
@Override
public ResultPack clone() {
return new ResultPack(_status, _value, _code, _comment, _error);
}
/**
* 返回成功的Pack的简易辅助方法的
*
* @return ResultPack
*/
public static ResultPack succeed() {
ResultPack result = new ResultPack();
return result.status(ResultPack.SUCCESS).code(SUCCESS_CODE);
}
/**
* 返回成功的Pack的简易辅助方法的
*
* @param value
* @return ResultPack
*/
public static ResultPack succeed(R value) {
ResultPack result = new ResultPack();
return result.status(ResultPack.SUCCESS).value(value).code(SUCCESS_CODE);
}
/**
* 返回成功的Pack的简易辅助方法的
*
* @param comment
* @param value
* @return ResultPack
*/
public static ResultPack succeed(String code, String comment, R value) {
ResultPack result = new ResultPack();
return result.status(ResultPack.SUCCESS).code(code).comment(comment).value(value);
}
public static ResultPack succeed(String comment) {
ResultPack result = new ResultPack();
return result.status(ResultPack.SUCCESS).comment(comment).code(SUCCESS_CODE);
}
/**
* 得到失败的ResultPack的简易辅助方法的
*
* @return ResultPack
*/
public static ResultPack failed() {
ResultPack result = new ResultPack();
return result.status(ResultPack.FAILED).code(ERROR_CODE).error(new Throwable()).errorCode();
}
/**
* 得到失败的ResultPack的简易辅助方法
*
* @param comment
* @return ResultPack
*/
public static ResultPack failed(String comment) {
ResultPack result = new ResultPack();
return result.status(ResultPack.FAILED).code(ERROR_CODE).error(new Throwable(comment)).errorCode();
}
/**
* 得到失败的ResultPack的简易辅助方法
*
* @param code
* @param comment
* @param
* @return
*/
public static ResultPack failed(String code, String comment) {
ResultPack result = new ResultPack();
return result.status(ResultPack.FAILED).code(code).error(new Throwable(comment)).errorCode();
}
/**
* 得到失败的ResultPack的简易辅助方法
*
* @param comment
* @param e
* @return
*/
public static ResultPack failed(String comment, Throwable e) {
ResultPack result = new ResultPack();
return result.status(ResultPack.FAILED).code(ERROR_CODE).comment(comment).error(e).errorCode();
}
/**
* 带失败value的辅助方法
*
* @param comment
* @param value
* @param
* @return
*/
public static ResultPack failed(String comment, R value) {
ResultPack result = new ResultPack();
return result.status(ResultPack.FAILED).code(ERROR_CODE).comment(comment).value(value).errorCode();
}
/**
* 得到失败的ResultPack的简易辅助方法
*
* @param e
* @return ResultPacke
*/
public static ResultPack failed(Throwable e) {
ResultPack result = new ResultPack();
return result.status(ResultPack.FAILED).code(ERROR_CODE).error(e).errorCode();
}
/**
* 返回无值结果的简易辅助方法的
*
* @return ResultPack
*/
public static ResultPack none() {
ResultPack result = new ResultPack();
return result.status(ResultPack.VOID);
}
/**
* 返回无值结果的简易辅助方法的
*
* @param comment
* @return ResultPack
*/
public static ResultPack none(String comment) {
ResultPack result = new ResultPack();
return result.status(ResultPack.VOID).comment(comment);
}
}