package org.openmrs.module.openhmis.commons.web.controller;
import org.openmrs.Concept;
import org.openmrs.Program;
import org.openmrs.ProgramWorkflow;
import org.openmrs.module.openhmis.commons.model.FieldAttributeType;
import org.openmrs.module.webservices.rest.SimpleObject;
import org.openmrs.util.PrivilegeConstants;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.ArrayList;
import java.util.List;
/**
* Get field attributes data.
*/
@Controller(value = "fieldAttributes")
@RequestMapping("/module/openhmis/common/fieldAttributes")
public class FieldAttributesController extends AbstractFieldAttributesController {
@ResponseBody
@RequestMapping(method = RequestMethod.GET)
public String get(@RequestParam(value = "type") String type,
@RequestParam(value = "foreignKey", required = false) String foreignKey) {
FieldAttributeType attributeType = FieldAttributeType.valueOf(type);
String results;
switch (attributeType) {
case location:
results = getLocations();
break;
case drug:
results = getDrugs();
break;
case concept:
results = getConcepts(foreignKey);
break;
case user:
results = getUsers();
break;
case provider:
results = getProviders();
break;
case programworkflow:
results = getProgramWorkflows();
break;
default:
results = "";
break;
}
return results;
}
/**
* get locations
* @return
*/
private String getLocations() {
SimpleObject results = new SimpleObject();
if (hasPrivileges(PrivilegeConstants.VIEW_LOCATIONS)) {
results.put("results", populateObjects(getLocationService().getAllLocations(false)));
}
return convertToJSON(results);
}
/**
* get drugs.
* @return
*/
private String getDrugs() {
SimpleObject results = new SimpleObject();
if (hasPrivileges(PrivilegeConstants.VIEW_CONCEPT_CLASSES)) {
results.put("results", populateObjects(getConceptService().getAllDrugs()));
}
return convertToJSON(results);
}
/**
* get users
* @return
*/
private String getUsers() {
SimpleObject results = new SimpleObject();
if (hasPrivileges(PrivilegeConstants.VIEW_USERS)) {
results.put("results", populateObjects(getUserService().getAllUsers()));
}
return convertToJSON(results);
}
/**
* get providers
* @return
*/
private String getProviders() {
SimpleObject results = new SimpleObject();
if (hasPrivileges(PrivilegeConstants.VIEW_PROVIDERS)) {
results.put("results", populateObjects(getProviderService().getAllProviders()));
}
return convertToJSON(results);
}
/**
* get concepts given a foreign key
* @param foreignKey
* @return
*/
private String getConcepts(String foreignKey) {
SimpleObject results = new SimpleObject();
if (hasPrivileges(PrivilegeConstants.VIEW_CONCEPTS)) {
Concept concept = getConceptService().getConcept(Integer.valueOf(foreignKey));
if (concept != null) {
results.put("results", populateObjects(concept.getAnswers()));
}
results.put("foreignKey", foreignKey);
}
return convertToJSON(results);
}
/**
* Retrieves a list of all program workflows.
* @return
*/
private String getProgramWorkflows() {
SimpleObject results = new SimpleObject();
try {
List<String> programWorkflowObjects = new ArrayList<String>();
List<ProgramWorkflow> programWorkflows = new ArrayList<ProgramWorkflow>();
// retrieve all workflows from programs.
for (Program program : getProgramWorkflowService().getAllPrograms()) {
programWorkflows.addAll(program.getAllWorkflows());
}
// retrieve names of program workflows.
for (ProgramWorkflow programWorkflow : programWorkflows) {
programWorkflowObjects.add(programWorkflow.getConcept().getName().getName());
}
results.put("results", programWorkflowObjects);
} catch (Exception ex) {
results.put("error", ex.getMessage());
}
return convertToJSON(results);
}
}