package org.jactr.tools.experiment.actions.common; /* * default logging */ import java.util.function.Consumer; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.jactr.tools.experiment.IExperiment; import org.jactr.tools.experiment.actions.IAction; import org.jactr.tools.experiment.impl.IVariableContext; import org.jactr.tools.experiment.impl.VariableResolver; public class LogAction implements IAction { /** * Logger definition */ static private final transient Log LOGGER = LogFactory .getLog(LogAction.class); private final String _message; private final IExperiment _experiment; private Consumer<String> _logMessageConsumer; static public final Consumer<String> STDOUT = (msg) -> System.out .println(msg); static public final Consumer<String> STDERR = (msg) -> System.err .println(msg); static public final Consumer<String> ERROR_LOG = (msg) -> LOGGER.error(msg); static public final Consumer<String> NULL = (msg) -> { }; /** * will check LogAction.destination system property for override log consumer, * otherwise, stdout * * @param message * @param experiment */ public LogAction(String message, IExperiment experiment) { _message = message; _experiment = experiment; Consumer<String> consumer = STDOUT; String destination = System.getProperty("LogAction.destination"); if (destination != null) if (destination.equalsIgnoreCase("err")) consumer = LogAction.STDERR; else if (destination.equalsIgnoreCase("null")) consumer = LogAction.NULL; _logMessageConsumer = consumer; } public LogAction(String message, IExperiment experiment, boolean logError) { this(message, experiment, logError ? ERROR_LOG : STDOUT); } public LogAction(String message, IExperiment experiment, Consumer<String> logConsumer) { _message = message; _experiment = experiment; _logMessageConsumer = logConsumer; } public void fire(IVariableContext context) { // StringBuilder sb = new StringBuilder(_message); // int startIndex = sb.indexOf(resolver.getPrefix(), 0); // while (startIndex != -1) // { // int endIndex = sb.indexOf(resolver.getSuffix(), startIndex); // if (endIndex == -1) break; // String replacement = resolver.resolve( // sb.substring(startIndex, endIndex + 1), context).toString(); // sb.replace(startIndex, endIndex + 1, replacement); // startIndex = sb.indexOf(resolver.getPrefix(), // startIndex + replacement.length()); // } // if we know people want the noop, don't even process anything if (_logMessageConsumer != NULL) { VariableResolver resolver = _experiment.getVariableResolver(); String resolved = resolver.resolveValues(_message, context); _logMessageConsumer.accept(resolved); } } }