package com.tesora.dve.debug; /* * #%L * Tesora Inc. * Database Virtualization Engine * %% * Copyright (C) 2011 - 2014 Tesora Inc. * %% * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License, version 3, * as published by the Free Software Foundation. * * This program 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 Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * #L% */ import java.io.IOException; public class StringDebugger implements DebugHandle, Debuggable { String fieldStart; String subIndent; String fieldEnd; String nameValueDelimeter; StringBuilder builder; public StringDebugger() { this("","\t","\n"," = ",new StringBuilder()); } public StringDebugger(String fieldStart, String subIndent, String fieldEnd, String nameValueDelimeter, StringBuilder builder) { this.fieldStart = fieldStart; this.subIndent = subIndent; this.fieldEnd = fieldEnd; this.nameValueDelimeter = nameValueDelimeter; this.builder = builder; } @Override public StringDebugger entry(String name, Object value) { if (value instanceof Debuggable){ return this.entry(name, (Debuggable) value); } builder.append(fieldStart); builder.append(name); builder.append(nameValueDelimeter); builder.append(value); builder.append(fieldEnd); return this; } @Override public StringDebugger line(String text) { builder.append(fieldStart); builder.append(text); builder.append(fieldEnd); return this; } public StringDebugger nesting(){ return new StringDebugger(fieldStart + subIndent, subIndent, fieldEnd, nameValueDelimeter,builder); } @Override public StringDebugger entry(String name, Debuggable value) { entry(name, "["); if (value == null) builder.append("null"); else { value.writeTo(this.nesting()); } line("]"); return this; } public String toString(){ return builder.toString(); } @Override public void writeTo(DebugHandle display) { display.line(builder.toString()); } public static void output(Appendable appender, Debuggable debug) { StringDebugger buffer = new StringDebugger(); debug.writeTo(buffer); try { appender.append(buffer.toString()); } catch (IOException e) { throw new RuntimeException(e); } } public static void output(Appendable appender, String named, Object debug) { StringDebugger buffer = new StringDebugger(); buffer.entry(named,debug); try { appender.append(buffer.toString()); } catch (IOException e) { throw new RuntimeException(e); } } }