/*
* Copyright 2012 JBoss Inc
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.overlord.dtgov.ui.server.util;
import java.io.PrintWriter;
import java.io.StringWriter;
import org.overlord.dtgov.ui.client.shared.exceptions.DtgovUiException;
/**
* Provides some util methods for dealing with exceptions.
*
* @author eric.wittmann@redhat.com
*/
public class ExceptionUtils {
/**
* Gets the root stack trace as a string.
* @param t
*/
public static String getRootStackTrace(Throwable t) {
StringWriter sw = new StringWriter();
PrintWriter writer = new PrintWriter(sw);
getRootCause(t).printStackTrace(writer);
return sw.getBuffer().toString();
}
/**
* Gets the root exception from the given {@link Throwable}.
* @param t
*/
public static Throwable getRootCause(Throwable t) {
Throwable root = t;
while (root.getCause() != null && root.getCause() != root)
root = root.getCause();
return root;
}
/**
* Creates a UI exception that can be thrown to the client.
* @param message
* @param root
*/
public static DtgovUiException createUiException(String message, Throwable root) {
DtgovUiException re = null;
if (message != null && root != null) {
re = new DtgovUiException(message, root);
} else if (root != null) {
re = new DtgovUiException(root);
} else {
re = new DtgovUiException();
}
// TODO also pass the root stack trace
// if (root != null)
// re.setRootStackTrace(getRootStackTrace(root));
return re;
}
/**
* Creates a remote exception that can be thrown to the client.
* @param root
*/
public static DtgovUiException createRemoteException(Throwable root) {
return createUiException(null, root);
}
}