ProcessReader.java
/*
 * ProcessReader.java
 *
 * Created on November 19, 2001, 5:28 PM
 */
package emissary.util.shell;
import org.slf4j.MDC;
import java.util.Map;
public abstract class ProcessReader extends Thread {
    private Map<String, String> contextMap;
    public abstract void finish();
    /**
     * Allows parent threads to pass state values retrieved through a call to {@link MDC#getCopyOfContextMap()}
     * 
     * @param contextMap Map of captured point-in-time state values
     */
    public void setContextMap(Map<String, String> contextMap) {
        this.contextMap = contextMap;
    }
    /**
     * Applies logger context to the current thread. This method should only be called from within the overridden
     * {@link Thread#run()} method, since the context is backed by a {@link ThreadLocal ThreadLocal<T>} map.
     */
    protected final void applyLogContextMap() {
        if (contextMap != null) {
            MDC.setContextMap(contextMap);
        }
    }
    /**
     * Wrapper method to ensure that the {@link #applyLogContextMap()} method is always invoked before executing the core
     * functionality of ProcessReader subclasses
     */
    @Override
    public void run() {
        applyLogContextMap();
        runImpl();
    }
    /**
     * Abstract method that subclasses should override to implement their core thread-specific functionality
     */
    abstract void runImpl();
}