001package co.codewizards.cloudstore.core.dto;
002
003import java.io.Serializable;
004import java.util.ArrayList;
005import java.util.List;
006
007import javax.xml.bind.annotation.XmlRootElement;
008
009/**
010 * @author Marco หงุ่ยตระกูล-Schulze - marco at nightlabs dot de
011 */
012@XmlRootElement
013public class Error
014implements Serializable
015{
016        private static final long serialVersionUID = 1L;
017
018        private String className;
019        private String message;
020        private List<ErrorStackTraceElement> stackTraceElements;
021        private Error cause;
022
023        public Error() { }
024
025        public Error(String message) {
026                this.message = message;
027        }
028
029        public Error(Throwable throwable) {
030                if (throwable != null) {
031                        this.message = throwable.getMessage();
032                        this.className = throwable.getClass().getName();
033
034                        for (final StackTraceElement stackTraceElement : throwable.getStackTrace()) {
035                                this.getStackTraceElements().add(new ErrorStackTraceElement(stackTraceElement));
036                        }
037
038                        Throwable cause = throwable.getCause();
039                        if (cause != null) {
040                                final Error errorCause = new Error(cause);
041                                this.setCause(errorCause);
042                        }
043                }
044        }
045
046        public String getClassName() {
047                return className;
048        }
049        public void setClassName(String className) {
050                this.className = className;
051        }
052
053        public String getMessage() {
054                return message;
055        }
056        public void setMessage(String message) {
057                this.message = message;
058        }
059
060        public List<ErrorStackTraceElement> getStackTraceElements() {
061                if (stackTraceElements == null)
062                        stackTraceElements = new ArrayList<ErrorStackTraceElement>();
063
064                return stackTraceElements;
065        }
066        public void setStackTraceElements(List<ErrorStackTraceElement> stackTraceElements) {
067                this.stackTraceElements = stackTraceElements;
068        }
069
070        public Error getCause() {
071                return cause;
072        }
073        public void setCause(Error cause) {
074                this.cause = cause;
075        }
076
077        @Override
078        public String toString() {
079                return getClass().getSimpleName() + '[' + toString_getProperties() + ']';
080        }
081
082        protected String toString_getProperties() {
083                return "className=" + className
084                                + ", message=" + message
085                                + ", stackTraceElements=" + stackTraceElements
086                                + ", cause=" + cause;
087        }
088}