TypeValueException.java |
/* * $Id: TypeValueException.java,v 1.20 2012/03/15 21:07:39 agoubard Exp $ * * See the COPYRIGHT file for redistribution and use restrictions. */ package org.xins.common.types; import org.xins.common.MandatoryArgumentChecker; /** * Exception thrown to indicate a value is invalid for a certain type. * * @version $Revision: 1.20 $ $Date: 2012/03/15 21:07:39 $ * @author <a href="mailto:ernst@ernstdehaan.com">Ernst de Haan</a> * * @since XINS 1.0.0 */ public class TypeValueException extends Exception { /** * The concerning parameter type. This field is never <code>null</code>. */ private final Type _type; /** * The value that is considered invalid. This field is never <code>null</code>. */ private final String _value; /** * The additional detail information passed to the constructor. Can be * <code>null</code>. */ private final String _detail; /** * Creates a new <code>TypeValueException</code>. * * @param type * the type, not <code>null</code>. * * @param value * the value, not <code>null</code>. * * @throws IllegalArgumentException * if <code>type == null || value == null</code>. */ public TypeValueException(Type type, String value) throws IllegalArgumentException { this(type, value, null); } /** * Creates a new <code>TypeValueException</code>. * * @param type * the type, not <code>null</code>. * * @param value * the value, not <code>null</code>. * * @param detail * additional detail information, can be <code>null</code>. * * @throws IllegalArgumentException * if <code>type == null || value == null</code>. */ public TypeValueException(Type type, String value, String detail) throws IllegalArgumentException { super(createMessage(type, value, detail)); // Store the arguments _type = type; _value = value; _detail = detail; } /** * Creates a message for the constructor after checking the arguments. * * @param type * the type, not <code>null</code>. * * @param value * the value, not <code>null</code>. * * @param detail * additional detail information, can be <code>null</code>. * * @return * the message to be passed up to the superconstructor, never * <code>null</code>. * * @throws IllegalArgumentException * if <code>type == null || value == null</code>. */ private static String createMessage(Type type, String value, String detail) throws IllegalArgumentException { // Check preconditions MandatoryArgumentChecker.check("type", type, "value", value); String message = "The string \"" + value + "\" does not represent a valid value for the type " + type.getName(); if (detail != null) { message += ": " + detail; } else { message += '.'; } return message; } /** * Retrieves the type. * * @return * the type, never <code>null</code>. */ public final Type getType() { return _type; } /** * Retrieves the value that was considered invalid. * * @return * the value that was considered invalid, not <code>null</code>. */ public final String getValue() { return _value; } /** * Retrieves the additional detail information passed to the constructor. * This information is optional. * * @return * the additional detailed information, can be <code>null</code>. * * @since XINS 1.2.0 */ public final String getDetail() { return _detail; } }