/* * This file is part of the OpenSCADA project * Copyright (C) 2006-2011 TH4 SYSTEMS GmbH (http://th4-systems.com) * * OpenSCADA is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License version 3 * only, as published by the Free Software Foundation. * * OpenSCADA 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 version 3 for more details * (a copy is included in the LICENSE file that accompanied this code). * * You should have received a copy of the GNU Lesser General Public License * version 3 along with OpenSCADA. If not, see * <http://opensource.org/licenses/lgpl-3.0.html> for a copy of the LGPLv3 License. */ package org.openscada.ui.utils.status; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; public class StatusHelper { public static IStatus convertStatus ( final String pluginId, final Throwable e ) { if ( e == null ) { return Status.OK_STATUS; } if ( e instanceof CoreException ) { return ( (CoreException)e ).getStatus (); } return new Status ( IStatus.ERROR, pluginId, getMessage ( e ), e ); } /** * Get the root cause of an exception * @param e the exception to check, must not be <code>null</code> * @return the root cause, is never <code>null</code> */ public static Throwable getRootCause ( Throwable e ) { while ( e.getCause () != null ) { e = e.getCause (); } return e; } /** * Get the message of the root cause * @param e the exception from which the message should be extracted * @return the message of the root cause * @see StatusHelper#extractMessage(Throwable) */ public static String getMessage ( final Throwable e ) { return extractMessage ( getRootCause ( e ) ); } /** * Extract the message from an exception * @param e the exception to extract the message from * @return either the localized message, the message or the class name (in that order) */ public static String extractMessage ( final Throwable e ) { if ( e.getLocalizedMessage () != null ) { return e.getLocalizedMessage (); } else if ( e.getMessage () != null ) { return e.getMessage (); } else { return e.getClass ().getName (); } } }