Skip to content

Commit 8ba2764

Browse files
authored
Merge pull request #542 from pkornowski/MOTECH-3170
MOTECH-3170: Added deserializer to OpenMRS Observation.
2 parents 2be8dce + 2a1cfb2 commit 8ba2764

File tree

5 files changed

+35
-6
lines changed

5 files changed

+35
-6
lines changed

openmrs/src/main/java/org/motechproject/openmrs/domain/Observation.java

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,15 @@
88
import com.google.gson.JsonPrimitive;
99
import com.google.gson.JsonSerializationContext;
1010
import com.google.gson.JsonSerializer;
11+
import org.motechproject.openmrs.util.JsonUtils;
1112

1213
import java.lang.reflect.Type;
1314
import java.text.SimpleDateFormat;
1415
import java.util.ArrayList;
1516
import java.util.Date;
17+
import java.util.HashMap;
1618
import java.util.List;
19+
import java.util.Map;
1720
import java.util.Objects;
1821

1922
/**
@@ -236,6 +239,20 @@ public JsonElement serialize(Observation observation, Type typeOfSrc, JsonSerial
236239
}
237240
}
238241

242+
public static class ObservationDeserializer implements JsonDeserializer<Observation> {
243+
@Override
244+
public Observation deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
245+
return (Observation) JsonUtils.readJsonWithAdapters(json.toString(), Observation.class, getValueAdapter());
246+
}
247+
248+
private Map<Type, Object> getValueAdapter() {
249+
Map<Type, Object> valueAdapter = new HashMap<>();
250+
valueAdapter.put(Observation.ObservationValue.class, new Observation.ObservationValueDeserializer());
251+
252+
return valueAdapter;
253+
}
254+
}
255+
239256
/**
240257
* Represents a single value of the observation.
241258
*/
@@ -312,8 +329,12 @@ public ObservationValue deserialize (JsonElement json, Type typeOfT, JsonDeseria
312329

313330
if (json.isJsonObject()) {
314331
JsonObject jsonObject = json.getAsJsonObject();
315-
observationValue.setDisplay(jsonObject.get(DISPLAY_KEY).getAsString());
316-
observationValue.setUuid(jsonObject.get(UUID_KEY).getAsString());
332+
if (jsonObject.has(DISPLAY_KEY)) {
333+
observationValue.setDisplay(jsonObject.get(DISPLAY_KEY).getAsString());
334+
}
335+
if (jsonObject.has(UUID_KEY)) {
336+
observationValue.setUuid(jsonObject.get(UUID_KEY).getAsString());
337+
}
317338
} else if (json.isJsonPrimitive()) {
318339
JsonPrimitive jsonPrimitive = json.getAsJsonPrimitive();
319340
observationValue.setDisplay(jsonPrimitive.getAsString());

openmrs/src/main/java/org/motechproject/openmrs/resource/impl/EncounterResourceImpl.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,16 +99,24 @@ private Gson buildGsonWithAdaptersSerialize() {
9999

100100
private Gson buildGsonWithAdaptersDeserialize() {
101101
return new GsonBuilder()
102+
.setDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ")
102103
.registerTypeAdapter(Encounter.class, new Encounter.EncounterDeserializer())
103104
.create();
104105
}
105106

107+
private Gson buildGsonWithAdaptersDeserializeV112() {
108+
return new GsonBuilder()
109+
.setDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ")
110+
.registerTypeAdapter(Observation.class, new Observation.ObservationDeserializer())
111+
.create();
112+
}
113+
106114
private Encounter checkVersionAndSetEncounter(Config config, String responseJson) {
107115
Encounter createdEncounter;
108116
if (OPENMRS_V19.equals(config.getOpenMrsVersion())) {
109117
createdEncounter = buildGsonWithAdaptersDeserialize().fromJson(responseJson, Encounter.class);
110118
} else {
111-
createdEncounter = (Encounter) JsonUtils.readJson(responseJson, Encounter.class);
119+
createdEncounter = buildGsonWithAdaptersDeserializeV112().fromJson(responseJson, Encounter.class);
112120
}
113121
return createdEncounter;
114122
}

openmrs/src/test/resources/json/encounter/encounter-by-patient-response-v1-12.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"results":[
33
{
44
"uuid":"446d0bec-5e65-4f25-aacd-ee7da78ec616",
5-
"encounterDatetime":"2012-06-03T00:00:00.000Z",
5+
"encounterDatetime":"2012-06-03T00:00:00.000+0000",
66
"patient":{
77
"uuid":"71ba40ce-b638-494f-b284-556f0f77955f"
88
},

openmrs/src/test/resources/json/encounter/encounter-by-patient-response-v1-9.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"results":[
33
{
44
"uuid":"446d0bec-5e65-4f25-aacd-ee7da78ec616",
5-
"encounterDatetime":"2012-06-03T00:00:00.000Z",
5+
"encounterDatetime":"2012-06-03T00:00:00.000+0000",
66
"patient":{
77
"uuid":"71ba40ce-b638-494f-b284-556f0f77955f"
88
},

openmrs/src/test/resources/json/encounter/encounter-list-results.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"results":[
33
{
44
"uuid":"446d0bec-5e65-4f25-aacd-ee7da78ec616",
5-
"encounterDatetime":"2012-06-03T00:00:00.000Z",
5+
"encounterDatetime":"2012-06-03T00:00:00.000+0000",
66
"patient":{
77
"uuid":"71ba40ce-b638-494f-b284-556f0f77955f"
88
},

0 commit comments

Comments
 (0)