/** * */ package org.nightlabs.jfire.scripting.print.ui.transfer.delivery; import java.util.HashMap; import java.util.Map; import java.util.TreeMap; import org.apache.log4j.Logger; /** * @author Alexander Bieber <!-- alex [AT] nightlabs [DOT] de --> * */ public class DeliveryProcessorPrintDebugInfo { public static final String CAT_FETCH_DATA_FETCH_LAYOUTS_MAP = "010_FetchLayoutMap"; public static final String CAT_FETCH_DATA_FETCH_LAYOUTS = "020_FetchLayouts"; public static final String CAT_FETCH_DATA_SCRIPT_RESULTS = "030_ScriptResults"; public static final String CAT_FETCH_DATA_TOTAL_TIME = "040_FetchDataTotalTime"; public static final String CAT_PROCESS_DATA_PARSE_LAYOUT_FILE = "050_ParseLayoutFile"; public static final String CAT_PROCESS_DATA_PREPARE_PRINT_ENGINE = "060_PreparePrintEngine"; public static final String CAT_PROCESS_DATA_PREPARE_LAYOUT_FOR_PRINT = "070_PrepareLayoutForPrint"; public static final String CAT_PROCESS_DATA_PRINT = "080_Print"; public static final String CAT_TOTAL_TIME = "090_TotalTime"; private volatile Map<String, Long> category2Times = new HashMap<String, Long>(); private final boolean doMeasure; private final Logger logger; public DeliveryProcessorPrintDebugInfo() { logger = Logger.getLogger(DeliveryProcessorPrintDebugInfo.class); doMeasure = logger.isDebugEnabled(); } private void _addTime(String category, long time) { Long oldTime = category2Times.get(category); if (oldTime == null) category2Times.put(category, time); else category2Times.put(category, new Long(oldTime.longValue() + time)); } private void _printDebugInformation() { TreeMap<String, Long> sortedMap = new TreeMap<String, Long>(category2Times); StringBuffer names = new StringBuffer(); StringBuffer values = new StringBuffer(); for (Map.Entry<String, Long> entry : sortedMap.entrySet()) { names.append(entry.getKey() + "\t"); values.append(String.valueOf(entry.getValue()) + "\t"); } logger.info("Print debug information:"); logger.info("Category names:"); logger.info(names.toString()); logger.info("Category values (ms)"); logger.info(values.toString()); } private static DeliveryProcessorPrintDebugInfo sharedInstance; public static DeliveryProcessorPrintDebugInfo sharedInstance() { return sharedInstance; } public static void beginMeasure() { sharedInstance = new DeliveryProcessorPrintDebugInfo(); } public static void addTime(String category, long time) { if (sharedInstance().doMeasure) sharedInstance()._addTime(category, time); } public static void print() { if (sharedInstance().doMeasure) sharedInstance()._printDebugInformation(); } }