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 028/** Markdown renderer for transaction {@link Context}, emitting one entry per Map key. */ 029public final class ContextMarkdownRenderer implements LogRenderer<Context> { 030 /** Default constructor; no instance state to initialise. */ 031 public ContextMarkdownRenderer() {} 032 @Override 033 public void render(Context ctx, PrintStream ps, String indent) { 034 Map<Object,Object> map = ctx.getMapClone(); 035 map.forEach((key, value) -> formatEntry(key.toString(), value, ps)); 036 } 037 038 public Class<?> clazz() { 039 return Context.class; 040 } 041 public Type type() { 042 return Type.MARKDOWN; 043 } 044 045 private void formatEntry (String key, Object value, PrintStream ps) { 046 LogRenderer<Object> renderer = LogRendererRegistry.getRenderer(value.getClass(), Type.MARKDOWN); 047 if (renderer != null) { 048 ps.printf ("#### %s%n", key); 049 // ps.printf ("> %s%n%n", Caller.shortClassName(renderer.getClass().getCanonicalName())); 050 renderer.render (value, ps, ""); 051 } else { 052 ps.printf ("No renderer could be found for class %s%n", value.getClass()); 053 ps.printf ("#### %s%n```%n", key); 054 ps.println(value); 055 ps.println("```"); 056 } 057 } 058}