package org.intrace.output.trace; import java.util.HashMap; import java.util.Locale; import java.util.Map; import org.intrace.shared.TraceConfigConstants; /** * Args Format: "[arg1[arg2[arg3" * * where argx is of the form value-parameter */ public class TraceSettings { private boolean entryExitTraceEnabled = true; private boolean branchTraceEnabled = false; private boolean argTraceEnabled = true; private boolean truncateArraysEnabled = true; /** * If true, append the 'current' stack trace to the text of the exit trace event. * This is helpful for discovering who is invoking a particular line of code. * Here is an example of the trace output: * <PRE> * [07:53:15.509]:[1]:example.FirstTraceExample:intArrayMethod: }:70~java.lang.Thread.getStackTrace(Thread.java:1567),example.FirstTraceExample.intArrayMethod(FirstTraceExample.java:70),example.FirstTraceExample.workMethod(FirstTraceExample.java:38),example.FirstTraceExample.otherMain(FirstTraceExample.java:29),example.FirstTraceExample.main(FirstTraceExample.java:16) * </PRE> */ private boolean exitStackTrace = false; public TraceSettings(TraceSettings oldSettings) { entryExitTraceEnabled = oldSettings.entryExitTraceEnabled; branchTraceEnabled = oldSettings.branchTraceEnabled; argTraceEnabled = oldSettings.argTraceEnabled; truncateArraysEnabled = oldSettings.truncateArraysEnabled; exitStackTrace = oldSettings.exitStackTrace; } public TraceSettings(String args) { parseArgs(args); } public void parseArgs(String args) { String[] seperateArgs = args.split("\\["); for (int ii = 0; ii < seperateArgs.length; ii++) { parseArg("[" + seperateArgs[ii].toLowerCase(Locale.ROOT)); } } private void parseArg(String arg) { if (arg.equals(TraceConfigConstants.ENTRY_EXIT + "false")) { entryExitTraceEnabled = false; } else if (arg.equals(TraceConfigConstants.ENTRY_EXIT + "true")) { entryExitTraceEnabled = true; } else if (arg.equals(TraceConfigConstants.BRANCH + "true")) { branchTraceEnabled = true; } else if (arg.equals(TraceConfigConstants.BRANCH + "false")) { branchTraceEnabled = false; } else if (arg.equals(TraceConfigConstants.ARG + "true")) { argTraceEnabled = true; } else if (arg.equals(TraceConfigConstants.ARG + "false")) { argTraceEnabled = false; } else if (arg.equals(TraceConfigConstants.ARRAYS + "true")) { truncateArraysEnabled = true; } else if (arg.equals(TraceConfigConstants.ARRAYS + "false")) { truncateArraysEnabled = false; } else if (arg.equals(TraceConfigConstants.EXIT_STACK_TRACE + "false")) { exitStackTrace = false; } else if (arg.equals(TraceConfigConstants.EXIT_STACK_TRACE + "true")) { exitStackTrace = true; } } public boolean isEntryExitTraceEnabled() { return entryExitTraceEnabled; } public boolean isBranchTraceEnabled() { return branchTraceEnabled; } public boolean isArgTraceEnabled() { return argTraceEnabled; } public boolean isTruncateArraysEnabled() { return truncateArraysEnabled; } public boolean isExitStackTraceEnabled() { return exitStackTrace; } public Map<String, String> getSettingsMap() { Map<String, String> settingsMap = new HashMap<String, String>(); settingsMap.put(TraceConfigConstants.ENTRY_EXIT, Boolean.toString(entryExitTraceEnabled)); settingsMap.put(TraceConfigConstants.BRANCH, Boolean.toString(branchTraceEnabled)); settingsMap .put(TraceConfigConstants.ARG, Boolean.toString(argTraceEnabled)); settingsMap .put(TraceConfigConstants.ARRAYS, Boolean.toString(truncateArraysEnabled)); settingsMap.put(TraceConfigConstants.EXIT_STACK_TRACE, Boolean.toString(exitStackTrace)); return settingsMap; } }