package net.sf.commons.ssh.errors; import net.sf.commons.ssh.event.EventProcessor; import net.sf.commons.ssh.event.ProducerType; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; /** * @author fob * @date 24.07.2011 * @since 2.0 */ public class Error { private ErrorLevel level; private String errorAction; private String errorMessage; private Throwable exception; private Object errorProducer; private Log log; private int severity; /** * @param level * @param errorAction * @param errorMessage * @param exception * @param errorProducer * @param log * @param severity */ public Error(String errorMessage, Object errorProducer,ErrorLevel level,Throwable exception,String errorAction, Log log, int severity) { this.level = level; this.errorAction = errorAction; this.errorMessage = errorMessage; this.exception = exception; this.errorProducer = errorProducer; this.log = log; this.severity = severity; } public Error(String errorMessage, Object errorProducer,ErrorLevel level,Throwable exception,String errorAction, Log log) { this(errorMessage, errorProducer, level, exception, errorAction, log, 0); } public Error(String errorMessage, Object errorProducer,ErrorLevel level,Throwable exception,String errorAction) { this(errorMessage, errorProducer, level, exception, errorAction, errorProducer != null ? LogFactory.getLog(errorProducer.getClass()) : null, 0); } public Error(String errorMessage, Object errorProducer,ErrorLevel level,Throwable exception) { this(errorMessage, errorProducer, level, exception, null); } public Error(String errorMessage, Object errorProducer,ErrorLevel level) { this(errorMessage, errorProducer, level, null); } public Error(String errorMessage, Object errorProducer) { this(errorMessage, errorProducer, ErrorLevel.ERROR); } public Error(String errorMessage, Object errorProducer,Throwable exception) { this(errorMessage, errorProducer, ErrorLevel.ERROR, exception); } /** * @return {@link ErrorLevel} return error level */ public ErrorLevel getLevel() { return level; } /** * * @return {@link String} identificator of running action or method when error occur. */ public String errorAction() { return errorAction; } /** * * @return error message */ public String errorMessage() { return errorMessage; } /** * * @return error java exception */ public Throwable getException() { return exception; } /** * * @return object to push error */ public Object errorProducer() { return errorProducer; } /** * * @return {@link net.sf.commons.ssh.event.ProducerType} return container type */ public ProducerType getContainerType() { if(errorProducer instanceof EventProcessor) return ((EventProcessor)errorProducer).getProducerType(); else return null; } /** * * @return {@link Log} error log */ public Log getLog() { return log; } /** * * @return {@link String} log identificator */ public String getLogger() { return log.toString(); } /** * write error to {@link Log} returned by {@link Error#getLog()} */ public void writeLog() { writeLog(this.log); } /** * write error to log getting by parameter. * @param commons-logging log */ public void writeLog(Log log) { switch (getLevel()) { case INFO: if(getException() == null) log.info(errorMessage()); else log.info(errorMessage(),getException()); break; case WARN: if(getException() == null) log.warn(errorMessage()); else log.warn(errorMessage(),getException()); break; case ERROR: if(getException() == null) log.error(errorMessage()); else log.error(errorMessage(),getException()); break; case CRITICAL: if(getException() == null) log.fatal(errorMessage()); else log.fatal(errorMessage(),getException()); } } /** * custom parameter * @return {@link Integer} */ public int getSeverity() { return severity; } @Override public String toString() { return getLevel()+":"+errorMessage(); } }