Class AbstractMessage

All Implemented Interfaces:
Group, Message, Structure, Visitable, Serializable
Direct Known Subclasses:
AbstractSuperMessage, GenericMessage

public abstract class AbstractMessage extends AbstractGroup implements Message
A default implementation of Message.
Author:
Bryan Tripp (bryan_tripp@sourceforge.net)
See Also:
  • Constructor Details

    • AbstractMessage

      public AbstractMessage(ModelClassFactory theFactory)
      Parameters:
      theFactory - factory for model classes (e.g. group, segment) for this message
  • Method Details

    • getMessage

      public Message getMessage()
      Returns this Message object.
      Specified by:
      getMessage in interface Structure
      Overrides:
      getMessage in class AbstractStructure
      Returns:
      message the root message this structure is part of
    • getParent

      public Group getParent()
      Description copied from interface: Structure
      Returns the parent group within which this structure exists (may be root message group).
      Specified by:
      getParent in interface Structure
      Overrides:
      getParent in class AbstractStructure
      Returns:
      parent group of this structure
    • getVersion

      public String getVersion()
      Returns the version number. This default implementation inspects this.getClass().getName(). This should be overridden if you are putting a custom message definition in your own package, or it will default.
      Specified by:
      getVersion in interface Message
      Returns:
      lowest available version if not obvious from package name
      See Also:
    • getValidationContext

      Returns the set of validation rules that applied to this message. If the parser was set to "not-validating", this method returns null
      Returns:
      the set of validation rules that applied to this message
    • getFieldSeparatorValue

      Convenience method which retrieves the field separator value from the first field of the first segment. Typically, the first segment is MSH, so this method will retrieve the value of MSH-1.
      Specified by:
      getFieldSeparatorValue in interface Message
      Returns:
      The field separator
      Throws:
      HL7Exception - If an error occurs
    • getEncodingCharactersValue

      Convenience method which retrieves the encoding characters value from the second field of the first segment. Typically, the first segment is MSH, so this method will retrieve the value of MSH-2.
      Specified by:
      getEncodingCharactersValue in interface Message
      Returns:
      The encoding characters
      Throws:
      HL7Exception - If an error occurs
    • setParser

      public void setParser(Parser parser)

      Sets the parser to be used when parse/encode methods are called on this Message, as well as its children. It is recommended that if these methods are going to be called, a parser be supplied with the validation context wanted. Where possible, the parser should be reused for best performance, unless thread safety is an issue.

      Note that not all parsers can be used. As of version 1.0, only PipeParser supports this functionality

      Serialization note: The message parser is marked as transient, so it will not survive serialization.

      Specified by:
      setParser in interface Message
      Parameters:
      parser - the parser to be used when parse/encode methods are called on this Message
    • getParser

      public Parser getParser()

      Returns the parser to be used when parse/encode methods are called on this Message, as well as its children. The default value is a new PipeParser.

      Serialization note: The message parser is marked as transient, so it will not survive serialization.

      Specified by:
      getParser in interface Message
      Returns:
      the parser to be used when parse/encode methods are called on this Message
    • parse

      public void parse(String string) throws HL7Exception
      Parses the string into this message using the parser returned by Message.getParser()
      Specified by:
      parse in interface Message
      Parameters:
      string - the message to be parsed
      Throws:
      HL7Exception - if errors occurred during parsing
    • encode

      public String encode() throws HL7Exception
      Encodes this message using the parser returned by Message.getParser()
      Specified by:
      encode in interface Message
      Returns:
      the string-encoded message
      Throws:
      HL7Exception - if error occurred during encoding
    • generateACK

      Generates and returns an ACK message which would be used to acknowledge this message successfully, with an MSA-1 code of "AA". The ACK generated will be of the same version as the value of MSH-12 in this message (as opposed to the version of the message class instance, if they are different)

      Note that this method will fail if it is not possible to generate an ACK for any reason, such as

      • Message version is invalid
      • First segment is not an MSH
      Specified by:
      generateACK in interface Message
      Returns:
      the acknowledgment message
      Throws:
      HL7Exception - If the message can not be constructed
      IOException - If a failure occurs in generating a control ID for the message
    • generateACK

      public Message generateACK(String theAcknowledgementCode, HL7Exception theException) throws HL7Exception, IOException
      Deprecated.

      Generates and returns an ACK message which would be used to acknowledge this message successfully. The ACK generated will be of the same version as the value of MSH-12 in this message (as opposed to the version of the message class instance, if they are different)

      Note that this method will fail if it is not possible to generate an ACK for any reason, such as

      • Message version is invalid
      • First segment is not an MSH
      Specified by:
      generateACK in interface Message
      Parameters:
      theAcknowledgementCode - The acknowledement code (MSA-1) to supply. If null, defaults to "AA". To generate a typical NAK, use "AE"
      theException - The exceptions used to populate the ERR segment (if any)
      Throws:
      HL7Exception - If the message can not be constructed
      IOException - If a failure occurs in generating a control ID for the message
    • generateACK

      public Message generateACK(AcknowledgmentCode theAcknowledgementCode, HL7Exception theException) throws HL7Exception, IOException

      Generates and returns an ACK message which would be used to acknowledge this message successfully. The ACK generated will be of the same version as the value of MSH-12 in this message (as opposed to the version of the message class instance, if they are different)

      Note that this method will fail if it is not possible to generate an ACK for any reason, such as

      • Message version is invalid
      • First segment is not an MSH
      Specified by:
      generateACK in interface Message
      Parameters:
      theAcknowledgementCode - If null, defaults to AcknowledgmentCode.AA. To generate a typical NAK, use AcknowledgmentCode.AE
      theException - The exceptions used to populate the ERR segment (if any)
      Returns:
      the acknoeldgement message
      Throws:
      HL7Exception - If the message can not be constructed
      IOException - If a failure occurs in generating a control ID for the message
    • fillResponseHeader

      Populates certain required fields in a response message header, using information from the corresponding inbound message. The current time is used for the message time field, and MessageIDGenerator is used to create a unique message ID. Version and message type fields are not populated.
      Parameters:
      out - outgoing message to be populated
      code - acknowledgment code
      Returns:
      outgoing message
      Throws:
      HL7Exception - if header cannot be filled
      IOException - if message ID could not be generated
    • toString

      public String toString()
      Provides an overview of the type and structure of this message
      Overrides:
      toString in class Object
    • printStructure

      Prints a summary of the contents and structure of this message. This is useful for debugging purposes, if you want to figure out where in the structure of a message a given segment has been placed.

      For instance, the following message (containing a few quirks for demonstration purposes):

      MSH|^~\\&|^QueryServices||||20021011161756.297-0500||ADT^A01|1|D|2.4\r
       EVN|R01
       EVN|R02
       PID|1
       IN1|1
       IN1|2
       PID|2
      ...produces the following output:
      ADT_A01 (start)
          MSH - MSH|^~\&|^QueryServices||||20021011161756.297-0500||ADT^A01|1|D|2.4
          EVN - EVN|R01
          [ { EVN2 } ] (non-standard) - EVN|R02
          PID - PID|1
          [ PD1 ] - Not populated
          [ { ROL } ] - Not populated
          [ { NK1 } ] - Not populated
          PV1 - Not populated
          [ PV2 ] - Not populated
          [ { ROL2 } ] - Not populated
          [ { DB1 } ] - Not populated
          [ { OBX } ] - Not populated
          [ { AL1 } ] - Not populated
          [ { DG1 } ] - Not populated
          [ DRG ] - Not populated
          PROCEDURE (start)
          [{
             PR1 - Not populated
             [ { ROL } ] - Not populated
          }]
          PROCEDURE (end)
          [ { GT1 } ] - Not populated
          INSURANCE (start)
          [{
             IN1 - IN1|1
             [ IN2 ] - Not populated
             [ { IN3 } ] - Not populated
             [ { ROL } ] - Not populated
          }]
          [{
             IN1 - IN1|2
             [ { PID } ] (non-standard) - PID|2
             [ IN2 ] - Not populated
             [ { IN3 } ] - Not populated
             [ { ROL } ] - Not populated
          }]
          INSURANCE (end)
          [ ACC ] - Not populated
          [ UB1 ] - Not populated
          [ UB2 ] - Not populated
          [ PDA ] - Not populated
       ADT_A01 (end)
       

      Specified by:
      printStructure in interface Message
      Returns:
      A summary of the structure
      Throws:
      HL7Exception - If any problems occur encoding the structure
    • printStructure

      public String printStructure(boolean includeEmptyElements) throws HL7Exception
      Prints the message structure in a similar way to printStructure() but optionally excludes elements with no contents.
      Throws:
      HL7Exception
    • initQuickstart

      public void initQuickstart(String messageCode, String messageTriggerEvent, String processingId) throws HL7Exception, IOException
      Quickly initializes this message with common values in the first (MSH) segment.

      Settings include:

      • MSH-1 (Field Separator) is set to "|"
      • MSH-2 (Encoding Characters) is set to "^~\&"
      • MSH-7 (Date/Time of Message) is set to current time
      • MSH-10 (Control ID) is populated using next value generated by a IDGenerator

      Parameters:
      messageCode - The message code (aka message type) to insert into MSH-9-1. Example: "ADT"
      messageTriggerEvent - The message trigger event to insert into MSG-9-2. Example: "A01"
      processingId - The message processing ID to insert into MSH-11. Examples: "T" (for TEST) or "P" for (PRODUCTION)
      Throws:
      IOException - If the message ID generation fails for some reason
      HL7Exception - If the message rejects any of the values which are generated to setting
    • accept

      public boolean accept(MessageVisitor visitor, Location location) throws HL7Exception
      Description copied from class: AbstractGroup
      Iterates over the contained structures and calls the visitor for each of them.
      Specified by:
      accept in interface Visitable
      Overrides:
      accept in class AbstractGroup
      Parameters:
      visitor - MessageVisitor instance to be called back.
      location - location of the group
      Returns:
      true if visiting shall continue, false if not
      Throws:
      HL7Exception - if a problem occurred during visiting
    • copy

      Creates a copy of this AbstractMessage by recursively looping over each Structure (i.e. AbstractGroup or AbstractSegment). When an AbstractSegment is found, its contents are encoded and parsed into the copied AbstractMessage
      Returns:
      A copy of this AbstractMessage
      Throws:
      HL7Exception - If an error occurs while the message is being copied