/** * License Agreement for OpenSearchServer * * Copyright (C) 2008-2009 Emmanuel Keller / Jaeksoft * * http://www.open-search-server.com * * This file is part of OpenSearchServer. * * OpenSearchServer is free software: you can redistribute it and/or * modify it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * OpenSearchServer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with OpenSearchServer. * If not, see <http://www.gnu.org/licenses/>. **/ package com.jaeksoft.searchlib.util; import org.apache.commons.lang3.StringEscapeUtils; import java.io.PrintWriter; import java.text.DateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; public class Debug { private List<Debug> childrens; private String info; private long startTime; private long elapsedTime; private String className; private int hc; public Debug() { childrens = null; className = null; info = null; startTime = System.currentTimeMillis(); } public void setInfo(Object object) { if (object != null) { this.className = object.getClass().getCanonicalName(); this.info = object.toString(); this.hc = object.hashCode(); } this.elapsedTime = System.currentTimeMillis() - startTime; } public Debug addChildren() { return addChildren(new Debug()); } public Debug addChildren(Debug debug) { if (debug == null) return null; synchronized (this) { if (childrens == null) childrens = new ArrayList<Debug>(); childrens.add(debug); } return debug; } private DateFormat dtdf = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.FULL); public void xmlInfo(PrintWriter writer) { writer.print("<debug start=\""); writer.print(dtdf.format(new Date(startTime))); writer.print("\" elapsed=\""); writer.print(elapsedTime); writer.print("\" info=\""); writer.print(StringEscapeUtils.escapeJava(StringEscapeUtils .escapeXml11(info))); writer.print("\" hashCode=\""); writer.print(hc); writer.print("\" class=\""); writer.print(className); writer.print("\">"); if (childrens != null) for (Debug children : childrens) children.xmlInfo(writer); writer.print("</debug>"); } @Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append(dtdf.format(new Date(startTime))); sb.append(" elapsed:"); sb.append(elapsedTime); sb.append(" info:"); sb.append(info); sb.append(" class:"); sb.append(" className:"); return sb.toString(); } }