/** * Determine whether a response should be given in JSON or XML format based on the incoming HttpServletRequest's * <code>"_format"</code> parameter and <code>"Accept:"</code> HTTP header. */ public static ResponseEncoding determineResponseEncodingWithDefault(RequestDetails theReq) { ResponseEncoding retVal = determineResponseEncodingNoDefault(theReq, theReq.getServer().getDefaultResponseEncoding()); if (retVal == null) { retVal = new ResponseEncoding(theReq.getServer().getFhirContext(), theReq.getServer().getDefaultResponseEncoding(), null); } return retVal; }
private List<IServerInterceptor> getInterceptors() { if (getServer() == null) { return Collections.emptyList(); } return getServer().getInterceptors(); }
protected boolean isPagingProviderDatabaseBacked(RequestDetails theRequestDetails) { if (theRequestDetails == null || theRequestDetails.getServer() == null) { return false; } return theRequestDetails.getServer().getPagingProvider() instanceof DatabaseBackedPagingProvider; }
public ActionRequestDetails(RequestDetails theRequestDetails, String theResourceType, IIdType theId) { this(theRequestDetails, theRequestDetails.getServer().getFhirContext(), theResourceType, theId); }
ResponseEncoding responseEncoding = RestfulServerUtils.determineResponseEncodingNoDefault(theRequestDetails, theServer.getDefaultResponseEncoding()); if (theServer.getETagSupport() == ETagSupportEnum.ENABLED) { if (fullId != null && fullId.hasVersionIdPart()) { String versionIdPart = fullId.getVersionIdPart(); IBaseReference securityContext = BinaryUtil.getSecurityContext(theServer.getFhirContext(), bin); if (securityContext != null) { String securityContextRef = securityContext.getReferenceElement().getValue(); responseEncoding = new ResponseEncoding(theServer.getFhirContext(), theServer.getDefaultResponseEncoding(), null); if ("Bundle".equals(theServer.getFhirContext().getResourceDefinition(theResource).getName())) { encodingDomainResourceAsText = false; IParser parser = getNewParser(theServer.getFhirContext(), forVersion, theRequestDetails); parser.encodeResourceToWriter(theResource, writer);
private void streamResponseHeaders(RequestDetails theRequestDetails, HttpServletResponse theServletResponse, StringBuilder b) { if (theServletResponse.getHeaderNames().isEmpty() == false) { b.append("<h1>Response Headers</h1>"); b.append("<div class=\"headersDiv\">"); for (String nextHeaderName : theServletResponse.getHeaderNames()) { for (String nextHeaderValue : theServletResponse.getHeaders(nextHeaderName)) { /* * Let's pretend we're returning a FHIR content type even though we're * actually returning an HTML one */ if (nextHeaderName.equalsIgnoreCase(Constants.HEADER_CONTENT_TYPE)) { ResponseEncoding responseEncoding = RestfulServerUtils.determineResponseEncodingNoDefault(theRequestDetails, theRequestDetails.getServer().getDefaultResponseEncoding()); if (responseEncoding != null && isNotBlank(responseEncoding.getResourceContentType())) { nextHeaderValue = responseEncoding.getResourceContentType() + ";charset=utf-8"; } } b.append("<div class=\"headersRow\">"); b.append("<span class=\"headerName\">").append(nextHeaderName).append(": ").append("</span>"); b.append("<span class=\"headerValue\">").append(nextHeaderValue).append("</span>"); b.append("</div>"); } } b.append("</div>"); } }
public static boolean prettyPrintResponse(IRestfulServerDefaults theServer, RequestDetails theRequest) { Map<String, String[]> requestParams = theRequest.getParameters(); String[] pretty = requestParams.get(Constants.PARAM_PRETTY); boolean prettyPrint; if (pretty != null && pretty.length > 0) { prettyPrint = Constants.PARAM_PRETTY_VALUE_TRUE.equals(pretty[0]); } else { prettyPrint = theServer.isDefaultPrettyPrint(); List<String> acceptValues = theRequest.getHeaders(Constants.HEADER_ACCEPT); if (acceptValues != null) { for (String nextAcceptHeaderValue : acceptValues) { if (nextAcceptHeaderValue.contains("pretty=true")) { prettyPrint = true; } } } } return prettyPrint; }
if (theRequest.getServer().getETagSupport() == ETagSupportEnum.ENABLED) { String ifNoneMatch = theRequest.getHeader(Constants.HEADER_IF_NONE_MATCH_LC); if (StringUtils.isNotBlank(ifNoneMatch)) {
public static Set<String> getElementsValueOrNull(RequestDetails theRequest, boolean theExclude) { boolean standardMode = theRequest.getServer().getElementsSupport() != ElementsSupportEnum.EXTENDED; if (theExclude && standardMode) { return null;
private static ResponseEncoding determineRequestEncodingNoDefaultReturnRE(RequestDetails theReq) { ResponseEncoding retVal = null; List<String> headers = theReq.getHeaders(Constants.HEADER_CONTENT_TYPE); if (headers != null) { Iterator<String> acceptValues = headers.iterator(); if (acceptValues != null) { while (acceptValues.hasNext() && retVal == null) { String nextAcceptHeaderValue = acceptValues.next(); if (nextAcceptHeaderValue != null && isNotBlank(nextAcceptHeaderValue)) { for (String nextPart : nextAcceptHeaderValue.split(",")) { int scIdx = nextPart.indexOf(';'); if (scIdx == 0) { continue; } if (scIdx != -1) { nextPart = nextPart.substring(0, scIdx); } nextPart = nextPart.trim(); EncodingEnum encoding = EncodingEnum.forContentType(nextPart); if (encoding != null) { retVal = new ResponseEncoding(theReq.getServer().getFhirContext(), encoding, nextPart); break; } } } } } } return retVal; }
ResponseEncoding responseEncoding = RestfulServerUtils.determineResponseEncodingNoDefault(theRequestDetails, theServer.getDefaultResponseEncoding()); if (theServer.getETagSupport() == ETagSupportEnum.ENABLED) { if (fullId != null && fullId.hasVersionIdPart()) { String versionIdPart = fullId.getVersionIdPart(); IBaseReference securityContext = BinaryUtil.getSecurityContext(theServer.getFhirContext(), bin); if (securityContext != null) { String securityContextRef = securityContext.getReferenceElement().getValue(); responseEncoding = new ResponseEncoding(theServer.getFhirContext(), theServer.getDefaultResponseEncoding(), null); if ("Bundle".equals(theServer.getFhirContext().getResourceDefinition(theResource).getName())) { encodingDomainResourceAsText = false; IParser parser = getNewParser(theServer.getFhirContext(), forVersion, theRequestDetails); parser.encodeResourceToWriter(theResource, writer);
return StringUtils.defaultString(myRequest.getRemoteAddr()); } else if (theKey.equals("responseEncodingNoDefault")) { ResponseEncoding encoding = RestfulServerUtils.determineResponseEncodingNoDefault(myRequestDetails, myRequestDetails.getServer().getDefaultResponseEncoding()); if (encoding != null) { return encoding.getEncoding().name();
public static boolean prettyPrintResponse(IRestfulServerDefaults theServer, RequestDetails theRequest) { Map<String, String[]> requestParams = theRequest.getParameters(); String[] pretty = requestParams.get(Constants.PARAM_PRETTY); boolean prettyPrint; if (pretty != null && pretty.length > 0) { prettyPrint = Constants.PARAM_PRETTY_VALUE_TRUE.equals(pretty[0]); } else { prettyPrint = theServer.isDefaultPrettyPrint(); List<String> acceptValues = theRequest.getHeaders(Constants.HEADER_ACCEPT); if (acceptValues != null) { for (String nextAcceptHeaderValue : acceptValues) { if (nextAcceptHeaderValue.contains("pretty=true")) { prettyPrint = true; } } } } return prettyPrint; }
if (theRequest.getServer().getETagSupport() == ETagSupportEnum.ENABLED) { String ifNoneMatch = theRequest.getHeader(Constants.HEADER_IF_NONE_MATCH_LC); if (StringUtils.isNotBlank(ifNoneMatch)) {
if (theRequestDetails.getServer().getElementsSupport() == ElementsSupportEnum.EXTENDED) { Set<String> elementsExclude = ElementsParameter.getElementsValueOrNull(theRequestDetails, true); if (elementsExclude != null) {
/** * Fail the request by throwing an {@link UnprocessableEntityException} as a result of a validation failure. * Subclasses may change this behaviour by providing alternate behaviour. */ protected void fail(RequestDetails theRequestDetails, ValidationResult theValidationResult) { throw new UnprocessableEntityException(theRequestDetails.getServer().getFhirContext(), theValidationResult.toOperationOutcome()); }
if (parameters.containsKey(Constants.PARAM_FORMAT)) { FhirVersionEnum forVersion = theResource.getStructureFhirVersionEnum(); p = RestfulServerUtils.getNewParser(theRequestDetails.getServer().getFhirContext(), forVersion, theRequestDetails); } else { EncodingEnum defaultResponseEncoding = theRequestDetails.getServer().getDefaultResponseEncoding(); p = defaultResponseEncoding.newParser(theRequestDetails.getServer().getFhirContext()); RestfulServerUtils.configureResponseParser(theRequestDetails, p);
/** * This method may be invoked by user code to notify interceptors that a nested * operation is being invoked which is denoted by this request details. */ public void notifyIncomingRequestPreHandled(RestOperationTypeEnum theOperationType) { RequestDetails requestDetails = getRequestDetails(); if (requestDetails == null) { return; } IRestfulServerDefaults server = requestDetails.getServer(); if (server == null) { return; } List<IServerInterceptor> interceptors = server.getInterceptors(); for (IServerInterceptor next : interceptors) { next.incomingRequestPreHandled(theOperationType, this); } }
private void streamResponseHeaders(RequestDetails theRequestDetails, HttpServletResponse theServletResponse, StringBuilder b) { if (theServletResponse.getHeaderNames().isEmpty() == false) { b.append("<h1>Response Headers</h1>"); b.append("<div class=\"headersDiv\">"); for (String nextHeaderName : theServletResponse.getHeaderNames()) { for (String nextHeaderValue : theServletResponse.getHeaders(nextHeaderName)) { /* * Let's pretend we're returning a FHIR content type even though we're * actually returning an HTML one */ if (nextHeaderName.equalsIgnoreCase(Constants.HEADER_CONTENT_TYPE)) { ResponseEncoding responseEncoding = RestfulServerUtils.determineResponseEncodingNoDefault(theRequestDetails, theRequestDetails.getServer().getDefaultResponseEncoding()); if (responseEncoding != null && isNotBlank(responseEncoding.getResourceContentType())) { nextHeaderValue = responseEncoding.getResourceContentType() + ";charset=utf-8"; } } b.append("<div class=\"headersRow\">"); b.append("<span class=\"headerName\">").append(nextHeaderName).append(": ").append("</span>"); b.append("<span class=\"headerValue\">").append(nextHeaderValue).append("</span>"); b.append("</div>"); } } b.append("</div>"); } }
protected boolean isPagingProviderDatabaseBacked(RequestDetails theRequestDetails) { if (theRequestDetails == null || theRequestDetails.getServer() == null) { return false; } return theRequestDetails.getServer().getPagingProvider() instanceof DatabaseBackedPagingProvider; }