/* ********************************************************************** **
** Copyright notice **
** **
** (c) 2005-2009 RSSOwl Development Team **
** http://www.rssowl.org/ **
** **
** All rights reserved **
** **
** This program and the accompanying materials are made available under **
** the terms of the Eclipse Public License v1.0 which accompanies this **
** distribution, and is available at: **
** http://www.rssowl.org/legal/epl-v10.html **
** **
** A copy is found in the file epl-v10.html and important notices to the **
** license from the team is found in the textfile LICENSE.txt distributed **
** in this package. **
** **
** This copyright notice MUST APPEAR in all copies of the file! **
** **
** Contributors: **
** RSSOwl Development Team - initial API and implementation **
** **
** ********************************************************************** */
package org.rssowl.core.internal;
import org.apache.commons.logging.Log;
import org.eclipse.core.runtime.IStatus;
import org.rssowl.core.util.CoreUtils;
import org.rssowl.core.util.StringUtils;
/**
* Implementation of <code>Log</code> that writes error and fatal messages to
* the Eclipse Log Mechanism.
*
* @author bpasero
*/
public class LogBridge implements Log {
/* System Properties to Control Logging Levels */
private static final String DEBUG_PROPERTY = "rssowl.http.debug"; //$NON-NLS-1$
private static final String TRACE_PROPERTY = "rssowl.http.trace"; //$NON-NLS-1$
private static final String INFO_PROPERTY = "rssowl.http.info"; //$NON-NLS-1$
private static final String WARN_PROPERTY = "rssowl.http.warn"; //$NON-NLS-1$
private final boolean fDebug;
private final boolean fTrace;
private final boolean fInfo;
private final boolean fWarn;
private final String fNl;
private enum Level {
INFO, WARNING, ERROR
}
/** Keep for reflection */
public LogBridge() {
this(null);
}
/**
* Keep for reflection
*
* @param str the class using this log
*/
public LogBridge(String str) {
fDebug = System.getProperty(DEBUG_PROPERTY) != null;
fTrace = System.getProperty(TRACE_PROPERTY) != null;
fInfo = System.getProperty(INFO_PROPERTY) != null;
fWarn = System.getProperty(WARN_PROPERTY) != null;
String nl = System.getProperty("line.separator"); //$NON-NLS-1$
if (!StringUtils.isSet(nl))
nl = "\n"; //$NON-NLS-1$
fNl = nl;
}
/*
* @see org.apache.commons.logging.impl.NoOpLog#error(java.lang.Object,
* java.lang.Throwable)
*/
public void error(Object message, Throwable t) {
logError(message, t);
}
/*
* @see org.apache.commons.logging.impl.NoOpLog#error(java.lang.Object)
*/
public void error(Object message) {
logError(message, null);
}
/*
* @see org.apache.commons.logging.impl.NoOpLog#fatal(java.lang.Object,
* java.lang.Throwable)
*/
public void fatal(Object message, Throwable t) {
logError(message, t);
}
/*
* @see org.apache.commons.logging.impl.NoOpLog#fatal(java.lang.Object)
*/
public void fatal(Object message) {
logError(message, null);
}
private void logInfo(Object message, Throwable t) {
logStatus(message, t, Level.INFO);
}
private void logWarning(Object message, Throwable t) {
logStatus(message, t, Level.WARNING);
}
private void logError(Object message, Throwable t) {
logStatus(message, t, Level.ERROR);
}
private void logStatus(Object message, Throwable t, Level level) {
if (message instanceof String || t instanceof Exception) {
String msg = null;
if (message instanceof String)
msg = message.toString();
Exception e = null;
if (t instanceof Exception)
e = (Exception) t;
if (msg == null && e != null && e.getMessage() != null)
msg = e.getMessage();
/* Write Info and Warning to Log Directly */
if (level == Level.INFO || level == Level.WARNING) {
if (StringUtils.isSet(msg)) {
CoreUtils.appendLogMessage(msg);
CoreUtils.appendLogMessage(fNl);
}
}
/* Log Error Status for Errors */
else {
Activator activator = Activator.getDefault();
if (activator != null) {
IStatus status = activator.createErrorStatus(msg, e);
activator.getLog().log(status);
}
}
}
}
/*
* @see org.apache.commons.logging.Log#debug(java.lang.Object)
*/
public void debug(Object message) {
if (isDebugEnabled())
logInfo(message, null);
}
/*
* @see org.apache.commons.logging.Log#debug(java.lang.Object,
* java.lang.Throwable)
*/
public void debug(Object message, Throwable t) {
if (isDebugEnabled())
logInfo(message, t);
}
/*
* @see org.apache.commons.logging.Log#info(java.lang.Object)
*/
public void info(Object message) {
if (isInfoEnabled())
logInfo(message, null);
}
/*
* @see org.apache.commons.logging.Log#info(java.lang.Object,
* java.lang.Throwable)
*/
public void info(Object message, Throwable t) {
if (isInfoEnabled())
logInfo(message, t);
}
/*
* @see org.apache.commons.logging.Log#warn(java.lang.Object)
*/
public void warn(Object message) {
if (isWarnEnabled())
logWarning(message, null);
}
/*
* @see org.apache.commons.logging.Log#warn(java.lang.Object,
* java.lang.Throwable)
*/
public void warn(Object message, Throwable t) {
if (isWarnEnabled())
logWarning(message, t);
}
/*
* @see org.apache.commons.logging.Log#trace(java.lang.Object)
*/
public void trace(Object message) {
if (isTraceEnabled())
logInfo(message, null);
}
/*
* @see org.apache.commons.logging.Log#trace(java.lang.Object,
* java.lang.Throwable)
*/
public void trace(Object message, Throwable t) {
if (isTraceEnabled())
logInfo(message, t);
}
/*
* @see org.apache.commons.logging.Log#isDebugEnabled()
*/
public boolean isDebugEnabled() {
return fDebug;
}
/*
* @see org.apache.commons.logging.Log#isErrorEnabled()
*/
public boolean isErrorEnabled() {
return true;
}
/*
* @see org.apache.commons.logging.Log#isFatalEnabled()
*/
public boolean isFatalEnabled() {
return true;
}
/*
* @see org.apache.commons.logging.Log#isInfoEnabled()
*/
public boolean isInfoEnabled() {
return fInfo;
}
/*
* @see org.apache.commons.logging.Log#isTraceEnabled()
*/
public boolean isTraceEnabled() {
return fTrace;
}
/*
* @see org.apache.commons.logging.Log#isWarnEnabled()
*/
public boolean isWarnEnabled() {
return fWarn;
}
}