Skip to content

Commit 1e50b16

Browse files
authored
#250 - Add new Queue domain (#251)
1 parent c13449e commit 1e50b16

File tree

14 files changed

+277
-0
lines changed

14 files changed

+277
-0
lines changed

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,7 @@ This is the list of currently supported domains in their loading order:
134134
1. [Bahmni Appointment Specialities (CSV files)](readme/appointmentspecialities.md)
135135
1. [Bahmni Appointment Service Definitions (CSV files)](readme/appointmentservices.md#domain-appointmentservicedefinitions)
136136
1. [Bahmni Appointment Service Types (CSV files)](readme/appointmentservices.md#domain-appointmentservicetypes)
137+
1. [Queues (CSV files)](readme/queues.md#domain-queues)
137138
1. [Data Filter Entity-Basis Mappings (CSV files)](readme/datafiltermappings.md)
138139
1. [Metadata Sets (CSV files)](readme/mdm.md#domain-metadatasets)
139140
1. [Metadata Set Members (CSV files)](readme/mdm.md#domain-metadatasetmembers)
@@ -188,6 +189,7 @@ See the [documentation on Initializer's logging properties](readme/rtprops.md#lo
188189
## Releases notes
189190

190191
#### Version 2.7.0
192+
* Added support for Queues
191193

192194
#### Version 2.6.0
193195
* Added support for Cohort Attribute types

api-2.3/pom.xml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,13 @@
6666
<groupId>org.openmrs.module</groupId>
6767
<artifactId>openconceptlab-api</artifactId>
6868
</dependency>
69+
70+
<dependency>
71+
<groupId>org.openmrs.module</groupId>
72+
<artifactId>queue-api</artifactId>
73+
<version>${queueVersion}</version>
74+
<scope>provided</scope>
75+
</dependency>
6976

7077
<!-- Dependencies required to compile against Java 11 -->
7178
<dependency>
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package org.openmrs.module.initializer.api.queues;
2+
3+
import org.apache.commons.lang3.StringUtils;
4+
import org.openmrs.annotation.OpenmrsProfile;
5+
import org.openmrs.module.initializer.Domain;
6+
import org.openmrs.module.initializer.api.BaseLineProcessor;
7+
import org.openmrs.module.initializer.api.CsvLine;
8+
import org.openmrs.module.initializer.api.CsvParser;
9+
import org.openmrs.module.queue.api.QueueService;
10+
import org.openmrs.module.queue.model.Queue;
11+
import org.springframework.beans.factory.annotation.Autowired;
12+
import org.springframework.beans.factory.annotation.Qualifier;
13+
14+
@OpenmrsProfile(modules = { "queue:*" })
15+
public class QueueCsvParser extends CsvParser<Queue, BaseLineProcessor<Queue>> {
16+
17+
private final QueueService queueService;
18+
19+
@Autowired
20+
public QueueCsvParser(@Qualifier("queue.QueueService") QueueService queueService, QueueLineProcessor processor) {
21+
super(processor);
22+
this.queueService = queueService;
23+
}
24+
25+
@Override
26+
public Domain getDomain() {
27+
return Domain.QUEUES;
28+
}
29+
30+
@Override
31+
public Queue bootstrap(CsvLine line) throws IllegalArgumentException {
32+
String uuid = line.getUuid();
33+
Queue queue = queueService.getQueueByUuid(uuid).orElse(new Queue());
34+
if (StringUtils.isNotBlank(uuid)) {
35+
queue.setUuid(uuid);
36+
}
37+
return queue;
38+
}
39+
40+
@Override
41+
public Queue save(Queue instance) {
42+
return queueService.createQueue(instance);
43+
}
44+
}
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
package org.openmrs.module.initializer.api.queues;
2+
3+
import org.apache.commons.lang3.StringUtils;
4+
import org.openmrs.annotation.OpenmrsProfile;
5+
import org.openmrs.api.ConceptService;
6+
import org.openmrs.api.LocationService;
7+
import org.openmrs.module.initializer.api.BaseLineProcessor;
8+
import org.openmrs.module.initializer.api.CsvLine;
9+
import org.openmrs.module.initializer.api.utils.Utils;
10+
import org.openmrs.module.queue.model.Queue;
11+
import org.springframework.beans.factory.annotation.Autowired;
12+
import org.springframework.beans.factory.annotation.Qualifier;
13+
14+
/**
15+
* This is the first level line processor for a Queue
16+
*/
17+
@OpenmrsProfile(modules = { "queue:*" })
18+
public class QueueLineProcessor extends BaseLineProcessor<Queue> {
19+
20+
protected static String HEADER_SERVICE = "service";
21+
22+
protected static String HEADER_LOCATION = "location";
23+
24+
private final ConceptService conceptService;
25+
26+
private final LocationService locationService;
27+
28+
@Autowired
29+
public QueueLineProcessor(@Qualifier("conceptService") ConceptService conceptService,
30+
@Qualifier("locationService") LocationService locationService) {
31+
super();
32+
this.conceptService = conceptService;
33+
this.locationService = locationService;
34+
}
35+
36+
@Override
37+
public Queue fill(Queue queue, CsvLine line) throws IllegalArgumentException {
38+
queue.setName(line.get(HEADER_NAME, true));
39+
queue.setDescription(line.getString(HEADER_DESC));
40+
if (line.containsHeader(HEADER_SERVICE)) {
41+
String service = line.getString(HEADER_SERVICE);
42+
if (StringUtils.isNotBlank(service)) {
43+
queue.setService(Utils.fetchConcept(service, conceptService));
44+
} else {
45+
queue.setService(null);
46+
}
47+
}
48+
if (line.containsHeader(HEADER_LOCATION)) {
49+
String location = line.getString(HEADER_LOCATION);
50+
if (StringUtils.isNotBlank(location)) {
51+
queue.setLocation(Utils.fetchLocation(location, locationService));
52+
} else {
53+
queue.setLocation(null);
54+
}
55+
}
56+
return queue;
57+
}
58+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package org.openmrs.module.initializer.api.queues;
2+
3+
import org.openmrs.annotation.OpenmrsProfile;
4+
import org.openmrs.module.initializer.api.loaders.BaseCsvLoader;
5+
import org.openmrs.module.queue.model.Queue;
6+
import org.springframework.beans.factory.annotation.Autowired;
7+
8+
@OpenmrsProfile(modules = { "queue:*" })
9+
public class QueueLoader extends BaseCsvLoader<Queue, QueueCsvParser> {
10+
11+
@Autowired
12+
public void setParser(QueueCsvParser parser) {
13+
this.parser = parser;
14+
}
15+
}

api-2.3/src/test/java/org/openmrs/module/initializer/DomainBaseModuleContextSensitive_2_3_Test.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,26 @@
99
*/
1010
package org.openmrs.module.initializer;
1111

12+
import org.openmrs.module.Module;
13+
import org.openmrs.module.ModuleFactory;
14+
15+
import java.io.File;
16+
1217
/**
1318
* This allows to perform Spring context sensitive tests when Data Filter API is a dependency. In
1419
* that case it is necessary for each context sensitive test to update the search index.
1520
*/
1621
public abstract class DomainBaseModuleContextSensitive_2_3_Test extends DomainBaseModuleContextSensitiveTest {
1722

23+
public DomainBaseModuleContextSensitive_2_3_Test() {
24+
super();
25+
{
26+
Module mod = new Module("", "queue", "", "", "", "1.0.0");
27+
mod.setFile(new File(""));
28+
ModuleFactory.getStartedModulesMap().put(mod.getModuleId(), mod);
29+
}
30+
}
31+
1832
@Override
1933
public void updateSearchIndex() {
2034
// to prevent Data Filter's 'Illegal Record Access'
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
/**
2+
* This Source Code Form is subject to the terms of the Mozilla Public License,
3+
* v. 2.0. If a copy of the MPL was not distributed with this file, You can
4+
* obtain one at http://mozilla.org/MPL/2.0/. OpenMRS is also distributed under
5+
* the terms of the Healthcare Disclaimer located at http://openmrs.org/license.
6+
*
7+
* Copyright (C) OpenMRS Inc. OpenMRS is a registered trademark and the OpenMRS
8+
* graphic logo is a trademark of OpenMRS Inc.
9+
*/
10+
package org.openmrs.module.initializer.api.queues;
11+
12+
import org.junit.Assert;
13+
import org.junit.Before;
14+
import org.junit.Test;
15+
import org.openmrs.module.initializer.DomainBaseModuleContextSensitive_2_3_Test;
16+
import org.openmrs.module.queue.api.QueueService;
17+
import org.openmrs.module.queue.model.Queue;
18+
import org.springframework.beans.factory.annotation.Autowired;
19+
import org.springframework.beans.factory.annotation.Qualifier;
20+
21+
public class QueueLoaderIntegrationTest extends DomainBaseModuleContextSensitive_2_3_Test {
22+
23+
@Autowired
24+
@Qualifier("queue.QueueService")
25+
private QueueService queueService;
26+
27+
@Autowired
28+
private QueueLoader loader;
29+
30+
@Before
31+
public void setup() throws Exception {
32+
executeDataSet("testdata/test-queues.xml");
33+
}
34+
35+
@Test
36+
public void load_shouldLoadAccordingToCsvFiles() throws Exception {
37+
38+
// Initial Queue
39+
{
40+
Queue queue = queueService.getQueueByUuid("2a0e0eee-6888-11ee-ab8d-0242ac120002").orElse(null);
41+
Assert.assertNotNull(queue);
42+
Assert.assertEquals("Initial Queue", queue.getName());
43+
Assert.assertEquals("", queue.getDescription());
44+
Assert.assertEquals(2001, queue.getService().getConceptId().intValue());
45+
Assert.assertEquals(1, queue.getLocation().getLocationId().intValue());
46+
}
47+
48+
loader.load();
49+
50+
// Revised Queue
51+
{
52+
Queue queue = queueService.getQueueByUuid("2a0e0eee-6888-11ee-ab8d-0242ac120002").orElse(null);
53+
Assert.assertNotNull(queue);
54+
Assert.assertEquals("Revised Queue", queue.getName());
55+
Assert.assertEquals("Revised Description", queue.getDescription());
56+
Assert.assertEquals(2002, queue.getService().getConceptId().intValue());
57+
Assert.assertEquals(2, queue.getLocation().getLocationId().intValue());
58+
}
59+
// New Queue
60+
{
61+
Queue queue = queueService.getQueueByUuid("288db1cc-688a-11ee-ab8d-0242ac120002").orElse(null);
62+
Assert.assertNotNull(queue);
63+
Assert.assertEquals("New Queue", queue.getName());
64+
Assert.assertEquals("New Description", queue.getDescription());
65+
Assert.assertEquals(2001, queue.getService().getConceptId().intValue());
66+
Assert.assertEquals(3, queue.getLocation().getLocationId().intValue());
67+
}
68+
}
69+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
Uuid,Void/Retire,Name,Description,Service,Location
2+
2a0e0eee-6888-11ee-ab8d-0242ac120002,,Revised Queue,Revised Description,68b910bd-298c-4ecf-a632-661ae2f446op,Xanadu
3+
288db1cc-688a-11ee-ab8d-0242ac120002,,New Queue,New Description,Triage,167ce20c-4785-4285-9119-d197268f7f4a

api/src/main/java/org/openmrs/module/initializer/Domain.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ public enum Domain {
3737
APPOINTMENT_SPECIALITIES,
3838
APPOINTMENT_SERVICE_DEFINITIONS,
3939
APPOINTMENT_SERVICE_TYPES,
40+
QUEUES,
4041
DATAFILTER_MAPPINGS,
4142
METADATA_SETS,
4243
METADATA_SET_MEMBERS,
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
<?xml version='1.0' encoding='UTF-8'?>
2+
<dataset>
3+
4+
<concept concept_id="2000" retired="false" is_set="true" creator="1" date_created="2022-02-02 14:31:00.0" uuid="907eba27-2b38-43e8-91a9-4dfe3956a35t"/>
5+
<concept concept_id="2001" retired="false" is_set="false" creator="1" date_created="2022-02-02 14:40:00.0" uuid="67b910bd-298c-4ecf-a632-661ae2f446op"/>
6+
<concept concept_id="2002" retired="false" is_set="false" creator="1" date_created="2022-03-08 15:40:00.0" uuid="68b910bd-298c-4ecf-a632-661ae2f446op"/>
7+
<concept_name concept_name_id="893" concept_id="2000" name="Queue Service" locale="en" creator="1" date_created="2022-02-02 14:40:00.0" voided="0" uuid="9cp62348-5bf2-4050-b824-0aa009436ed6" concept_name_type="FULLY_SPECIFIED" locale_preferred="0"/>
8+
<concept_name concept_name_id="210" concept_id="2001" name="Triage" locale="en" creator="1" date_created="2022-02-02 14:40:00.0" voided="0" uuid="9i667348-5bf2-4050-b824-0aa009436kl0" concept_name_type="FULLY_SPECIFIED" locale_preferred="0"/>
9+
<concept_name concept_name_id="211" concept_id="2002" name="Consultation" locale="en" creator="1" date_created="2022-02-02 14:40:00.0" voided="0" uuid="5t747348-5bf2-4050-b824-0aa009436kl0" concept_name_type="FULLY_SPECIFIED" locale_preferred="0"/>
10+
<concept_set concept_set_id="389000" concept_set="2000" concept_id="2001" sort_weight="0" date_created="2022-02-02 14:40:00.0" creator="1" uuid="470b910bd-298c-4ecf-a632-661ae2f886bf"/>
11+
<concept_set concept_set_id="389001" concept_set="2000" concept_id="2002" sort_weight="0" date_created="2022-03-08 15:50:00.0" creator="1" uuid="380b910bd-298c-4ecf-a632-661ae2f886bf"/>
12+
13+
<global_property property="queue.serviceConceptSetName" property_value="Queue Service" uuid="69006997-6898-11ee-ab8d-0242ac120002"/>
14+
15+
<queue queue_id="1" uuid="2a0e0eee-6888-11ee-ab8d-0242ac120002" name="Initial Queue" description="" location_id="1" service="2001" creator="1" date_created="2020-03-11 15:59:20.0" retired="false"/>
16+
</dataset>

0 commit comments

Comments
 (0)