View Javadoc
1   /*
2    * Created on 16-Apr-2004
3    */
4   package ca.uhn.hl7v2.protocol;
5   
6   import java.util.List;
7   
8   import ca.uhn.hl7v2.HL7Exception;
9   import ca.uhn.hl7v2.model.Message;
10  import ca.uhn.hl7v2.parser.Parser;
11  
12  /**
13   * <p>A convenient way for the initiator of a message exchange to send a 
14   * message to a remote server and await the response in the same thread.</p>  
15   * 
16   * <p>Acknowledgements, threading, and accept-level retries are handled by 
17   * an associated <code>Processor</code>.</p>
18   * 
19   * <p>Recall that acknowledgement requirements are specified in MSH fields 15 
20   * and 16 (see HL7 v2.5 chapter 2), so the sender has control.  If no response is 
21   * needed, and you would like this call to return right away, specify that no 
22   * acknowledgements are required.</p> 
23   * 
24   * @author <a href="mailto:bryan.tripp@uhn.on.ca">Bryan Tripp</a>
25   * @version $Revision: 1.1 $ updated on $Date: 2007-02-19 02:24:38 $ by $Author: jamesagnew $
26   */
27  public interface Initiator {
28      
29      /**
30       * Encodes a message, sends it to a remote system, awaits the response, 
31       * parses it, and returns it.  The response may be null if the message doesn't 
32       * require an application-level acknowledgement.   
33       *  
34       * @param theMessage the message to send to the remote system
35       * @return the response from the remote system 
36       */
37      Message../../ca/uhn/hl7v2/model/Message.html#Message">Message sendAndReceive(Message theMessage) throws HL7Exception;
38      
39      /**
40       * @return the <code>Parser</code> that is used to encode outbound messages
41       * and parse inbound ones.  It may be of interest to set certain parameters 
42       * of this parser, for example whether to use XML encoding.   
43       */
44      Parser getParser();
45      
46      /**
47       * @return the <code>Processor</code> instance that is used to perform the message
48       * exchange   
49       */
50      Processor getUnderlyingProcessor();
51      
52      /**
53       * @return the list of fields that will be included as metadata when a <code>Message</code>
54       * is converted to a <code>Transportable</code>.  Each field is a <code>Terser</code>
55       * path (type String).  
56       */
57      List<String> getMetadataFields();
58          
59  }