Rev 3408 |
Blame |
Compare with Previous |
Last modification |
View Log
| RSS feed
/*
* Copyright (C) 2010.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 3 or
* version 2 as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*/
package uk.me.parabola.imgfmt;
import uk.me.parabola.log.Logger;
/**
* Used for cases where the current map has failed to compile, but the error
* is expected to be specific to the map (eg it is too big etc). When this
* error is thrown it may be possible for other maps on the command line to
* succeed.
*
* If the error is such that processing further maps is not likely to be
* successful then use {@link ExitException} instead.
*
* @author Steve Ratcliffe
*/
public class MapFailedException
extends RuntimeException {
private static final Logger log =
Logger.
getLogger(MapFailedException.
class);
/**
* Constructs a new runtime exception with the specified detail message.
* The cause is not initialized, and may subsequently be initialized by a
* call to {@link #initCause}.
*
* @param message the detail message. The detail message is saved for
* later retrieval by the {@link #getMessage()} method.
*/
public MapFailedException
(String message
) {
super(message
);
log
(message
);
}
/**
* Constructs a new runtime exception with the specified detail message and
* cause. <p>Note that the detail message associated with
* <code>cause</code> is <i>not</i> automatically incorporated in
* this runtime exception's detail message.
*
* @param message the detail message (which is saved for later retrieval
* by the {@link #getMessage()} method).
* @param cause the cause (which is saved for later retrieval by the
* {@link #getCause()} method). (A <tt>null</tt> value is
* permitted, and indicates that the cause is nonexistent or
* unknown.)
* @since 1.4
*/
public MapFailedException
(String message,
Throwable cause
) {
super(message, cause
);
log
(message
);
}
private static void log
(String message
){
String thrownBy =
"";
try{
StackTraceElement[] stackTraceElements =
Thread.
currentThread().
getStackTrace();
int callerPosInStack =
3;
String[] caller = stackTraceElements
[callerPosInStack
].
getClassName().
split("\\.");
thrownBy =
"(thrown in " + caller
[caller.
length-
1]+
"." +stackTraceElements
[callerPosInStack
].
getMethodName() +
"()) ";
} catch(Exception e
){
log.
info(e
);
}
log.
error(thrownBy + message
);
}
}