1 /*
2 * Created on 21-Apr-2005
3 */
4 package ca.uhn.hl7v2.parser;
5
6 import java.io.Serializable;
7
8 import ca.uhn.hl7v2.HL7Exception;
9 import ca.uhn.hl7v2.Version;
10 import ca.uhn.hl7v2.model.Group;
11 import ca.uhn.hl7v2.model.Message;
12 import ca.uhn.hl7v2.model.Segment;
13 import ca.uhn.hl7v2.model.Type;
14
15 /**
16 * Looks up classes for message model components (e.g. concrete implementations of Message, Group,
17 * Segment). A custom factory can be used to point to custom model components.
18 *
19 * @author <a href="mailto:bryan.tripp@uhn.on.ca">Bryan Tripp</a>
20 * @version $Revision: 1.3 $ updated on $Date: 2009-10-03 15:25:46 $ by $Author: jamesagnew $
21 */
22 public interface ModelClassFactory extends Serializable {
23
24 /**
25 * @param theName name of message
26 * @param theVersion HL7 version
27 * @param isExplicit true if the structure was specified explicitly in MSH-9-3, false if it was
28 * inferred from MSH-9-1 and MSH-9-2. If false, a lookup may be performed to find an
29 * alternate structure corresponding to that message type and event.
30 * @return a class that implements the specified message
31 * @throws HL7Exception if the version if not recognized or an appropriate class can not be
32 * found
33 */
34 Class<? extends Message> getMessageClass(String theName, String theVersion,
35 boolean isExplicit) throws HL7Exception;
36
37 /**
38 * Retrieves a message class by looking in a specific java package for the message type.
39 *
40 * @param theName The message structure type (e.g. "ADT_A01")
41 * @param theVersion The HL7 version (e.g. "2.3.1")
42 * @param isExplicit If false, the message structure is looked up using
43 * {@link Parser#getMessageStructureForEvent(String, String)} and converted to the
44 * appropriate structure type. For example, "ADT_A04" would be converted to "ADT_A01"
45 * because the A04 trigger uses the A01 message structure according to HL7.
46 * @param packageName The package name to use. Note that if the message type can't be found in
47 * this package, HAPI will return the standard type returned by
48 * {@link #getMessageClass(String, String, boolean)}
49 * @return message class
50 * @since 2.0
51 */
52 Class<? extends Message> getMessageClassInASpecificPackage(String theName,
53 String theVersion, boolean isExplicit, String packageName) throws HL7Exception;
54
55 /**
56 * @param theName name of group
57 * @param theVersion HL7 version
58 * @return a class that implements the specified group
59 * @throws HL7Exception if the version if not recognized or an appropriate class can not be
60 * found
61 */
62 Class<? extends Group> getGroupClass(String theName, String theVersion)
63 throws HL7Exception;
64
65 /**
66 * @param theName name of segment
67 * @param theVersion HL7 version
68 * @return a class that implements the specified segment
69 * @throws HL7Exception if the version if not recognized or an appropriate class can not be
70 * found
71 */
72 Class<? extends Segment> getSegmentClass(String theName, String theVersion)
73 throws HL7Exception;
74
75 /**
76 * @param theName name of type
77 * @param theVersion HL7 version
78 * @return a class that implements the specified type
79 * @throws HL7Exception if the version if not recognized or an appropriate class can not be
80 * found
81 */
82 Class<? extends Type> getTypeClass(String theName, String theVersion)
83 throws HL7Exception;
84
85 /**
86 * @param eventName event name
87 * @param version HL7 version
88 * @return message structure name for the eventName and version or <code>null</code> if none
89 * could be found
90 * @throws HL7Exception if the version is unknown or the message structure list is inaccessible
91 */
92 String getMessageStructureForEvent(String eventName, Version version)
93 throws HL7Exception;
94 }