package org.openmrs.module.webservices.rest.web.resource; import java.util.ArrayList; import java.util.List; import org.openmrs.Cohort; import org.openmrs.Patient; import org.openmrs.annotation.Handler; import org.openmrs.api.context.Context; import org.openmrs.module.webservices.rest.web.RequestContext; import org.openmrs.module.webservices.rest.web.annotation.SubResource; import org.openmrs.module.webservices.rest.web.representation.DefaultRepresentation; import org.openmrs.module.webservices.rest.web.representation.RefRepresentation; import org.openmrs.module.webservices.rest.web.representation.Representation; import org.openmrs.module.webservices.rest.web.resource.impl.DelegatingResourceDescription; import org.openmrs.module.webservices.rest.web.resource.impl.DelegatingSubResource; import org.openmrs.module.webservices.rest.web.response.ResourceDoesNotSupportOperationException; import org.openmrs.module.webservices.rest.web.response.ResponseException; /** * Sub-resource for cohort members */ @SubResource(parent = CohortResource.class, parentProperty = "REMOVE-THIS-PROPERTY", path = "patients") @Handler(supports = Patient.class, order = 0) public class CohortMemberResource extends DelegatingSubResource { @Override public List doGetAll(Cohort parent, RequestContext context) throws ResponseException { List members = new ArrayList(); members.addAll(Context.getPatientSetService().getPatients(parent.getMemberIds())); return members; } @Override public Cohort getParent(Patient instance) { return parent; } @Override public void setParent(Patient instance, Cohort parent) { this.parent = parent; } @Override protected void delete(Patient delegate, String reason, RequestContext context) throws ResponseException { removeMemberFromCohort(delegate); } @Override public Patient getByUniqueId(String uniqueId) { return Context.getPatientService().getPatientByUuid(uniqueId); } @Override public DelegatingResourceDescription getRepresentationDescription(Representation rep) { if (rep instanceof RefRepresentation) { DelegatingResourceDescription description = new DelegatingResourceDescription(); description.addProperty("uuid"); description.addProperty("uri", findMethod("getUri")); description.addProperty("display", findMethod("getDisplayString")); return description; } else if (rep instanceof DefaultRepresentation) { DelegatingResourceDescription description = new DelegatingResourceDescription(); description.addProperty("uuid"); description.addProperty("gender"); description.addProperty("age"); description.addProperty("birthdate"); description.addProperty("birthdateEstimated"); description.addProperty("dead"); description.addProperty("deathDate"); description.addProperty("causeOfDeath", Representation.REF); description.addProperty("preferredName", "personName", Representation.REF); description.addProperty("personAddress", Representation.REF); description.addProperty("activeIdentifiers", Representation.REF); description.addProperty("activeAttributes", Representation.REF); description.addProperty("uri", findMethod("getUri")); return description; } return null; } @Override protected Patient newDelegate() { return new Patient(); } @Override public void purge(Patient delegate, RequestContext context) throws ResponseException { throw new ResourceDoesNotSupportOperationException(); } /** * @should add patient to cohort */ @Override protected Patient save(Patient delegate) { // TODO Auto-generated method stub return null; } /** class CohortMembersHelper { */ private Cohort parent = null; public void addMemberToCohort(Patient patient) { getParent(patient).addMember(patient.getId()); Context.getCohortService().saveCohort(getParent(patient)); } public void removeMemberFromCohort(Patient patient) { getParent(patient).removeMember(patient.getId()); Context.getCohortService().saveCohort(getParent(patient)); } //} }