/* SystemException.java
Purpose: Thrown if a caught exception is not in the exception list.
Description:
History:
2001/5/15, Tom M. Yeh: Created.
Copyright (C) 2001 Potix Corporation. All Rights Reserved.
{{IS_RIGHT
This program is distributed under LGPL Version 2.1 in the hope that
it will be useful, but WITHOUT ANY WARRANTY.
}}IS_RIGHT
*/
package org.zkoss.lang;
import org.zkoss.mesg.Messageable;
/**
* Indicates a system exception.
*
* @author tomyeh
*/
public class SystemException extends RuntimeException implements Messageable {
/** Utilities.
*
* <p>The reason to use a class to hold static utilities is we can
* override the method's return type later.
*/
public static class Aide {
/** Converts an exception to SystemException or OperationException
* depending on whether t implements Expectable.
* @see Exceptions#wrap
*/
public static SystemException wrap(Throwable t) {
t = Exceptions.unwrap(t);
if (t instanceof Expectable)
return (OperationException)
Exceptions.wrap(t, OperationException.class);
return (SystemException)
Exceptions.wrap(t, SystemException.class);
}
/** Converts an exception to SystemException or OperationException
* depending on whether t implements Expectable.
* @see Exceptions#wrap
*/
public static SystemException wrap(Throwable t, String msg) {
t = Exceptions.unwrap(t);
if (t instanceof Expectable)
return (OperationException)
Exceptions.wrap(t, OperationException.class, msg);
return (SystemException)
Exceptions.wrap(t, SystemException.class, msg);
}
/** Converts an exception to SystemException or OperationException
* depending on whether t implements Expectable.
* @see Exceptions#wrap
*/
public static SystemException wrap(Throwable t, int code, Object[] fmtArgs) {
t = Exceptions.unwrap(t);
if (t instanceof Expectable)
return (OperationException)
Exceptions.wrap(t, OperationException.class, code, fmtArgs);
return (SystemException)
Exceptions.wrap(t, SystemException.class, code, fmtArgs);
}
/** Converts an exception to SystemException or OperationException
* depending on whether t implements Expectable.
* @see Exceptions#wrap
*/
public static SystemException wrap(Throwable t, int code, Object fmtArg) {
t = Exceptions.unwrap(t);
if (t instanceof Expectable)
return (OperationException)
Exceptions.wrap(t, OperationException.class, code, fmtArg);
return (SystemException)
Exceptions.wrap(t, SystemException.class, code, fmtArg);
}
/** Converts an exception to SystemException or OperationException
* depending on whether t implements Expectable.
* @see Exceptions#wrap
*/
public static SystemException wrap(Throwable t, int code) {
t = Exceptions.unwrap(t);
if (t instanceof Expectable)
return (OperationException)
Exceptions.wrap(t, OperationException.class, code);
return (SystemException)
Exceptions.wrap(t, SystemException.class, code);
}
}
protected int _code = NULL_CODE;
/**
* Constructs a SystemException by specifying message directly.
*/
public SystemException(String msg, Throwable cause) {
super(msg, cause);
}
public SystemException(String msg) {
super(msg);
}
public SystemException(Throwable cause) {
super(cause);
}
public SystemException() {
}
/**
* Constructs an SystemException by use of an error code.
* The error code must be defined in
* one of properties files, e.g., msgsys.properties.
*
* @param code the error code
* @param fmtArgs the format arguments
* @param cause the chained throwable object
*/
public SystemException(int code, Object[] fmtArgs, Throwable cause) {
super(Exceptions.getMessage(code, fmtArgs), cause);
_code = code;
}
public SystemException(int code, Object fmtArg, Throwable cause) {
super(Exceptions.getMessage(code, fmtArg), cause);
_code = code;
}
public SystemException(int code, Object[] fmtArgs) {
super(Exceptions.getMessage(code, fmtArgs));
_code = code;
}
public SystemException(int code, Object fmtArg) {
super(Exceptions.getMessage(code, fmtArg));
_code = code;
}
public SystemException(int code, Throwable cause) {
super(Exceptions.getMessage(code), cause);
_code = code;
}
public SystemException(int code) {
super(Exceptions.getMessage(code));
_code = code;
}
//-- Messageable --//
public final int getCode() {
return _code;
}
}