001 /*
002 * Created on 16-Apr-2004
003 */
004 package ca.uhn.hl7v2.protocol;
005
006 import ca.uhn.hl7v2.HL7Exception;
007 import ca.uhn.hl7v2.parser.Parser;
008
009 /**
010 * Routes messages to the appropriate application.
011 *
012 * @author <a href="mailto:bryan.tripp@uhn.on.ca">Bryan Tripp</a>
013 * @version $Revision: 1.1 $ updated on $Date: 2007-02-19 02:24:38 $ by $Author: jamesagnew $
014 */
015 public interface ApplicationRouter {
016
017 /**
018 * Attempts to route the given message to the associated <code>Application</code>
019 * and obtain a response.
020 *
021 * @param theMessage the message to route
022 * @return the response message (this may be null, for example if the given
023 * message doesn't require an application ACK)
024 */
025 public Transportable processMessage(Transportable theMessage) throws HL7Exception;
026
027 /**
028 * @param theRoutingData message fields used in determining the appropriate destination
029 * @return true if there is a destination application for messages with the given
030 * characteristics
031 */
032 public boolean hasActiveBinding(AppRoutingData theRoutingData);
033
034 /**
035 * <p>Associates the given application with the given message parameters, so that messages
036 * with matching parameters will be sent there. Only one application can be registered
037 * for a given set of parameters: repeated registration for a particular combination
038 * over-writes the previous one.</p>
039 *
040 * <p>Because of wildcards, there may be multiple registrations that match a given message.
041 * In this case, the first registered wins.</p>
042 *
043 * @param theRoutingData message fields used in determining the appropriate destination
044 * @param theApplication the application to which messages with these parameters should be
045 * sent
046 */
047 public void bindApplication(AppRoutingData theRoutingData, ReceivingApplication theApplication);
048
049 /**
050 * Temporarily deactivates the binding on the given field data, if present.
051 * @param theRoutingData the fields that define a set of messages that are bound to
052 * some <code>Application</code>
053 */
054 public void disableBinding(AppRoutingData theRoutingData);
055
056 /**
057 * Undoes <code>disableBinding(AppRoutingData theRoutingData)</code>.
058 * @param theRoutingData the fields that define a set of messages that are bound to
059 * some <code>Application</code>
060 */
061 public void enableBinding(AppRoutingData theRoutingData);
062
063 /**
064 * @return the <code>Parser</code> that is used to parse inbound messages
065 * and encode outbound ones. It may be of interest to set certain parameters
066 * of this parser.
067 */
068 public Parser getParser();
069
070 /**
071 * <p>Encapsulates the message fields used for routing of messages from the
072 * HL7 protocol to the appropriate <code>Application</code>. </p>
073 *
074 * <p>The wildcard "*" in any member indicates all values of the associated parameter. For
075 * example the conbination "ADT", "*", "*", "*" means all ADT messages. Each value can also
076 * be a regular expression that is matched against the corresponding field. </p>
077 *
078 * @author <a href="mailto:bryan.tripp@uhn.on.ca">Bryan Tripp</a>
079 * @version $Revision: 1.1 $ updated on $Date: 2007-02-19 02:24:38 $ by $Author: jamesagnew $
080 */
081 public static interface AppRoutingData {
082
083 /**
084 * @return MSH-9-1
085 */
086 public String getMessageType();
087
088 /**
089 * @return MSH-9-2
090 */
091 public String getTriggerEvent();
092
093 /**
094 * @return MSH-11-1
095 */
096 public String getProcessingId();
097
098 /**
099 * @return MSH-12
100 */
101 public String getVersion();
102 }
103
104 }