/*******************************************************************************
* Copyright (c) 2004, 2010 IBM Corporation and others.
* 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
*
* Contributors:
* IBM - Initial API and implementation
* Markus Schorn (Wind River Systems)
*******************************************************************************/
package org.eclipse.cdt.make.internal.core.scannerconfig.util;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.eclipse.cdt.make.core.MakeCorePlugin;
/**
* Tracebility related utility functions
*
* @author vhirsl
*/
public class TraceUtil {
public static final String EOL = System.getProperty("line.separator"); //$NON-NLS-1$
public static boolean SCANNER_CONFIG = false;
private static LogWriter logger = null;
static {
if (MakeCorePlugin.getDefault()!=null) // in case of running simple junit tests
logger = new LogWriter(MakeCorePlugin.getDefault().getStateLocation().append(".log").toFile()); //$NON-NLS-1$
}
/* (non-Javadoc)
* @see java.lang.Object#finalize()
*/
@Override
protected void finalize() throws Throwable {
logger.shutdown();
super.finalize();
}
public static boolean isTracing() {
return SCANNER_CONFIG;
}
public static void outputTrace(String prefix, String[] tokens, String postfix) {
if (isTracing()) {
System.out.print(prefix + ' ');
for (int i = 0; i < tokens.length; i++) {
System.out.print(tokens[i] + ' ');
}
System.out.println(postfix);
}
}
public static void outputTrace(String prefix, String msg, String postfix) {
if (isTracing()) {
System.out.println(prefix + ' ' + msg + ' ' + postfix);
}
}
/**
* For traces of type:
* Title:
* Subtitle1:
* item1[0]
* item1[1]
* ...
* Subtitle2:
* item2[0]
* item2[1]
* ...
*/
public static void outputTrace(String title, String subtitle1, List<String> item1, List<String> item1new, String subtitle2, List<String> item2) {
if (isTracing()) {
//System.out.println();
System.out.println(title);
final String prefix = " "; //$NON-NLS-1$
final String doublePrefix = " "; //$NON-NLS-1$
System.out.println(prefix + subtitle1 + " (" + item1.size() + "):"); //$NON-NLS-1$ //$NON-NLS-2$
int count = 0;
for (Iterator<String> i = item1.iterator(), j = item1new.iterator(); i.hasNext(); ) {
System.out.println(doublePrefix + String.valueOf(++count) + "\t\'" +i.next() + (j.hasNext()?"\' -> \'" + j.next():"") + '\''); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
System.out.println(prefix + subtitle2 + " (" + item2.size() + "):"); //$NON-NLS-1$ //$NON-NLS-2$
count = 0;
for (Iterator<String> i = item2.iterator(); i.hasNext(); ) {
System.out.println(doublePrefix + String.valueOf(++count) + "\t\'" + i.next() + '\''); //$NON-NLS-1$
}
}
}
public static void outputError(String string, String line) {
if (isTracing()) {
System.out.println();
System.out.println("Error: " + string + line); //$NON-NLS-1$
}
}
public static void outputError(String string, String[] tokens) {
if (isTracing()) {
System.out.println();
System.out.print("Error: " + string); //$NON-NLS-1$
for (int i = 0; i < tokens.length; i++) {
System.out.print(tokens[i] + ' ');
}
System.out.println();
}
}
public static void metricsTrace(String title, String subtitlePrefix, String subtitlePostfix,
Map<String, List<Map<String, List<String>>>> directoryCommandListMap) {
try {
logger.writeln();
logger.writeln(" *** NEW METRICS TRACE ***"); //$NON-NLS-1$
logger.writeln();
Set<String> dirs = directoryCommandListMap.keySet();
for (String dir : dirs) {
logger.writeln(title + dir + ":"); //$NON-NLS-1$
List<Map<String, List<String>>> directoryCommandList = directoryCommandListMap.get(dir);
if (directoryCommandList == null) {
logger.writeln(" --- empty ---" + EOL); //$NON-NLS-1$
return;
}
for (Map<String, List<String>> command21FileListMap : directoryCommandList) {
String[] commands = command21FileListMap.keySet().toArray(new String[1]);
logger.writeln(" " + subtitlePrefix + commands[0] + subtitlePostfix); //$NON-NLS-1$
List<String> fileList = command21FileListMap.get(commands[0]);
for (String fileName : fileList) {
logger.writeln(" " + fileName); //$NON-NLS-1$
}
}
}
logger.flushLog();
}
catch (IOException e) {}
}
public static void summaryTrace(String title, int workingDirsN, int commandsN, int filesN) {
try {
logger.writeln();
logger.writeln(" *** METRICS SUMMARY ***"); //$NON-NLS-1$
logger.writeln();
logger.writeln(title);
logger.writeln(" Number of directories visited: " + Integer.toString(workingDirsN)); //$NON-NLS-1$
logger.writeln(" Number of generic commands: " + Integer.toString(commandsN)); //$NON-NLS-1$
logger.writeln(" Number of compiled files: " + Integer.toString(filesN)); //$NON-NLS-1$
logger.flushLog();
}
catch (IOException e) {}
}
/**
* @param trace : String
*/
public static void metricsTrace(String trace) {
try {
logger.writeln();
logger.writeln(" *** NEW METRICS TRACE 2 ***"); //$NON-NLS-1$
logger.writeln();
logger.writeln(trace);
logger.flushLog();
}
catch (IOException e) {}
}
}