private Object returnResponse(
      IRestfulServer<?> theServer,
      RequestDetails theRequest,
      MethodOutcome response,
      IBaseResource originalOutcome,
      IBaseResource resource)
      throws IOException {
    boolean allowPrefer = false;
    int operationStatus = getOperationStatus(response);
    IBaseResource outcome = originalOutcome;

    if (ourOperationsWhichAllowPreferHeader.contains(getRestOperationType())) {
      allowPrefer = true;
    }

    if (resource != null && allowPrefer) {
      String prefer = theRequest.getHeader(Constants.HEADER_PREFER);
      PreferReturnEnum preferReturn = RestfulServerUtils.parsePreferHeader(prefer);
      if (preferReturn != null) {
        if (preferReturn == PreferReturnEnum.REPRESENTATION) {
          outcome = resource;
        }
      }
    }

    for (int i = theServer.getInterceptors().size() - 1; i >= 0; i--) {
      IServerInterceptor next = theServer.getInterceptors().get(i);
      boolean continueProcessing = next.outgoingResponse(theRequest, outcome);
      if (!continueProcessing) {
        return null;
      }
    }

    IRestfulResponse restfulResponse = theRequest.getResponse();

    if (response != null) {
      if (response.getResource() != null) {
        restfulResponse.setOperationResourceLastUpdated(
            RestfulServerUtils.extractLastUpdatedFromResource(response.getResource()));
      }

      IIdType responseId = response.getId();
      if (responseId != null && responseId.getResourceType() == null && responseId.hasIdPart()) {
        responseId = responseId.withResourceType(getResourceName());
      }

      if (responseId != null) {
        String serverBase = theRequest.getFhirServerBase();
        responseId =
            RestfulServerUtils.fullyQualifyResourceIdOrReturnNull(
                theServer, resource, serverBase, responseId);
        restfulResponse.setOperationResourceId(responseId);
      }
    }

    boolean prettyPrint = RestfulServerUtils.prettyPrintResponse(theServer, theRequest);
    Set<SummaryEnum> summaryMode = Collections.emptySet();

    return restfulResponse.streamResponseAsResource(
        outcome, prettyPrint, summaryMode, operationStatus, null, theRequest.isRespondGzip(), true);
    //		return theRequest.getResponse().returnResponse(ParseAction.create(outcome), operationStatus,
    // allowPrefer, response, getResourceName());
  }