/*******************************************************************************
* Copyright (c) 2012, 2014 Ericsson
* 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.eclipse.org/legal/epl-v10.html
*
*******************************************************************************/
package fr.inria.linuxtools.internal.tmf.ui;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import org.eclipse.core.runtime.Platform;
/**
* Tracer class for the tmf.ui plugin
*/
@SuppressWarnings("nls")
public class TmfUiTracer {
private static String pluginID = Activator.PLUGIN_ID;
static boolean ERROR = false;
static boolean WARNING = false;
static boolean INFO = false;
static boolean INDEX = false;
static boolean DISPLAY = false;
static boolean SORTING = false;
private static String LOGNAME = "traceUI.log";
private static BufferedWriter fTraceLog = null;
private static BufferedWriter openLogFile(String filename) {
BufferedWriter outfile = null;
try {
outfile = new BufferedWriter(new FileWriter(filename));
} catch (IOException e) {
Activator.getDefault().logError("Error creating log file " + LOGNAME, e); //$NON-NLS-1$
}
return outfile;
}
/**
* Initialize tracing
*/
public static void init() {
String traceKey;
boolean isTracing = false;
traceKey = Platform.getDebugOption(pluginID + "/error");
if (traceKey != null) {
ERROR = (Boolean.valueOf(traceKey)).booleanValue();
isTracing |= ERROR;
}
traceKey = Platform.getDebugOption(pluginID + "/warning");
if (traceKey != null) {
WARNING = (Boolean.valueOf(traceKey)).booleanValue();
isTracing |= WARNING;
}
traceKey = Platform.getDebugOption(pluginID + "/info");
if (traceKey != null) {
INFO = (Boolean.valueOf(traceKey)).booleanValue();
isTracing |= INFO;
}
traceKey = Platform.getDebugOption(pluginID + "/updateindex");
if (traceKey != null) {
INDEX = (Boolean.valueOf(traceKey)).booleanValue();
isTracing |= INDEX;
}
traceKey = Platform.getDebugOption(pluginID + "/display");
if (traceKey != null) {
DISPLAY = (Boolean.valueOf(traceKey)).booleanValue();
isTracing |= DISPLAY;
}
traceKey = Platform.getDebugOption(pluginID + "/sorting");
if (traceKey != null) {
SORTING = (Boolean.valueOf(traceKey)).booleanValue();
isTracing |= SORTING;
}
// Create trace log file if needed
if (isTracing) {
fTraceLog = openLogFile(LOGNAME);
}
}
/**
* Stop tracing
*/
public static void stop() {
if (fTraceLog == null) {
return;
}
try {
fTraceLog.close();
fTraceLog = null;
} catch (IOException e) {
Activator.getDefault().logError("Error closing log file " + LOGNAME, e); //$NON-NLS-1$
}
}
// ------------------------------------------------------------------------
// Predicates
// ------------------------------------------------------------------------
/**
* @return If ERROR messages are traced
*/
public static boolean isErrorTraced() {
return ERROR;
}
/**
* @return If INDEX messages are traced
*/
public static boolean isIndexTraced() {
return INDEX;
}
/**
* @return If DISPLAY messages are traced
*/
public static boolean isDisplayTraced() {
return DISPLAY;
}
/**
* @return If SORTING messages are traced
*/
public static boolean isSortingTraced() {
return SORTING;
}
// ------------------------------------------------------------------------
// Tracing methods
// ------------------------------------------------------------------------
/**
* Trace a generic event
*
* @param msg
* The event's message
*/
public static void trace(String msg) {
// Leave when there is no place to write the message.
if (fTraceLog == null) {
return;
}
long currentTime = System.currentTimeMillis();
StringBuilder message = new StringBuilder("[");
message.append(currentTime / 1000);
message.append(".");
message.append(String.format("%1$03d", currentTime % 1000));
message.append("] ");
message.append(msg);
try {
fTraceLog.write(message.toString());
fTraceLog.newLine();
fTraceLog.flush();
} catch (IOException e) {
Activator.getDefault().logError("Error writing to log file " + LOGNAME, e); //$NON-NLS-1$
}
}
/**
* Trace an INDEX event
*
* @param msg
* The event's message
*/
public static void traceIndex(String msg) {
String message = ("[INDEX] " + msg);
trace(message);
}
/**
* Trace a DISPLAY event
*
* @param msg
* The event's message
*/
public static void traceDisplay(String msg) {
String message = ("[DISPLAY]" + msg);
trace(message);
}
/**
* Trace a SORTING event
*
* @param msg
* The event's message
*/
public static void traceSorting(String msg) {
String message = ("[SORT] " + msg);
trace(message);
}
/**
* Trace an ERROR event
*
* @param msg
* The event's message
*/
public static void traceError(String msg) {
String message = ("[ERR] Thread=" + Thread.currentThread().getId() + " " + msg);
trace(message);
}
/**
* Trace a WARNING event
*
* @param msg
* The event's message
*/
public static void traceWarning(String msg) {
String message = ("[WARN] Thread=" + Thread.currentThread().getId() + " " + msg);
trace(message);
}
/**
* Trace an INFO event
*
* @param msg
* The event's message
*/
public static void traceInfo(String msg) {
String message = ("[INF] Thread=" + Thread.currentThread().getId() + " " + msg);
trace(message);
}
}