/* ===========================================================
* TradeManager : An application to trade strategies for the Java(tm) platform
* ===========================================================
*
* (C) Copyright 2011-2011, by Simon Allen and Contributors.
*
* Project Info: org.trade
*
* This library is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; either version 2.1 of the License, or
* (at your option) any later version.
*
* This library is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
* License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
* USA.
*
* [Java is a trademark or registered trademark of Oracle, Inc.
* in the United States and other countries.]
*
* (C) Copyright 2011-2011, by Simon Allen and Contributors.
*
* Original Author: Simon Allen;
* Contributor(s): -;
*
* Changes
* -------
*
*/
package org.trade.core.exception;
import java.io.ByteArrayOutputStream;
import java.io.PrintWriter;
import java.io.Serializable;
import java.util.Enumeration;
/**
* This class is used to hold generic routines for manipulating exceptions.
*
* @author Simon Allen
*/
public class ExceptionUtil implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1278830639842508059L;
ExceptionUtil() {
super();
}
/**
* Method captureStackTrace.
*
* @param t
* Throwable
* @return String
*/
public static final String captureStackTrace(Throwable t) {
String stackTrace = null;
ByteArrayOutputStream out = new ByteArrayOutputStream();
PrintWriter writer = new PrintWriter(out);
t.printStackTrace(writer);
writer.flush();
stackTrace = out.toString();
return stackTrace;
}
/**
* Method nestStackTrace.
*
* @param stackTrace
* String
* @param t
* Throwable
* @return String
*/
public static final String nestStackTrace(String stackTrace, Throwable t) {
String newStackTrace = null;
if (t instanceof NestingException) {
NestingException ex = (NestingException) t;
newStackTrace = stackTrace + ex.getStackTrace();
} else {
newStackTrace = stackTrace + captureStackTrace(t);
}
return newStackTrace;
}
/**
* Method fillInExceptionMessage.
*
* @param nestingException
* NestingException
* @param stackTrace
* String
* @param errorMesg
* String
* @return String
*/
public static final String fillInExceptionMessage(NestingException nestingException, String stackTrace,
String errorMesg) {
if (stackTrace != null) {
int index = stackTrace.indexOf(':');
String s1 = stackTrace.substring(0, index + 1);
index = stackTrace.indexOf("\tat");
String s2;
if (index >= 0) {
s2 = stackTrace.substring(index);
} else {
s2 = "";
}
// Construct the first line of the stack trace.
StringBuffer buf = new StringBuffer();
buf.append(s1);
buf.append(' ');
buf.append(errorMesg);
buf.append('\n');
// Construct the lines in the stack trace that display the
// user friendly messages.
Enumeration<?> enumeration = nestingException.getAllExceptionMessages();
while (enumeration.hasMoreElements()) {
ExceptionMessage exceptionMessage;
exceptionMessage = (ExceptionMessage) enumeration.nextElement();
buf.append('\t');
buf.append(exceptionMessage.getExceptionCode());
buf.append(": ");
buf.append(exceptionMessage.getMessage());
buf.append('\n');
}
// Construct all of the "at ..." lines.
buf.append(s2);
stackTrace = buf.toString();
} else {
stackTrace = "";
}
return stackTrace;
}
}