Skip to content
This repository was archived by the owner on May 1, 2024. It is now read-only.

Commit 1751f8f

Browse files
committed
Fix handling of elements with name "class"
1 parent 1d91b95 commit 1751f8f

File tree

3 files changed

+48
-10
lines changed

3 files changed

+48
-10
lines changed

bunsen-core/src/main/scala/com/cerner/bunsen/EncoderBuilder.scala

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -112,26 +112,29 @@ private[bunsen] class EncoderBuilder(fhirContext: FhirContext,
112112
* Returns the accessor method for the given child field.
113113
*/
114114
private def accessorFor(field: BaseRuntimeChildDefinition): String = {
115+
// Elements called `class` have an underscore appended to the end of their name within getters.
116+
val elementName = if (field.getElementName.equals("class"))
117+
field.getElementName.capitalize + "_"
118+
else field.getElementName.capitalize
115119

116120
// Primitive single-value types typically use the Element suffix in their
117121
// accessors, with the exception of the "div" field for reasons that are not clear.
118122
if (field.isInstanceOf[RuntimeChildPrimitiveDatatypeDefinition] &&
119123
field.getMax == 1 &&
120124
field.getElementName != "div")
121-
"get" + field.getElementName.capitalize + "Element"
122-
else {
123-
if (field.getElementName.equals("class")) {
124-
"get" + field.getElementName.capitalize + "_"
125-
} else {
126-
"get" + field.getElementName.capitalize
127-
}
128-
}
125+
"get" + elementName + "Element"
126+
else
127+
"get" + elementName
129128
}
130129

131130
/**
132131
* Returns the setter for the given field name.s
133132
*/
134133
private def setterFor(field: BaseRuntimeChildDefinition): String = {
134+
// Elements called `class` have an underscore appended to the end of their name within getters.
135+
val elementName = if (field.getElementName.equals("class"))
136+
field.getElementName.capitalize + "_"
137+
else field.getElementName.capitalize
135138

136139
// Primitive single-value types typically use the Element suffix in their
137140
// setters, with the exception of the "div" field for reasons that are not clear.
@@ -140,9 +143,9 @@ private[bunsen] class EncoderBuilder(fhirContext: FhirContext,
140143
// Enumerations are set directly rather than via elements.
141144
!field.isInstanceOf[RuntimeChildPrimitiveEnumerationDatatypeDefinition] &&
142145
field.getMax == 1 && field.getElementName != "div")
143-
"set" + field.getElementName.capitalize + "Element"
146+
"set" + elementName + "Element"
144147
else
145-
"set" + field.getElementName.capitalize
148+
"set" + elementName
146149
}
147150

148151
/**

bunsen-stu3/src/test/java/com/cerner/bunsen/stu3/FhirEncodersTest.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import org.hl7.fhir.dstu3.model.Annotation;
1818
import org.hl7.fhir.dstu3.model.Coding;
1919
import org.hl7.fhir.dstu3.model.Condition;
20+
import org.hl7.fhir.dstu3.model.Coverage;
2021
import org.hl7.fhir.dstu3.model.DateTimeType;
2122
import org.hl7.fhir.dstu3.model.IntegerType;
2223
import org.hl7.fhir.dstu3.model.Medication;
@@ -60,6 +61,10 @@ public class FhirEncodersTest {
6061
private static Dataset<MedicationRequest> medDataset;
6162
private static MedicationRequest decodedMedRequest;
6263

64+
private static Coverage coverage = TestData.newCoverage();
65+
private static Dataset<Coverage> coverageDataset;
66+
private static Coverage decodedCoverage;
67+
6368
/**
6469
* Set up Spark.
6570
*/
@@ -85,6 +90,9 @@ public static void setUp() {
8590
medDataset = spark.createDataset(ImmutableList.of(medRequest),
8691
encoders.of(MedicationRequest.class, Medication.class, Provenance.class));
8792
decodedMedRequest = medDataset.head();
93+
94+
coverageDataset = spark.createDataset(ImmutableList.of(coverage), encoders.of(Coverage.class));
95+
decodedCoverage = coverageDataset.head();
8896
}
8997

9098
/**
@@ -333,4 +341,12 @@ public void testEncoderCached() throws IOException {
333341
Assert.assertSame(encoders.of(Patient.class),
334342
encoders.of(Patient.class));
335343
}
344+
345+
@Test
346+
public void testPrimitiveClassDecoding() {
347+
Assert.assertEquals(coverage.getGrouping().getClass_(),
348+
coverageDataset.select("grouping.class").head().get(0));
349+
Assert.assertEquals(coverage.getGrouping().getClass_(),
350+
decodedCoverage.getGrouping().getClass_());
351+
}
336352
}

bunsen-stu3/src/test/java/com/cerner/bunsen/stu3/TestData.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import org.hl7.fhir.dstu3.model.Annotation;
55
import org.hl7.fhir.dstu3.model.CodeableConcept;
66
import org.hl7.fhir.dstu3.model.Condition;
7+
import org.hl7.fhir.dstu3.model.Coverage;
78
import org.hl7.fhir.dstu3.model.DateTimeType;
89
import org.hl7.fhir.dstu3.model.Identifier;
910
import org.hl7.fhir.dstu3.model.IntegerType;
@@ -192,4 +193,22 @@ public static MedicationRequest newMedRequest() {
192193

193194
return medReq;
194195
}
196+
197+
/**
198+
* Returns a FHIR Coverage resource for testing purposes.
199+
*/
200+
public static Coverage newCoverage() {
201+
Coverage coverage = new Coverage();
202+
203+
coverage.setId("test-coverage");
204+
coverage.setStatus(Coverage.CoverageStatus.ACTIVE);
205+
coverage.setSubscriber(new Reference("Patient/test-patient"));
206+
207+
Coverage.GroupComponent groupComponent = new Coverage.GroupComponent();
208+
groupComponent.setGroup("some-group");
209+
groupComponent.setClass_("some-group-class");
210+
coverage.setGrouping(groupComponent);
211+
212+
return coverage;
213+
}
195214
}

0 commit comments

Comments
 (0)