001package co.codewizards.cloudstore.core.dto;
002
003
004/**
005 * @author Marco หงุ่ยตระกูล-Schulze - marco at nightlabs dot de
006 */
007public class RemoteException extends RuntimeException
008{
009        private static final long serialVersionUID = 1L;
010
011        private Error error;
012        private String errorClassName;
013
014        public RemoteException(Error error)
015        {
016                this(error, false);
017        }
018
019        protected RemoteException(Error error, boolean suppressCause)
020        {
021                super(error == null ? null : error.getMessage());
022
023                this.error = error;
024
025                if (error != null) {
026                        this.errorClassName = error.getClassName();
027
028                        if (! suppressCause) {
029                                if (error.getCause() != null)
030                                        initCause(new RemoteException(error.getCause()));
031                        }
032                }
033        }
034
035//      private boolean stackTraceInitialised = false;
036//
037//      private synchronized void initStackTrace() {
038//              if (stackTraceInitialised)
039//                      return;
040//
041//              stackTraceInitialised = true;
042//
043//              if (error != null) {
044//                      int idx = -1;
045//                      StackTraceElement[] origStackTrace = getStackTrace();
046//                      StackTraceElement[] stackTrace = new StackTraceElement[origStackTrace.length + error.getStackTraceElements().size()];
047//
048//                      for (ErrorStackTraceElement errorStackTraceElement : error.getStackTraceElements()) {
049//                              stackTrace[++idx] = new StackTraceElement(
050//                                              errorStackTraceElement.getClassName(),
051//                                              errorStackTraceElement.getMethodName(),
052//                                              errorStackTraceElement.getFileName(),
053//                                              errorStackTraceElement.getLineNumber()
054//                                              );
055//                      }
056//
057//                      if (origStackTrace != null) {
058//                              for (StackTraceElement stackTraceElement : origStackTrace) {
059//                                      stackTrace[++idx] = stackTraceElement;
060//                              }
061//                      }
062//
063//                      setStackTrace(stackTrace);
064//              }
065//      }
066
067//      @Override
068//      public StackTraceElement[] getStackTrace() {
069//              initStackTrace();
070//              return super.getStackTrace();
071//      }
072//
073//      @Override
074//      public void printStackTrace(PrintStream s) {
075//              initStackTrace();
076//              super.printStackTrace(s);
077//      }
078//
079//      @Override
080//      public void printStackTrace(PrintWriter s) {
081//              initStackTrace();
082//              super.printStackTrace(s);
083//      }
084
085        public Error getError() {
086                return error;
087        }
088
089        public String getErrorClassName() {
090                return errorClassName;
091        }
092
093        @Override
094        public String toString() {
095                String s = getClass().getName() + (errorClassName == null ? "" : ('<' + errorClassName + '>'));
096                String message = getLocalizedMessage();
097                return (message != null) ? (s + ": " + message) : s;
098        }
099}