001 /*
002 * Licensed to the Apache Software Foundation (ASF) under one or more
003 * contributor license agreements. See the NOTICE file distributed with
004 * this work for additional information regarding copyright ownership.
005 * The ASF licenses this file to You under the Apache License, Version 2.0
006 * (the "License"); you may not use this file except in compliance with
007 * the License. You may obtain a copy of the License at
008 *
009 * http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 */
017 package org.apache.commons.nabla;
018
019 import org.apache.commons.math3.exception.util.ExceptionContext;
020 import org.apache.commons.math3.exception.util.ExceptionContextProvider;
021 import org.apache.commons.math3.exception.util.Localizable;
022
023 /** This class represent differentiation exceptions.
024
025 * <p>Exceptions of this type are thrown when a class cannot be differentiated.</p>
026
027 * @version $Id$
028
029 */
030
031 public class DifferentiationException extends RuntimeException implements ExceptionContextProvider {
032
033 /** Serializable version Id. */
034 private static final long serialVersionUID = 20120924L;
035
036 /** Context. */
037 private final ExceptionContext context;
038
039 /**
040 * Default constructor.
041 */
042 public DifferentiationException() {
043 context = new ExceptionContext(this);
044 }
045
046 /**
047 * Constructor with a specific message.
048 *
049 * @param pattern Message pattern providing the specific context of
050 * the error.
051 * @param args Arguments.
052 */
053 public DifferentiationException(final Localizable pattern, final Object ... args) {
054 context = new ExceptionContext(this);
055 context.addMessage(pattern, args);
056 }
057
058 /** {@inheritDoc} */
059 public ExceptionContext getContext() {
060 return context;
061 }
062
063 /** {@inheritDoc} */
064 @Override
065 public String getMessage() {
066 return context.getMessage();
067 }
068
069 /** {@inheritDoc} */
070 @Override
071 public String getLocalizedMessage() {
072 return context.getLocalizedMessage();
073 }
074
075 /** Create an {@link java.lang.IllegalArgumentException} with localized message.
076 * @param specifier format specifier (to be translated)
077 * @param parts parts to insert in the format (no translation)
078 * @return an {@link java.lang.IllegalArgumentException} with localized message
079 */
080 public static IllegalArgumentException createIllegalArgumentException(final Localizable specifier,
081 final Object ... parts) {
082 return new IllegalArgumentException() {
083
084 /** Serializable UID. */
085 private static final long serialVersionUID = 20121001L;
086
087 /** {@inheritDoc} */
088 @Override
089 public String getMessage() {
090 final ExceptionContext ctx = new ExceptionContext(this);
091 ctx.addMessage(specifier, parts);
092 return ctx.getMessage();
093 }
094
095 /** {@inheritDoc} */
096 @Override
097 public String getLocalizedMessage() {
098 final ExceptionContext ctx = new ExceptionContext(this);
099 ctx.addMessage(specifier, parts);
100 return ctx.getLocalizedMessage();
101 }
102
103 };
104
105 }
106
107 /** Create an {@link java.lang.RuntimeException} for an internal error.
108 * @param cause underlying cause
109 * @return an {@link java.lang.RuntimeException} for an internal error
110 */
111 public static RuntimeException createInternalError(final Throwable cause) {
112
113 /** Format specifier (to be translated). */
114 final Localizable SPECIFIER = NablaMessages.INTERNAL_ERROR;
115
116 /** URL for reporting problems. */
117 final String REPORT_URL = "https://issues.apache.org/jira/browse/SANDBOX/component/12312280";
118
119 return new RuntimeException() {
120
121 /** Serializable UID. */
122 private static final long serialVersionUID = 20121001L;
123
124 /** {@inheritDoc} */
125 @Override
126 public String getMessage() {
127 final ExceptionContext ctx = new ExceptionContext(this);
128 ctx.addMessage(SPECIFIER, REPORT_URL);
129 return ctx.getMessage();
130 }
131
132 /** {@inheritDoc} */
133 @Override
134 public String getLocalizedMessage() {
135 final ExceptionContext ctx = new ExceptionContext(this);
136 ctx.addMessage(SPECIFIER, REPORT_URL);
137 return ctx.getLocalizedMessage();
138 }
139
140 };
141
142 }
143
144 }