001/* 002 * jPOS Project [http://jpos.org] 003 * Copyright (C) 2000-2026 jPOS Software SRL 004 * 005 * This program is free software: you can redistribute it and/or modify 006 * it under the terms of the GNU Affero General Public License as 007 * published by the Free Software Foundation, either version 3 of the 008 * License, or (at your option) any later version. 009 * 010 * This program is distributed in the hope that it will be useful, 011 * but WITHOUT ANY WARRANTY; without even the implied warranty of 012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 013 * GNU Affero General Public License for more details. 014 * 015 * You should have received a copy of the GNU Affero General Public License 016 * along with this program. If not, see <http://www.gnu.org/licenses/>. 017 */ 018 019package org.jpos.log.render.markdown; 020 021import org.jpos.log.LogRenderer; 022import org.jpos.log.LogRendererRegistry; 023import org.jpos.transaction.Context; 024 025import java.io.PrintStream; 026import java.util.Map; 027 028public final class ContextMarkdownRenderer implements LogRenderer<Context> { 029 @Override 030 public void render(Context ctx, PrintStream ps, String indent) { 031 Map<Object,Object> map = ctx.getMapClone(); 032 map.forEach((key, value) -> formatEntry(key.toString(), value, ps)); 033 } 034 035 public Class<?> clazz() { 036 return Context.class; 037 } 038 public Type type() { 039 return Type.MARKDOWN; 040 } 041 042 private void formatEntry (String key, Object value, PrintStream ps) { 043 LogRenderer<Object> renderer = LogRendererRegistry.getRenderer(value.getClass(), Type.MARKDOWN); 044 if (renderer != null) { 045 ps.printf ("#### %s%n", key); 046 // ps.printf ("> %s%n%n", Caller.shortClassName(renderer.getClass().getCanonicalName())); 047 renderer.render (value, ps, ""); 048 } else { 049 ps.printf ("No renderer could be found for class %s%n", value.getClass()); 050 ps.printf ("#### %s%n```%n", key); 051 ps.println(value); 052 ps.println("```"); 053 } 054 } 055}