1 /*
2 * Licensed to the Apache Software Foundation (ASF) under one or more
3 * contributor license agreements. See the NOTICE file distributed with
4 * this work for additional information regarding copyright ownership.
5 * The ASF licenses this file to You under the Apache License, Version 2.0
6 * (the "License"); you may not use this file except in compliance with
7 * the License. You may obtain a copy of the License at
8 *
9 * https://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17 package org.apache.commons.lang3;
18
19 /**
20 * Thrown to indicate that a block of code has not been implemented.
21 * This exception supplements {@link UnsupportedOperationException}
22 * by providing a more semantically rich description of the problem.
23 *
24 * <p>{@link NotImplementedException} represents the case where the
25 * author has yet to implement the logic at this point in the program.
26 * This can act as an exception based TODO tag.</p>
27 *
28 * <pre>
29 * public void foo() {
30 * try {
31 * // do something that throws an Exception
32 * } catch (Exception ex) {
33 * // don't know what to do here yet
34 * throw new NotImplementedException("TODO", ex);
35 * }
36 * }
37 * </pre>
38 *
39 * This class was originally added in Lang 2.0, but removed in 3.0.
40 *
41 * @since 3.2
42 */
43 public class NotImplementedException extends UnsupportedOperationException {
44
45 private static final long serialVersionUID = 20131021L;
46
47 /** A resource for more information regarding the lack of implementation. */
48 private final String code;
49
50 /**
51 * Constructs a NotImplementedException.
52 *
53 * @since 3.10
54 */
55 public NotImplementedException() {
56 this.code = null;
57 }
58
59 /**
60 * Constructs a NotImplementedException.
61 *
62 * @param message description of the exception
63 * @since 3.2
64 */
65 public NotImplementedException(final String message) {
66 this(message, (String) null);
67 }
68
69 /**
70 * Constructs a NotImplementedException.
71 *
72 * @param message description of the exception
73 * @param code code indicating a resource for more information regarding the lack of implementation
74 * @since 3.2
75 */
76 public NotImplementedException(final String message, final String code) {
77 super(message);
78 this.code = code;
79 }
80
81 /**
82 * Constructs a NotImplementedException.
83 *
84 * @param message description of the exception
85 * @param cause cause of the exception
86 * @since 3.2
87 */
88 public NotImplementedException(final String message, final Throwable cause) {
89 this(message, cause, null);
90 }
91
92 /**
93 * Constructs a NotImplementedException.
94 *
95 * @param message description of the exception
96 * @param cause cause of the exception
97 * @param code code indicating a resource for more information regarding the lack of implementation
98 * @since 3.2
99 */
100 public NotImplementedException(final String message, final Throwable cause, final String code) {
101 super(message, cause);
102 this.code = code;
103 }
104
105 /**
106 * Constructs a NotImplementedException.
107 *
108 * @param cause cause of the exception
109 * @since 3.2
110 */
111 public NotImplementedException(final Throwable cause) {
112 this(cause, null);
113 }
114
115 /**
116 * Constructs a NotImplementedException.
117 *
118 * @param cause cause of the exception
119 * @param code code indicating a resource for more information regarding the lack of implementation
120 * @since 3.2
121 */
122 public NotImplementedException(final Throwable cause, final String code) {
123 super(cause);
124 this.code = code;
125 }
126
127 /**
128 * Obtain the not implemented code. This is an unformatted piece of text intended to point to
129 * further information regarding the lack of implementation. It might, for example, be an issue
130 * tracker ID or a URL.
131 *
132 * @return a code indicating a resource for more information regarding the lack of implementation
133 */
134 public String getCode() {
135 return this.code;
136 }
137 }