diff --git a/omod-common/src/main/java/org/openmrs/module/webservices/rest/web/RestConstants.java b/omod-common/src/main/java/org/openmrs/module/webservices/rest/web/RestConstants.java index b0ddd0ff5..622729b33 100644 --- a/omod-common/src/main/java/org/openmrs/module/webservices/rest/web/RestConstants.java +++ b/omod-common/src/main/java/org/openmrs/module/webservices/rest/web/RestConstants.java @@ -155,6 +155,11 @@ public class RestConstants { public static String REPRESENTATION_FULL = "full"; public static String REPRESENTATION_CUSTOM_PREFIX = "custom:"; + + /** + * Used in DrugOrder object representations to indicate the specific strength an instance has + */ + public static String PROPERTY_FOR_STRENGTH = "strength"; // The URI prefix through which clients consuming web services will connect // to the web application diff --git a/omod/src/main/java/org/openmrs/module/webservices/rest/web/v1_0/resource/openmrs1_10/DrugOrderSubclassHandler1_10.java b/omod/src/main/java/org/openmrs/module/webservices/rest/web/v1_0/resource/openmrs1_10/DrugOrderSubclassHandler1_10.java index 96945da4e..2d8afa0bd 100644 --- a/omod/src/main/java/org/openmrs/module/webservices/rest/web/v1_0/resource/openmrs1_10/DrugOrderSubclassHandler1_10.java +++ b/omod/src/main/java/org/openmrs/module/webservices/rest/web/v1_0/resource/openmrs1_10/DrugOrderSubclassHandler1_10.java @@ -13,6 +13,7 @@ import org.apache.commons.lang.StringUtils; import org.openmrs.CareSetting; +import org.openmrs.Drug; import org.openmrs.DrugOrder; import org.openmrs.Order; import org.openmrs.OrderType; @@ -202,4 +203,16 @@ public static String getDisplay(DrugOrder delegate) { return ret.toString(); } + + @PropertyGetter("strength") + public String getStrength(DrugOrder delegate) { + StringBuilder ret = new StringBuilder(); + if (delegate.getDrug() != null) { + Drug drug = delegate.getDrug(); + ret.append(drug.getStrength() != null ? drug.getStrength() : "[no strength]"); + } else { + ret.append("[no strength]"); + } + return ret.toString(); + } } diff --git a/omod/src/main/java/org/openmrs/module/webservices/rest/web/v1_0/resource/openmrs1_10/OrderResource1_10.java b/omod/src/main/java/org/openmrs/module/webservices/rest/web/v1_0/resource/openmrs1_10/OrderResource1_10.java index 0fb757c4f..4d4436bf8 100644 --- a/omod/src/main/java/org/openmrs/module/webservices/rest/web/v1_0/resource/openmrs1_10/OrderResource1_10.java +++ b/omod/src/main/java/org/openmrs/module/webservices/rest/web/v1_0/resource/openmrs1_10/OrderResource1_10.java @@ -21,11 +21,13 @@ import org.openmrs.Patient; import org.openmrs.api.context.Context; import org.openmrs.module.webservices.docs.swagger.core.property.EnumProperty; +import org.openmrs.module.webservices.rest.SimpleObject; import org.openmrs.module.webservices.rest.web.ConversionUtil; import org.openmrs.module.webservices.rest.web.RequestContext; import org.openmrs.module.webservices.rest.web.RestConstants; import org.openmrs.module.webservices.rest.web.annotation.Resource; import org.openmrs.module.webservices.rest.web.api.RestService; +import org.openmrs.module.webservices.rest.web.representation.CustomRepresentation; import org.openmrs.module.webservices.rest.web.representation.DefaultRepresentation; import org.openmrs.module.webservices.rest.web.representation.FullRepresentation; import org.openmrs.module.webservices.rest.web.representation.Representation; @@ -36,6 +38,7 @@ import org.openmrs.module.webservices.rest.web.response.ObjectNotFoundException; import org.openmrs.module.webservices.rest.web.response.ResourceDoesNotSupportOperationException; import org.openmrs.module.webservices.rest.web.response.ResponseException; +import org.openmrs.module.webservices.rest.web.response.ConversionException; import org.openmrs.module.webservices.rest.web.v1_0.resource.openmrs1_8.OrderResource1_8; import org.openmrs.module.webservices.rest.web.v1_0.resource.openmrs1_8.PatientResource1_8; @@ -310,6 +313,27 @@ public int compare(Order o1, Order o2) { }); return sortedList; } + + /** + * @see org.openmrs.module.webservices.rest.web.resource.impl.BaseDelegatingResource#asRepresentation(Object, Representation) + */ + @Override + public SimpleObject asRepresentation(Order delegate, Representation representation) throws ConversionException { + DelegatingResourceDescription repDescription; + if (representation instanceof CustomRepresentation) { + repDescription = ConversionUtil.getCustomRepresentationDescription((CustomRepresentation) representation); + return convertDelegateToRepresentation(delegate, repDescription); + } + + SimpleObject simple = super.asRepresentation(delegate, representation); + OrderType drugOrderType = Context.getOrderService().getOrderTypeByName("Drug order"); + if (delegate.getOrderType().equals(drugOrderType)) { + String strength = (String) findAndInvokeSubclassHandlerMethod("drugorder", + "getStrength", delegate); + simple.add(RestConstants.PROPERTY_FOR_STRENGTH, strength); + } + return simple; + } /** * @see org.openmrs.module.webservices.rest.web.resource.impl.BaseDelegatingResource#getResourceVersion() diff --git a/omod/src/test/java/org/openmrs/module/webservices/rest/web/v1_0/controller/openmrs1_10/OrderController1_10Test.java b/omod/src/test/java/org/openmrs/module/webservices/rest/web/v1_0/controller/openmrs1_10/OrderController1_10Test.java index 3ea113175..7f1254cf8 100644 --- a/omod/src/test/java/org/openmrs/module/webservices/rest/web/v1_0/controller/openmrs1_10/OrderController1_10Test.java +++ b/omod/src/test/java/org/openmrs/module/webservices/rest/web/v1_0/controller/openmrs1_10/OrderController1_10Test.java @@ -598,4 +598,16 @@ public void doSearch_shouldReturnExceptionIfNoPatientUuidIsSpecified() throws Ex ); handle(req); } + + @Test + public void doSearch_shouldReturnWithDrugStrengthProperty() throws Exception { + MockHttpServletRequest req = newGetRequest(getURI(), + new Parameter("orderTypes", RestTestConstants1_10.DRUG_ORDER_TYPE_UUID), + new Parameter("patient", PATIENT_UUID) + ); + + SimpleObject orders = deserialize(handle(req)); + List results = orders.get("results"); + assertEquals(PropertyUtils.getProperty(results.get(0), "strength"), "325.0mg"); + } }