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.classes.generator.genclasses.*;
35 import ca.uhn.hl7v2.conf.classes.exceptions.*;
36 import ca.uhn.hl7v2.conf.spec.message.*;
37
38
39
40
41
42
43
44
45 public class ConformanceFieldBuilder {
46 private final DeploymentManager depManager;
47 private final DocumentationBuilder docBuilder;
48
49 private final String packageName;
50 private String underlyingType;
51 private final String versionString;
52
53
54
55
56
57
58 public ConformanceFieldBuilder(String packageName, String versionString, DeploymentManager depManager) {
59 super();
60 this.packageName = packageName;
61 this.docBuilder = DocumentationBuilder.getDocumentationBuilder();
62 this.depManager = depManager;
63 this.versionString = versionString;
64 }
65
66
67
68
69
70
71
72 public void buildClass(Field field, String parentUnderlyingType, ProfileName profileName) {
73 GeneratedConformanceContainerclasses/GeneratedConformanceContainer.html#GeneratedConformanceContainer">GeneratedConformanceContainer gcc = new GeneratedConformanceContainer();
74 GeneratedMethods/generator/genclasses/GeneratedMethod.html#GeneratedMethod">GeneratedMethod gm = new GeneratedMethod();
75
76
77 if (field.getName() == null || field.getName().length() < 1)
78 throw new ConformanceError("Error building ConformanceField: Runtime Field does not contain a name.");
79
80
81 gcc.setClassPackage(packageName);
82 gcc.addClassImport("ca.uhn.hl7v2.conf.classes.abs.*");
83 gcc.addClassImport("ca.uhn.hl7v2.conf.classes.exceptions.*");
84 gcc.addClassImport("ca.uhn.hl7v2.model.*");
85 gcc.addClassImport("ca.uhn.hl7v2.*");
86
87 if (field.getComponents() > 0)
88 gcc.addClassImport(packageName + "." + profileName.getPackageName() + ".*");
89
90 gcc.setName(profileName.getClassName());
91
92 gcc.setProperties("extends AbstractConformanceContainer implements Repeatable");
93 gcc.setMinMaxReps(field.getMin(), field.getMax());
94 underlyingType = "ca.uhn.hl7v2.model." + versionString + ".datatype." + field.getDatatype();
95 gcc.addMemberVariable(underlyingType + " hapiType;");
96 gcc.addMemberVariable("private final short MAX_LENGTH = " + field.getLength() + ";");
97 gm.setReturnType("long");
98 gm.setVisibility("public");
99 gm.setName("getMaxLength");
100 gm.addToBody("return this.MAX_LENGTH;");
101 docBuilder.decorateMaxLength(gm);
102 gcc.addMethod(gm);
103
104
105 gcc.getConstructor().addParam(parentUnderlyingType + " hapiSegment", "The underlying HAPI field object");
106
107 gcc.getConstructor().addParam("int rep", "The desired repetition");
108 gcc.getConstructor().addToBody("try {");
109
110 UnderlyingAccessors/UnderlyingAccessor.html#UnderlyingAccessor">UnderlyingAccessor underlyingAccessor = new UnderlyingAccessor(parentUnderlyingType, profileName.getAccessorName());
111 gcc.getConstructor().addToBody(" this.hapiType = hapiSegment." + underlyingAccessor + ";");
112
113 docBuilder.decorateConstructor( gcc.getConstructor(), profileName.getClassName() );
114
115
116 for (int i = 1; i <= field.getComponents(); i++) {
117
118 String usage = field.getComponent(i).getUsage();
119 if( usage != null && (usage.equals("X") || usage.equals("B") || usage.equals("U")) )
120 continue;
121
122 boolean hasChildren = field.getComponent(i).getSubComponents() > 0;
123 ProfileNamer/builders/ProfileName.html#ProfileName">ProfileName childProfileName = new ProfileName(field.getComponent(i).getName(), ProfileName.PS_COMP);
124 gcc.addComponent(childProfileName, (short) (i - 1), hasChildren);
125 }
126
127 gcc.getConstructor().addToBody("} catch ( HL7Exception e ) {");
128 gcc.getConstructor().addToBody(" throw new ConformanceError( \"Invalid Attempt to access a rep. This is a bug.\" );");
129 gcc.getConstructor().addToBody("}");
130
131
132 docBuilder.decorateField(gcc, field);
133
134 if (depManager.getVerbose())
135 System.out.println("Generating Field: " + packageName + "." + gcc.getName());
136
137
138 for (int i = 1; i <= field.getComponents(); i++) {
139 if (field.getComponent(i).getSubComponents() == 0) {
140 ConformancePrimitiveBuilderonformancePrimitiveBuilder.html#ConformancePrimitiveBuilder">ConformancePrimitiveBuilder childBuilder = new ConformancePrimitiveBuilder(packageName + "." + profileName.getPackageName(), depManager);
141 childBuilder.buildClass(field.getComponent(i), ProfileName.PS_COMP);
142 } else {
143 ConformanceComponentBuilderonformanceComponentBuilder.html#ConformanceComponentBuilder">ConformanceComponentBuilder childBuilder = new ConformanceComponentBuilder(packageName + "." + profileName.getPackageName(), depManager, versionString);
144 childBuilder.buildClass(field.getComponent(i));
145 }
146
147 }
148 depManager.generateFile(gcc, packageName, gcc.getName());
149 }
150 }