package ca.uhn.example.provider; import ca.uhn.example.model.MyOrganization; import ca.uhn.fhir.model.dstu2.composite.ContactPointDt; import ca.uhn.fhir.model.dstu2.valueset.ContactPointUseEnum; import ca.uhn.fhir.model.primitive.BooleanDt; import ca.uhn.fhir.model.primitive.CodeDt; import ca.uhn.fhir.model.primitive.IdDt; import ca.uhn.fhir.rest.annotation.IdParam; import ca.uhn.fhir.rest.annotation.Read; import ca.uhn.fhir.rest.server.IResourceProvider; import ca.uhn.fhir.rest.server.exceptions.ResourceNotFoundException; /** * This is a simple resource provider which only implements "read/GET" methods, but * which uses a custom subclassed resource definition to add statically bound * extensions. * * See the MyOrganization definition to see how the custom resource * definition works. */ public class OrganizationResourceProvider implements IResourceProvider { /** * The getResourceType method comes from IResourceProvider, and must be overridden to indicate what type of resource this provider supplies. */ @Override public Class<MyOrganization> getResourceType() { return MyOrganization.class; } /** * The "@Read" annotation indicates that this method supports the read operation. It takes one argument, the Resource type being returned. * * @param theId * The read operation takes one parameter, which must be of type IdDt and must be annotated with the "@Read.IdParam" annotation. * @return Returns a resource matching this identifier, or null if none exists. */ @Read() public MyOrganization getResourceById(@IdParam IdDt theId) { /* * We only support one organization, so the follwing * exception causes an HTTP 404 response if the * ID of "1" isn't used. */ if (!"1".equals(theId.getValue())) { throw new ResourceNotFoundException(theId); } MyOrganization retVal = new MyOrganization(); retVal.setId("1"); retVal.addIdentifier().setSystem("urn:example:orgs").setValue("FooOrganization"); retVal.addAddress().addLine("123 Fake Street").setCity("Toronto"); retVal.addTelecom().setUse(ContactPointUseEnum.WORK).setValue("1-888-123-4567"); // Populate the first, primitive extension retVal.setBillingCode(new CodeDt("00102-1")); // The second extension is repeatable and takes a block type MyOrganization.EmergencyContact contact = new MyOrganization.EmergencyContact(); contact.setActive(new BooleanDt(true)); contact.setContact(new ContactPointDt()); retVal.getEmergencyContact().add(contact); return retVal; } }