1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 package ca.uhn.hl7v2.conf.classes.generator.builders;
33
34 import ca.uhn.hl7v2.conf.spec.message.*;
35 import ca.uhn.hl7v2.conf.spec.*;
36 import ca.uhn.hl7v2.conf.classes.generator.genclasses.*;
37
38
39
40
41
42
43
44
45 public class ConformanceMessageBuilder {
46 private GeneratedConformanceMessage confMsg;
47 private StaticDef msg;
48 private final String packageName;
49
50
51
52
53 public ConformanceMessageBuilder(String packageName) {
54 this.packageName = packageName;
55 }
56
57
58
59
60
61 public void buildClass(RuntimeProfile runtimeProfile, DeploymentManager depManager){
62 this.msg = runtimeProfile.getMessage();
63 this.confMsg = new GeneratedConformanceMessage();
64
65 ProfileNameerator/builders/ProfileName.html#ProfileName">ProfileName profileName = new ProfileName(msg.getMsgStructID(), ProfileName.PS_MSG);
66
67 String version = "v" + runtimeProfile.getHL7Version().replaceAll("\\.", "");
68 String underlyingDataType = "ca.uhn.hl7v2.model." + version + ".message." + msg.getMsgStructID();
69
70 ConformanceSegmentBuilderonformanceSegmentBuilder.html#ConformanceSegmentBuilder">ConformanceSegmentBuilder confSegBuilder = new ConformanceSegmentBuilder(packageName, version, depManager);
71 ConformanceSegGroupBuilderanceSegGroupBuilder.html#ConformanceSegGroupBuilder">ConformanceSegGroupBuilder confSegGroupBuilder = new ConformanceSegGroupBuilder(packageName, version, depManager, msg.getMsgStructID());
72 DocumentationBuilder docBuilder = DocumentationBuilder.getDocumentationBuilder();
73
74
75 confMsg.setClassPackage(packageName);
76 confMsg.addClassImport("ca.uhn.hl7v2.conf.classes.abs.*");
77 confMsg.addClassImport("ca.uhn.hl7v2.conf.classes.exceptions.*");
78
79
80 confMsg.setName(profileName.getClassName());
81 confMsg.setProperties("extends AbstractConformanceContainer");
82
83
84 docBuilder.decorateConformanceMessage(confMsg, runtimeProfile);
85 docBuilder.decorateConstructor( confMsg.getConstructor(), msg.getMsgType() );
86
87
88 confMsg.addHAPIMessage(underlyingDataType);
89
90 for (int i = 1; i <= msg.getChildren(); i++) {
91
92 String usage = msg.getChild(i).getUsage();
93 if( usage.equals("X") || usage.equals("B") || usage.equals("U") )
94 continue;
95
96 if (msg.getChild(i) instanceof Seg) {
97 ProfileName childProfileName = profileName.newInstance(msg.getChild(i).getName(), ProfileName.PS_SEG);
98
99
100 confMsg.addMemberVariable("private FiniteList " + childProfileName.getMemberName() + ";");
101 confMsg.getConstructor().addToBody(childProfileName.getMemberName() + " = new FiniteList( " + childProfileName.getClassName() + ".class, hapiMessage );");
102
103 UnderlyingAccessor childAccessor = new UnderlyingAccessor(underlyingDataType, childProfileName.getAccessorName());
104 GeneratedRepGetterr/genclasses/GeneratedRepGetter.html#GeneratedRepGetter">GeneratedRepGetter repGetter = new GeneratedRepGetter(childProfileName, childAccessor.getAcceptsRep());
105
106 docBuilder.decorateRepGetter(repGetter, msg.getChild(i), childProfileName.getAccessorName());
107
108 confMsg.addMethod(repGetter);
109 if (depManager.getVerbose())
110 System.out.println("Generating Segment: " + packageName + "." + confMsg.getName());
111
112 confSegBuilder.buildClass((Seg) msg.getChild(i), underlyingDataType, childProfileName.clearNameMap());
113
114 } else if (msg.getChild(i) instanceof SegGroup) {
115 ProfileName childProfileName = profileName.newInstance(msg.getChild(i).getName(), ProfileName.PS_SEGG);
116
117
118 confMsg.addMemberVariable("private FiniteList " + childProfileName.getMemberName() + ";");
119 confMsg.getConstructor().addToBody(childProfileName.getMemberName() + " = new FiniteList( " + childProfileName.getClassName() + ".class, hapiMessage );");
120
121 String underlyingAccessorName = "get" + msg.getMsgStructID() + "_" + ConformanceSegGroupBuilder.generateSegGroupName((SegGroup)msg.getChild(i));
122 UnderlyingAccessor childAccessor = new UnderlyingAccessor(underlyingDataType, underlyingAccessorName);
123 GeneratedRepGetterr/genclasses/GeneratedRepGetter.html#GeneratedRepGetter">GeneratedRepGetter repGetter = new GeneratedRepGetter(childProfileName, childAccessor.getAcceptsRep());
124
125 docBuilder.decorateRepGetter(repGetter, msg.getChild(i), childProfileName.getOriginalName());
126 confMsg.addMethod(repGetter);
127 if (depManager.getVerbose())
128 System.out.println("Generating SegGroup: " + packageName + "." + confMsg.getName());
129
130 confSegGroupBuilder.buildClass((SegGroup) msg.getChild(i), underlyingDataType, childProfileName.clearNameMap());
131 }
132
133 }
134
135 depManager.generateFile(confMsg, packageName, profileName.getClassName());
136 }
137 }