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 package ca.uhn.hl7v2.conf.classes.generator.builders;
32
33 import ca.uhn.hl7v2.conf.classes.generator.genclasses.*;
34 import ca.uhn.hl7v2.conf.classes.exceptions.*;
35 import ca.uhn.hl7v2.conf.spec.message.*;
36
37
38
39
40
41
42
43
44 public class ConformanceSegmentBuilder {
45 private final DeploymentManager depManager;
46 private final DocumentationBuilder docBuilder;
47 private final String packageName;
48
49 private final String versionString;
50
51
52
53
54
55
56 public ConformanceSegmentBuilder(String packageName, String versionString, DeploymentManager depManager) {
57 super();
58 this.packageName = packageName;
59 this.versionString = versionString;
60 this.docBuilder = DocumentationBuilder.getDocumentationBuilder();
61 this.depManager = depManager;
62 }
63
64
65
66
67
68
69
70 public void buildClass(Seg seg, String parentUnderlyingType, ProfileName profileName) {
71 GeneratedConformanceContainerclasses/GeneratedConformanceContainer.html#GeneratedConformanceContainer">GeneratedConformanceContainer gcc = new GeneratedConformanceContainer();
72 String underlyingDataType;
73
74
75 if (seg.getName() == null || seg.getName().length() < 1)
76 throw new ConformanceError("Error building ConformanceSegment: Runtime Segment does not contain a name.");
77
78
79 gcc.setClassPackage(packageName);
80 gcc.addClassImport("ca.uhn.hl7v2.conf.classes.abs.*");
81 gcc.addClassImport("ca.uhn.hl7v2.conf.classes.exceptions.*");
82 gcc.addClassImport("ca.uhn.hl7v2.*");
83 gcc.addClassImport(packageName + "." + profileName.getPackageName() + ".*");
84
85 gcc.setName(profileName.getClassName());
86 gcc.setProperties("extends AbstractConformanceContainer implements Repeatable");
87 gcc.setMinMaxReps(seg.getMin(), seg.getMax());
88 underlyingDataType = "ca.uhn.hl7v2.model." + versionString + ".segment." + seg.getName();
89
90 String segClassName = UnderlyingAccessor.getHapiModelClass(underlyingDataType).getName();
91 gcc.addMemberVariable("private " + segClassName + " hapiSegment;");
92
93 docBuilder.decorateConstructor( gcc.getConstructor(), profileName.getClassName() );
94
95
96 GeneratedMethod theConstructor = gcc.getConstructor();
97 theConstructor.addParam(parentUnderlyingType + " underlyingMessage", "The underlying message object");
98 theConstructor.addParam("int rep", "The underlying rep number");
99 UnderlyingAccessors/UnderlyingAccessor.html#UnderlyingAccessor">UnderlyingAccessor underlyingAccessor = new UnderlyingAccessor(parentUnderlyingType, profileName.getAccessorName());
100 theConstructor.addToBody("this.hapiSegment = (" + segClassName + ") underlyingMessage." + underlyingAccessor.toString() + ";");
101 theConstructor.addToThrows("HL7Exception");
102
103
104 for (int i = 1; i <= seg.getFields(); i++) {
105
106 String usage = seg.getField(i).getUsage();
107 if( usage != null && (usage.equals("X") || usage.equals("B") || usage.equals("U")) )
108 continue;
109
110
111
112
113 ProfileName childProfileName = profileName.newInstance(seg.getField(i).getName(), ProfileName.PS_FIELD);
114
115
116 gcc.addMemberVariable("private FiniteList " + childProfileName.getMemberName() + ";");
117
118
119 theConstructor.addToBody(childProfileName.getMemberName() + " = new FiniteList( " + childProfileName.getClassName() + ".class, hapiSegment );");
120
121
122 UnderlyingAccessor childAccessor = new UnderlyingAccessor(underlyingDataType, childProfileName.getAccessorName());
123 GeneratedRepGetterr/genclasses/GeneratedRepGetter.html#GeneratedRepGetter">GeneratedRepGetter repGetter = new GeneratedRepGetter(childProfileName, childAccessor.getAcceptsRep());
124 docBuilder.decorateRepGetter(repGetter, seg.getField(i), childProfileName.getClassName());
125 gcc.addMethod(repGetter);
126
127
128 if (seg.getField(i).getComponents() > 0) {
129 ConformanceFieldBuilderrs/ConformanceFieldBuilder.html#ConformanceFieldBuilder">ConformanceFieldBuilder childBuilder = new ConformanceFieldBuilder(packageName + "." + profileName.getPackageName(), versionString, depManager);
130 childBuilder.buildClass(seg.getField(i), segClassName, childProfileName.clearNameMap());
131 } else {
132 ConformancePrimitiveBuilderonformancePrimitiveBuilder.html#ConformancePrimitiveBuilder">ConformancePrimitiveBuilder childBuilder = new ConformancePrimitiveBuilder(packageName + "." + profileName.getPackageName(), depManager);
133 childBuilder.buildClass(seg.getField(i), segClassName, childProfileName.clearNameMap());
134 }
135
136 }
137
138
139 docBuilder.decorateSegment(gcc, seg);
140
141 if (depManager.getVerbose())
142 System.out.println("Generating Segment: " + packageName + "." + gcc.getName());
143
144 depManager.generateFile(gcc, packageName, profileName.getClassName());
145
146 }
147 }