001    /**
002    The contents of this file are subject to the Mozilla Public License Version 1.1 
003    (the "License"); you may not use this file except in compliance with the License. 
004    You may obtain a copy of the License at http://www.mozilla.org/MPL/ 
005    Software distributed under the License is distributed on an "AS IS" basis, 
006    WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the 
007    specific language governing rights and limitations under the License. 
008    
009    The Original Code is "Pointer.java".  Description: 
010    "A Pointer is a placeholder used in parsing traditionally encoded messages 
011      (which do not explicitly identify segment groups)" 
012    
013    The Initial Developer of the Original Code is University Health Network. Copyright (C) 
014    2001.  All Rights Reserved. 
015    
016    Contributor(s): ______________________________________. 
017    
018    Alternatively, the contents of this file may be used under the terms of the 
019    GNU General Public License (the  ?GPL?), in which case the provisions of the GPL are 
020    applicable instead of those above.  If you wish to allow use of your version of this 
021    file only under the terms of the GPL and not to allow others to use your version 
022    of this file under the MPL, indicate your decision by deleting  the provisions above 
023    and replace  them with the notice and other provisions required by the GPL License.  
024    If you do not delete the provisions above, a recipient may use your version of 
025    this file under either the MPL or the GPL. 
026    
027    */
028    
029    package ca.uhn.hl7v2.parser;
030    
031    import ca.uhn.hl7v2.HL7Exception;
032    import ca.uhn.hl7v2.model.Group;
033    
034    /**
035     * <p>A Pointer is a placeholder used in parsing traditionally encoded messages 
036     * (which do not explicitly identify segment groups).  Implementations of Pointer 
037     * include SegmentPointer, which "points" to a Segment slot.  This pointer can 
038     * exist whether or not the underlying Segment object has been created.  There is 
039     * only one pointer per slot - multiple repetitions are accessed through the 
040     * same pointer.  <code>prepNewInstance</code> is used to create a new rep.  
041     * <code>setSegment(String segment)</code> is responsible for parsing the given 
042     * segment string <i>into</i> the current rep of the underlying Segment.  Similarly 
043     * there is a subclass called GroupPointer that points to a Group slot.  
044     * GroupPointer's <code>setSegment(...)</code> method just forwards the request to 
045     * it's children (which are GroupPointers and SegmentPointers). </p>
046     * @author Bryan Tripp (bryan_tripp@sourceforge.net)
047     */
048    public abstract class Pointer {
049    
050        public static final int FILL_FAILED_WRONG_SEGMENT = 0;
051        public static final int FILL_FAILED_FULL = 1;
052        public static final int FILL_OK = 2;
053        public static final int FILL_FAILED_OUT_OF_ORDER = 3;
054    
055        protected Group parent;
056        protected int position;
057        protected boolean repeating;
058        protected EncodingCharacters encodingChars;
059    
060        /**
061         * Parses the given String, which must contain a single traditionally encoded 
062         * message segment, into the current repetition of the message Structure 
063         * underlying this Pointer.  
064         * @param segment the segment to parse 
065         * @param correctOrder false if this segment should not actually be parsed because the 
066         *      current location precedes the location of a segment that has already been 
067         *      parsed.  In this case, the return value should be either FILL_FAILED_FULL, 
068         *      FILL_FAILED_WRONG_SEGMENT, or FILL_FAILED_OUT_OF_ORDER, but the segment should not 
069         *      be parsed.  
070         * @return an int indicating the success or flavours of failure of the request
071         */
072        public abstract int setSegment(String segment, boolean correctOrder) throws HL7Exception;
073    
074    }