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.Nullable;
19
20 /**
21 * Thrown to indicate that a method has been passed with an illegal not {@code null} reference as argument where
22 * {@code null} is required.
23 *
24 * @author Dominik Seichter
25 */
26 public class IllegalNotNullArgumentException extends RuntimeException {
27
28 private static final long serialVersionUID = -6988558700678645359L;
29
30 /**
31 * Default message to indicate that the a given argument must be a {@code null} reference.
32 */
33 protected static final String DEFAULT_MESSAGE = "Argument must be null.";
34
35 /**
36 * Message to indicate that the the given argument with <em>name</em> must be a {@code null} reference.
37 */
38 protected static final String MESSAGE_WITH_NAME = "Argument '%s' must be null.";
39
40 /**
41 * Returns the formatted string {@link IllegalNotNullArgumentException#MESSAGE_WITH_NAME} with the given
42 * {@code argumentName}.
43 *
44 * @param argumentName
45 * the name of the passed argument
46 * @return a formatted string of message with the given argument name
47 */
48 private static String format(@Nullable final String argumentName) {
49 return String.format(MESSAGE_WITH_NAME, argumentName);
50 }
51
52 /**
53 * Constructs an {@code IllegalNotNullArgumentException} with the default message
54 * {@link IllegalNotNullArgumentException#DEFAULT_MESSAGE}.
55 */
56 public IllegalNotNullArgumentException() {
57 super(DEFAULT_MESSAGE);
58 }
59
60 /**
61 * Constructs an {@code IllegalNotNullArgumentException} with the message
62 * {@link IllegalNotNullArgumentException#MESSAGE_WITH_NAME} including the given name of the argument as string
63 * representation.
64 *
65 * @param argumentName
66 * the name of the passed argument
67 */
68 public IllegalNotNullArgumentException(@Nullable final String argumentName) {
69 super(format(argumentName));
70 }
71
72 /**
73 * Constructs a new exception with the message {@link IllegalNotNullArgumentException#MESSAGE_WITH_NAME} including
74 * the given name as string representation and cause.
75 *
76 * @param argumentName
77 * the name of the passed argument
78 * @param cause
79 * the cause (which is saved for later retrieval by the {@link Throwable#getCause()} method). (A
80 * {@code null} value is permitted, and indicates that the cause is nonexistent or unknown.)
81 */
82 public IllegalNotNullArgumentException(@Nullable final String argumentName, @Nullable final Throwable cause) {
83 super(format(argumentName), cause);
84 }
85
86 /**
87 * Constructs a new exception with the default message {@link IllegalNotNullArgumentException#DEFAULT_MESSAGE}.
88 *
89 * @param cause
90 * the cause (which is saved for later retrieval by the {@link Throwable#getCause()} method). (A
91 * {@code null} value is permitted, and indicates that the cause is nonexistent or unknown.)
92 */
93 public IllegalNotNullArgumentException(@Nullable final Throwable cause) {
94 super(DEFAULT_MESSAGE, cause);
95 }
96
97 }