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}