blob: 5424c53184c1911d730b89988d187f1b89eca2b7 [file] [log] [blame]
/*
* Copyright 2006 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package com.google.gwt.core.ext;
/**
* Used to indicate that some part of a multi-step process failed. Typically,
* operation can continue after this exception is caught.
*
* Before throwing an object of this type, the thrower
* <ul>
* <li>must log a detailed user-facing message describing the failure,</li>
* <li>must report any caught exception using the logger that contributed to
* the failure, and </li>
* <li>must not include the cause of the failure in the thrown exception
* because (1) it will already have been associated with the detailed log entry
* above and (2) doing so would create a misunderstanding of how to find the
* causes of low-level errors in that sometimes there is an underlying an
* exception, sometimes not, but there can <em>always</em> be a preceding log
* entry. </li>
* </ul>
*
* After catching an object of this type, the catcher
* <ul>
* <li>can be assured that the thrower has already logged a message about the
* lower-level problem</li>
* <li>can optionally itself log a higher-level description of the process that
* was interrupted and the implications of the failure, and if so,</li>
* <li>should report this caught exception via the logger as well.</li>
* </ul>
*
* <pre>
* void lowLevel(Logger logger) throws UnableToCompleteException {
* try {
* doSomethingThatMightFail();
* catch (SomeException e) {
* // Log low-level detail and the caught exception.
* //
* logger.log("detailed problem explanation for user eyes...", e);
*
* // Do not include the caught exception.
* //
* throw new UnableToCompleteException();
* }
* }
*
* void highLevel(Logger logger) {
* try {
* // Multiple calls are shown to indicate that the process can
* // include any number of steps.
* //
* lowLevel(logger);
* lowLevel(logger);
* lowLevel(logger);
* }
* catch (UnableToCompleteException e) {
* logger.log("high-level thing failed", e);
* }
* }
* </pre>
*
*/
public class UnableToCompleteException extends Exception {
public UnableToCompleteException() {
super("(see previous log entries)");
}
}