ProgrammingException.java |
/* * $Id: ProgrammingException.java,v 1.21 2011/03/19 09:11:18 agoubard Exp $ * * See the COPYRIGHT file for redistribution and use restrictions. */ package org.xins.common; /** * Exception thrown when a programming error is detected. * * @version $Revision: 1.21 $ $Date: 2011/03/19 09:11:18 $ * @author <a href="mailto:ernst@ernstdehaan.com">Ernst de Haan</a> * * @since XINS 1.1.0 */ public final class ProgrammingException extends RuntimeException { /** * The name of the class that detected the problem. Is <code>null</code> if * unknown. */ private final String _detectingClass; /** * The name of the method where the problem was detected. Is * <code>null</code> if unknown. */ private final String _detectingMethod; /** * The name of the class which exposes the programming error. Is * <code>null</code> if unknown. */ private final String _subjectClass; /** * The name of the method which exposes the programming error, or * <code>null</code> if unknown. */ private final String _subjectMethod; /** * The detail message. Can be <code>null</code>. */ private final String _detail; /** * Constructs a new <code>ProgrammingException</code> for the specified * class and method, indicating which class and method detected the * problem. * * @param detectingClass * the name of the class that detected the problem, or * <code>null</code> if unknown. * * @param detectingMethod * the name of the method within the <code>detectingClass</code> that * detected the problem, or <code>null</code> if unknown. * * @param subjectClass * the name of the class which exposes the programming error, or * <code>null</code> if unknown. * * @param subjectMethod * the name of the method (within the <code>subjectClass</code>) which * exposes the programming error, or <code>null</code> if unknown. * * @param detail * the detail message, can be <code>null</code>. * * @param cause * the cause exception, can be <code>null</code>. */ public ProgrammingException(String detectingClass, String detectingMethod, String subjectClass, String subjectMethod, String detail, Throwable cause) { // Call superconstructor with a constructed message super(createMessage(detectingClass, detectingMethod, subjectClass, subjectMethod, detail, cause), cause); // Store all the information in fields _detectingClass = detectingClass; _detectingMethod = detectingMethod; _subjectClass = subjectClass; _subjectMethod = subjectMethod; _detail = detail; } /** * Creates the exception message for the specified details. * * @param detectingClass * the name of the class that detected the problem, or * <code>null</code> if unknown. * * @param detectingMethod * the name of the method within the <code>detectingClass</code> that * detected the problem, or <code>null</code> if unknown. * * @param subjectClass * the name of the class which exposes the programming error, or * <code>null</code> if unknown. * * @param subjectMethod * the name of the method (within the <code>subjectClass</code>) which * exposes the programming error, or <code>null</code> if unknown. * * @param detail * the detail message, can be <code>null</code>. * * @param cause * the cause exception, can be <code>null</code>. * * @return * the exception message, can be <code>null</code>. */ private static String createMessage(String detectingClass, String detectingMethod, String subjectClass, String subjectMethod, String detail, Throwable cause) { String message = "Programming error suspected"; if (subjectClass != null) { message += " in class " + subjectClass; if (subjectMethod != null) { message += ", method " + subjectMethod; } } if (detectingClass != null) { message += ". Detected by class " + detectingClass; if (detectingMethod != null) { message += ", method " + detectingMethod; } } if (detail != null) { message += ". Detail: \"" + detail + "\""; } message += "."; return message; } /** * Returns the name of the class that detected the problem. * * @return * the name of the class that detected the problem, or <code>null</code> * if unknown. * * @since XINS 1.3.0 */ public String getDetectingClass() { return _detectingClass; } /** * Returns the name of the method where the problem was detected. * * @return * the name of the method that detected the problem, or * <code>null</code> if unknown. * * @since XINS 1.3.0 */ public String getDetectingMethod() { return _detectingMethod; } /** * Returns the name of the class which exposes the programming error. * * @return * the name of the class that exposed the problem, or * <code>null</code> if unknown. * * @since XINS 1.3.0 */ public String getSubjectClass() { return _subjectClass; } /** * Returns the name of the method which exposes the programming error. * * @return * the name of the method that exposed the problem, or * <code>null</code> if unknown. * * @since XINS 1.3.0 */ public String getSubjectMethod() { return _subjectMethod; } /** * Returns the detail message. * * @return * the detail message, can be <code>null</code>. * * @since XINS 1.3.0 */ public String getDetail() { return _detail; } }