1 /*
2 * To change this template, choose Tools | Templates
3 * and open the template in the editor.
4 */
5
6 package ca.uhn.hl7v2.model;
7
8 import ca.uhn.hl7v2.HL7Exception;
9 import ca.uhn.hl7v2.Location;
10
11 /**
12 * A MessageVisitor can be used to traverse a message structure. Everytime a
13 * message element is found, the corresponding visitable method is called. If
14 * a method returns <code>true</code>, the visiting process is continued,
15 * otherwise abandoned.
16 * <p>
17 * A MessageVisitor should usually only be called by
18 * {@link Visitable#accept(MessageVisitor, Location)}.
19 * </p>
20 */
21 public interface MessageVisitor {
22
23 /**
24 * Enters a message
25 * @param message message
26 * @return true if the visitor shall descend into the nested structures
27 * @throws HL7Exception if an error occurred while visiting
28 */
29 boolean start(Message message) throws HL7Exception;
30
31 /**
32 * Leaves a message
33 * @param message message
34 * @return true if the visitor shall descend into the nested structures
35 * @throws HL7Exception if an error occurred while visiting
36 */
37 boolean end(Message message) throws HL7Exception;
38
39 /**
40 * Enters a group (or message)
41 * @param group group
42 * @param location Location object describing the location within the message
43 * @return true if the visitor shall descend into the nested structures
44 * @throws HL7Exception if an error occurred while visiting
45 */
46 boolean start(Group group, Location location) throws HL7Exception;
47
48 /**
49 * Leaves a group (or message)
50 * @param group group
51 * @param location Location object describing the location within the message
52 * @return true if the visitor shall continue visiting the parent structure
53 * @throws HL7Exception if an error occurred while visiting
54 */
55 boolean end(Group group, Location location) throws HL7Exception;
56
57 /**
58 * Enters a segment
59 * @param segment segment
60 * @param location Location object describing the location within the message
61 * @return true if the visitor shall descend into the nested structures
62 * @throws HL7Exception if an error occurred while visiting
63 */
64 boolean start(Segment segment, Location location) throws HL7Exception;
65
66 /**
67 * Leaves a segment
68 * @param segment segment
69 * @param location Location object describing the location within the message
70 * @return true if the visitor shall continue visiting the parent structure
71 * @throws HL7Exception if an error occurred while visiting
72 */
73 boolean end(Segment segment, Location location) throws HL7Exception;
74
75 /**
76 * Enters a field. Note that a field is *not* a physical part of the HAPI
77 * model class hierarchy; it merely encapsulates all repetitions of a specific
78 * field along with its substructures.
79 *
80 * @param field field
81 * @param location Location object describing the location within the message
82 * @return true if the visitor shall descend into the nested structures
83 * @throws HL7Exception if an error occurred while visiting
84 */
85 boolean start(Field field, Location location) throws HL7Exception;
86
87 /**
88 * Leaves a field. Note that a field is *not* a physical part of the HAPI
89 * model class hierarchy; it merely encapsulates all repetitions of a specific
90 * field along with its substructures.
91 *
92 * @param field field
93 * @param location Location object describing the location within the message
94 * @return true if the visitor shall continue visiting the parent structure
95 * @throws HL7Exception if an error occurred while visiting
96 */
97 boolean end(Field field, Location location) throws HL7Exception;
98
99 /**
100 * Enters a composite
101 * @param type composite
102 * @param location Location object describing the location within the message
103 * @return true if the visitor shall descend into the nested structures
104 * @throws HL7Exception if an error occurred while visiting
105 */
106 boolean start(Composite type, Location location) throws HL7Exception;
107
108 /**
109 * Leaves a composite
110 * @param type composite
111 * @param location Location object describing the location within the message
112 * @return true if the visitor shall continue visiting the parent structure
113 * @throws HL7Exception if an error occurred while visiting
114 */
115 boolean end(Composite type, Location location) throws HL7Exception;
116
117 /**
118 * Visits a primitive
119 * @param type primitive
120 * @param location Location object describing the location within the message
121 * @return true if the visitor shall descend into the nested structures
122 * @throws HL7Exception if an error occurred while visiting
123 */
124 boolean visit(Primitive type, Location location) throws HL7Exception;
125
126 }