/* * 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); } }