001 /*
002 * Created on 16-Apr-2004
003 */
004 package ca.uhn.hl7v2.protocol;
005
006 /**
007 * <p>Determines whether messages are acceptable for storage. See HL7
008 * v2.5 chapter 2 for relevant specifications. In original-mode
009 * processing, validation at this level includes checking whether
010 * MSH-9, 11, and 12 have appropriate values.</p>
011 *
012 * <p>In enhanced mode, the above checks are optional. Checking for
013 * syntactical correctness is also optional. However storage availability
014 * and interface status must be checked.</p>
015 *
016 * @author <a href="mailto:bryan.tripp@uhn.on.ca">Bryan Tripp</a>
017 * @version $Revision: 1.1 $ updated on $Date: 2007-02-19 02:24:38 $ by $Author: jamesagnew $
018 */
019 public interface AcceptValidator {
020
021 /**
022 * Returns a ruling regarding whether the given message can be accepted
023 * for further processing (ie determines CE, CR, or CA for enhanced mode,
024 * and AR for original mode).
025 *
026 * @param theMessage the message to check for acceptability.
027 * @return
028 */
029 public AcceptRuling check(Transportable theMessage);
030
031 /**
032 * Represents a decision regarding whether a message can be initially
033 * accepted for further processing. As per HL7 specs, for original-mode
034 * messages, a message should be accepted at this stage if the system thinks it can handle
035 * the message based on MSH-9, 11, and 12 values (assuming these can be parsed).
036 *
037 * In enhanced mode, the above checks are optional. Also optional is a check for
038 * syntactical correctness. Mandatory checks include availability of safe storage
039 * and "interface status".
040 *
041 * @author <a href="mailto:bryan.tripp@uhn.on.ca">Bryan Tripp</a>
042 * @version $Revision: 1.1 $ updated on $Date: 2007-02-19 02:24:38 $ by $Author: jamesagnew $
043 */
044 public interface AcceptRuling {
045
046 public static final String ACK_AR = "AR";
047 public static final String ACK_CA = "CA";
048 public static final String ACK_CE = "CE";
049 public static final String ACK_CR = "CR";
050
051 /**
052 * @return true if the message can be accepted at the protocol stage.
053 */
054 public boolean isAcceptable();
055
056 /**
057 * @return the ACK code corresponding to the ruling, if any. Ie "AR",
058 * "CE", "CR", or "CA". If in original mode, null is returned for non-"AR"
059 * situations. This is because only the application layer can tell whether the
060 * answer is "AE" or "AA".
061 */
062 public String getAckCode();
063
064 /**
065 * @return an error code from among the static fields of HL7Exception
066 * (if no error, HL7Exception.MESSAGE_ACCEPTED)
067 */
068 public int getErrorCode();
069
070 /**
071 * @return zero or more reasons for rejecting a message (suitable for inclusion
072 * in a reply).
073 */
074 public String[] getReasons();
075 }
076
077 }