1 /******************************************************************************* 2 * Copyright 2013 André Rouél and Dominik Seichter 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 ******************************************************************************/ 16 package net.sf.qualitycheck.exception; 17 18 import javax.annotation.Nonnull; 19 import javax.annotation.Nullable; 20 21 /** 22 * Thrown to indicate that a method was passed arguments which caused an invalid state. 23 * 24 * @author André Rouél 25 * @author Dominik Seichter 26 */ 27 public class IllegalStateOfArgumentException extends RuntimeException { 28 29 private static final long serialVersionUID = -1782626786560016442L; 30 31 /** 32 * Default message to indicate that the given arguments caused an invalid state. 33 */ 34 protected static final String DEFAULT_MESSAGE = "Arguments must be valid with the current state."; 35 36 /** 37 * Message to indicate that an invalid state was caused due to the passed arguments, which also 38 * provides an explanation why the state is invalid. 39 */ 40 protected static final String MESSAGE_DESCRIPTION = "The passed arguments have caused an invalid state: "; 41 42 private static String format(@Nonnull final String descriptionTemplate, Object... descriptionTemplateArgs) { 43 if( descriptionTemplateArgs == null || descriptionTemplateArgs.length == 0 ) { 44 return MESSAGE_DESCRIPTION + descriptionTemplate; 45 } else { 46 return String.format(descriptionTemplate, descriptionTemplateArgs); 47 } 48 } 49 50 /** 51 * Constructs an {@code IllegalStateOfArgumentException} with the default message 52 * {@link IllegalStateOfArgumentException#DEFAULT_MESSAGE}. 53 */ 54 public IllegalStateOfArgumentException() { 55 super(DEFAULT_MESSAGE); 56 } 57 58 /** 59 * Constructs an {@code IllegalStateOfArgumentException} with the message {@link IllegalStateOfArgumentException#MESSAGE_DESCRIPTION} 60 * including the given values of the arguments. 61 * 62 * @param description 63 * explains why the state is invalid 64 */ 65 public IllegalStateOfArgumentException(@Nonnull final String description) { 66 super(format(description)); 67 } 68 69 /** 70 * Constructs an {@code IllegalStateOfArgumentException} with the message {@link IllegalStateOfArgumentException#MESSAGE_DESCRIPTION} 71 * including the given values of the arguments. 72 * 73 * @param description 74 * format string template that explains why the state is invalid 75 * @param descriptionTemplateArgs 76 * format string template arguments to explain why the state is invalid 77 */ 78 public IllegalStateOfArgumentException(@Nonnull final String description, Object... descriptionTemplateArgs) { 79 super(format(description, descriptionTemplateArgs)); 80 } 81 82 /** 83 * Constructs a new exception with the message {@link IllegalStateOfArgumentException#MESSAGE_DESCRIPTION} including the given 84 * values of the arguments. 85 * 86 * @param description 87 * explains why the state is invalid 88 * @param cause 89 * the cause (which is saved for later retrieval by the {@link Throwable#getCause()} method). (A 90 * {@code null} value is permitted, and indicates that the cause is nonexistent or unknown.) 91 */ 92 public IllegalStateOfArgumentException(@Nonnull final String description, @Nullable final Throwable cause) { 93 super(format(description), cause); 94 } 95 96 /** 97 * Constructs a new exception with the message {@link IllegalStateOfArgumentException#MESSAGE_DESCRIPTION} including the given 98 * values of the arguments. 99 * 100 * @param cause 101 * the cause (which is saved for later retrieval by the {@link Throwable#getCause()} method). (A 102 * {@code null} value is permitted, and indicates that the cause is nonexistent or unknown.) 103 * @param description 104 * format string template that explains why the state is invalid 105 * @param descriptionTemplateArgs 106 * format string template arguments to explain why the state is invalid 107 */ 108 public IllegalStateOfArgumentException(@Nullable final Throwable cause, @Nonnull final String description, Object... descriptionTemplateArgs) { 109 super(format(description, descriptionTemplateArgs), cause); 110 } 111 112 /** 113 * Constructs a new exception with the default message {@link IllegalStateOfArgumentException#DEFAULT_MESSAGE}. 114 * 115 * @param cause 116 * the cause (which is saved for later retrieval by the {@link Throwable#getCause()} method). (A 117 * {@code null} value is permitted, and indicates that the cause is nonexistent or unknown.) 118 */ 119 public IllegalStateOfArgumentException(@Nullable final Throwable cause) { 120 super(DEFAULT_MESSAGE, cause); 121 } 122 123 }