You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

79 lines
2.0 KiB
Java

package cokr.xit.foundation;
import cokr.xit.foundation.data.DataObject;
/**애플리케이션이 발생시키는 예외
* @author mjkhan
*/
public class ApplicationException extends RuntimeException {
private static final long serialVersionUID = 1L;
/**주어진 오류를 최초 원인으로 하는 ApplicationException을 반환한다.
* @param cause 최초 원인이 되는 오류
* @return ApplicationException
*/
public static ApplicationException get(Throwable cause) {
return cause instanceof ApplicationException ?
ApplicationException.class.cast(cause) :
new ApplicationException(cause);
}
private DataObject objs;
private ApplicationException(Throwable cause) {
super(Assert.rootCause(cause));
}
/**추가정보를 갖는 DataObject를 반환한다.
* @return 추가정보를 갖는 DataObject
*/
public DataObject info() {
if (objs == null)
objs = new DataObject();
return objs;
}
/**추가정보를 설정한다.
* @param key 추가정보의 키
* @param value 추가정보
* @return ApplicationException
*/
public ApplicationException info(String key, Object value) {
info().set(key, value);
return this;
}
/**에러코드를 반환한다.
* @return 에러코드
*/
public String getCode() {
return objs != null ? objs.string("code") : null;
}
/**에러코드를 설정한다.
* @param errorCode 에러코드
* @return ApplicationException
*/
public ApplicationException setCode(String errorCode) {
return info("code", errorCode);
}
@Override
public String getMessage() {
String msg = objs != null ? objs.string("msg") : "";
if (Assert.isEmpty(msg)) {
Throwable cause = getCause();
if (cause != null)
msg = cause.getMessage();
}
return msg;
}
/**에러 메시지를 설정한다.
* @param msg 에러 메시지
* @return ApplicationException
*/
public ApplicationException setMessage(String msg) {
return info("msg", msg);
}
}