package client.net.sf.saxon.ce;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.LogRecord;
import java.util.logging.Logger;
import java.util.logging.Handler;
import client.net.sf.saxon.ce.lib.GenericLogHandler;
import client.net.sf.saxon.ce.lib.JsLogHandler;
import client.net.sf.saxon.ce.lib.ListenerLogHandler;
import client.net.sf.saxon.ce.lib.TraceListener;
import client.net.sf.saxon.ce.trace.XSLTTraceListener;
import client.net.sf.saxon.ce.tree.util.URI;
import com.google.gwt.core.client.GWT;
import com.google.gwt.logging.client.FirebugLogHandler;
import com.google.gwt.logging.client.HasWidgetsLogHandler;
import com.google.gwt.logging.client.LoggingPopup;
import com.google.gwt.logging.client.NullLogHandler;
import com.google.gwt.logging.client.NullLoggingPopup;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.HasWidgets;
public class LogController {
/**
* Class for managing the GWT Logging
* Proposed use of levels:
* � OFF
� SEVERE GWT Exceptions and internal errors all fatal xslt errors
� WARNING GWT Warnings and bad but not fatal internal conditions
� INFO xsl:message and fn:trace output
� CONFIG Configuration data
� FINE High-level XSLT calls to the public API = Main transformation, inward calls such as events
� FINER XSLT/XPath/IXSL function and template calls
� FINEST Output from TraceExpression - XSLT instructions within templates and functions
SystemLogHandler - not included
HasWidgetsLogHandler - the popup view
DevelopmentModeLogHandler
ConsoleLogHandler - IE or FireBug Lite consoles
SimpleRemoteLogHandler
FirebugLogHandler
-----------------
GenericLogHandler - in-house mod improves on ConsoleLogHandler + FirebugHandler
JSLogHandler - Raises JavaScript event for each log item
Set properties in Saxonce.gwt.xml to control logging: e.g.
<set-property name="gwt.logging.logLevel" value="SEVERE"/> # To change the default logLevel
<set-property name="gwt.logging.enabled" value="FALSE"/> # To disable logging
<set-property name="gwt.logging.consoleHandler" value="DISABLED"/> # To disable a default Handler
<set-property name="gwt.logging.popupHandler" value="DISABLED"/> # To disable the popupHandler
*/
private static boolean isTraceEnabled;
private static Logger mainLogger;
private static Level initLogLevel;
private LogController(){
// Class can not be instantiated
}
public static void initLogger() {
mainLogger = Logger.getLogger("");
String logLevel = Window.Location.getParameter("logLevel");
// if set, this prevents the JS API overriding the URI parameter
initLogLevel = (logLevel == null)? null : Level.parse(logLevel);
}
public static boolean LoggingIsDisabledByURI() {
return mainLogger.getLevel() == Level.OFF; // home.toString().indexOf("logLevel=OFF") > -1;
}
private static TraceListener traceListener = null;
public static void InitializeTraceListener() {
checkTraceIsEnabled();
if (isTraceEnabled) {
traceListener = new XSLTTraceListener();
}
}
public static void openTraceListener() {
if (isTraceEnabled) {
traceListener.open();
}
}
public static void closeTraceListener(boolean success) {
if (traceListener != null) {
if (success) {
if (isTraceEnabled) {
traceListener.close();
}
} else {
((XSLTTraceListener)traceListener).terminate();
}
}
}
public static TraceListener getTraceListener() {
return traceListener;
}
public static boolean traceIsEnabled() {
return isTraceEnabled;
}
private static boolean checkTraceIsEnabled() {
isTraceEnabled = mainLogger.getLevel() == Level.FINEST;
return isTraceEnabled;
}
public static void addJavaScriptLogHandler() {
if (!LoggingIsDisabledByURI()) {
Logger.getLogger("").addHandler(new ListenerLogHandler());
}
}
private static JsLogHandler jsLogHandler = null;
public static JsLogHandler getJsLogHandler() {
return jsLogHandler;
}
public static void setLogLevel(String newLevel){
if (initLogLevel == null) {
try {
mainLogger.setLevel(Level.parse(newLevel));
} catch (Exception e){
Logger.getLogger("LogController").severe("invalid level for setLogLevel: " + newLevel);
}
}
}
public static String getLogLevel(){
return mainLogger.getLevel().getName();
}
public static void addRequiredLogHanders(LogRecord record) {
jsLogHandler = new JsLogHandler();
mainLogger.addHandler(jsLogHandler);
jsLogHandler.publish(record);
GenericLogHandler gHandler = new GenericLogHandler();
// popup & firebug must be disabled using Saxonce.gwt.xml and enabled
// below - if required
if (gHandler.isSupported()) {
mainLogger.addHandler(gHandler);
gHandler.publish(record);
} else if (!SaxonceApi.isLogHandlerExternal()) {
HasWidgets loggingWidget = new LoggingPopup();
HasWidgetsLogHandler hw = new HasWidgetsLogHandler(loggingWidget);
mainLogger.addHandler(hw);
hw.publish(record);
}
}
}
// This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0.
// If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
// This Source Code Form is �Incompatible With Secondary Licenses�, as defined by the Mozilla Public License, v. 2.0.