package org.sef4j.log.slf4j.event2slf4j; import java.util.Collection; import org.sef4j.core.api.EventSender; import org.sef4j.core.helpers.adapters.TypeHierarchyToObjectMap; import org.slf4j.Logger; /** * adapter EventSender -> Slf4j * * @see EventToSlf4jLogCaller */ public class Slf4jLogCallerEventSender<T> implements EventSender<T> { private Logger slf4jLogger; /** * class -> converter for event to method call of <code>slf4jLogger.loXX(YY, ZZ)</code> */ private TypeHierarchyToObjectMap<EventToSlf4jLogCaller<T>> eventToSlf4jLogCallerPerClass; /** * converter for event object to method call of <code>slf4jLogger.loXX(YY, ZZ)</code> */ private EventToSlf4jLogCaller<T> defautEventToSlf4jLogCaller; // ------------------------------------------------------------------------ public Slf4jLogCallerEventSender(Logger slf4jLogger, TypeHierarchyToObjectMap<EventToSlf4jLogCaller<T>> eventToSlf4jLogCallerPerClass, EventToSlf4jLogCaller<T> defautEventToSlf4jLogCaller ) { this.slf4jLogger = slf4jLogger; this.eventToSlf4jLogCallerPerClass = eventToSlf4jLogCallerPerClass; this.defautEventToSlf4jLogCaller = defautEventToSlf4jLogCaller; } // ------------------------------------------------------------------------ @Override public void sendEvent(T event) { EventToSlf4jLogCaller<T> logCaller; if (eventToSlf4jLogCallerPerClass != null && event != null) { logCaller = eventToSlf4jLogCallerPerClass.get(event.getClass()); // if logCaller == null and needing default => see register logCaller to Object.class } else { logCaller = defautEventToSlf4jLogCaller; } if (logCaller != null) { logCaller.logTo(event, slf4jLogger); } } @Override public void sendEvents(Collection<T> events) { for(T event : events) { sendEvent(event); } } public Logger getSlf4jLogger() { return slf4jLogger; } public void setSlf4jLogger(Logger slf4jLogger) { this.slf4jLogger = slf4jLogger; } public TypeHierarchyToObjectMap<EventToSlf4jLogCaller<T>> getEventToSlf4jLogCallerPerClass() { return eventToSlf4jLogCallerPerClass; } public void setEventToSlf4jLogCallerPerClass(TypeHierarchyToObjectMap<EventToSlf4jLogCaller<T>> eventToSlf4jLogCallerPerClass) { this.eventToSlf4jLogCallerPerClass = eventToSlf4jLogCallerPerClass; } public EventToSlf4jLogCaller<T> getDefautEventToSlf4jLogCaller() { return defautEventToSlf4jLogCaller; } public void setDefautEventToSlf4jLogCaller(EventToSlf4jLogCaller<T> defautEventToSlf4jLogCaller) { this.defautEventToSlf4jLogCaller = defautEventToSlf4jLogCaller; } }