001/*
002 * Created on 16-Apr-2004
003 */
004package ca.uhn.hl7v2.protocol;
005
006import java.util.List;
007
008/**
009 * The operational context of a <code>Processor</code>.  This defines 
010 * certain resources that are not part of the <code>Processor</code>, 
011 * but are needed in order to implement it, and may vary between  
012 * deployments.  
013 * 
014 * @author <a href="mailto:bryan.tripp@uhn.on.ca">Bryan Tripp</a>
015 * @version $Revision: 1.1 $ updated on $Date: 2007-02-19 02:24:38 $ by $Author: jamesagnew $
016 */
017public interface ProcessorContext {
018
019    /**
020     * @return the router that directs unsolicited inbound messages to 
021     *      the appropriate <code>Application</code>  
022     */
023    ApplicationRouter getRouter();
024
025    /**
026     * @return the object responsible for transport of remotely initiated message 
027     *      exchanges (normally with a remote server)
028     */
029    TransportLayer getRemotelyDrivenTransportLayer();
030    
031    
032    /**
033     * @return the object responsible for transport of locally initiated message 
034     *      exchanges (normally with a remote server)
035     */
036    TransportLayer getLocallyDrivenTransportLayer();
037
038    /**
039     * @return the validators that determine whether a message can be 
040     *      accepted for routing to the appropriate application 
041     */
042    AcceptValidator[] getValidators();
043    
044    /**
045     * Adds a new validator to the list of those returned by 
046     * <code>getValidators()</code>.  
047     *  
048     * @param theValidator the validator to add 
049     */
050    void addValidator(AcceptValidator theValidator);
051    
052    /**
053     * @return a store for messages while they are being routed to the 
054     *      appropriate application 
055     */
056    SafeStorage getSafeStorage();
057    
058    /**
059     * Returns the list of fields that are to be included as metadata whenever a <code>Message</code>
060     * is converted to a <code>Transportable</code>.  Each field is a String <code>Terser</code>
061     * path.
062     */
063    List<String> getMetadataFields();
064    
065}