Example #1
0
        /// <summary> Parses a message string and returns the corresponding Message
        /// object.  Unexpected segments added at the end of their group.
        ///
        /// </summary>
        /// <throws>  HL7Exception if the message is not correctly formatted. </throws>
        /// <throws>  EncodingNotSupportedException if the message encoded </throws>
        /// <summary>      is not supported by this parser.
        /// </summary>
        protected internal override Message doParse(System.String message, System.String version)
        {
            //try to instantiate a message object of the right class
            MessageStructure structure = getStructure(message);
            Message          m         = instantiateMessage(structure.messageStructure, version, structure.explicitlyDefined);

            //MessagePointer ptr = new MessagePointer(this, m, getEncodingChars(message));
            MessageIterator messageIter = new MessageIterator(m, "MSH", true);

            FilterIterator.Predicate segmentsOnly = new AnonymousClassPredicate(this);
            FilterIterator           segmentIter  = new FilterIterator(messageIter, segmentsOnly);

            System.String[] segments = split(message, segDelim);

            char delim = '|';

            for (int i = 0; i < segments.Length; i++)
            {
                //get rid of any leading whitespace characters ...
                if (segments[i] != null && segments[i].Length > 0 && System.Char.IsWhiteSpace(segments[i][0]))
                {
                    segments[i] = stripLeadingWhitespace(segments[i]);
                }

                //sometimes people put extra segment delimiters at end of msg ...
                if (segments[i] != null && segments[i].Length >= 3)
                {
                    System.String name;
                    if (i == 0)
                    {
                        name  = segments[i].Substring(0, (3) - (0));
                        delim = segments[i][3];
                    }
                    else
                    {
                        name = segments[i].Substring(0, (segments[i].IndexOf((System.Char)delim)) - (0));
                    }


                    messageIter.Direction = name;
                    FilterIterator.Predicate byDirection = new AnonymousClassPredicate1(name, this);
                    FilterIterator           dirIter     = new FilterIterator(segmentIter, byDirection);
                    if (dirIter.MoveNext())
                    {
                        parse((Segment)dirIter.Current, segments[i], getEncodingChars(message));
                    }
                }
            }
            return(m);
        }
		/// <summary> Parses a message string and returns the corresponding Message
		/// object.  Unexpected segments added at the end of their group.  
		/// 
		/// </summary>
		/// <throws>  HL7Exception if the message is not correctly formatted. </throws>
		/// <throws>  EncodingNotSupportedException if the message encoded </throws>
		/// <summary>      is not supported by this parser.
		/// </summary>
		protected internal override Message doParse(System.String message, System.String version)
		{
			
			//try to instantiate a message object of the right class
			MessageStructure structure = getStructure(message);
			Message m = instantiateMessage(structure.messageStructure, version, structure.explicitlyDefined);
			
			//MessagePointer ptr = new MessagePointer(this, m, getEncodingChars(message));
			MessageIterator messageIter = new MessageIterator(m, "MSH", true);
			FilterIterator.Predicate segmentsOnly = new AnonymousClassPredicate(this);
			FilterIterator segmentIter = new FilterIterator(messageIter, segmentsOnly);
			
			System.String[] segments = split(message, segDelim);
			
			char delim = '|';
			for (int i = 0; i < segments.Length; i++)
			{
				
				//get rid of any leading whitespace characters ...
				if (segments[i] != null && segments[i].Length > 0 && System.Char.IsWhiteSpace(segments[i][0]))
					segments[i] = stripLeadingWhitespace(segments[i]);
				
				//sometimes people put extra segment delimiters at end of msg ...
				if (segments[i] != null && segments[i].Length >= 3)
				{
					System.String name;
					if (i == 0)
					{
						name = segments[i].Substring(0, (3) - (0));
						delim = segments[i][3];
					}
					else
					{
						name = segments[i].Substring(0, (segments[i].IndexOf((System.Char) delim)) - (0));
					}
					
					
					messageIter.Direction = name;
					FilterIterator.Predicate byDirection = new AnonymousClassPredicate1(name, this);
					FilterIterator dirIter = new FilterIterator(segmentIter, byDirection);
					if (dirIter.MoveNext())
					{
						parse((Segment) dirIter.Current, segments[i], getEncodingChars(message));
					}
				}
			}
			return m;
		}