Class OpenehrCompositionController

  • All Implemented Interfaces:
    CompositionApiSpecification

    @RestController
    @RequestMapping(path="${openehr-api.context-path:/rest/openehr}/v1/ehr",
                    produces={"application/json","application/xml"})
    public class OpenehrCompositionController
    extends BaseController
    implements CompositionApiSpecification
    Controller for /composition resource as part of the EHR sub-API of the openEHR REST API
    Since:
    1.0.0
    Author:
    Stefan Spiska, Jake Smolka
    • Constructor Detail

      • OpenehrCompositionController

        @Autowired
        public OpenehrCompositionController​(CompositionService compositionService)
    • Method Detail

      • createComposition

        @PostMapping(value="/{ehr_id}/composition",
                     consumes={"application/xml","application/json"})
        @PreAuthorize("checkAbacPre(@openehrCompositionController.COMPOSITION, @ehrService.getSubjectExtRef(#ehrIdString), #composition, #contentType)")
        @ResponseStatus(CREATED)
        public org.springframework.http.ResponseEntity createComposition​(@RequestHeader(value="openEHR-VERSION",required=false)
                                                                         String openehrVersion,
                                                                         @RequestHeader(value="openEHR-AUDIT_DETAILS",required=false)
                                                                         String openehrAuditDetails,
                                                                         @RequestHeader("Content-Type")
                                                                         String contentType,
                                                                         @RequestHeader(value="Accept",required=false)
                                                                         String accept,
                                                                         @RequestHeader(value="Prefer",required=false)
                                                                         String prefer,
                                                                         @PathVariable("ehr_id")
                                                                         String ehrIdString,
                                                                         @RequestBody
                                                                         String composition,
                                                                         javax.servlet.http.HttpServletRequest request)
        Specified by:
        createComposition in interface CompositionApiSpecification
      • updateComposition

        @PutMapping("/{ehr_id}/composition/{versioned_object_uid}")
        @PreAuthorize("checkAbacPre(@openehrCompositionController.COMPOSITION, @ehrService.getSubjectExtRef(#ehrIdString), #composition, #contentType)")
        public org.springframework.http.ResponseEntity updateComposition​(String openehrVersion,
                                                                         @RequestHeader(value="openEHR-AUDIT_DETAILS",required=false)
                                                                         String openehrAuditDetails,
                                                                         @RequestHeader(value="Content-Type",required=false)
                                                                         String contentType,
                                                                         @RequestHeader(value="Accept",required=false)
                                                                         String accept,
                                                                         @RequestHeader(value="Prefer",required=false)
                                                                         String prefer,
                                                                         @RequestHeader("If-Match")
                                                                         String ifMatch,
                                                                         @PathVariable("ehr_id")
                                                                         String ehrIdString,
                                                                         @PathVariable("versioned_object_uid")
                                                                         String versionedObjectUidString,
                                                                         @RequestBody
                                                                         String composition,
                                                                         javax.servlet.http.HttpServletRequest request)
        Specified by:
        updateComposition in interface CompositionApiSpecification
      • deleteComposition

        @DeleteMapping("/{ehr_id}/composition/{preceding_version_uid}")
        @PreAuthorize("checkAbacPre(@openehrCompositionController.COMPOSITION, @ehrService.getSubjectExtRef(#ehrIdString), #precedingVersionUid, null)")
        @ResponseStatus(NO_CONTENT)
        public org.springframework.http.ResponseEntity deleteComposition​(@RequestHeader(value="openEHR-VERSION",required=false)
                                                                         String openehrVersion,
                                                                         @RequestHeader(value="openEHR-AUDIT_DETAILS",required=false)
                                                                         String openehrAuditDetails,
                                                                         @PathVariable("ehr_id")
                                                                         String ehrIdString,
                                                                         @PathVariable("preceding_version_uid")
                                                                         String precedingVersionUid,
                                                                         javax.servlet.http.HttpServletRequest request)
        Specified by:
        deleteComposition in interface CompositionApiSpecification
      • getCompositionByVersionId

        @GetMapping("/{ehr_id}/composition/{version_uid}")
        @PostAuthorize("checkAbacPost(@openehrCompositionController.COMPOSITION, @ehrService.getSubjectExtRef(#ehrIdString), returnObject, #accept)")
        public org.springframework.http.ResponseEntity<org.ehrbase.response.openehr.CompositionResponseData> getCompositionByVersionId​(@RequestHeader(value="Accept",required=false)
                                                                                                                                       String accept,
                                                                                                                                       @PathVariable("ehr_id")
                                                                                                                                       String ehrIdString,
                                                                                                                                       @PathVariable("version_uid")
                                                                                                                                       String versionUid,
                                                                                                                                       @RequestParam(value="version_at_time",required=false)
                                                                                                                                       String versionAtTime,
                                                                                                                                       javax.servlet.http.HttpServletRequest request)
        Acts as overloaded function and calls the overlapping and more specific method getCompositionByTime. Catches both "/{ehr_id}/composition/{version_uid}" and "/{ehr_id}/composition/{versioned_object_uid}" which works because their processing is the same. "{?version_at_time}" is hidden in swagger-ui, it only is here to be piped through.
        Specified by:
        getCompositionByVersionId in interface CompositionApiSpecification
      • getCompositionByTime

        @GetMapping("/{ehr_id}/composition/{versioned_object_uid}{?version_at_time}")
        @PostAuthorize("checkAbacPost(@openehrCompositionController.COMPOSITION, @ehrService.getSubjectExtRef(#ehrIdString), returnObject, #accept)")
        public org.springframework.http.ResponseEntity getCompositionByTime​(@RequestHeader(value="Accept",required=false)
                                                                            String accept,
                                                                            @PathVariable("ehr_id")
                                                                            String ehrIdString,
                                                                            @PathVariable("versioned_object_uid")
                                                                            String versionedObjectUid,
                                                                            @RequestParam(value="version_at_time",required=false)
                                                                            String versionAtTime,
                                                                            javax.servlet.http.HttpServletRequest request)
        This mapping combines both GETs "/{ehr_id}/composition/{version_uid}" (via overlapping path) and "/{ehr_id}/composition/{versioned_object_uid}{?version_at_time}" (here). This is necessary because of the overlapping paths. Both mappings are specified to behave almost the same, so this solution works in this case.
        Specified by:
        getCompositionByTime in interface CompositionApiSpecification