package org.openmrs.module.openhmis.commons.web.controller; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.codehaus.jackson.map.ObjectMapper; import org.openmrs.ConceptAnswer; import org.openmrs.Location; import org.openmrs.Drug; import org.openmrs.User; import org.openmrs.Provider; import org.openmrs.OpenmrsObject; import org.openmrs.api.ConceptService; import org.openmrs.api.LocationService; import org.openmrs.api.UserService; import org.openmrs.api.ProviderService; import org.openmrs.api.ProgramWorkflowService; import org.openmrs.api.context.Context; import org.openmrs.module.openhmis.commons.api.exception.PrivilegeException; import org.openmrs.module.webservices.rest.SimpleObject; import java.util.ArrayList; import java.util.Collection; import java.util.List; /** * Abstract common field attributes functionality */ public abstract class AbstractFieldAttributesController { private static final Log LOG = LogFactory.getLog(AbstractFieldAttributesController.class); private ConceptService conceptService; private LocationService locationService; private UserService userService; private ProviderService providerService; private ProgramWorkflowService programWorkflowService; /** * Retrieve name and id fields of given objects and return a list of simple objects. * @param objects * @param <T> * @return */ protected <T extends OpenmrsObject> List<SimpleObject> populateObjects(Collection<T> objects) { List<SimpleObject> results = new ArrayList<SimpleObject>(); try { for (T t : objects) { SimpleObject resultObject = new SimpleObject(); if (t instanceof ConceptAnswer) { resultObject.put("id", String.valueOf(((ConceptAnswer)t).getAnswerConcept().getConceptId())); resultObject.put("name", ((ConceptAnswer)t).getAnswerConcept().getName().getName()); } else if (t instanceof Location) { resultObject.put("id", String.valueOf(((Location)t).getLocationId())); resultObject.put("name", ((Location)t).getName()); } else if (t instanceof Drug) { resultObject.put("id", String.valueOf(((Drug)t).getDrugId())); resultObject.put("name", ((Drug)t).getName()); } else if (t instanceof User) { resultObject.put("id", String.valueOf(((User)t).getUserId())); resultObject.put("name", ((User)t).getUsername()); } else if (t instanceof Provider) { resultObject.put("id", String.valueOf(((Provider)t).getProviderId())); resultObject.put("name", ((Provider)t).getName()); } results.add(resultObject); } } catch (Exception ex) { LOG.error("error", ex); } return results; } /** * Convert {@link SimpleObject} to JSON * @param object * @return */ protected String convertToJSON(SimpleObject object) { String jsonOutput; try { ObjectMapper mapper = new ObjectMapper(); jsonOutput = mapper.writeValueAsString(object); } catch (Exception ex) { jsonOutput = ex.getMessage(); } return jsonOutput; } /** * Checks if the current user can access given privileges. * @param privileges * @return */ protected boolean hasPrivileges(String privileges) { try { return Context.hasPrivilege(privileges); } catch (PrivilegeException e) { LOG.error("error retrieving privilege ", e); } return false; } protected ConceptService getConceptService() { if (conceptService == null) { conceptService = Context.getConceptService(); } return conceptService; } protected LocationService getLocationService() { if (locationService == null) { locationService = Context.getLocationService(); } return locationService; } protected UserService getUserService() { if (userService == null) { userService = Context.getUserService(); } return userService; } protected ProviderService getProviderService() { if (providerService == null) { providerService = Context.getProviderService(); } return providerService; } protected ProgramWorkflowService getProgramWorkflowService() { if (programWorkflowService == null) { programWorkflowService = Context.getProgramWorkflowService(); } return programWorkflowService; } }