Skip to content

Commit 7083ae8

Browse files
authored
U4X-1071: Refactor UgandaEMRSyncService to remove third-party JSON types from service interfaces (#218)
1 parent 34f322a commit 7083ae8

8 files changed

Lines changed: 39 additions & 33 deletions

File tree

api/src/main/java/org/openmrs/module/ugandaemrsync/api/UgandaEMRSyncService.java

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
*/
1010
package org.openmrs.module.ugandaemrsync.api;
1111

12-
import org.json.JSONObject;
1312
import org.openmrs.Encounter;
1413
import org.openmrs.EncounterType;
1514
import org.openmrs.Concept;
@@ -355,7 +354,7 @@ public Encounter addVLToEncounter(String vlQualitative, String vlQuantitative, S
355354
* @param order the order which was used to order the test. this can be null.
356355
* @return Encounter the encounter where the test results have been added.
357356
*/
358-
public List<Encounter> addTestResultsToEncounter(JSONObject bundleResults, Order order);
357+
public List<Encounter> addTestResultsToEncounter(String bundleResults, Order order);
359358

360359

361360
/**
@@ -451,17 +450,17 @@ public Encounter addVLToEncounter(String vlQualitative, String vlQuantitative, S
451450
* @param patientData The Patient Fhir Payload to be used to create a patient
452451
* @return a list of expired resources
453452
*/
454-
public Patient createPatientsFromFHIR(JSONObject patientData) throws ParseException;
453+
public Patient createPatientsFromFHIR(String patientData) throws ParseException;
455454

456455
/**
457456
* Checks if the patient coming from the fhir server already exists
458457
* @param patientData The Patient Fhir Payload to be used to check if the patient exists
459458
* @return wether the patient exists or not.
460459
*/
461-
public boolean patientFromFHIRExists(JSONObject patientData);
460+
public boolean patientFromFHIRExists(String patientData);
462461

463462

464-
public Patient updatePatientsFromFHIR(JSONObject bundle,String identifierUUID,String identifierName) throws ParseException;
463+
public Patient updatePatientsFromFHIR(String bundle,String identifierUUID,String identifierName) throws ParseException;
465464

466465
public List<SyncFhirResource> getSyncedFHirResources(SyncFhirProfile syncFhirProfile, Date dateSyncedFrom, Date dateSyncedTo);
467466

@@ -494,7 +493,7 @@ public Encounter addVLToEncounter(String vlQualitative, String vlQuantitative, S
494493

495494
public SyncTaskType setAccessTokenToSyncTaskType();
496495

497-
public List<JSONObject> generateDrugOrderToOtherSystem(Collection<Concept> conceptList);
496+
public List<String> generateDrugOrderToOtherSystem(Collection<Concept> conceptList);
498497

499498
public void sendPrescription();
500499

api/src/main/java/org/openmrs/module/ugandaemrsync/api/impl/UgandaEMRSyncServiceImpl.java

Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -804,17 +804,17 @@ public List<SyncFhirProfileLog> getSyncFhirProfileLogByProfile(SyncFhirProfile s
804804
}
805805

806806
/**
807-
* @see UgandaEMRSyncService#addTestResultsToEncounter(JSONObject, Order)
807+
* @see UgandaEMRSyncService#addTestResultsToEncounter(String, Order)
808808
*/
809-
public List<Encounter> addTestResultsToEncounter(JSONObject bundleResults, Order order) {
809+
public List<Encounter> addTestResultsToEncounter(String bundleResults, Order order) {
810810
Encounter encounter = null;
811811

812812
if (order != null) {
813813
encounter = order.getEncounter();
814814
}
815815

816816
List<Encounter> returningEncounter = new ArrayList<>();
817-
JSONArray jsonArray = bundleResults.getJSONArray("entry");
817+
JSONArray jsonArray = new JSONObject(bundleResults).getJSONArray("entry");
818818

819819
JSONArray filteredDiagnosticReportArray = searchForJSONOBJECTSByKey(jsonArray, "resourceType", "DiagnosticReport");
820820

@@ -1021,8 +1021,11 @@ public List<SyncFhirResource> getSyncedFHirResources(SyncFhirProfile syncFhirPro
10211021
}
10221022

10231023
@Override
1024-
public Patient createPatientsFromFHIR(JSONObject patientData) throws ParseException {
1024+
public Patient createPatientsFromFHIR(String patientDataString) throws ParseException {
10251025
PatientService patientService = Context.getPatientService();
1026+
1027+
JSONObject patientData = new JSONObject(patientDataString);
1028+
10261029
Date date = new SimpleDateFormat("yyyy-MM-dd").parse(patientData.get("birthDate").toString());
10271030

10281031
String gender = String.valueOf(patientData.get("gender"));
@@ -1040,9 +1043,11 @@ public Patient createPatientsFromFHIR(JSONObject patientData) throws ParseExcept
10401043
return patientService.savePatient(patient);
10411044
}
10421045

1043-
public Patient updatePatientsFromFHIR(JSONObject bundle, String identifierUUID, String identifierName) {
1046+
public Patient updatePatientsFromFHIR(String bundleString, String identifierUUID, String identifierName) {
10441047
Patient patient = null;
10451048
PatientService patientService = Context.getPatientService();
1049+
JSONObject bundle = new JSONObject(bundleString);
1050+
10461051
if (bundle.has("resourceType") && bundle.getString("resourceType").equals("Bundle") && bundle.getJSONArray("entry").length() > 0) {
10471052
JSONArray bundleResourceObjects = bundle.getJSONArray("entry");
10481053

@@ -1149,9 +1154,9 @@ private PatientIdentifier generatePatientIdentifier() {
11491154
return patientIdentifier;
11501155
}
11511156

1152-
public boolean patientFromFHIRExists(JSONObject patientData) {
1157+
public boolean patientFromFHIRExists(String patientDataString) {
11531158
boolean patientExists = false;
1154-
for (Object o : patientData.getJSONArray("identifier")) {
1159+
for (Object o : new JSONObject(patientDataString).getJSONArray("identifier")) {
11551160
JSONObject jsonObject = new JSONObject(o.toString());
11561161
PatientService patientService = Context.getPatientService();
11571162
List<PatientIdentifier> patientIdentifier = patientService.getPatientIdentifiers(jsonObject.get("value").toString(), null, null, null, null);
@@ -1891,9 +1896,9 @@ private String getProviderAttributeByType(Set<ProviderAttribute> providerAttribu
18911896
* @param drugs A collection of drug concepts to filter the orders by.
18921897
* @return A list of JSON objects representing patient orders with drug prescriptions.
18931898
*/
1894-
public List<JSONObject> generateDrugOrderToOtherSystem(Collection<Concept> drugs) {
1899+
public List<String> generateDrugOrderToOtherSystem(Collection<Concept> drugs) {
18951900
// Initialize the list to hold the patient orders
1896-
List<JSONObject> patientOrders = new ArrayList<>();
1901+
List<String> patientOrders = new ArrayList<>();
18971902

18981903
// Retrieve the OrderService and CareSetting for the specific care setting (OPD)
18991904
OrderService orderService = Context.getOrderService();
@@ -1960,7 +1965,7 @@ public List<JSONObject> generateDrugOrderToOtherSystem(Collection<Concept> drugs
19601965
patientOrder.getJSONObject("patient").has("id")) {
19611966

19621967
// Add valid patient order to the result list
1963-
patientOrders.add(patientOrder);
1968+
patientOrders.add(patientOrder.toString());
19641969
}
19651970
}
19661971

@@ -2317,34 +2322,38 @@ public void sendPrescription() {
23172322
.collect(Collectors.toList());
23182323

23192324
// Generate prescription orders
2320-
List<JSONObject> drugOrders = generateDrugOrderToOtherSystem(concepts);
2325+
List<String> drugOrders = generateDrugOrderToOtherSystem(concepts);
2326+
2327+
23212328

23222329
try {
2323-
for (JSONObject drugOrder : drugOrders) {
2330+
for (String drugOrderString : drugOrders) {
23242331
// Send prescription via POST
23252332
Map<String, Object> response = httpConnection.sendPostBy(
23262333
url,
23272334
syncTaskType.getUrlUserName(),
23282335
syncTaskType.getUrlPassword(),
23292336
null,
2330-
drugOrder.toString(),
2337+
drugOrderString,
23312338
false
23322339
);
23332340

2341+
2342+
23342343
int responseCode = response.get("responseCode") instanceof Integer
23352344
? (int) response.get("responseCode")
23362345
: Integer.parseInt(response.get("responseCode").toString());
23372346

23382347
if (responseCode == 200 || responseCode == 201) {
2339-
String internalPatientId = drugOrder.optString("internal_patient_id", null);
2348+
String internalPatientId = new JSONObject(drugOrderString).optString("internal_patient_id", null);
23402349
String externalPatientId = extractPatientIdFromResponse(response);
23412350

23422351
if (internalPatientId != null && !externalPatientId.isEmpty()) {
23432352
updatePatientOPDNumber(internalPatientId, externalPatientId);
23442353
}
23452354

23462355
// Log successful sync
2347-
logTransaction(syncTaskType, responseCode, null, drugOrder.get("encounter_id").toString(), "Patient: " + externalPatientId + "'s Prescription has been created in eAFYA. eAFYA Server responded back with message: (" + response.get("responseMessage").toString() + ")", new Date(), url, false, false);
2356+
logTransaction(syncTaskType, responseCode, null, new JSONObject(drugOrderString).get("encounter_id").toString(), "Patient: " + externalPatientId + "'s Prescription has been created in eAFYA. eAFYA Server responded back with message: (" + response.get("responseMessage").toString() + ")", new Date(), url, false, false);
23482357
log.info(String.format("Prescription for patient %s synced successfully. External ID: %s",
23492358
internalPatientId, externalPatientId));
23502359
} else {

api/src/main/java/org/openmrs/module/ugandaemrsync/server/SyncFHIRRecord.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1499,7 +1499,7 @@ public List<Map> sendFhirResourcesTo(SyncFhirProfile syncFhirProfile) {
14991499
syncFhirResource.setStatusCodeDetail(map.get("responseMessage").toString());
15001500
syncFhirResource.setExpiryDate(UgandaEMRSyncUtil.addDaysToDate(date, syncFhirProfile.getDurationToKeepSyncedResources()));
15011501
if (syncFhirProfile.getUuid().equals(FSHR_SYNC_FHIR_PROFILE_UUID) || syncFhirProfile.getUuid().equals(CROSS_BORDER_CR_SYNC_FHIR_PROFILE_UUID)) {
1502-
ugandaEMRSyncService.updatePatientsFromFHIR(new JSONObject((String) map.get("result")), PATIENT_ID_TYPE_CROSS_BORDER_UUID, PATIENT_ID_TYPE_CROSS_BORDER_NAME);
1502+
ugandaEMRSyncService.updatePatientsFromFHIR((String) map.get("result"), PATIENT_ID_TYPE_CROSS_BORDER_UUID, PATIENT_ID_TYPE_CROSS_BORDER_NAME);
15031503
}
15041504
ugandaEMRSyncService.saveFHIRResource(syncFhirResource);
15051505
} else {

api/src/main/java/org/openmrs/module/ugandaemrsync/tasks/CrossBorderIntegrationSyncTask.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,8 @@ public void updatePatientWithCBI(String patientDataObject) throws Exception {
4242
for (Object jsonObject : results.getJSONArray("entry")) {
4343
JSONObject patientData = new JSONObject(jsonObject.toString()).getJSONObject("resource");
4444
Patient patient = null;
45-
if (!ugandaEMRSyncService.patientFromFHIRExists(patientData)) {
46-
patient = ugandaEMRSyncService.updatePatientsFromFHIR(patientData, PATIENT_ID_TYPE_CROSS_BORDER_UUID, PATIENT_ID_TYPE_CROSS_BORDER_NAME);
45+
if (!ugandaEMRSyncService.patientFromFHIRExists(patientData.toString())) {
46+
patient = ugandaEMRSyncService.updatePatientsFromFHIR(patientData.toString(), PATIENT_ID_TYPE_CROSS_BORDER_UUID, PATIENT_ID_TYPE_CROSS_BORDER_NAME);
4747
}
4848
if (patient != null) {
4949
log.info("Patient " + patient.getNames() + "Successfully Updated");

api/src/main/java/org/openmrs/module/ugandaemrsync/tasks/ReceiveLabResultFromALISTask.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ public void execute() {
4343
ArrayList<Map> result = (ArrayList<Map>) reasonReference.get("result");
4444
//Save Lab Results
4545
if (order.getEncounter() != null) {
46-
ugandaEMRSyncService.addTestResultsToEncounter(new JSONObject(""), order);
46+
ugandaEMRSyncService.addTestResultsToEncounter("", order);
4747
syncTask.setActionCompleted(true);
4848
ugandaEMRSyncService.saveSyncTask(syncTask);
4949
try {

api/src/main/java/org/openmrs/module/ugandaemrsync/tasks/SendPatientsToFacilitySHRTask.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,8 @@ public void transferIn(String patientDataObject) throws Exception {
3939
JSONObject patientData = new JSONObject(jsonObject.toString()).getJSONObject("resource");
4040
Patient patient = null;
4141
String healthCenterFrom = patientData.getJSONObject("managingOrganization").get("display").toString();
42-
if (!ugandaEMRSyncService.patientFromFHIRExists(patientData)) {
43-
patient = ugandaEMRSyncService.createPatientsFromFHIR(patientData);
42+
if (!ugandaEMRSyncService.patientFromFHIRExists(patientData.toString())) {
43+
patient = ugandaEMRSyncService.createPatientsFromFHIR(patientData.toString());
4444
}
4545
if (patient != null) {
4646
log.info("Patient " + patient.getNames() + "Successfully Created");

api/src/test/java/org/openmrs/module/ugandaemrsync/api/UgandaEMRSyncServiceTest.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -403,7 +403,7 @@ public void addTestResultsToEncounter_shouldSaveCD4ResultsToEncounter() {
403403

404404
Integer numberOfObs = order.getEncounter().getObs().size();
405405

406-
ugandaEMRSyncService.addTestResultsToEncounter(new JSONObject(sampleResultsForCd4Test), order);
406+
ugandaEMRSyncService.addTestResultsToEncounter(sampleResultsForCd4Test, order);
407407

408408
Assert.assertTrue(Context.getOrderService().getOrder(6).getEncounter().getObs().size() > numberOfObs);
409409
Assert.assertTrue(order.getEncounter().getObs().stream().map(Obs::getConcept).collect(Collectors.toSet()).contains(Context.getConceptService().getConcept(cd4Concept)));
@@ -418,7 +418,7 @@ public void addTestResultsToEncounter_shouldSaveCBCResultsWithKnownOrderToEncoun
418418

419419
Integer numberOfObs = order.getEncounter().getObs().size();
420420

421-
ugandaEMRSyncService.addTestResultsToEncounter(new JSONObject(sampleResultsForCBCTest), order);
421+
ugandaEMRSyncService.addTestResultsToEncounter(sampleResultsForCBCTest, order);
422422

423423
Assert.assertTrue(Context.getOrderService().getOrder(15).getEncounter().getObs().size() > numberOfObs);
424424
Assert.assertTrue(order.getEncounter().getObs().stream().map(Obs::getConcept).collect(Collectors.toSet()).contains(Context.getConceptService().getConcept(WBCCountConcept)));
@@ -428,7 +428,7 @@ public void addTestResultsToEncounter_shouldSaveCBCResultsWithKnownOrderToEncoun
428428
@Test
429429
public void addTestResultsToEncounter_shouldSaveCBCResultsWithOutKnownOrderToEncounter() {
430430
UgandaEMRSyncService ugandaEMRSyncService = Context.getService(UgandaEMRSyncService.class);
431-
List<Encounter> encounters = ugandaEMRSyncService.addTestResultsToEncounter(new JSONObject(sampleResultsForCBCTest), null);
431+
List<Encounter> encounters = ugandaEMRSyncService.addTestResultsToEncounter(sampleResultsForCBCTest, null);
432432
Order cbcOrder = new ArrayList<>(encounters.get(0).getOrders()).get(0);
433433
Assert.assertNotNull(cbcOrder);
434434
Assert.assertTrue(cbcOrder.getEncounter().getObs().stream().map(Obs::getConcept).collect(Collectors.toSet()).contains(Context.getConceptService().getConcept(WBCCountConcept)));

omod/src/main/java/org/openmrs/module/ugandaemrsync/web/resource/RecieveLabResultResource.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,7 @@ public TestResultDTO save(TestResultDTO TestResult) {
4141
@Override
4242
public Object create(SimpleObject propertiesToCreate, RequestContext context) throws ResponseException {
4343

44-
JSONObject jsonObject = new JSONObject(propertiesToCreate);
45-
46-
List<Encounter> encounters = Context.getService(UgandaEMRSyncService.class).addTestResultsToEncounter(jsonObject, null);
44+
List<Encounter> encounters = Context.getService(UgandaEMRSyncService.class).addTestResultsToEncounter(propertiesToCreate.toString(), null);
4745

4846
TestResultDTO delegate = new TestResultDTO();
4947

0 commit comments

Comments
 (0)