diff --git a/api/pom.xml b/api/pom.xml
index 1a71083..8ed138b 100644
--- a/api/pom.xml
+++ b/api/pom.xml
@@ -25,6 +25,10 @@
API project for Data Filter Module
+
+ org.openmrs.module
+ webservices.rest-omod-common
+
org.openmrs.api
openmrs-api
diff --git a/api/src/main/java/org/openmrs/module/datafilter/impl/api/DataFilterDefaultResponse.java b/api/src/main/java/org/openmrs/module/datafilter/impl/api/DataFilterDefaultResponse.java
new file mode 100644
index 0000000..5dca03f
--- /dev/null
+++ b/api/src/main/java/org/openmrs/module/datafilter/impl/api/DataFilterDefaultResponse.java
@@ -0,0 +1,66 @@
+/**
+ * This Source Code Form is subject to the terms of the Mozilla Public License,
+ * v. 2.0. If a copy of the MPL was not distributed with this file, You can
+ * obtain one at http://mozilla.org/MPL/2.0/. OpenMRS is also distributed under
+ * the terms of the Healthcare Disclaimer located at http://openmrs.org/license.
+ *
+ * Copyright (C) OpenMRS Inc. OpenMRS is a registered trademark and the OpenMRS
+ * graphic logo is a trademark of OpenMRS Inc.
+ */
+package org.openmrs.module.datafilter.impl.api;
+
+import java.util.Date;
+import java.util.Map;
+
+public class DataFilterDefaultResponse {
+
+ private String uuid;
+
+ private Date dateCreated;
+
+ private Map entity;
+
+ private Map basis;
+
+ private Map creator;
+
+ public String getUuid() {
+ return uuid;
+ }
+
+ public void setUuid(String uuid) {
+ this.uuid = uuid;
+ }
+
+ public Date getDateCreated() {
+ return dateCreated;
+ }
+
+ public void setDateCreated(Date dateCreated) {
+ this.dateCreated = dateCreated;
+ }
+
+ public Map getEntity() {
+ return entity;
+ }
+
+ public void setEntity(Map entity) {
+ this.entity = entity;
+ }
+
+ public Map getBasis() {
+ return basis;
+ }
+
+ public void setBasis(Map basis) {
+ this.basis = basis;
+ }
+
+ public Map getCreator() {
+ return creator;
+ }
+
+ public void setCreator(Map creator) {
+ this.creator = creator;
+ }
+}
diff --git a/api/src/main/java/org/openmrs/module/datafilter/impl/api/EntityBasisMapResponseMapper.java b/api/src/main/java/org/openmrs/module/datafilter/impl/api/EntityBasisMapResponseMapper.java
new file mode 100644
index 0000000..ca4c9c2
--- /dev/null
+++ b/api/src/main/java/org/openmrs/module/datafilter/impl/api/EntityBasisMapResponseMapper.java
@@ -0,0 +1,99 @@
+/**
+ * This Source Code Form is subject to the terms of the Mozilla Public License,
+ * v. 2.0. If a copy of the MPL was not distributed with this file, You can
+ * obtain one at http://mozilla.org/MPL/2.0/. OpenMRS is also distributed under
+ * the terms of the Healthcare Disclaimer located at http://openmrs.org/license.
+ *
+ * Copyright (C) OpenMRS Inc. OpenMRS is a registered trademark and the OpenMRS
+ * graphic logo is a trademark of OpenMRS Inc.
+ */
+package org.openmrs.module.datafilter.impl.api;
+
+import org.openmrs.Location;
+import org.openmrs.Patient;
+import org.openmrs.Person;
+import org.openmrs.User;
+import org.openmrs.api.LocationService;
+import org.openmrs.api.PatientService;
+import org.openmrs.api.UserService;
+import org.openmrs.module.datafilter.impl.EntityBasisMap;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+@Component
+public class EntityBasisMapResponseMapper {
+
+ @Autowired
+ LocationService locationService;
+
+ @Autowired
+ UserService userService;
+
+ @Autowired
+ PatientService patientService;
+
+ /**
+ * Handles only User, Patient, and Location objects TODO: Make this implementation generic to handle
+ * other OpenMRS objects
+ *
+ * @param a
+ * @param response
+ * @return
+ */
+ private DataFilterDefaultResponse mapToDefaultResponse(EntityBasisMap a, DataFilterDefaultResponse response) {
+ response.setUuid(a.getUuid());
+ response.setDateCreated(a.getDateCreated());
+ response.setCreator(createUserMap(a.getCreator()));
+ if (a.getEntityType().equals("org.openmrs.User")) {
+ response.setEntity(createUserMap(userService.getUser(Integer.valueOf(a.getEntityIdentifier()))));
+ } else if (a.getEntityType().equals("org.openmrs.Patient")) {
+ response.setEntity(createPatientMap(patientService.getPatient(Integer.valueOf(a.getEntityIdentifier()))));
+ }
+
+ if (a.getBasisType().equals("org.openmrs.Location")) {
+ response.setBasis(createLocationMap(locationService.getLocation(Integer.valueOf(a.getBasisIdentifier()))));
+ }
+ return response;
+ }
+
+ public List constructResponse(List entityBasisMaps) {
+ return entityBasisMaps.stream().map(as -> this.mapToDefaultResponse(as, new DataFilterDefaultResponse()))
+ .collect(Collectors.toList());
+ }
+
+ private Map createLocationMap(Location l) {
+ Map locationMap = null;
+ if (l != null) {
+ locationMap = new HashMap();
+ locationMap.put("name", l.getName());
+ locationMap.put("uuid", l.getUuid());
+ }
+ return locationMap;
+ }
+
+ private Map createPatientMap(Patient p) {
+ Map map = new HashMap();
+ map.put("name", p.getPersonName().getFullName());
+ map.put("uuid", p.getUuid());
+ map.put("identifier", p.getPatientIdentifier().getIdentifier());
+ map.put("age", p.getAge());
+ map.put("gender", p.getGender());
+ map.putAll(p.getActiveIdentifiers().stream().filter(e -> e.getIdentifierType() != null)
+ .collect(Collectors.toMap(e -> e.getIdentifierType().toString().replaceAll("[- ]", ""),
+ e -> e.getIdentifier(), (e1, e2) -> e1 + "," + e2)));
+ return map;
+ }
+
+ private Map createUserMap(User u) {
+ Person p = u.getPerson();
+ Map map = new HashMap();
+ map.put("name", p.getPersonName().getFullName());
+ map.put("uuid", p.getUuid());
+ return map;
+ }
+}
diff --git a/api/src/main/java/org/openmrs/module/datafilter/impl/api/EntityBasisMapSearchRequest.java b/api/src/main/java/org/openmrs/module/datafilter/impl/api/EntityBasisMapSearchRequest.java
new file mode 100644
index 0000000..aab806f
--- /dev/null
+++ b/api/src/main/java/org/openmrs/module/datafilter/impl/api/EntityBasisMapSearchRequest.java
@@ -0,0 +1,56 @@
+/**
+ * This Source Code Form is subject to the terms of the Mozilla Public License,
+ * v. 2.0. If a copy of the MPL was not distributed with this file, You can
+ * obtain one at http://mozilla.org/MPL/2.0/. OpenMRS is also distributed under
+ * the terms of the Healthcare Disclaimer located at http://openmrs.org/license.
+ *
+ * Copyright (C) OpenMRS Inc. OpenMRS is a registered trademark and the OpenMRS
+ * graphic logo is a trademark of OpenMRS Inc.
+ */
+package org.openmrs.module.datafilter.impl.api;
+
+/**
+ * A model for search
+ */
+public class EntityBasisMapSearchRequest {
+
+ private String entityIdentifier;
+
+ private String entityType;
+
+ private String basisIdentifier;
+
+ private String basisType;
+
+ public String getEntityIdentifier() {
+ return entityIdentifier;
+ }
+
+ public void setEntityIdentifier(String entityIdentifier) {
+ this.entityIdentifier = entityIdentifier;
+ }
+
+ public String getEntityType() {
+ return entityType;
+ }
+
+ public void setEntityType(String entityType) {
+ this.entityType = entityType;
+ }
+
+ public String getBasisIdentifier() {
+ return basisIdentifier;
+ }
+
+ public void setBasisIdentifier(String basisIdentifier) {
+ this.basisIdentifier = basisIdentifier;
+ }
+
+ public String getBasisType() {
+ return basisType;
+ }
+
+ public void setBasisType(String basisType) {
+ this.basisType = basisType;
+ }
+}
diff --git a/api/src/main/java/org/openmrs/module/datafilter/impl/api/db/hibernate/HibernateDataFilterDAO.java b/api/src/main/java/org/openmrs/module/datafilter/impl/api/db/hibernate/HibernateDataFilterDAO.java
index c9ce939..0baf372 100644
--- a/api/src/main/java/org/openmrs/module/datafilter/impl/api/db/hibernate/HibernateDataFilterDAO.java
+++ b/api/src/main/java/org/openmrs/module/datafilter/impl/api/db/hibernate/HibernateDataFilterDAO.java
@@ -41,7 +41,7 @@ public void setSessionFactory(SessionFactory sessionFactory) {
*/
@Override
public EntityBasisMap getEntityBasisMap(String entityIdentifier, String entityType, String basisIdentifier,
- String basisType) {
+ String basisType) {
Criteria criteria = sessionFactory.getCurrentSession().createCriteria(EntityBasisMap.class);
criteria.add(Restrictions.eq("entityIdentifier", entityIdentifier).ignoreCase());
@@ -83,8 +83,7 @@ public Collection getEntityBasisMaps(String entityIdentifier, St
}
@Override
- public List getEntityBasisMapsByBasis(String entityType, String basisType,
- String basisIdentifier) {
+ public List getEntityBasisMapsByBasis(String entityType, String basisType, String basisIdentifier) {
Session session = sessionFactory.getCurrentSession();
@@ -92,13 +91,8 @@ public List getEntityBasisMapsByBasis(String entityType, String
CriteriaQuery cq = cb.createQuery(EntityBasisMap.class);
Root root = cq.from(EntityBasisMap.class);
- cq.select(root).where(
- cb.and(
- cb.equal(root.get("entityType"), entityType),
- cb.equal(root.get("basisType"), basisType),
- cb.equal(root.get("basisIdentifier"), basisIdentifier)
- )
- );
+ cq.select(root).where(cb.and(cb.equal(root.get("entityType"), entityType),
+ cb.equal(root.get("basisType"), basisType), cb.equal(root.get("basisIdentifier"), basisIdentifier)));
Query query = session.createQuery(cq);
return query.getResultList();
diff --git a/api/src/main/java/org/openmrs/module/datafilter/impl/api/impl/DataFilterServiceImpl.java b/api/src/main/java/org/openmrs/module/datafilter/impl/api/impl/DataFilterServiceImpl.java
index dac2df7..4e01b93 100644
--- a/api/src/main/java/org/openmrs/module/datafilter/impl/api/impl/DataFilterServiceImpl.java
+++ b/api/src/main/java/org/openmrs/module/datafilter/impl/api/impl/DataFilterServiceImpl.java
@@ -140,7 +140,7 @@ public Collection getEntityBasisMaps(OpenmrsObject entity, Strin
@Override
public Collection getEntityBasisMapsByBasis(Class extends OpenmrsObject> entityClass,
- OpenmrsObject basis) {
+ OpenmrsObject basis) {
return getEntityBasisMapsByBasis(entityClass.getName(), basis);
}
diff --git a/omod/pom.xml b/omod/pom.xml
index 7691f3c..15a0f15 100644
--- a/omod/pom.xml
+++ b/omod/pom.xml
@@ -26,6 +26,11 @@
OMOD project for Data Filter Module
+
+ org.openmrs.module
+ webservices.rest-omod-common
+ provided
+
${project.parent.groupId}
${project.parent.artifactId}-api
diff --git a/omod/src/main/java/org/openmrs/module/datafilter/web/controller/DataFilterController.java b/omod/src/main/java/org/openmrs/module/datafilter/web/controller/DataFilterController.java
new file mode 100644
index 0000000..f462301
--- /dev/null
+++ b/omod/src/main/java/org/openmrs/module/datafilter/web/controller/DataFilterController.java
@@ -0,0 +1,123 @@
+/**
+ * This Source Code Form is subject to the terms of the Mozilla Public License,
+ * v. 2.0. If a copy of the MPL was not distributed with this file, You can
+ * obtain one at http://mozilla.org/MPL/2.0/. OpenMRS is also distributed under
+ * the terms of the Healthcare Disclaimer located at http://openmrs.org/license.
+ *
+ * Copyright (C) OpenMRS Inc. OpenMRS is a registered trademark and the OpenMRS
+ * graphic logo is a trademark of OpenMRS Inc.
+ */
+package org.openmrs.module.datafilter.web.controller;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.openmrs.OpenmrsObject;
+import org.openmrs.api.context.Context;
+import org.openmrs.module.datafilter.impl.EntityBasisMap;
+import org.openmrs.module.datafilter.impl.api.DataFilterDefaultResponse;
+import org.openmrs.module.datafilter.impl.api.DataFilterService;
+import org.openmrs.module.datafilter.impl.api.EntityBasisMapResponseMapper;
+import org.openmrs.module.datafilter.impl.api.EntityBasisMapSearchRequest;
+import org.openmrs.module.webservices.rest.web.RestConstants;
+import org.openmrs.module.webservices.rest.web.v1_0.controller.BaseRestController;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import javax.validation.Valid;
+import java.io.IOException;
+import java.util.Collection;
+import java.util.List;
+import java.util.stream.Collectors;
+
+@Controller
+@RequestMapping(value = "/rest/" + RestConstants.VERSION_1 + "/datafilter")
+public class DataFilterController extends BaseRestController {
+
+ private Log log = LogFactory.getLog(this.getClass());
+
+ @Autowired
+ private DataFilterService dataFilterService;
+
+ @Autowired
+ private EntityBasisMapResponseMapper dataFilterMapper;
+
+ @RequestMapping(method = RequestMethod.POST, value = "entitybasismap")
+ @ResponseBody
+ public ResponseEntity