/*
* The contents of this file are subject to the OpenMRS Public License
* Version 1.0 (the "License"); you may not use this file except in
* compliance with the License. You may obtain a copy of the License at
* http://license.openmrs.org
*
* Software distributed under the License is distributed on an "AS IS"
* basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
* License for the specific language governing rights and limitations
* under the License.
*
* Copyright (C) OpenMRS, LLC. All Rights Reserved.
*/
package org.openmrs.mobile.utilities;
import com.google.gson.JsonArray;
import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParseException;
import org.openmrs.mobile.models.Concept;
import org.openmrs.mobile.models.Observation;
import java.lang.reflect.Type;
public class ObservationDeserializer implements JsonDeserializer<Observation> {
private static final String UUID_KEY = "uuid";
private static final String DISPLAY_KEY = "display";
private static final String VALUE_KEY = "value";
@Override
public Observation deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
JsonObject jsonObject = json.getAsJsonObject();
Observation observation = new Observation();
observation.setUuid(jsonObject.get(UUID_KEY).getAsString());
observation.setDisplay(jsonObject.get(DISPLAY_KEY).getAsString());
JsonElement conceptJson = jsonObject.get("concept");
if (conceptJson != null && "Visit Diagnoses".equals(conceptJson.getAsJsonObject().get(DISPLAY_KEY).getAsString())) {
JsonArray diagnosisDetailJSONArray = jsonObject.get("groupMembers").getAsJsonArray();
for (int i = 0; i < diagnosisDetailJSONArray.size(); i++) {
JsonObject diagnosisDetails = diagnosisDetailJSONArray.get(i).getAsJsonObject();
String diagnosisDetail = diagnosisDetails.get("concept").getAsJsonObject().get(DISPLAY_KEY).getAsString();
if ("Diagnosis order".equals(diagnosisDetail)) {
observation.setDiagnosisOrder(
diagnosisDetails.getAsJsonObject().get(VALUE_KEY).getAsJsonObject().get(DISPLAY_KEY).getAsString());
} else if ("Diagnosis certainty".equals(diagnosisDetail)) {
observation.setDiagnosisCertanity(
diagnosisDetails.getAsJsonObject().get(VALUE_KEY).getAsJsonObject().get(DISPLAY_KEY).getAsString());
} else {
try {
observation.setDiagnosisList(diagnosisDetails.getAsJsonObject().get(VALUE_KEY).getAsJsonObject().get(DISPLAY_KEY).getAsString());
}
catch (IllegalStateException e) {
observation.setDiagnosisList(diagnosisDetails.getAsJsonObject().get(VALUE_KEY).getAsString());
}
}
}
} else if (conceptJson != null && "Text of encounter note".equals(conceptJson.getAsJsonObject().get(DISPLAY_KEY).getAsString())) {
observation.setDiagnosisNote(jsonObject.getAsJsonObject().get(VALUE_KEY).getAsString());
}
if (conceptJson != null) {
Concept concept = new Concept();
concept.setUuid(conceptJson.getAsJsonObject().get(UUID_KEY).getAsString());
observation.setConcept(concept);
}
return observation;
}
}