/* * ==================================================================== * Copyright (c) 2004-2012 TMate Software Ltd. All rights reserved. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://svnkit.com/license.html * If newer versions of this license are posted there, you may use a * newer version instead, at your option. * ==================================================================== */ package org.tmatesoft.svn.core; /** * A main exception class that is used in the SVNKit library. All other * SVNKit exception classes extend this one. Detailed information * on the error (description, error code) is encapsulated inside an error * message that is held by an <b>SVNException</b>. * * @version 1.3 * @author TMate Software Ltd. * @since 1.2 */ public class SVNException extends Exception { private static final long serialVersionUID = 4845L; private SVNErrorMessage myErrorMessage; /** * Creates an exception given an error message. * * @param errorMessage an error message */ public SVNException(SVNErrorMessage errorMessage) { this(errorMessage, errorMessage.getCause()); } /** * Creates an exception given an error message and the cause exception. * * @param errorMessage an error message * @param cause the real cause of the error */ public SVNException(SVNErrorMessage errorMessage, Throwable cause) { super(cause != null ? cause : errorMessage.getCause()); if (cause == null) { cause = errorMessage.getCause(); } if (cause instanceof SVNException) { SVNErrorMessage childMessages = ((SVNException) cause).getErrorMessage(); SVNErrorMessage parent = errorMessage; while(parent.hasChildErrorMessage()) { parent = parent.getChildErrorMessage(); } if (parent != childMessages) { parent.setChildErrorMessage(childMessages); } } myErrorMessage = errorMessage; if (getCause() == null && errorMessage != null) { errorMessage.initCause(this); } } /** * Returns an error message provided to this exception object. * * @return an error message that contains details on the error */ public SVNErrorMessage getErrorMessage() { return myErrorMessage; } /** * Returns the informational message describing the cause * of this exception. * * @return an informational message */ public String getMessage() { SVNErrorMessage error = getErrorMessage(); if (error != null) { return error.getFullMessage(); } return super.getMessage(); } public boolean isEnoent() { SVNErrorCode errorCode = getErrorMessage().getErrorCode(); return errorCode == SVNErrorCode.ENTRY_NOT_FOUND || errorCode == SVNErrorCode.FS_NOT_FOUND || errorCode == SVNErrorCode.FS_NOT_OPEN || errorCode == SVNErrorCode.FS_NOT_FILE; } }