ca.uhn.fhir.interceptor.api.Pointcut Maven / Gradle / Ivy
/*-
* #%L
* HAPI FHIR - Core Library
* %%
* Copyright (C) 2014 - 2024 Smile CDR, Inc.
* %%
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* #L%
*/
package ca.uhn.fhir.interceptor.api;
import ca.uhn.fhir.model.base.resource.BaseOperationOutcome;
import ca.uhn.fhir.rest.annotation.Read;
import ca.uhn.fhir.rest.annotation.Search;
import ca.uhn.fhir.rest.server.exceptions.AuthenticationException;
import ca.uhn.fhir.rest.server.exceptions.BaseServerResponseException;
import ca.uhn.fhir.validation.ValidationResult;
import jakarta.annotation.Nonnull;
import org.hl7.fhir.instance.model.api.IBaseConformance;
import java.io.Writer;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
/**
* Value for {@link Hook#value()}
*
* Hook pointcuts are divided into several broad categories:
*
* - INTERCEPTOR_xxx: Hooks on the interceptor infrastructure itself
* - CLIENT_xxx: Hooks on the HAPI FHIR Client framework
* - SERVER_xxx: Hooks on the HAPI FHIR Server framework
* - SUBSCRIPTION_xxx: Hooks on the HAPI FHIR Subscription framework
* - STORAGE_xxx: Hooks on the storage engine
* - VALIDATION_xxx: Hooks on the HAPI FHIR Validation framework
* - JPA_PERFTRACE_xxx: Performance tracing hooks on the JPA server
*
*
*/
public enum Pointcut implements IPointcut {
/**
* Interceptor Framework Hook:
* This pointcut will be called once when a given interceptor is registered
*/
INTERCEPTOR_REGISTERED(void.class),
/**
* Client Hook:
* This hook is called before an HTTP client request is sent
*
* Hooks may accept the following parameters:
*
* -
* ca.uhn.fhir.rest.client.api.IHttpRequest - The details of the request
*
* -
* ca.uhn.fhir.rest.client.api.IRestfulClient - The client object making the request
*
*
*
* Hook methods must return void
.
*/
CLIENT_REQUEST(
void.class, "ca.uhn.fhir.rest.client.api.IHttpRequest", "ca.uhn.fhir.rest.client.api.IRestfulClient"),
/**
* Client Hook:
* This hook is called after an HTTP client request has completed, prior to returning
* the results to the calling code. Hook methods may modify the response.
*
* Hooks may accept the following parameters:
*
* -
* ca.uhn.fhir.rest.client.api.IHttpRequest - The details of the request
*
* -
* ca.uhn.fhir.rest.client.api.IHttpResponse - The details of the response
*
* -
* ca.uhn.fhir.rest.client.api.IRestfulClient - The client object making the request
*
* -
* ca.uhn.fhir.rest.client.api.ClientResponseContext - Contains an IHttpRequest, an IHttpResponse, and an IRestfulClient
* and also allows the client to mutate the contained IHttpResponse
*
*
*
* Hook methods must return void
.
*/
CLIENT_RESPONSE(
void.class,
"ca.uhn.fhir.rest.client.api.IHttpRequest",
"ca.uhn.fhir.rest.client.api.IHttpResponse",
"ca.uhn.fhir.rest.client.api.IRestfulClient",
"ca.uhn.fhir.rest.client.api.ClientResponseContext"),
/**
* Server Hook:
* This hook is called when a server CapabilityStatement is generated for returning to a client.
*
* This pointcut will not necessarily be invoked for every client request to the `/metadata` endpoint.
* If caching of the generated CapabilityStatement is enabled, a new CapabilityStatement will be
* generated periodically and this pointcut will be invoked at that time.
*
*
* Hooks may accept the following parameters:
*
* -
* org.hl7.fhir.instance.model.api.IBaseConformance - The
CapabilityStatement
resource that will
* be returned to the client by the server. Interceptors may make changes to this resource. The parameter
* must be of type IBaseConformance
, so it is the responsibility of the interceptor hook method
* code to cast to the appropriate version.
*
* -
* ca.uhn.fhir.rest.api.server.RequestDetails - A bean containing details about the request that is about to
* be processed
*
* -
* ca.uhn.fhir.rest.server.servlet.ServletRequestDetails - A bean containing details about the request that
* is about to be processed. This parameter is identical to the RequestDetails parameter above but will only
* be populated when operating in a RestfulServer implementation. It is provided as a convenience.
*
*
*
* Hook methods may an instance of a new CapabilityStatement
resource which will replace the
* one that was supplied to the interceptor, or void
to use the original one. If the interceptor
* chooses to modify the CapabilityStatement
that was supplied to the interceptor, it is fine
* for your hook method to return void
or null
.
*/
SERVER_CAPABILITY_STATEMENT_GENERATED(
IBaseConformance.class,
"org.hl7.fhir.instance.model.api.IBaseConformance",
"ca.uhn.fhir.rest.api.server.RequestDetails",
"ca.uhn.fhir.rest.server.servlet.ServletRequestDetails"),
/**
* Server Hook:
* This hook is called before any other processing takes place for each incoming request. It may be used to provide
* alternate handling for some requests, or to screen requests before they are handled, etc.
*
* Note that any exceptions thrown by this method will not be trapped by HAPI (they will be passed up to the server)
*
*
* Hooks may accept the following parameters:
*
* -
* jakarta.servlet.http.HttpServletRequest - The servlet request, when running in a servlet environment
*
* -
* jakarta.servlet.http.HttpServletResponse - The servlet response, when running in a servlet environment
*
*
*
* Hook methods may return true
or void
if processing should continue normally.
* This is generally the right thing to do. If your interceptor is providing a response rather than
* letting HAPI handle the response normally, you must return false
. In this case,
* no further processing will occur and no further interceptors will be called.
*/
SERVER_INCOMING_REQUEST_PRE_PROCESSED(
boolean.class, "jakarta.servlet.http.HttpServletRequest", "jakarta.servlet.http.HttpServletResponse"),
/**
* Server Hook:
* This hook is invoked upon any exception being thrown within the server's request processing code. This includes
* any exceptions thrown within resource provider methods (e.g. {@link Search} and {@link Read} methods) as well as
* any runtime exceptions thrown by the server itself. This also includes any {@link AuthenticationException}
* thrown.
*
* Hooks may accept the following parameters:
*
* -
* ca.uhn.fhir.rest.api.server.RequestDetails - A bean containing details about the request that is about to be processed, including details such as the
* resource type and logical ID (if any) and other FHIR-specific aspects of the request which have been
* pulled out of the servlet request. Note that the bean
* properties are not all guaranteed to be populated, depending on how early during processing the
* exception occurred.
*
* -
* ca.uhn.fhir.rest.server.servlet.ServletRequestDetails - A bean containing details about the request that is about to be processed, including details such as the
* resource type and logical ID (if any) and other FHIR-specific aspects of the request which have been
* pulled out of the servlet request. Note that the bean
* properties are not all guaranteed to be populated, depending on how early during processing the
* exception occurred. This parameter is identical to the RequestDetails parameter above but will
* only be populated when operating in a RestfulServer implementation. It is provided as a convenience.
*
* -
* jakarta.servlet.http.HttpServletRequest - The servlet request, when running in a servlet environment
*
* -
* jakarta.servlet.http.HttpServletResponse - The servlet response, when running in a servlet environment
*
* -
* ca.uhn.fhir.rest.server.exceptions.BaseServerResponseException - The exception that was thrown
*
*
*
*
* Implementations of this method may choose to ignore/log/count/etc exceptions, and return true
or
* void
. In
* this case, processing will continue, and the server will automatically generate an {@link BaseOperationOutcome
* OperationOutcome}. Implementations may also choose to provide their own response to the client. In this case, they
* should return false
, to indicate that they have handled the request and processing should stop.
*
*/
SERVER_HANDLE_EXCEPTION(
boolean.class,
"ca.uhn.fhir.rest.api.server.RequestDetails",
"ca.uhn.fhir.rest.server.servlet.ServletRequestDetails",
"jakarta.servlet.http.HttpServletRequest",
"jakarta.servlet.http.HttpServletResponse",
"ca.uhn.fhir.rest.server.exceptions.BaseServerResponseException"),
/**
* Server Hook:
* This method is immediately before the handling method is selected. Interceptors may make changes
* to the request that can influence which handler will ultimately be called.
*
* Hooks may accept the following parameters:
*
* -
* ca.uhn.fhir.rest.api.server.RequestDetails - A bean containing details about the request that is about to be processed, including details such as the
* resource type and logical ID (if any) and other FHIR-specific aspects of the request which have been
* pulled out of the servlet request.
* Note that the bean properties are not all guaranteed to be populated at the time this hook is called.
*
* -
* ca.uhn.fhir.rest.server.servlet.ServletRequestDetails - A bean containing details about the request that is about to be processed, including details such as the
* resource type and logical ID (if any) and other FHIR-specific aspects of the request which have been
* pulled out of the servlet request. This parameter is identical to the RequestDetails parameter above but will
* only be populated when operating in a RestfulServer implementation. It is provided as a convenience.
*
* -
* jakarta.servlet.http.HttpServletRequest - The servlet request, when running in a servlet environment
*
* -
* jakarta.servlet.http.HttpServletResponse - The servlet response, when running in a servlet environment
*
*
*
* Hook methods may return true
or void
if processing should continue normally.
* This is generally the right thing to do.
* If your interceptor is providing an HTTP response rather than letting HAPI handle the response normally, you
* must return false
. In this case, no further processing will occur and no further interceptors
* will be called.
*
*
* Hook methods may also throw {@link AuthenticationException} if they would like. This exception may be thrown
* to indicate that the interceptor has detected an unauthorized access
* attempt. If thrown, processing will stop and an HTTP 401 will be returned to the client.
*
* @since 5.4.0
*/
SERVER_INCOMING_REQUEST_PRE_HANDLER_SELECTED(
boolean.class,
"ca.uhn.fhir.rest.api.server.RequestDetails",
"ca.uhn.fhir.rest.server.servlet.ServletRequestDetails",
"jakarta.servlet.http.HttpServletRequest",
"jakarta.servlet.http.HttpServletResponse"),
/**
* Server Hook:
* This method is called just before the actual implementing server method is invoked.
*
* Hooks may accept the following parameters:
*
* -
* ca.uhn.fhir.rest.api.server.RequestDetails - A bean containing details about the request that is about to be processed, including details such as the
* resource type and logical ID (if any) and other FHIR-specific aspects of the request which have been
* pulled out of the servlet request. Note that the bean
* properties are not all guaranteed to be populated, depending on how early during processing the
* exception occurred.
*
* -
* ca.uhn.fhir.rest.server.servlet.ServletRequestDetails - A bean containing details about the request that is about to be processed, including details such as the
* resource type and logical ID (if any) and other FHIR-specific aspects of the request which have been
* pulled out of the servlet request. This parameter is identical to the RequestDetails parameter above but will
* only be populated when operating in a RestfulServer implementation. It is provided as a convenience.
*
* -
* jakarta.servlet.http.HttpServletRequest - The servlet request, when running in a servlet environment
*
* -
* jakarta.servlet.http.HttpServletResponse - The servlet response, when running in a servlet environment
*
*
*
* Hook methods may return true
or void
if processing should continue normally.
* This is generally the right thing to do.
* If your interceptor is providing an HTTP response rather than letting HAPI handle the response normally, you
* must return false
. In this case, no further processing will occur and no further interceptors
* will be called.
*
*
* Hook methods may also throw {@link AuthenticationException} if they would like. This exception may be thrown
* to indicate that the interceptor has detected an unauthorized access
* attempt. If thrown, processing will stop and an HTTP 401 will be returned to the client.
*/
SERVER_INCOMING_REQUEST_POST_PROCESSED(
boolean.class,
"ca.uhn.fhir.rest.api.server.RequestDetails",
"ca.uhn.fhir.rest.server.servlet.ServletRequestDetails",
"jakarta.servlet.http.HttpServletRequest",
"jakarta.servlet.http.HttpServletResponse"),
/**
* Server Hook:
* This hook is invoked before an incoming request is processed. Note that this method is called
* after the server has begun preparing the response to the incoming client request.
* As such, it is not able to supply a response to the incoming request in the way that
* SERVER_INCOMING_REQUEST_PRE_PROCESSED and
* {@link #SERVER_INCOMING_REQUEST_POST_PROCESSED}
* are.
*
* Hooks may accept the following parameters:
*
* -
* ca.uhn.fhir.rest.api.server.RequestDetails - A bean containing details about the request that is about to be processed, including details such as the
* resource type and logical ID (if any) and other FHIR-specific aspects of the request which have been
* pulled out of the servlet request. Note that the bean
* properties are not all guaranteed to be populated, depending on how early during processing the
* exception occurred.
*
* -
* ca.uhn.fhir.rest.server.servlet.ServletRequestDetails - A bean containing details about the request that is about to be processed, including details such as the
* resource type and logical ID (if any) and other FHIR-specific aspects of the request which have been
* pulled out of the servlet request. This parameter is identical to the RequestDetails parameter above but will
* only be populated when operating in a RestfulServer implementation. It is provided as a convenience.
*
* -
* ca.uhn.fhir.rest.api.RestOperationTypeEnum - The type of operation that the FHIR server has determined that the client is trying to invoke
*
*
*
*
* Hook methods must return void
*
*
* Hook methods method may throw a subclass of {@link BaseServerResponseException}, and processing
* will be aborted with an appropriate error returned to the client.
*
*/
SERVER_INCOMING_REQUEST_PRE_HANDLED(
void.class,
"ca.uhn.fhir.rest.api.server.RequestDetails",
"ca.uhn.fhir.rest.server.servlet.ServletRequestDetails",
"ca.uhn.fhir.rest.api.RestOperationTypeEnum"),
/**
* Server Hook:
* This method is called when a resource provider method is registered and being bound
* by the HAPI FHIR Plain Server / RestfulServer.
*
* Hooks may accept the following parameters:
*
* -
* ca.uhn.fhir.rest.server.method.BaseMethodBinding - The method binding.
*
*
*
* Hook methods may modify the method binding, replace it, or return null
to cancel the binding.
*
*/
SERVER_PROVIDER_METHOD_BOUND(
"ca.uhn.fhir.rest.server.method.BaseMethodBinding", "ca.uhn.fhir.rest.server.method.BaseMethodBinding"),
/**
* Server Hook:
* This method is called upon any exception being thrown within the server's request processing code. This includes
* any exceptions thrown within resource provider methods (e.g. {@link Search} and {@link Read} methods) as well as
* any runtime exceptions thrown by the server itself. This hook method is invoked for each interceptor (until one of them
* returns a non-null
response or the end of the list is reached), after which
* {@link #SERVER_HANDLE_EXCEPTION} is
* called for each interceptor.
*
* This may be used to add an OperationOutcome to a response, or to convert between exception types for any reason.
*
*
* Implementations of this method may choose to ignore/log/count/etc exceptions, and return null
. In
* this case, processing will continue, and the server will automatically generate an {@link BaseOperationOutcome
* OperationOutcome}. Implementations may also choose to provide their own response to the client. In this case, they
* should return a non-null
, to indicate that they have handled the request and processing should stop.
*
*
* Hooks may accept the following parameters:
*
* -
* ca.uhn.fhir.rest.api.server.RequestDetails - A bean containing details about the request that is about to be processed, including details such as the
* resource type and logical ID (if any) and other FHIR-specific aspects of the request which have been
* pulled out of the servlet request. Note that the bean
* properties are not all guaranteed to be populated, depending on how early during processing the
* exception occurred.
*
* -
* ca.uhn.fhir.rest.server.servlet.ServletRequestDetails - A bean containing details about the request that is about to be processed, including details such as the
* resource type and logical ID (if any) and other FHIR-specific aspects of the request which have been
* pulled out of the servlet request. This parameter is identical to the RequestDetails parameter above but will
* only be populated when operating in a RestfulServer implementation. It is provided as a convenience.
*
* -
* java.lang.Throwable - The exception that was thrown. This will often be an instance of
* {@link BaseServerResponseException} but will not necessarily be one (e.g. it could be a
* {@link NullPointerException} in the case of a bug being triggered.
*
* -
* jakarta.servlet.http.HttpServletRequest - The servlet request, when running in a servlet environment
*
* -
* jakarta.servlet.http.HttpServletResponse - The servlet response, when running in a servlet environment
*
*
*
* Hook methods may return a new exception to use for processing, or null
if this interceptor is not trying to
* modify the exception. For example, if this interceptor has nothing to do with exception processing, it
* should always return null
. If this interceptor adds an OperationOutcome to the exception, it
* should return an exception.
*
*/
SERVER_PRE_PROCESS_OUTGOING_EXCEPTION(
BaseServerResponseException.class,
"ca.uhn.fhir.rest.api.server.RequestDetails",
"ca.uhn.fhir.rest.server.servlet.ServletRequestDetails",
"java.lang.Throwable",
"jakarta.servlet.http.HttpServletRequest",
"jakarta.servlet.http.HttpServletResponse"),
/**
* Server Hook:
* This method is called after the server implementation method has been called, but before any attempt
* to stream the response back to the client. Interceptors may examine or modify the response before it
* is returned, or even prevent the response.
*
* Hooks may accept the following parameters:
*
* -
* ca.uhn.fhir.rest.api.server.RequestDetails - A bean containing details about the request that is about to be processed, including details such as the
* resource type and logical ID (if any) and other FHIR-specific aspects of the request which have been
* pulled out of the servlet request.
*
* -
* ca.uhn.fhir.rest.server.servlet.ServletRequestDetails - A bean containing details about the request that is about to be processed, including details such as the
* resource type and logical ID (if any) and other FHIR-specific aspects of the request which have been
* pulled out of the servlet request. This parameter is identical to the RequestDetails parameter above but will
* only be populated when operating in a RestfulServer implementation. It is provided as a convenience.
*
* -
* org.hl7.fhir.instance.model.api.IBaseResource - The resource that will be returned. This parameter may be
null
for some responses.
*
* -
* ca.uhn.fhir.rest.api.server.ResponseDetails - This object contains details about the response, including the contents. Hook methods may modify this object to change or replace the response.
*
* -
* jakarta.servlet.http.HttpServletRequest - The servlet request, when running in a servlet environment
*
* -
* jakarta.servlet.http.HttpServletResponse - The servlet response, when running in a servlet environment
*
*
*
*
* Hook methods may return true
or void
if processing should continue normally.
* This is generally the right thing to do. If your interceptor is providing a response rather than
* letting HAPI handle the response normally, you must return false
. In this case,
* no further processing will occur and no further interceptors will be called.
*
*
* Hook methods may also throw {@link AuthenticationException} to indicate that the interceptor
* has detected an unauthorized access attempt. If thrown, processing will stop and an HTTP 401
* will be returned to the client.
*/
SERVER_OUTGOING_RESPONSE(
boolean.class,
"ca.uhn.fhir.rest.api.server.RequestDetails",
"ca.uhn.fhir.rest.server.servlet.ServletRequestDetails",
"org.hl7.fhir.instance.model.api.IBaseResource",
"ca.uhn.fhir.rest.api.server.ResponseDetails",
"jakarta.servlet.http.HttpServletRequest",
"jakarta.servlet.http.HttpServletResponse"),
/**
* Server Hook:
* This method is called when a stream writer is generated that will be used to stream a non-binary response to
* a client. Hooks may return a wrapped writer which adds additional functionality as needed.
*
*
* Hooks may accept the following parameters:
*
* -
* java.io.Writer - The response writing Writer. Typically a hook will wrap this writer and layer additional functionality
* into the wrapping writer.
*
* -
* ca.uhn.fhir.rest.api.server.RequestDetails - A bean containing details about the request that is about to be processed, including details such as the
* resource type and logical ID (if any) and other FHIR-specific aspects of the request which have been
* pulled out of the servlet request.
*
* -
* ca.uhn.fhir.rest.server.servlet.ServletRequestDetails - A bean containing details about the request that is about to be processed, including details such as the
* resource type and logical ID (if any) and other FHIR-specific aspects of the request which have been
* pulled out of the servlet request. This parameter is identical to the RequestDetails parameter above but will
* only be populated when operating in a RestfulServer implementation. It is provided as a convenience.
*
*
*
*
* Hook methods should return a {@link Writer} instance that will be used to stream the response. Hook methods
* should not throw any exception.
*
*
* @since 5.0.0
*/
SERVER_OUTGOING_WRITER_CREATED(
Writer.class,
"java.io.Writer",
"ca.uhn.fhir.rest.api.server.RequestDetails",
"ca.uhn.fhir.rest.server.servlet.ServletRequestDetails"),
/**
* Server Hook:
* This method is called after the server implementation method has been called, but before any attempt
* to stream the response back to the client, specifically for GraphQL requests (as these do not fit
* cleanly into the model provided by {@link #SERVER_OUTGOING_RESPONSE}).
*
* Hooks may accept the following parameters:
*
* -
* ca.uhn.fhir.rest.api.server.RequestDetails - A bean containing details about the request that is about to be processed, including details such as the
* resource type and logical ID (if any) and other FHIR-specific aspects of the request which have been
* pulled out of the servlet request.
*
* -
* ca.uhn.fhir.rest.server.servlet.ServletRequestDetails - A bean containing details about the request that is about to be processed, including details such as the
* resource type and logical ID (if any) and other FHIR-specific aspects of the request which have been
* pulled out of the servlet request. This parameter is identical to the RequestDetails parameter above but will
* only be populated when operating in a RestfulServer implementation. It is provided as a convenience.
*
* -
* java.lang.String - The GraphQL query
*
* -
* java.lang.String - The GraphQL response
*
* -
* jakarta.servlet.http.HttpServletRequest - The servlet request, when running in a servlet environment
*
* -
* jakarta.servlet.http.HttpServletResponse - The servlet response, when running in a servlet environment
*
*
*
*
* Hook methods may return true
or void
if processing should continue normally.
* This is generally the right thing to do. If your interceptor is providing a response rather than
* letting HAPI handle the response normally, you must return false
. In this case,
* no further processing will occur and no further interceptors will be called.
*
*
* Hook methods may also throw {@link AuthenticationException} to indicate that the interceptor
* has detected an unauthorized access attempt. If thrown, processing will stop and an HTTP 401
* will be returned to the client.
*/
SERVER_OUTGOING_GRAPHQL_RESPONSE(
boolean.class,
"ca.uhn.fhir.rest.api.server.RequestDetails",
"ca.uhn.fhir.rest.server.servlet.ServletRequestDetails",
"java.lang.String",
"java.lang.String",
"jakarta.servlet.http.HttpServletRequest",
"jakarta.servlet.http.HttpServletResponse"),
/**
* Server Hook:
* This method is called when an OperationOutcome is being returned in response to a failure.
* Hook methods may use this hook to modify the OperationOutcome being returned.
*
* Hooks may accept the following parameters:
*
* -
* ca.uhn.fhir.rest.api.server.RequestDetails - A bean containing details about the request that is about to be processed, including details such as the
* resource type and logical ID (if any) and other FHIR-specific aspects of the request which have been
* pulled out of the servlet request. Note that the bean
* properties are not all guaranteed to be populated, depending on how early during processing the
* exception occurred.
*
* -
* ca.uhn.fhir.rest.server.servlet.ServletRequestDetails - A bean containing details about the request that is about to be processed, including details such as the
* resource type and logical ID (if any) and other FHIR-specific aspects of the request which have been
* pulled out of the servlet request. This parameter is identical to the RequestDetails parameter above but will
* only be populated when operating in a RestfulServer implementation. It is provided as a convenience.
*
* -
* org.hl7.fhir.instance.model.api.IBaseOperationOutcome - The OperationOutcome resource that will be
* returned.
*
*
* Hook methods must return void
*
*/
SERVER_OUTGOING_FAILURE_OPERATIONOUTCOME(
void.class,
"ca.uhn.fhir.rest.api.server.RequestDetails",
"ca.uhn.fhir.rest.server.servlet.ServletRequestDetails",
"org.hl7.fhir.instance.model.api.IBaseOperationOutcome"),
/**
* Server Hook:
* This method is called after all processing is completed for a request, but only if the
* request completes normally (i.e. no exception is thrown).
*
* This pointcut is called after the response has completely finished, meaning that the HTTP respsonse to the client
* may or may not have already completely been returned to the client by the time this pointcut is invoked. Use caution
* if you have timing-dependent logic, since there is no guarantee about whether the client will have already moved on
* by the time your method is invoked. If you need a guarantee that your method is invoked before returning to the
* client, consider using {@link #SERVER_OUTGOING_RESPONSE} instead.
*
*
* Hooks may accept the following parameters:
*
* -
* ca.uhn.fhir.rest.api.server.RequestDetails - A bean containing details about the request that is about to be processed, including details such as the
* resource type and logical ID (if any) and other FHIR-specific aspects of the request which have been
* pulled out of the servlet request.
*
* -
* ca.uhn.fhir.rest.server.servlet.ServletRequestDetails - A bean containing details about the request that is about to be processed, including details such as the
* resource type and logical ID (if any) and other FHIR-specific aspects of the request which have been
* pulled out of the request. This will be null if the server is not deployed to a RestfulServer environment.
*
*
*
*
* This method must return void
*
*
* This method should not throw any exceptions. Any exception that is thrown by this
* method will be logged, but otherwise not acted upon (i.e. even if a hook method
* throws an exception, processing will continue and other interceptors will be
* called). Therefore it is considered a bug to throw an exception from hook methods using this
* pointcut.
*
*/
SERVER_PROCESSING_COMPLETED_NORMALLY(
void.class,
new ExceptionHandlingSpec().addLogAndSwallow(Throwable.class),
"ca.uhn.fhir.rest.api.server.RequestDetails",
"ca.uhn.fhir.rest.server.servlet.ServletRequestDetails"),
/**
* Server Hook:
* This method is called after all processing is completed for a request, regardless of whether
* the request completed successfully or not. It is called after {@link #SERVER_PROCESSING_COMPLETED_NORMALLY}
* in the case of successful operations.
*
* Hooks may accept the following parameters:
*
* -
* ca.uhn.fhir.rest.api.server.RequestDetails - A bean containing details about the request that is about to be processed, including details such as the
* resource type and logical ID (if any) and other FHIR-specific aspects of the request which have been
* pulled out of the servlet request.
*
* -
* ca.uhn.fhir.rest.server.servlet.ServletRequestDetails - A bean containing details about the request that is about to be processed, including details such as the
* resource type and logical ID (if any) and other FHIR-specific aspects of the request which have been
* pulled out of the request. This will be null if the server is not deployed to a RestfulServer environment.
*
*
*
*
* This method must return void
*
*
* This method should not throw any exceptions. Any exception that is thrown by this
* method will be logged, but otherwise not acted upon (i.e. even if a hook method
* throws an exception, processing will continue and other interceptors will be
* called). Therefore it is considered a bug to throw an exception from hook methods using this
* pointcut.
*
*/
SERVER_PROCESSING_COMPLETED(
void.class,
new ExceptionHandlingSpec().addLogAndSwallow(Throwable.class),
"ca.uhn.fhir.rest.api.server.RequestDetails",
"ca.uhn.fhir.rest.server.servlet.ServletRequestDetails"),
/**
* Subscription Hook:
* Invoked whenever a persisted resource has been modified and is being submitted to the
* subscription processing pipeline. This method is called before the resource is placed
* on any queues for processing and executes synchronously during the resource modification
* operation itself, so it should return quickly.
*
* Hooks may accept the following parameters:
*
* - ca.uhn.fhir.jpa.subscription.model.ResourceModifiedMessage - Hooks may modify this parameter. This will affect the checking process.
*
*
*
* Hooks may return void
or may return a boolean
. If the method returns
* void
or true
, processing will continue normally. If the method
* returns false
, subscription processing will not proceed for the given resource;
*
*/
SUBSCRIPTION_RESOURCE_MODIFIED(boolean.class, "ca.uhn.fhir.jpa.subscription.model.ResourceModifiedMessage"),
/**
* Subscription Hook:
* Invoked any time that a resource is matched by an individual subscription, and
* is about to be queued for delivery.
*
* Hooks may make changes to the delivery payload, or make changes to the
* canonical subscription such as adding headers, modifying the channel
* endpoint, etc.
*
* Hooks may accept the following parameters:
*
* - ca.uhn.fhir.jpa.subscription.model.CanonicalSubscription
* - ca.uhn.fhir.jpa.subscription.model.ResourceDeliveryMessage
* - ca.uhn.fhir.jpa.searchparam.matcher.InMemoryMatchResult
*
*
* Hooks may return void
or may return a boolean
. If the method returns
* void
or true
, processing will continue normally. If the method
* returns false
, delivery will be aborted.
*
*/
SUBSCRIPTION_RESOURCE_MATCHED(
boolean.class,
"ca.uhn.fhir.jpa.subscription.model.CanonicalSubscription",
"ca.uhn.fhir.jpa.subscription.model.ResourceDeliveryMessage",
"ca.uhn.fhir.jpa.searchparam.matcher.InMemoryMatchResult"),
/**
* Subscription Hook:
* Invoked whenever a persisted resource was checked against all active subscriptions, and did not
* match any.
*
* Hooks may accept the following parameters:
*
* - ca.uhn.fhir.jpa.subscription.model.ResourceModifiedMessage - Hooks should not modify this parameter as changes will not have any effect.
*
*
*
* Hooks should return void
.
*
*/
SUBSCRIPTION_RESOURCE_DID_NOT_MATCH_ANY_SUBSCRIPTIONS(
void.class, "ca.uhn.fhir.jpa.subscription.model.ResourceModifiedMessage"),
/**
* Subscription Hook:
* Invoked immediately before the delivery of a subscription, and right before any channel-specific
* hooks are invoked (e.g. {@link #SUBSCRIPTION_BEFORE_REST_HOOK_DELIVERY}.
*
* Hooks may make changes to the delivery payload, or make changes to the
* canonical subscription such as adding headers, modifying the channel
* endpoint, etc.
*
* Hooks may accept the following parameters:
*
* - ca.uhn.fhir.jpa.subscription.model.CanonicalSubscription
* - ca.uhn.fhir.jpa.subscription.model.ResourceDeliveryMessage
*
*
* Hooks may return void
or may return a boolean
. If the method returns
* void
or true
, processing will continue normally. If the method
* returns false
, processing will be aborted.
*
*/
SUBSCRIPTION_BEFORE_DELIVERY(
boolean.class,
"ca.uhn.fhir.jpa.subscription.model.CanonicalSubscription",
"ca.uhn.fhir.jpa.subscription.model.ResourceDeliveryMessage"),
/**
* Subscription Hook:
* Invoked immediately after the delivery of a subscription, and right before any channel-specific
* hooks are invoked (e.g. {@link #SUBSCRIPTION_AFTER_REST_HOOK_DELIVERY}.
*
* Hooks may accept the following parameters:
*
*
* - ca.uhn.fhir.jpa.subscription.model.CanonicalSubscription
* - ca.uhn.fhir.jpa.subscription.model.ResourceDeliveryMessage
*
*
* Hooks should return void
.
*
*/
SUBSCRIPTION_AFTER_DELIVERY(
void.class,
"ca.uhn.fhir.jpa.subscription.model.CanonicalSubscription",
"ca.uhn.fhir.jpa.subscription.model.ResourceDeliveryMessage"),
/**
* Subscription Hook:
* Invoked immediately after the attempted delivery of a subscription, if the delivery
* failed.
*
* Hooks may accept the following parameters:
*
*
* - java.lang.Exception - The exception that caused the failure. Note this could be an exception thrown by a SUBSCRIPTION_BEFORE_DELIVERY or SUBSCRIPTION_AFTER_DELIVERY interceptor
* - ca.uhn.fhir.jpa.subscription.model.ResourceDeliveryMessage - the message that triggered the exception
* - java.lang.Exception
*
*
* Hooks may return void
or may return a boolean
. If the method returns
* void
or true
, processing will continue normally, meaning that
* an exception will be thrown by the delivery mechanism. This typically means that the
* message will be returned to the processing queue. If the method
* returns false
, processing will be aborted and no further action will be
* taken for the delivery.
*
*/
SUBSCRIPTION_AFTER_DELIVERY_FAILED(
boolean.class, "ca.uhn.fhir.jpa.subscription.model.ResourceDeliveryMessage", "java.lang.Exception"),
/**
* Subscription Hook:
* Invoked immediately after the delivery of a REST HOOK subscription.
*
* When this hook is called, all processing is complete so this hook should not
* make any changes to the parameters.
*
* Hooks may accept the following parameters:
*
* - ca.uhn.fhir.jpa.subscription.model.CanonicalSubscription
* - ca.uhn.fhir.jpa.subscription.model.ResourceDeliveryMessage
*
*
* Hooks should return void
.
*
*/
SUBSCRIPTION_AFTER_REST_HOOK_DELIVERY(
void.class,
"ca.uhn.fhir.jpa.subscription.model.CanonicalSubscription",
"ca.uhn.fhir.jpa.subscription.model.ResourceDeliveryMessage"),
/**
* Subscription Hook:
* Invoked immediately before the delivery of a REST HOOK subscription.
*
* Hooks may make changes to the delivery payload, or make changes to the
* canonical subscription such as adding headers, modifying the channel
* endpoint, etc.
*
* Hooks may accept the following parameters:
*
* - ca.uhn.fhir.jpa.subscription.model.CanonicalSubscription
* - ca.uhn.fhir.jpa.subscription.model.ResourceDeliveryMessage
*
*
* Hooks may return void
or may return a boolean
. If the method returns
* void
or true
, processing will continue normally. If the method
* returns false
, processing will be aborted.
*
*/
SUBSCRIPTION_BEFORE_REST_HOOK_DELIVERY(
boolean.class,
"ca.uhn.fhir.jpa.subscription.model.CanonicalSubscription",
"ca.uhn.fhir.jpa.subscription.model.ResourceDeliveryMessage"),
/**
* Subscription Hook:
* Invoked immediately after the delivery of MESSAGE subscription.
*
* When this hook is called, all processing is complete so this hook should not
* make any changes to the parameters.
*
* Hooks may accept the following parameters:
*
* - ca.uhn.fhir.jpa.subscription.model.CanonicalSubscription
* - ca.uhn.fhir.jpa.subscription.model.ResourceDeliveryMessage
*
*
* Hooks should return void
.
*
*/
SUBSCRIPTION_AFTER_MESSAGE_DELIVERY(
void.class,
"ca.uhn.fhir.jpa.subscription.model.CanonicalSubscription",
"ca.uhn.fhir.jpa.subscription.model.ResourceDeliveryMessage"),
/**
* Subscription Hook:
* Invoked immediately before the delivery of a MESSAGE subscription.
*
* Hooks may make changes to the delivery payload, or make changes to the
* canonical subscription such as adding headers, modifying the channel
* endpoint, etc.
* Furthermore, you may modify the outgoing message wrapper, for example adding headers via ResourceModifiedJsonMessage field.
*
*
* Hooks may accept the following parameters:
*
* - ca.uhn.fhir.jpa.subscription.model.CanonicalSubscription
* - ca.uhn.fhir.jpa.subscription.model.ResourceDeliveryMessage
* - ca.uhn.fhir.jpa.subscription.model.ResourceModifiedJsonMessage
*
*
*
* Hooks may return void
or may return a boolean
. If the method returns
* void
or true
, processing will continue normally. If the method
* returns false
, processing will be aborted.
*
*/
SUBSCRIPTION_BEFORE_MESSAGE_DELIVERY(
boolean.class,
"ca.uhn.fhir.jpa.subscription.model.CanonicalSubscription",
"ca.uhn.fhir.jpa.subscription.model.ResourceDeliveryMessage",
"ca.uhn.fhir.jpa.subscription.model.ResourceModifiedJsonMessage"),
/**
* Subscription Hook:
* Invoked whenever a persisted resource (a resource that has just been stored in the
* database via a create/update/patch/etc.) is about to be checked for whether any subscriptions
* were triggered as a result of the operation.
*
* Hooks may accept the following parameters:
*
* - ca.uhn.fhir.jpa.subscription.model.ResourceModifiedMessage - Hooks may modify this parameter. This will affect the checking process.
*
*
*
* Hooks may return void
or may return a boolean
. If the method returns
* void
or true
, processing will continue normally. If the method
* returns false
, processing will be aborted.
*
*/
SUBSCRIPTION_BEFORE_PERSISTED_RESOURCE_CHECKED(
boolean.class, "ca.uhn.fhir.jpa.subscription.model.ResourceModifiedMessage"),
/**
* Subscription Hook:
* Invoked whenever a persisted resource (a resource that has just been stored in the
* database via a create/update/patch/etc.) has been checked for whether any subscriptions
* were triggered as a result of the operation.
*
* Hooks may accept the following parameters:
*
* - ca.uhn.fhir.jpa.subscription.model.ResourceModifiedMessage - This parameter should not be modified as processing is complete when this hook is invoked.
*
*
*
* Hooks should return void
.
*
*/
SUBSCRIPTION_AFTER_PERSISTED_RESOURCE_CHECKED(
void.class, "ca.uhn.fhir.jpa.subscription.model.ResourceModifiedMessage"),
/**
* Subscription Hook:
* Invoked immediately after an active subscription is "registered". In HAPI FHIR, when
* a subscription
*
* Hooks may make changes to the canonicalized subscription and this will have an effect
* on processing across this server. Note however that timing issues may occur, since the
* subscription is already technically live by the time this hook is called.
*
* Hooks may accept the following parameters:
*
* - ca.uhn.fhir.jpa.subscription.model.CanonicalSubscription
*
*
* Hooks should return void
.
*
*/
SUBSCRIPTION_AFTER_ACTIVE_SUBSCRIPTION_REGISTERED(
void.class, "ca.uhn.fhir.jpa.subscription.model.CanonicalSubscription"),
/**
* Subscription Hook:
* Invoked immediately after an active subscription is "registered". In HAPI FHIR, when
* a subscription
*
* Hooks may make changes to the canonicalized subscription and this will have an effect
* on processing across this server. Note however that timing issues may occur, since the
* subscription is already technically live by the time this hook is called.
*
* No parameters are currently supported.
*
* Hooks should return void
.
*
*/
SUBSCRIPTION_AFTER_ACTIVE_SUBSCRIPTION_UNREGISTERED(void.class),
/**
* Storage Hook:
* Invoked when a resource is being deleted in a cascaded delete. This means that
* some other resource is being deleted, but per use request or other
* policy, the given resource (the one supplied as a parameter to this hook)
* is also being deleted.
*
* Hooks may accept the following parameters:
*
*
* -
* ca.uhn.fhir.rest.api.server.RequestDetails - A bean containing details about the request that is about to be processed, including details such as the
* resource type and logical ID (if any) and other FHIR-specific aspects of the request which have been
* pulled out of the servlet request. Note that the bean
* properties are not all guaranteed to be populated, depending on how early during processing the
* exception occurred. Note that this parameter may be null in contexts where the request is not
* known, such as while processing searches
*
* -
* ca.uhn.fhir.rest.server.servlet.ServletRequestDetails - A bean containing details about the request that is about to be processed, including details such as the
* resource type and logical ID (if any) and other FHIR-specific aspects of the request which have been
* pulled out of the servlet request. This parameter is identical to the RequestDetails parameter above but will
* only be populated when operating in a RestfulServer implementation. It is provided as a convenience.
*
* -
* ca.uhn.fhir.jpa.util.DeleteConflictList - Contains the details about the delete conflicts that are
* being resolved via deletion. The source resource is the resource that will be deleted, and
* is a cascade because the target resource is already being deleted.
*
* -
* org.hl7.fhir.instance.model.api.IBaseResource - The actual resource that is about to be deleted via a cascading delete
*
*
*
* Hooks should return void
. They may choose to throw an exception however, in
* which case the delete should be rolled back.
*
*/
STORAGE_CASCADE_DELETE(
void.class,
"ca.uhn.fhir.rest.api.server.RequestDetails",
"ca.uhn.fhir.rest.server.servlet.ServletRequestDetails",
"ca.uhn.fhir.jpa.api.model.DeleteConflictList",
"org.hl7.fhir.instance.model.api.IBaseResource"),
/**
* Subscription Topic Hook:
* Invoked whenever a persisted resource (a resource that has just been stored in the
* database via a create/update/patch/etc.) is about to be checked for whether any subscription topics
* were triggered as a result of the operation.
*
* Hooks may accept the following parameters:
*
* - ca.uhn.fhir.jpa.subscription.model.ResourceModifiedMessage - Hooks may modify this parameter. This will affect the checking process.
*
*
*
* Hooks may return void
or may return a boolean
. If the method returns
* void
or true
, processing will continue normally. If the method
* returns false
, processing will be aborted.
*
*/
SUBSCRIPTION_TOPIC_BEFORE_PERSISTED_RESOURCE_CHECKED(
boolean.class, "ca.uhn.fhir.jpa.subscription.model.ResourceModifiedMessage"),
/**
* Subscription Topic Hook:
* Invoked whenever a persisted resource (a resource that has just been stored in the
* database via a create/update/patch/etc.) has been checked for whether any subscription topics
* were triggered as a result of the operation.
*
* Hooks may accept the following parameters:
*
* - ca.uhn.fhir.jpa.subscription.model.ResourceModifiedMessage - This parameter should not be modified as processing is complete when this hook is invoked.
*
*
*
* Hooks should return void
.
*
*/
SUBSCRIPTION_TOPIC_AFTER_PERSISTED_RESOURCE_CHECKED(
void.class, "ca.uhn.fhir.jpa.subscription.model.ResourceModifiedMessage"),
/**
* Storage Hook:
* Invoked when a Bulk Export job is being kicked off. Hook methods may modify
* the request, or raise an exception to prevent it from being initiated.
*
* Hooks may accept the following parameters:
*
*
* -
* ca.uhn.fhir.jpa.bulk.export.api.BulkDataExportOptions - The details of the job being kicked off
*
* -
* ca.uhn.fhir.rest.api.server.RequestDetails - A bean containing details about the request that is about to be processed, including details such as the
* resource type and logical ID (if any) and other FHIR-specific aspects of the request which have been
* pulled out of the servlet request. Note that the bean
* properties are not all guaranteed to be populated, depending on how early during processing the
* exception occurred. Note that this parameter may be null in contexts where the request is not
* known, such as while processing searches
*
* -
* ca.uhn.fhir.rest.server.servlet.ServletRequestDetails - A bean containing details about the request that is about to be processed, including details such as the
* resource type and logical ID (if any) and other FHIR-specific aspects of the request which have been
* pulled out of the servlet request. This parameter is identical to the RequestDetails parameter above but will
* only be populated when operating in a RestfulServer implementation. It is provided as a convenience.
*
*
*
* Hooks should return void
, and can throw exceptions.
*
*/
STORAGE_INITIATE_BULK_EXPORT(
void.class,
"ca.uhn.fhir.rest.api.server.bulk.BulkExportJobParameters",
"ca.uhn.fhir.rest.api.server.RequestDetails",
"ca.uhn.fhir.rest.server.servlet.ServletRequestDetails"),
/**
* Storage Hook:
* Invoked when a Bulk Export job is being processed. If any hook method is registered
* for this pointcut, the hook method will be called once for each resource that is
* loaded for inclusion in a bulk export file. Hook methods may modify
* the resource object and this modification will affect the copy that is stored in the
* bulk export data file (but will not affect the original). Hook methods may also
* return false
in order to request that the resource be filtered
* from the export.
*
* Hooks may accept the following parameters:
*
*
* -
* ca.uhn.fhir.rest.api.server.bulk.BulkExportJobParameters - The details of the job being kicked off
*
* -
*org.hl7.fhir.instance.model.api.IBaseResource - The resource that will be included in the file
*
*
*
* Hooks methods may return false
to indicate that the resource should be
* filtered out. Otherwise, hook methods should return true
.
*
*
* @since 6.8.0
*/
STORAGE_BULK_EXPORT_RESOURCE_INCLUSION(
boolean.class,
"ca.uhn.fhir.rest.api.server.bulk.BulkExportJobParameters",
"org.hl7.fhir.instance.model.api.IBaseResource"),
/**
* Storage Hook:
* Invoked when a set of resources are about to be deleted and expunged via url like http://localhost/Patient?active=false&_expunge=true
*
* Hooks may accept the following parameters:
*
*
* -
* ca.uhn.fhir.rest.api.server.RequestDetails - A bean containing details about the request that is about to be processed, including details such as the
* resource type and logical ID (if any) and other FHIR-specific aspects of the request which have been
* pulled out of the servlet request. Note that the bean
* properties are not all guaranteed to be populated, depending on how early during processing the
* exception occurred. Note that this parameter may be null in contexts where the request is not
* known, such as while processing searches
*
* -
* ca.uhn.fhir.rest.server.servlet.ServletRequestDetails - A bean containing details about the request that is about to be processed, including details such as the
* resource type and logical ID (if any) and other FHIR-specific aspects of the request which have been
* pulled out of the servlet request. This parameter is identical to the RequestDetails parameter above but will
* only be populated when operating in a RestfulServer implementation. It is provided as a convenience.
*
* -
* java.lang.String - Contains the url used to delete and expunge the resources
*
*
*
* Hooks should return void
. They may choose to throw an exception however, in
* which case the delete expunge will not occur.
*
*/
STORAGE_PRE_DELETE_EXPUNGE(
void.class,
"ca.uhn.fhir.rest.api.server.RequestDetails",
"ca.uhn.fhir.rest.server.servlet.ServletRequestDetails",
"java.lang.String"),
/**
* Storage Hook:
* Invoked when a batch of resource pids are about to be deleted and expunged via url like http://localhost/Patient?active=false&_expunge=true
*
* Hooks may accept the following parameters:
*
*
* -
* java.lang.String - the name of the resource type being deleted
*
* -
* java.util.List - the list of Long pids of the resources about to be deleted
*
* -
* java.util.concurrent.atomic.AtomicLong - holds a running tally of all entities deleted so far.
* If the pointcut callback deletes any entities, then this parameter should be incremented by the total number
* of additional entities deleted.
*
* -
* ca.uhn.fhir.rest.api.server.RequestDetails - A bean containing details about the request that is about to be processed, including details such as the
* resource type and logical ID (if any) and other FHIR-specific aspects of the request which have been
* pulled out of the servlet request. Note that the bean
* properties are not all guaranteed to be populated, depending on how early during processing the
* exception occurred. Note that this parameter may be null in contexts where the request is not
* known, such as while processing searches
*
* -
* ca.uhn.fhir.rest.server.servlet.ServletRequestDetails - A bean containing details about the request that is about to be processed, including details such as the
* resource type and logical ID (if any) and other FHIR-specific aspects of the request which have been
* pulled out of the servlet request. This parameter is identical to the RequestDetails parameter above but will
* only be populated when operating in a RestfulServer implementation. It is provided as a convenience.
*
* -
* java.lang.String - Contains the url used to delete and expunge the resources
*
*
*
* Hooks should return void
. They may choose to throw an exception however, in
* which case the delete expunge will not occur.
*
*/
STORAGE_PRE_DELETE_EXPUNGE_PID_LIST(
void.class,
"java.lang.String",
"java.util.List",
"java.util.concurrent.atomic.AtomicLong",
"ca.uhn.fhir.rest.api.server.RequestDetails",
"ca.uhn.fhir.rest.server.servlet.ServletRequestDetails"),
/**
* Storage Hook:
* Invoked when one or more resources may be returned to the user, whether as a part of a READ,
* a SEARCH, or even as the response to a CREATE/UPDATE, etc.
*
* This hook is invoked when a resource has been loaded by the storage engine and
* is being returned to the HTTP stack for response. This is not a guarantee that the
* client will ultimately see it, since filters/headers/etc may affect what
* is returned but if a resource is loaded it is likely to be used.
* Note also that caching may affect whether this pointcut is invoked.
*
*
* Hooks will have access to the contents of the resource being returned
* and may choose to make modifications. These changes will be reflected in
* returned resource but have no effect on storage.
*
* Hooks may accept the following parameters:
*
* -
* ca.uhn.fhir.rest.api.server.IPreResourceAccessDetails - Contains details about the
* specific resources being returned.
*
* -
* ca.uhn.fhir.rest.api.server.RequestDetails - A bean containing details about the request that is about to be processed, including details such as the
* resource type and logical ID (if any) and other FHIR-specific aspects of the request which have been
* pulled out of the servlet request. Note that the bean
* properties are not all guaranteed to be populated, depending on how early during processing the
* exception occurred. Note that this parameter may be null in contexts where the request is not
* known, such as while processing searches
*
* -
* ca.uhn.fhir.rest.server.servlet.ServletRequestDetails - A bean containing details about the request that is about to be processed, including details such as the
* resource type and logical ID (if any) and other FHIR-specific aspects of the request which have been
* pulled out of the servlet request. This parameter is identical to the RequestDetails parameter above but will
* only be populated when operating in a RestfulServer implementation. It is provided as a convenience.
*
*
*
* Hooks should return void
.
*
*/
STORAGE_PREACCESS_RESOURCES(
void.class,
"ca.uhn.fhir.rest.api.server.IPreResourceAccessDetails",
"ca.uhn.fhir.rest.api.server.RequestDetails",
"ca.uhn.fhir.rest.server.servlet.ServletRequestDetails"),
/**
* Storage Hook:
* Invoked when the storage engine is about to check for the existence of a pre-cached search
* whose results match the given search parameters.
*
* Hooks may accept the following parameters:
*
*
* -
* ca.uhn.fhir.jpa.searchparam.SearchParameterMap - Contains the details of the search being checked
*
* -
* ca.uhn.fhir.rest.api.server.RequestDetails - A bean containing details about the request that is about to be processed, including details such as the
* resource type and logical ID (if any) and other FHIR-specific aspects of the request which have been
* pulled out of the servlet request. Note that the bean
* properties are not all guaranteed to be populated, depending on how early during processing the
* exception occurred. Note that this parameter may be null in contexts where the request is not
* known, such as while processing searches
*
* -
* ca.uhn.fhir.rest.server.servlet.ServletRequestDetails - A bean containing details about the request that is about to be processed, including details such as the
* resource type and logical ID (if any) and other FHIR-specific aspects of the request which have been
* pulled out of the servlet request. This parameter is identical to the RequestDetails parameter above but will
* only be populated when operating in a RestfulServer implementation. It is provided as a convenience.
*
*
*
* Hooks may return boolean
. If the hook method returns
* false
, the server will not attempt to check for a cached
* search no matter what.
*
*/
STORAGE_PRECHECK_FOR_CACHED_SEARCH(
boolean.class,
"ca.uhn.fhir.jpa.searchparam.SearchParameterMap",
"ca.uhn.fhir.rest.api.server.RequestDetails",
"ca.uhn.fhir.rest.server.servlet.ServletRequestDetails"),
/**
* Storage Hook:
* Invoked when a search is starting, prior to creating a record for the search.
*
* Hooks may accept the following parameters:
*
*
* -
* ca.uhn.fhir.rest.server.util.ICachedSearchDetails - Contains the details of the search that
* is being created and initialized. Interceptors may use this parameter to modify aspects of the search
* before it is stored and executed.
*
* -
* ca.uhn.fhir.rest.api.server.RequestDetails - A bean containing details about the request that is about to be processed, including details such as the
* resource type and logical ID (if any) and other FHIR-specific aspects of the request which have been
* pulled out of the servlet request. Note that the bean
* properties are not all guaranteed to be populated, depending on how early during processing the
* exception occurred. Note that this parameter may be null in contexts where the request is not
* known, such as while processing searches
*
* -
* ca.uhn.fhir.rest.server.servlet.ServletRequestDetails - A bean containing details about the request that is about to be processed, including details such as the
* resource type and logical ID (if any) and other FHIR-specific aspects of the request which have been
* pulled out of the servlet request. This parameter is identical to the RequestDetails parameter above but will
* only be populated when operating in a RestfulServer implementation. It is provided as a convenience.
*
* -
* ca.uhn.fhir.jpa.searchparam.SearchParameterMap - Contains the details of the search being checked. This can be modified.
*
* -
* ca.uhn.fhir.interceptor.model.RequestPartitionId - The partition associated with the request (or {@literal null} if the server is not partitioned)
*
*
*
* Hooks should return void
.
*
*/
STORAGE_PRESEARCH_REGISTERED(
void.class,
"ca.uhn.fhir.rest.server.util.ICachedSearchDetails",
"ca.uhn.fhir.rest.api.server.RequestDetails",
"ca.uhn.fhir.rest.server.servlet.ServletRequestDetails",
"ca.uhn.fhir.jpa.searchparam.SearchParameterMap",
"ca.uhn.fhir.interceptor.model.RequestPartitionId"),
/**
* Storage Hook:
* Invoked when one or more resources may be returned to the user, whether as a part of a READ,
* a SEARCH, or even as the response to a CREATE/UPDATE, etc.
*
* This hook is invoked when a resource has been loaded by the storage engine and
* is being returned to the HTTP stack for response.
* This is not a guarantee that the
* client will ultimately see it, since filters/headers/etc may affect what
* is returned but if a resource is loaded it is likely to be used.
* Note also that caching may affect whether this pointcut is invoked.
*
*
* Hooks will have access to the contents of the resource being returned
* and may choose to make modifications. These changes will be reflected in
* returned resource but have no effect on storage.
*
* Hooks may accept the following parameters:
*
* -
* ca.uhn.fhir.rest.api.server.IPreResourceShowDetails - Contains the resources that
* will be shown to the user. This object may be manipulated in order to modify
* the actual resources being shown to the user (e.g. for masking)
*
* -
* ca.uhn.fhir.rest.api.server.RequestDetails - A bean containing details about the request that is about to be processed, including details such as the
* resource type and logical ID (if any) and other FHIR-specific aspects of the request which have been
* pulled out of the servlet request. Note that the bean
* properties are not all guaranteed to be populated, depending on how early during processing the
* exception occurred. Note that this parameter may be null in contexts where the request is not
* known, such as while processing searches
*
* -
* ca.uhn.fhir.rest.server.servlet.ServletRequestDetails - A bean containing details about the request that is about to be processed, including details such as the
* resource type and logical ID (if any) and other FHIR-specific aspects of the request which have been
* pulled out of the servlet request. This parameter is identical to the RequestDetails parameter above but will
* only be populated when operating in a RestfulServer implementation. It is provided as a convenience.
*
*
*
* Hooks should return void
.
*
*/
STORAGE_PRESHOW_RESOURCES(
void.class,
"ca.uhn.fhir.rest.api.server.IPreResourceShowDetails",
"ca.uhn.fhir.rest.api.server.RequestDetails",
"ca.uhn.fhir.rest.server.servlet.ServletRequestDetails"),
/**
* Storage Hook:
* Invoked before a resource will be created, immediately before the resource
* is persisted to the database.
*
* Hooks will have access to the contents of the resource being created
* and may choose to make modifications to it. These changes will be
* reflected in permanent storage.
*
* Hooks may accept the following parameters:
*
* - org.hl7.fhir.instance.model.api.IBaseResource
* -
* ca.uhn.fhir.rest.api.server.RequestDetails - A bean containing details about the request that is about to be processed, including details such as the
* resource type and logical ID (if any) and other FHIR-specific aspects of the request which have been
* pulled out of the servlet request. Note that the bean
* properties are not all guaranteed to be populated, depending on how early during processing the
* exception occurred.
*
* -
* ca.uhn.fhir.rest.server.servlet.ServletRequestDetails - A bean containing details about the request that is about to be processed, including details such as the
* resource type and logical ID (if any) and other FHIR-specific aspects of the request which have been
* pulled out of the servlet request. This parameter is identical to the RequestDetails parameter above but will
* only be populated when operating in a RestfulServer implementation. It is provided as a convenience.
*
* -
* ca.uhn.fhir.rest.api.server.storage.TransactionDetails - The outer transaction details object (since 5.0.0)
*
*
*
* Hooks should return void
.
*
*/
STORAGE_PRESTORAGE_RESOURCE_CREATED(
void.class,
"org.hl7.fhir.instance.model.api.IBaseResource",
"ca.uhn.fhir.rest.api.server.RequestDetails",
"ca.uhn.fhir.rest.server.servlet.ServletRequestDetails",
"ca.uhn.fhir.rest.api.server.storage.TransactionDetails",
"ca.uhn.fhir.interceptor.model.RequestPartitionId"),
/**
* Storage Hook:
* Invoked before client-assigned id is created.
*
* Hooks will have access to the contents of the resource being created
* so that client-assigned ids can be allowed/denied. These changes will
* be reflected in permanent storage.
*
* Hooks may accept the following parameters:
*
* - org.hl7.fhir.instance.model.api.IBaseResource
* -
* ca.uhn.fhir.rest.api.server.RequestDetails - A bean containing details about the request that is about to be processed, including details such as the
* resource type and logical ID (if any) and other FHIR-specific aspects of the request which have been
* pulled out of the servlet request. Note that the bean
* properties are not all guaranteed to be populated, depending on how early during processing the
* exception occurred.
*
*
*
* Hooks should return void
.
*
*/
STORAGE_PRESTORAGE_CLIENT_ASSIGNED_ID(
void.class, "org.hl7.fhir.instance.model.api.IBaseResource", "ca.uhn.fhir.rest.api.server.RequestDetails"),
/**
* Storage Hook:
* Invoked before a resource will be updated, immediately before the resource
* is persisted to the database.
*
* Hooks will have access to the contents of the resource being updated
* (both the previous and new contents) and may choose to make modifications
* to the new contents of the resource. These changes will be reflected in
* permanent storage.
*
*
* NO-OPS: If the client has submitted an update that does not actually make any changes
* (i.e. the resource they include in the PUT body is identical to the content that
* was already stored) the server may choose to ignore the update and perform
* a "NO-OP". In this case, this pointcut is still invoked, but {@link #STORAGE_PRECOMMIT_RESOURCE_UPDATED}
* will not be. Hook methods for this pointcut may make changes to the new contents of the
* resource being updated, and in this case the NO-OP will be cancelled and
* {@link #STORAGE_PRECOMMIT_RESOURCE_UPDATED} will also be invoked.
*
* Hooks may accept the following parameters:
*
* - org.hl7.fhir.instance.model.api.IBaseResource - The previous contents of the resource being updated
* - org.hl7.fhir.instance.model.api.IBaseResource - The new contents of the resource being updated
* -
* ca.uhn.fhir.rest.api.server.RequestDetails - A bean containing details about the request that is about to be processed, including details such as the
* resource type and logical ID (if any) and other FHIR-specific aspects of the request which have been
* pulled out of the servlet request. Note that the bean
* properties are not all guaranteed to be populated, depending on how early during processing the
* exception occurred.
*
* -
* ca.uhn.fhir.rest.server.servlet.ServletRequestDetails - A bean containing details about the request that is about to be processed, including details such as the
* resource type and logical ID (if any) and other FHIR-specific aspects of the request which have been
* pulled out of the servlet request. This parameter is identical to the RequestDetails parameter above but will
* only be populated when operating in a RestfulServer implementation. It is provided as a convenience.
*
* -
* ca.uhn.fhir.rest.api.server.storage.TransactionDetails - The outer transaction details object (since 5.0.0)
*
*
*
* Hooks should return void
.
*
*/
STORAGE_PRESTORAGE_RESOURCE_UPDATED(
void.class,
"org.hl7.fhir.instance.model.api.IBaseResource",
"org.hl7.fhir.instance.model.api.IBaseResource",
"ca.uhn.fhir.rest.api.server.RequestDetails",
"ca.uhn.fhir.rest.server.servlet.ServletRequestDetails",
"ca.uhn.fhir.rest.api.server.storage.TransactionDetails"),
/**
* Storage Hook:
* Invoked before a resource will be created, immediately before the resource
* is persisted to the database.
*
* Hooks will have access to the contents of the resource being created
* and may choose to make modifications to it. These changes will be
* reflected in permanent storage.
*
* Hooks may accept the following parameters:
*
* - org.hl7.fhir.instance.model.api.IBaseResource - The resource being deleted
* -
* ca.uhn.fhir.rest.api.server.RequestDetails - A bean containing details about the request that is about to be processed, including details such as the
* resource type and logical ID (if any) and other FHIR-specific aspects of the request which have been
* pulled out of the servlet request. Note that the bean
* properties are not all guaranteed to be populated, depending on how early during processing the
* exception occurred.
*
* -
* ca.uhn.fhir.rest.server.servlet.ServletRequestDetails - A bean containing details about the request that is about to be processed, including details such as the
* resource type and logical ID (if any) and other FHIR-specific aspects of the request which have been
* pulled out of the servlet request. This parameter is identical to the RequestDetails parameter above but will
* only be populated when operating in a RestfulServer implementation. It is provided as a convenience.
*
* -
* ca.uhn.fhir.rest.api.server.storage.TransactionDetails - The outer transaction details object (since 5.0.0)
*
*
*
* Hooks should return void
.
*
*/
STORAGE_PRESTORAGE_RESOURCE_DELETED(
void.class,
"org.hl7.fhir.instance.model.api.IBaseResource",
"ca.uhn.fhir.rest.api.server.RequestDetails",
"ca.uhn.fhir.rest.server.servlet.ServletRequestDetails",
"ca.uhn.fhir.rest.api.server.storage.TransactionDetails"),
/**
* Storage Hook:
* Invoked before a resource will be created, immediately before the transaction
* is committed (after all validation and other business rules have successfully
* completed, and any other database activity is complete.
*
* Hooks will have access to the contents of the resource being created
* but should generally not make any
* changes as storage has already occurred. Changes will not be reflected
* in storage, but may be reflected in the HTTP response.
*
* Hooks may accept the following parameters:
*
* - org.hl7.fhir.instance.model.api.IBaseResource
* -
* ca.uhn.fhir.rest.api.server.RequestDetails - A bean containing details about the request that is about to be processed, including details such as the
* resource type and logical ID (if any) and other FHIR-specific aspects of the request which have been
* pulled out of the servlet request. Note that the bean
* properties are not all guaranteed to be populated, depending on how early during processing the
* exception occurred.
*
* -
* ca.uhn.fhir.rest.server.servlet.ServletRequestDetails - A bean containing details about the request that is about to be processed, including details such as the
* resource type and logical ID (if any) and other FHIR-specific aspects of the request which have been
* pulled out of the servlet request. This parameter is identical to the RequestDetails parameter above but will
* only be populated when operating in a RestfulServer implementation. It is provided as a convenience.
*
* -
* ca.uhn.fhir.rest.api.server.storage.TransactionDetails - The outer transaction details object (since 5.0.0)
*
* -
* Boolean - Whether this pointcut invocation was deferred or not(since 5.4.0)
*
* -
* ca.uhn.fhir.rest.api.InterceptorInvocationTimingEnum - The timing at which the invocation of the interceptor took place. Options are ACTIVE and DEFERRED.
*
*
*
* Hooks should return void
.
*
*/
STORAGE_PRECOMMIT_RESOURCE_CREATED(
void.class,
"org.hl7.fhir.instance.model.api.IBaseResource",
"ca.uhn.fhir.rest.api.server.RequestDetails",
"ca.uhn.fhir.rest.server.servlet.ServletRequestDetails",
"ca.uhn.fhir.rest.api.server.storage.TransactionDetails",
"ca.uhn.fhir.rest.api.InterceptorInvocationTimingEnum"),
/**
* Storage Hook:
* Invoked before a resource will be updated, immediately before the transaction
* is committed (after all validation and other business rules have successfully
* completed, and any other database activity is complete.
*
* Hooks will have access to the contents of the resource being updated
* (both the previous and new contents) but should generally not make any
* changes as storage has already occurred. Changes will not be reflected
* in storage, but may be reflected in the HTTP response.
*
*
* NO-OP note: See {@link #STORAGE_PRESTORAGE_RESOURCE_UPDATED} for a note on
* no-op updates when no changes are detected.
*
* Hooks may accept the following parameters:
*
* - org.hl7.fhir.instance.model.api.IBaseResource - The previous contents of the resource
* - org.hl7.fhir.instance.model.api.IBaseResource - The proposed new contents of the resource
* -
* ca.uhn.fhir.rest.api.server.RequestDetails - A bean containing details about the request that is about to be processed, including details such as the
* resource type and logical ID (if any) and other FHIR-specific aspects of the request which have been
* pulled out of the servlet request. Note that the bean
* properties are not all guaranteed to be populated, depending on how early during processing the
* exception occurred.
*
* -
* ca.uhn.fhir.rest.server.servlet.ServletRequestDetails - A bean containing details about the request that is about to be processed, including details such as the
* resource type and logical ID (if any) and other FHIR-specific aspects of the request which have been
* pulled out of the servlet request. This parameter is identical to the RequestDetails parameter above but will
* only be populated when operating in a RestfulServer implementation. It is provided as a convenience.
*
* -
* ca.uhn.fhir.rest.api.server.storage.TransactionDetails - The outer transaction details object (since 5.0.0)
*
* -
* ca.uhn.fhir.rest.api.InterceptorInvocationTimingEnum - The timing at which the invocation of the interceptor took place. Options are ACTIVE and DEFERRED.
*
*
*
* Hooks should return void
.
*
*/
STORAGE_PRECOMMIT_RESOURCE_UPDATED(
void.class,
"org.hl7.fhir.instance.model.api.IBaseResource",
"org.hl7.fhir.instance.model.api.IBaseResource",
"ca.uhn.fhir.rest.api.server.RequestDetails",
"ca.uhn.fhir.rest.server.servlet.ServletRequestDetails",
"ca.uhn.fhir.rest.api.server.storage.TransactionDetails",
"ca.uhn.fhir.rest.api.InterceptorInvocationTimingEnum"),
/**
* Storage Hook:
* Invoked before a resource will be deleted
*
* Hooks will have access to the contents of the resource being deleted
* but should not make any changes as storage has already occurred
*
* Hooks may accept the following parameters:
*
* - org.hl7.fhir.instance.model.api.IBaseResource - The resource being deleted
* -
* ca.uhn.fhir.rest.api.server.RequestDetails - A bean containing details about the request that is about to be processed, including details such as the
* resource type and logical ID (if any) and other FHIR-specific aspects of the request which have been
* pulled out of the servlet request. Note that the bean
* properties are not all guaranteed to be populated, depending on how early during processing the
* exception occurred.
*
* -
* ca.uhn.fhir.rest.server.servlet.ServletRequestDetails - A bean containing details about the request that is about to be processed, including details such as the
* resource type and logical ID (if any) and other FHIR-specific aspects of the request which have been
* pulled out of the servlet request. This parameter is identical to the RequestDetails parameter above but will
* only be populated when operating in a RestfulServer implementation. It is provided as a convenience.
*
* -
* ca.uhn.fhir.rest.api.server.storage.TransactionDetails - The outer transaction details object (since 5.0.0)
*
* -
* ca.uhn.fhir.rest.api.InterceptorInvocationTimingEnum - The timing at which the invocation of the interceptor took place. Options are ACTIVE and DEFERRED.
*
*
*
* Hooks should return void
.
*
*/
STORAGE_PRECOMMIT_RESOURCE_DELETED(
void.class,
"org.hl7.fhir.instance.model.api.IBaseResource",
"ca.uhn.fhir.rest.api.server.RequestDetails",
"ca.uhn.fhir.rest.server.servlet.ServletRequestDetails",
"ca.uhn.fhir.rest.api.server.storage.TransactionDetails",
"ca.uhn.fhir.rest.api.InterceptorInvocationTimingEnum"),
/**
* Storage Hook:
* Invoked when a FHIR transaction bundle is about to begin processing. Hooks may choose to
* modify the bundle, and may affect processing by doing so.
*
* Hooks will have access to the original bundle, as well as all the deferred interceptor broadcasts related to the
* processing of the transaction bundle
*
* Hooks may accept the following parameters:
*
* - org.hl7.fhir.instance.model.api.IBaseResource - The resource being deleted
* -
* ca.uhn.fhir.rest.api.server.RequestDetails - A bean containing details about the request that is about to be processed, including details such as the
* resource type and logical ID (if any) and other FHIR-specific aspects of the request which have been
* pulled out of the servlet request.
*
* -
* ca.uhn.fhir.rest.server.servlet.ServletRequestDetails - A bean containing details about the request that is about to be processed, including details such as the
* resource type and logical ID (if any) and other FHIR-specific aspects of the request which have been
* pulled out of the servlet request. This parameter is identical to the RequestDetails parameter above but will
* only be populated when operating in a RestfulServer implementation. It is provided as a convenience.
*
*
*
* Hooks should return void
.
*
*
* @see #STORAGE_TRANSACTION_PROCESSED
* @since 6.2.0
*/
STORAGE_TRANSACTION_PROCESSING(
void.class,
"org.hl7.fhir.instance.model.api.IBaseBundle",
"ca.uhn.fhir.rest.api.server.RequestDetails",
"ca.uhn.fhir.rest.server.servlet.ServletRequestDetails"),
/**
* Storage Hook:
* Invoked after all entries in a transaction bundle have been executed
*
* Hooks will have access to the original bundle, as well as all the deferred interceptor broadcasts related to the
* processing of the transaction bundle
*
* Hooks may accept the following parameters:
*
* - org.hl7.fhir.instance.model.api.IBaseResource - The resource being deleted
* -
* ca.uhn.fhir.rest.api.server.RequestDetails - A bean containing details about the request that is about to be processed, including details such as the
* resource type and logical ID (if any) and other FHIR-specific aspects of the request which have been
* pulled out of the servlet request.
*
* -
* ca.uhn.fhir.rest.server.servlet.ServletRequestDetails - A bean containing details about the request that is about to be processed, including details such as the
* resource type and logical ID (if any) and other FHIR-specific aspects of the request which have been
* pulled out of the servlet request. This parameter is identical to the RequestDetails parameter above but will
* only be populated when operating in a RestfulServer implementation. It is provided as a convenience.
*
* -
* ca.uhn.fhir.rest.api.server.storage.TransactionDetails - The outer transaction details object (since 5.0.0)
*
* -
* ca.uhn.fhir.rest.api.server.storage.DeferredInterceptorBroadcasts- A collection of pointcut invocations and their parameters which were deferred.
*
*
*
* Hooks should return void
.
*
*
* @see #STORAGE_TRANSACTION_PROCESSING
*/
STORAGE_TRANSACTION_PROCESSED(
void.class,
"org.hl7.fhir.instance.model.api.IBaseBundle",
"ca.uhn.fhir.rest.api.server.storage.DeferredInterceptorBroadcasts",
"ca.uhn.fhir.rest.api.server.RequestDetails",
"ca.uhn.fhir.rest.server.servlet.ServletRequestDetails",
"ca.uhn.fhir.rest.api.server.storage.TransactionDetails"),
/**
* Storage Hook:
* Invoked during a FHIR transaction, immediately before processing all write operations (i.e. immediately
* before a database transaction will be opened)
*
* Hooks may accept the following parameters:
*
*
* -
* ca.uhn.fhir.interceptor.model.TransactionWriteOperationsDetails - Contains details about the transaction that is about to start
*
* -
* ca.uhn.fhir.rest.api.server.storage.TransactionDetails - The outer transaction details object (since 5.0.0)
*
*
*
* Hooks should return void
.
*
*/
STORAGE_TRANSACTION_WRITE_OPERATIONS_PRE(
void.class,
"ca.uhn.fhir.interceptor.model.TransactionWriteOperationsDetails",
"ca.uhn.fhir.rest.api.server.storage.TransactionDetails"),
/**
* Storage Hook:
* Invoked during a FHIR transaction, immediately after processing all write operations (i.e. immediately
* after the transaction has been committed or rolled back). This hook will always be called if
* {@link #STORAGE_TRANSACTION_WRITE_OPERATIONS_PRE} has been called, regardless of whether the operation
* succeeded or failed.
*
* Hooks may accept the following parameters:
*
*
* -
* ca.uhn.fhir.interceptor.model.TransactionWriteOperationsDetails - Contains details about the transaction that is about to start
*
* -
* ca.uhn.fhir.rest.api.server.storage.TransactionDetails - The outer transaction details object (since 5.0.0)
*
*
*
* Hooks should return void
.
*
*/
STORAGE_TRANSACTION_WRITE_OPERATIONS_POST(
void.class,
"ca.uhn.fhir.interceptor.model.TransactionWriteOperationsDetails",
"ca.uhn.fhir.rest.api.server.storage.TransactionDetails"),
/**
* Storage Hook:
* Invoked when a resource delete operation is about to fail due to referential integrity checks. Intended for use with {@literal ca.uhn.fhir.jpa.interceptor.CascadingDeleteInterceptor}.
*
* Hooks will have access to the list of resources that have references to the resource being deleted.
*
* Hooks may accept the following parameters:
*
* - ca.uhn.fhir.jpa.api.model.DeleteConflictList - The list of delete conflicts
* -
* ca.uhn.fhir.rest.api.server.RequestDetails - A bean containing details about the request that is about to be processed, including details such as the
* resource type and logical ID (if any) and other FHIR-specific aspects of the request which have been
* pulled out of the servlet request. Note that the bean
* properties are not all guaranteed to be populated, depending on how early during processing the
* exception occurred.
*
* -
* ca.uhn.fhir.rest.server.servlet.ServletRequestDetails - A bean containing details about the request that is about to be processed, including details such as the
* resource type and logical ID (if any) and other FHIR-specific aspects of the request which have been
* pulled out of the servlet request. This parameter is identical to the RequestDetails parameter above but will
* only be populated when operating in a RestfulServer implementation. It is provided as a convenience.
*
* -
* ca.uhn.fhir.rest.api.server.storage.TransactionDetails - The outer transaction details object (since 5.0.0)
*
*
*
* Hooks should return ca.uhn.fhir.jpa.delete.DeleteConflictOutcome
.
* If the interceptor returns a non-null result, the DeleteConflictOutcome can be
* used to indicate a number of times to retry.
*
*/
STORAGE_PRESTORAGE_DELETE_CONFLICTS(
// Return type
"ca.uhn.fhir.jpa.delete.DeleteConflictOutcome",
// Params
"ca.uhn.fhir.jpa.api.model.DeleteConflictList",
"ca.uhn.fhir.rest.api.server.RequestDetails",
"ca.uhn.fhir.rest.server.servlet.ServletRequestDetails",
"ca.uhn.fhir.rest.api.server.storage.TransactionDetails"),
/**
* Storage Hook:
* Invoked before a resource is about to be expunged via the $expunge
operation.
*
* Hooks will be passed a reference to a counter containing the current number of records that have been deleted.
* If the hook deletes any records, the hook is expected to increment this counter by the number of records deleted.
*
*
* Hooks may accept the following parameters:
*
*
* - java.util.concurrent.atomic.AtomicInteger - The counter holding the number of records deleted.
* - org.hl7.fhir.instance.model.api.IIdType - The ID of the resource that is about to be deleted
* - org.hl7.fhir.instance.model.api.IBaseResource - The resource that is about to be deleted
* -
* ca.uhn.fhir.rest.api.server.RequestDetails - A bean containing details about the request that is about to be processed, including details such as the
* resource type and logical ID (if any) and other FHIR-specific aspects of the request which have been
* pulled out of the servlet request. Note that the bean
* properties are not all guaranteed to be populated, depending on how early during processing the
* exception occurred.
*
* -
* ca.uhn.fhir.rest.server.servlet.ServletRequestDetails - A bean containing details about the request that is about to be processed, including details such as the
* resource type and logical ID (if any) and other FHIR-specific aspects of the request which have been
* pulled out of the servlet request. This parameter is identical to the RequestDetails parameter above but will
* only be populated when operating in a RestfulServer implementation. It is provided as a convenience.
*
*
*
* Hooks should return void.
*
*/
STORAGE_PRESTORAGE_EXPUNGE_RESOURCE(
// Return type
void.class,
// Params
"java.util.concurrent.atomic.AtomicInteger",
"org.hl7.fhir.instance.model.api.IIdType",
"org.hl7.fhir.instance.model.api.IBaseResource",
"ca.uhn.fhir.rest.api.server.RequestDetails",
"ca.uhn.fhir.rest.server.servlet.ServletRequestDetails"),
/**
* Storage Hook:
* Invoked before an $expunge
operation on all data (expungeEverything) is called.
*
* Hooks will be passed a reference to a counter containing the current number of records that have been deleted.
* If the hook deletes any records, the hook is expected to increment this counter by the number of records deleted.
*
* Hooks may accept the following parameters:
*
* - java.util.concurrent.atomic.AtomicInteger - The counter holding the number of records deleted.
* -
* ca.uhn.fhir.rest.api.server.RequestDetails - A bean containing details about the request that is about to be processed, including details such as the
* resource type and logical ID (if any) and other FHIR-specific aspects of the request which have been
* pulled out of the servlet request. Note that the bean
* properties are not all guaranteed to be populated, depending on how early during processing the
* exception occurred.
*
* -
* ca.uhn.fhir.rest.server.servlet.ServletRequestDetails - A bean containing details about the request that is about to be processed, including details such as the
* resource type and logical ID (if any) and other FHIR-specific aspects of the request which have been
* pulled out of the servlet request. This parameter is identical to the RequestDetails parameter above but will
* only be populated when operating in a RestfulServer implementation. It is provided as a convenience.
*
*
*
* Hooks should return void.
*
*/
STORAGE_PRESTORAGE_EXPUNGE_EVERYTHING(
// Return type
void.class,
// Params
"java.util.concurrent.atomic.AtomicInteger",
"ca.uhn.fhir.rest.api.server.RequestDetails",
"ca.uhn.fhir.rest.server.servlet.ServletRequestDetails"),
/**
* Storage Hook:
* Invoked before FHIR create operation to request the identification of the partition ID to be associated
* with the resource being created. This hook will only be called if partitioning is enabled in the JPA
* server.
*
* Hooks may accept the following parameters:
*
*
* -
* org.hl7.fhir.instance.model.api.IBaseResource - The resource that will be created and needs a tenant ID assigned.
*
* -
* ca.uhn.fhir.rest.api.server.RequestDetails - A bean containing details about the request that is about to be processed, including details such as the
* resource type and logical ID (if any) and other FHIR-specific aspects of the request which have been
* pulled out of the servlet request. Note that the bean
* properties are not all guaranteed to be populated, depending on how early during processing the
* exception occurred.
*
* -
* ca.uhn.fhir.rest.server.servlet.ServletRequestDetails - A bean containing details about the request that is about to be processed, including details such as the
* resource type and logical ID (if any) and other FHIR-specific aspects of the request which have been
* pulled out of the servlet request. This parameter is identical to the RequestDetails parameter above but will
* only be populated when operating in a RestfulServer implementation. It is provided as a convenience.
*
*
*
* Hooks must return an instance of ca.uhn.fhir.interceptor.model.RequestPartitionId
.
*
*
* @see #STORAGE_PARTITION_IDENTIFY_ANY For an alternative that is not read/write specific
*/
STORAGE_PARTITION_IDENTIFY_CREATE(
// Return type
"ca.uhn.fhir.interceptor.model.RequestPartitionId",
// Params
"org.hl7.fhir.instance.model.api.IBaseResource",
"ca.uhn.fhir.rest.api.server.RequestDetails",
"ca.uhn.fhir.rest.server.servlet.ServletRequestDetails"),
/**
* Storage Hook:
* Invoked before any FHIR read/access/extended operation (e.g. read/vread, search, history,
* $reindex, etc.) operation to request the identification of the partition ID to be associated with
* the resource(s) being searched for, read, etc. Essentially any operations in the JPA server that are not
* creating a resource will use this pointcut. Creates will use {@link #STORAGE_PARTITION_IDENTIFY_CREATE}.
*
*
* This hook will only be called if
* partitioning is enabled in the JPA server.
*
*
* Hooks may accept the following parameters:
*
*
* -
* ca.uhn.fhir.rest.api.server.RequestDetails - A bean containing details about the request that is about to be processed, including details such as the
* resource type and logical ID (if any) and other FHIR-specific aspects of the request which have been
* pulled out of the servlet request. Note that the bean
* properties are not all guaranteed to be populated, depending on how early during processing the
* exception occurred.
*
* -
* ca.uhn.fhir.rest.server.servlet.ServletRequestDetails - A bean containing details about the request that is about to be processed, including details such as the
* resource type and logical ID (if any) and other FHIR-specific aspects of the request which have been
* pulled out of the servlet request. This parameter is identical to the RequestDetails parameter above but will
* only be populated when operating in a RestfulServer implementation. It is provided as a convenience.
*
* - ca.uhn.fhir.interceptor.model.ReadPartitionIdRequestDetails - Contains details about what is being read
*
*
* Hooks must return an instance of ca.uhn.fhir.interceptor.model.RequestPartitionId
.
*
*
* @see #STORAGE_PARTITION_IDENTIFY_ANY For an alternative that is not read/write specific
*/
STORAGE_PARTITION_IDENTIFY_READ(
// Return type
"ca.uhn.fhir.interceptor.model.RequestPartitionId",
// Params
"ca.uhn.fhir.rest.api.server.RequestDetails",
"ca.uhn.fhir.rest.server.servlet.ServletRequestDetails",
"ca.uhn.fhir.interceptor.model.ReadPartitionIdRequestDetails"),
/**
* Storage Hook:
* Invoked before FHIR operations to request the identification of the partition ID to be associated with the
* request being made.
*
* This hook is an alternative to {@link #STORAGE_PARTITION_IDENTIFY_READ} and {@link #STORAGE_PARTITION_IDENTIFY_CREATE}
* and can be used in cases where a partition interceptor does not need knowledge of the specific resources being
* accessed/read/written in order to determine the appropriate partition.
*
*
* This hook will only be called if
* partitioning is enabled in the JPA server.
*
*
* Hooks may accept the following parameters:
*
*
* -
* ca.uhn.fhir.rest.api.server.RequestDetails - A bean containing details about the request that is about to be processed, including details such as the
* resource type and logical ID (if any) and other FHIR-specific aspects of the request which have been
* pulled out of the servlet request. Note that the bean
* properties are not all guaranteed to be populated, depending on how early during processing the
* exception occurred.
*
* -
* ca.uhn.fhir.rest.server.servlet.ServletRequestDetails - A bean containing details about the request that is about to be processed, including details such as the
* resource type and logical ID (if any) and other FHIR-specific aspects of the request which have been
* pulled out of the servlet request. This parameter is identical to the RequestDetails parameter above but will
* only be populated when operating in a RestfulServer implementation. It is provided as a convenience.
*
*
*
* Hooks must return an instance of ca.uhn.fhir.interceptor.model.RequestPartitionId
.
*
*
* @see #STORAGE_PARTITION_IDENTIFY_READ
* @see #STORAGE_PARTITION_IDENTIFY_CREATE
*/
STORAGE_PARTITION_IDENTIFY_ANY(
// Return type
"ca.uhn.fhir.interceptor.model.RequestPartitionId",
// Params
"ca.uhn.fhir.rest.api.server.RequestDetails",
"ca.uhn.fhir.rest.server.servlet.ServletRequestDetails"),
/**
* Storage Hook:
* Invoked when a partition has been created, typically meaning the $partition-management-create-partition
* operation has been invoked.
*
* This hook will only be called if
* partitioning is enabled in the JPA server.
*
*
* Hooks may accept the following parameters:
*
*
* -
* ca.uhn.fhir.interceptor.model.RequestPartitionId - The partition ID that was selected
*
* -
* ca.uhn.fhir.rest.api.server.RequestDetails - A bean containing details about the request that is about to be processed, including details such as the
* resource type and logical ID (if any) and other FHIR-specific aspects of the request which have been
* pulled out of the servlet request. Note that the bean
* properties are not all guaranteed to be populated, depending on how early during processing the
* exception occurred.
*
* -
* ca.uhn.fhir.rest.server.servlet.ServletRequestDetails - A bean containing details about the request that is about to be processed, including details such as the
* resource type and logical ID (if any) and other FHIR-specific aspects of the request which have been
* pulled out of the servlet request. This parameter is identical to the RequestDetails parameter above but will
* only be populated when operating in a RestfulServer implementation. It is provided as a convenience.
*
*
*
* Hooks must return void.
*
*/
STORAGE_PARTITION_CREATED(
// Return type
void.class,
// Params
"ca.uhn.fhir.interceptor.model.RequestPartitionId",
"ca.uhn.fhir.rest.api.server.RequestDetails",
"ca.uhn.fhir.rest.server.servlet.ServletRequestDetails"),
/**
* Storage Hook:
* Invoked before any partition aware FHIR operation, when the selected partition has been identified (ie. after the
* {@link #STORAGE_PARTITION_IDENTIFY_CREATE} or {@link #STORAGE_PARTITION_IDENTIFY_READ} hook was called. This allows
* a separate hook to register, and potentially make decisions about whether the request should be allowed to proceed.
*
* This hook will only be called if
* partitioning is enabled in the JPA server.
*
*
* Hooks may accept the following parameters:
*
*
* -
* ca.uhn.fhir.interceptor.model.RequestPartitionId - The partition ID that was selected
*
* -
* ca.uhn.fhir.rest.api.server.RequestDetails - A bean containing details about the request that is about to be processed, including details such as the
* resource type and logical ID (if any) and other FHIR-specific aspects of the request which have been
* pulled out of the servlet request. Note that the bean
* properties are not all guaranteed to be populated, depending on how early during processing the
* exception occurred.
*
* -
* ca.uhn.fhir.rest.server.servlet.ServletRequestDetails - A bean containing details about the request that is about to be processed, including details such as the
* resource type and logical ID (if any) and other FHIR-specific aspects of the request which have been
* pulled out of the servlet request. This parameter is identical to the RequestDetails parameter above but will
* only be populated when operating in a RestfulServer implementation. It is provided as a convenience.
*
* -
* ca.uhn.fhir.context.RuntimeResourceDefinition - The resource type being accessed, or {@literal null} if no specific type is associated with the request.
*
*
*
* Hooks must return void.
*
*/
STORAGE_PARTITION_SELECTED(
// Return type
void.class,
// Params
"ca.uhn.fhir.interceptor.model.RequestPartitionId",
"ca.uhn.fhir.rest.api.server.RequestDetails",
"ca.uhn.fhir.rest.server.servlet.ServletRequestDetails",
"ca.uhn.fhir.context.RuntimeResourceDefinition"),
/**
* Storage Hook:
* Invoked when a transaction has been rolled back as a result of a {@link ca.uhn.fhir.rest.server.exceptions.ResourceVersionConflictException},
* meaning that a database constraint has been violated. This pointcut allows an interceptor to specify a resolution strategy
* other than simply returning the error to the client. This interceptor will be fired after the database transaction rollback
* has been completed.
*
* Hooks may accept the following parameters:
*
*
* -
* ca.uhn.fhir.rest.api.server.RequestDetails - A bean containing details about the request that is about to be processed, including details such as the
* resource type and logical ID (if any) and other FHIR-specific aspects of the request which have been
* pulled out of the servlet request. Note that the bean
* properties are not all guaranteed to be populated, depending on how early during processing the
* exception occurred. Note that this parameter may be null in contexts where the request is not
* known, such as while processing searches
*
* -
* ca.uhn.fhir.rest.server.servlet.ServletRequestDetails - A bean containing details about the request that is about to be processed, including details such as the
* resource type and logical ID (if any) and other FHIR-specific aspects of the request which have been
* pulled out of the servlet request. This parameter is identical to the RequestDetails parameter above but will
* only be populated when operating in a RestfulServer implementation. It is provided as a convenience.
*
*
*
* Hooks should return ca.uhn.fhir.jpa.api.model.ResourceVersionConflictResolutionStrategy
. Hooks should not
* throw any exception.
*
*/
STORAGE_VERSION_CONFLICT(
"ca.uhn.fhir.jpa.api.model.ResourceVersionConflictResolutionStrategy",
"ca.uhn.fhir.rest.api.server.RequestDetails",
"ca.uhn.fhir.rest.server.servlet.ServletRequestDetails"),
/**
* Validation Hook:
* This hook is called after validation has completed, regardless of whether the validation was successful or failed.
* Typically this is used to modify validation results.
*
* Note on validation Pointcuts: The HAPI FHIR interceptor framework is a part of the client and server frameworks and
* not a part of the core FhirContext. Therefore this Pointcut is invoked by the
*
*
* Hooks may accept the following parameters:
*
* -
* org.hl7.fhir.instance.model.api.IBaseResource - The resource being validated, if a parsed version is available (null otherwise)
*
* -
* java.lang.String - The resource being validated, if a raw version is available (null otherwise)
*
* -
* ca.uhn.fhir.validation.ValidationResult - The outcome of the validation. Hooks methods should not modify this object, but they can return a new one.
*
*
*
* Hook methods may return an instance of {@link ca.uhn.fhir.validation.ValidationResult} if they wish to override the validation results, or they may return null
or void
otherwise.
*/
VALIDATION_COMPLETED(
ValidationResult.class,
"org.hl7.fhir.instance.model.api.IBaseResource",
"java.lang.String",
"ca.uhn.fhir.validation.ValidationResult"),
/**
* MDM(EMPI) Hook:
* Invoked when a persisted resource (a resource that has just been stored in the
* database via a create/update/patch/etc.) enters the MDM module. The purpose of the pointcut is to permit a pseudo
* modification of the resource elements to influence the MDM linking process. Any modifications to the resource are not persisted.
*
* Hooks may accept the following parameters:
*
* - org.hl7.fhir.instance.model.api.IBaseResource -
*
*
*
* Hooks should return void
.
*
*/
MDM_BEFORE_PERSISTED_RESOURCE_CHECKED(void.class, "org.hl7.fhir.instance.model.api.IBaseResource"),
/**
* MDM(EMPI) Hook:
* Invoked whenever a persisted resource (a resource that has just been stored in the
* database via a create/update/patch/etc.) has been matched against related resources and MDM links have been updated.
*
* Hooks may accept the following parameters:
*
* - ca.uhn.fhir.rest.server.messaging.ResourceOperationMessage - This parameter should not be modified as processing is complete when this hook is invoked.
* - ca.uhn.fhir.rest.server.TransactionLogMessages - This parameter is for informational messages provided by the MDM module during MDM processing.
* - ca.uhn.fhir.mdm.model.mdmevents.MdmLinkEvent - Contains information about the change event, including target and golden resource IDs and the operation type.
*
*
*
* Hooks should return void
.
*
*/
MDM_AFTER_PERSISTED_RESOURCE_CHECKED(
void.class,
"ca.uhn.fhir.rest.server.messaging.ResourceOperationMessage",
"ca.uhn.fhir.rest.server.TransactionLogMessages",
"ca.uhn.fhir.mdm.model.mdmevents.MdmLinkEvent"),
/**
* MDM Create Link
* This hook is invoked after an MDM link is created,
* and changes have been persisted to the database.
*
* Hook may accept the following parameters:
*
*
* -
* ca.uhn.fhir.rest.api.server.RequestDetails - An object containing details about the request that is about to be processed, including details such as the
* resource type and logical ID (if any) and other FHIR-specific aspects of the request which have been
* pulled out of the servlet request.
*
* -
* ca.uhn.fhir.mdm.api.MdmLinkChangeEvent - Contains information about the link event, including target and golden resource IDs and the operation type.
*
*
*
* Hooks should return void
.
*
*/
MDM_POST_CREATE_LINK(
void.class, "ca.uhn.fhir.rest.api.server.RequestDetails", "ca.uhn.fhir.mdm.model.mdmevents.MdmLinkEvent"),
/**
* MDM Update Link
* This hook is invoked after an MDM link is updated,
* and changes have been persisted to the database.
*
* Hook may accept the following parameters:
*
*
* -
* ca.uhn.fhir.rest.api.server.RequestDetails - An object containing details about the request that is about to be processed, including details such as the
* resource type and logical ID (if any) and other FHIR-specific aspects of the request which have been
* pulled out of the servlet request.
*
* -
* ca.uhn.fhir.mdm.api.MdmLinkChangeEvent - Contains information about the link event, including target and golden resource IDs and the operation type.
*
*
*
* Hooks should return void
.
*
*/
MDM_POST_UPDATE_LINK(
void.class, "ca.uhn.fhir.rest.api.server.RequestDetails", "ca.uhn.fhir.mdm.model.mdmevents.MdmLinkEvent"),
/**
* MDM Merge Golden Resources
* This hook is invoked after 2 golden resources have been
* merged together and results persisted.
*
* Hook may accept the following parameters:
*
*
* -
* ca.uhn.fhir.rest.api.server.RequestDetails - An object containing details about the request that is about to be processed, including details such as the
* resource type and logical ID (if any) and other FHIR-specific aspects of the request which have been
* pulled out of the servlet request.
*
* -
* ca.uhn.fhir.mdm.model.mdmevents.MdmMergeEvent - Contains information about the from and to resources.
*
*
*
* Hooks should return void
.
*
*/
MDM_POST_MERGE_GOLDEN_RESOURCES(
void.class, "ca.uhn.fhir.rest.api.server.RequestDetails", "ca.uhn.fhir.mdm.model.mdmevents.MdmMergeEvent"),
/**
* MDM Link History Hook:
* This hook is invoked after link histories are queried,
* but before the results are returned to the caller.
*
* Hook may accept the following parameters:
*
*
* -
* ca.uhn.fhir.rest.api.server.RequestDetails - An object containing details about the request that is about to be processed.
*
* -
* ca.uhn.fhir.mdm.model.mdmevents.MdmHistoryEvent - An MDM History Event containing
* information about the requested golden resource ids and/or source ids input, and
* the returned link histories.
*
*
*/
MDM_POST_LINK_HISTORY(
void.class,
"ca.uhn.fhir.rest.api.server.RequestDetails",
"ca.uhn.fhir.mdm.model.mdmevents.MdmHistoryEvent"),
/**
* MDM Not Duplicate/Unduplicate Hook:
* This hook is invoked after 2 golden resources with an existing link
* of "POSSIBLE_DUPLICATE" get unlinked/unduplicated.
*
* This hook accepts the following parameters:
*
*
* -
* ca.uhn.fhir.rest.api.server.RequestDetails - An object containing details about the request that is about to be processed.
*
* -
* ca.uhn.fhir.mdm.model.mdmevents.MdmLinkEvent - the resulting final link
* between the 2 golden resources; now a NO_MATCH link.
*
*
*/
MDM_POST_NOT_DUPLICATE(
void.class, "ca.uhn.fhir.rest.api.server.RequestDetails", "ca.uhn.fhir.mdm.model.mdmevents.MdmLinkEvent"),
/**
* MDM Clear Hook:
* This hook is invoked when an mdm clear operation is requested.
*
* This hook accepts the following parameters:
*
*
* -
* ca.uhn.fhir.rest.api.server.RequestDetails - An object containing details about the request that is about to be processed.
*
* -
* ca.uhn.fhir.mdm.model.mdmevents.MdmClearEvent - the event containing information on the clear command,
* including the type filter (if any) and the batch size (if any).
*
*
*/
MDM_CLEAR(
void.class, "ca.uhn.fhir.rest.api.server.RequestDetails", "ca.uhn.fhir.mdm.model.mdmevents.MdmClearEvent"),
/**
* MDM Submit Hook:
* This hook is invoked whenever when mdm submit operation is requested.
* MDM submits can be invoked in multiple ways.
* Some of which accept asynchronous calling, and some of which do not.
*
* If the MDM Submit operation is asynchronous
* (typically because the Prefer: respond-async header has been provided)
* this hook will be invoked after the job is submitted, but before it has
* necessarily been executed.
*
*
* If the MDM Submit operation is synchronous,
* this hook will be invoked immediately after the submit operation
* has been executed, but before the call is returned to the caller.
*
*
* -
* On Patient Type. Can be synchronous or asynchronous.
*
* -
* On Practitioner Type. Can be synchronous or asynchronous.
*
* -
* On specific patient instances. Is always synchronous.
*
* -
* On specific practitioner instances. Is always synchronous.
*
* -
* On the server (ie, not on any resource) with or without a resource filter.
* Can be synchronous or asynchronous.
*
*
*
* In all cases, this hook will take the following parameters:
*
*
* -
* ca.uhn.fhir.rest.api.server.RequestDetails - An object containing details about the request that is about to be processed.
*
* -
* ca.uhn.fhir.mdm.model.mdmevents.MdmSubmitEvent - An event with the Mdm Submit information
* (urls specifying paths that will be searched for MDM submit, as well as
* if this was an asynchronous request or not).
*
*
*/
MDM_SUBMIT(
void.class, "ca.uhn.fhir.rest.api.server.RequestDetails", "ca.uhn.fhir.mdm.model.mdmevents.MdmSubmitEvent"),
/**
* JPA Hook:
* This hook is invoked when a cross-partition reference is about to be
* stored in the database.
*
* This is an experimental API - It may change in the future, use with caution.
*
*
* Hooks may accept the following parameters:
*
*
* -
* {@literal ca.uhn.fhir.jpa.searchparam.extractor.CrossPartitionReferenceDetails} - Contains details about the
* cross partition reference.
*
*
*
* Hooks should return void
.
*
*/
JPA_RESOLVE_CROSS_PARTITION_REFERENCE(
"ca.uhn.fhir.jpa.model.cross.IResourceLookup",
"ca.uhn.fhir.jpa.searchparam.extractor.CrossPartitionReferenceDetails"),
/**
* Performance Tracing Hook:
* This hook is invoked when any informational messages generated by the
* SearchCoordinator are created. It is typically used to provide logging
* or capture details related to a specific request.
*
* Note that this is a performance tracing hook. Use with caution in production
* systems, since calling it may (or may not) carry a cost.
*
* Hooks may accept the following parameters:
*
* -
* ca.uhn.fhir.rest.api.server.RequestDetails - A bean containing details about the request that is about to be processed, including details such as the
* resource type and logical ID (if any) and other FHIR-specific aspects of the request which have been
* pulled out of the servlet request. Note that the bean
* properties are not all guaranteed to be populated, depending on how early during processing the
* exception occurred.
*
* -
* ca.uhn.fhir.rest.server.servlet.ServletRequestDetails - A bean containing details about the request that is about to be processed, including details such as the
* resource type and logical ID (if any) and other FHIR-specific aspects of the request which have been
* pulled out of the servlet request. This parameter is identical to the RequestDetails parameter above but will
* only be populated when operating in a RestfulServer implementation. It is provided as a convenience.
*
* -
* ca.uhn.fhir.jpa.model.search.StorageProcessingMessage - Contains the message
*
*
*
* Hooks should return void
.
*
*/
JPA_PERFTRACE_INFO(
void.class,
"ca.uhn.fhir.rest.api.server.RequestDetails",
"ca.uhn.fhir.rest.server.servlet.ServletRequestDetails",
"ca.uhn.fhir.jpa.model.search.StorageProcessingMessage"),
/**
* Performance Tracing Hook:
* This hook is invoked when any warning messages generated by the
* SearchCoordinator are created. It is typically used to provide logging
* or capture details related to a specific request.
*
* Note that this is a performance tracing hook. Use with caution in production
* systems, since calling it may (or may not) carry a cost.
*
* Hooks may accept the following parameters:
*
* -
* ca.uhn.fhir.rest.api.server.RequestDetails - A bean containing details about the request that is about to be processed, including details such as the
* resource type and logical ID (if any) and other FHIR-specific aspects of the request which have been
* pulled out of the servlet request. Note that the bean
* properties are not all guaranteed to be populated, depending on how early during processing the
* exception occurred.
*
* -
* ca.uhn.fhir.rest.server.servlet.ServletRequestDetails - A bean containing details about the request that is about to be processed, including details such as the
* resource type and logical ID (if any) and other FHIR-specific aspects of the request which have been
* pulled out of the servlet request. This parameter is identical to the RequestDetails parameter above but will
* only be populated when operating in a RestfulServer implementation. It is provided as a convenience.
*
* -
* ca.uhn.fhir.jpa.model.search.StorageProcessingMessage - Contains the message
*
*
*
* Hooks should return void
.
*
*/
JPA_PERFTRACE_WARNING(
void.class,
"ca.uhn.fhir.rest.api.server.RequestDetails",
"ca.uhn.fhir.rest.server.servlet.ServletRequestDetails",
"ca.uhn.fhir.jpa.model.search.StorageProcessingMessage"),
/**
* Performance Tracing Hook:
* This hook is invoked when a search has returned the very first result
* from the database. The timing on this call can be a good indicator of how
* performant a query is in general.
*
* Note that this is a performance tracing hook. Use with caution in production
* systems, since calling it may (or may not) carry a cost.
*
* Hooks may accept the following parameters:
*
* -
* ca.uhn.fhir.rest.api.server.RequestDetails - A bean containing details about the request that is about to be processed, including details such as the
* resource type and logical ID (if any) and other FHIR-specific aspects of the request which have been
* pulled out of the servlet request. Note that the bean
* properties are not all guaranteed to be populated, depending on how early during processing the
* exception occurred.
*
* -
* ca.uhn.fhir.rest.server.servlet.ServletRequestDetails - A bean containing details about the request that is about to be processed, including details such as the
* resource type and logical ID (if any) and other FHIR-specific aspects of the request which have been
* pulled out of the servlet request. This parameter is identical to the RequestDetails parameter above but will
* only be populated when operating in a RestfulServer implementation. It is provided as a convenience.
*
* -
* ca.uhn.fhir.jpa.model.search.SearchRuntimeDetails - Contains details about the search being
* performed. Hooks should not modify this object.
*
*
*
* Hooks should return void
.
*
*/
JPA_PERFTRACE_SEARCH_FIRST_RESULT_LOADED(
void.class,
"ca.uhn.fhir.rest.api.server.RequestDetails",
"ca.uhn.fhir.rest.server.servlet.ServletRequestDetails",
"ca.uhn.fhir.jpa.model.search.SearchRuntimeDetails"),
/**
* Performance Tracing Hook:
* This hook is invoked when an individual search query SQL SELECT statement
* has completed and no more results are available from that query. Note that this
* doesn't necessarily mean that no more matching results exist in the database,
* since HAPI FHIR JPA batch loads results in to the query cache in chunks in order
* to provide predicable results without overloading memory or the database.
*
* Note that this is a performance tracing hook. Use with caution in production
* systems, since calling it may (or may not) carry a cost.
*
* Hooks may accept the following parameters:
*
* -
* ca.uhn.fhir.rest.api.server.RequestDetails - A bean containing details about the request that is about to be processed, including details such as the
* resource type and logical ID (if any) and other FHIR-specific aspects of the request which have been
* pulled out of the servlet request. Note that the bean
* properties are not all guaranteed to be populated, depending on how early during processing the
* exception occurred.
*
* -
* ca.uhn.fhir.rest.server.servlet.ServletRequestDetails - A bean containing details about the request that is about to be processed, including details such as the
* resource type and logical ID (if any) and other FHIR-specific aspects of the request which have been
* pulled out of the servlet request. This parameter is identical to the RequestDetails parameter above but will
* only be populated when operating in a RestfulServer implementation. It is provided as a convenience.
*
* -
* ca.uhn.fhir.jpa.model.search.SearchRuntimeDetails - Contains details about the search being
* performed. Hooks should not modify this object.
*
*
*
* Hooks should return void
.
*
*/
JPA_PERFTRACE_SEARCH_SELECT_COMPLETE(
void.class,
"ca.uhn.fhir.rest.api.server.RequestDetails",
"ca.uhn.fhir.rest.server.servlet.ServletRequestDetails",
"ca.uhn.fhir.jpa.model.search.SearchRuntimeDetails"),
/**
* Performance Tracing Hook:
* This hook is invoked when a search has failed for any reason. When this pointcut
* is invoked, the search has completed unsuccessfully and will not be continued.
*
* Note that this is a performance tracing hook. Use with caution in production
* systems, since calling it may (or may not) carry a cost.
*
* Hooks may accept the following parameters:
*
* -
* ca.uhn.fhir.rest.api.server.RequestDetails - A bean containing details about the request that is about to be processed, including details such as the
* resource type and logical ID (if any) and other FHIR-specific aspects of the request which have been
* pulled out of the servlet request. Note that the bean
* properties are not all guaranteed to be populated, depending on how early during processing the
* exception occurred.
*
* -
* ca.uhn.fhir.rest.server.servlet.ServletRequestDetails - A bean containing details about the request that is about to be processed, including details such as the
* resource type and logical ID (if any) and other FHIR-specific aspects of the request which have been
* pulled out of the servlet request. This parameter is identical to the RequestDetails parameter above but will
* only be populated when operating in a RestfulServer implementation. It is provided as a convenience.
*
* -
* ca.uhn.fhir.jpa.model.search.SearchRuntimeDetails - Contains details about the search being
* performed. Hooks should not modify this object.
*
*
*
* Hooks should return void
.
*
*/
JPA_PERFTRACE_SEARCH_FAILED(
void.class,
"ca.uhn.fhir.rest.api.server.RequestDetails",
"ca.uhn.fhir.rest.server.servlet.ServletRequestDetails",
"ca.uhn.fhir.jpa.model.search.SearchRuntimeDetails"),
/**
* Performance Tracing Hook:
* This hook is invoked when a search has completed. When this pointcut
* is invoked, a pass in the Search Coordinator has completed successfully, but
* not all possible resources have been loaded yet so a future paging request
* may trigger a new task that will load further resources.
*
* Note that this is a performance tracing hook. Use with caution in production
* systems, since calling it may (or may not) carry a cost.
*
* Hooks may accept the following parameters:
*
* -
* ca.uhn.fhir.rest.api.server.RequestDetails - A bean containing details about the request that is about to be processed, including details such as the
* resource type and logical ID (if any) and other FHIR-specific aspects of the request which have been
* pulled out of the servlet request. Note that the bean
* properties are not all guaranteed to be populated, depending on how early during processing the
* exception occurred.
*
* -
* ca.uhn.fhir.rest.server.servlet.ServletRequestDetails - A bean containing details about the request that is about to be processed, including details such as the
* resource type and logical ID (if any) and other FHIR-specific aspects of the request which have been
* pulled out of the servlet request. This parameter is identical to the RequestDetails parameter above but will
* only be populated when operating in a RestfulServer implementation. It is provided as a convenience.
*
* -
* ca.uhn.fhir.jpa.model.search.SearchRuntimeDetails - Contains details about the search being
* performed. Hooks should not modify this object.
*
*
*
* Hooks should return void
.
*
*/
JPA_PERFTRACE_SEARCH_PASS_COMPLETE(
void.class,
"ca.uhn.fhir.rest.api.server.RequestDetails",
"ca.uhn.fhir.rest.server.servlet.ServletRequestDetails",
"ca.uhn.fhir.jpa.model.search.SearchRuntimeDetails"),
/**
* Performance Tracing Hook:
* This hook is invoked when a query involving an external index (e.g. Elasticsearch) has completed. When this pointcut
* is invoked, an initial list of resource IDs has been generated which will be used as part of a subsequent database query.
*
* Note that this is a performance tracing hook. Use with caution in production
* systems, since calling it may (or may not) carry a cost.
*
* Hooks may accept the following parameters:
*
* -
* ca.uhn.fhir.rest.api.server.RequestDetails - A bean containing details about the request that is about to be processed, including details such as the
* resource type and logical ID (if any) and other FHIR-specific aspects of the request which have been
* pulled out of the servlet request. Note that the bean
* properties are not all guaranteed to be populated, depending on how early during processing the
* exception occurred.
*
* -
* ca.uhn.fhir.rest.server.servlet.ServletRequestDetails - A bean containing details about the request that is about to be processed, including details such as the
* resource type and logical ID (if any) and other FHIR-specific aspects of the request which have been
* pulled out of the servlet request. This parameter is identical to the RequestDetails parameter above but will
* only be populated when operating in a RestfulServer implementation. It is provided as a convenience.
*
* -
* ca.uhn.fhir.jpa.model.search.SearchRuntimeDetails - Contains details about the search being
* performed. Hooks should not modify this object.
*
*
*
* Hooks should return void
.
*
*/
JPA_PERFTRACE_INDEXSEARCH_QUERY_COMPLETE(
void.class,
"ca.uhn.fhir.rest.api.server.RequestDetails",
"ca.uhn.fhir.rest.server.servlet.ServletRequestDetails",
"ca.uhn.fhir.jpa.model.search.SearchRuntimeDetails"),
/**
* Performance Tracing Hook:
* Invoked when the storage engine is about to reuse the results of
* a previously cached search.
*
* Note that this is a performance tracing hook. Use with caution in production
* systems, since calling it may (or may not) carry a cost.
*
*
* Hooks may accept the following parameters:
*
*
* -
* ca.uhn.fhir.jpa.searchparam.SearchParameterMap - Contains the details of the search being checked
*
* -
* ca.uhn.fhir.rest.api.server.RequestDetails - A bean containing details about the request that is about to be processed, including details such as the
* resource type and logical ID (if any) and other FHIR-specific aspects of the request which have been
* pulled out of the servlet request. Note that the bean
* properties are not all guaranteed to be populated, depending on how early during processing the
* exception occurred. Note that this parameter may be null in contexts where the request is not
* known, such as while processing searches
*
* -
* ca.uhn.fhir.rest.server.servlet.ServletRequestDetails - A bean containing details about the request that is about to be processed, including details such as the
* resource type and logical ID (if any) and other FHIR-specific aspects of the request which have been
* pulled out of the servlet request. This parameter is identical to the RequestDetails parameter above but will
* only be populated when operating in a RestfulServer implementation. It is provided as a convenience.
*
*
*
* Hooks should return void
.
*
*/
JPA_PERFTRACE_SEARCH_REUSING_CACHED(
boolean.class,
"ca.uhn.fhir.jpa.searchparam.SearchParameterMap",
"ca.uhn.fhir.rest.api.server.RequestDetails",
"ca.uhn.fhir.rest.server.servlet.ServletRequestDetails"),
/**
* Performance Tracing Hook:
* This hook is invoked when a search has failed for any reason. When this pointcut
* is invoked, a pass in the Search Coordinator has completed successfully, and all
* possible results have been fetched and loaded into the query cache.
*
* Note that this is a performance tracing hook. Use with caution in production
* systems, since calling it may (or may not) carry a cost.
*
* Hooks may accept the following parameters:
*
* -
* ca.uhn.fhir.rest.api.server.RequestDetails - A bean containing details about the request that is about to be processed, including details such as the
* resource type and logical ID (if any) and other FHIR-specific aspects of the request which have been
* pulled out of the servlet request. Note that the bean
* properties are not all guaranteed to be populated, depending on how early during processing the
* exception occurred.
*
* -
* ca.uhn.fhir.rest.server.servlet.ServletRequestDetails - A bean containing details about the request that is about to be processed, including details such as the
* resource type and logical ID (if any) and other FHIR-specific aspects of the request which have been
* pulled out of the servlet request. This parameter is identical to the RequestDetails parameter above but will
* only be populated when operating in a RestfulServer implementation. It is provided as a convenience.
*
* -
* ca.uhn.fhir.jpa.model.search.SearchRuntimeDetails - Contains details about the search being
* performed. Hooks should not modify this object.
*
*
*
* Hooks should return void
.
*
*/
JPA_PERFTRACE_SEARCH_COMPLETE(
void.class,
"ca.uhn.fhir.rest.api.server.RequestDetails",
"ca.uhn.fhir.rest.server.servlet.ServletRequestDetails",
"ca.uhn.fhir.jpa.model.search.SearchRuntimeDetails"),
/**
* Performance Tracing Hook:
*
* This hook is invoked when a search has found an individual ID.
*
*
* THIS IS AN EXPERIMENTAL HOOK AND MAY BE REMOVED OR CHANGED WITHOUT WARNING.
*
*
* Note that this is a performance tracing hook. Use with caution in production
* systems, since calling it may (or may not) carry a cost.
*
*
* Hooks may accept the following parameters:
*
*
* -
* java.lang.Integer - The query ID
*
* -
* java.lang.Object - The ID
*
*
*
* Hooks should return void
.
*
*/
JPA_PERFTRACE_SEARCH_FOUND_ID(void.class, "java.lang.Integer", "java.lang.Object"),
/**
* Performance Tracing Hook:
* This hook is invoked when a query has executed, and includes the raw SQL
* statements that were executed against the database.
*
* Note that this is a performance tracing hook. Use with caution in production
* systems, since calling it may (or may not) carry a cost.
*
*
* Hooks may accept the following parameters:
*
*
* -
* ca.uhn.fhir.rest.api.server.RequestDetails - A bean containing details about the request that is about to be processed, including details such as the
* resource type and logical ID (if any) and other FHIR-specific aspects of the request which have been
* pulled out of the servlet request. Note that the bean
* properties are not all guaranteed to be populated, depending on how early during processing the
* exception occurred.
*
* -
* ca.uhn.fhir.rest.server.servlet.ServletRequestDetails - A bean containing details about the request that is about to be processed, including details such as the
* resource type and logical ID (if any) and other FHIR-specific aspects of the request which have been
* pulled out of the servlet request. This parameter is identical to the RequestDetails parameter above but will
* only be populated when operating in a RestfulServer implementation. It is provided as a convenience.
*
* -
* ca.uhn.fhir.jpa.util.SqlQueryList - Contains details about the raw SQL queries.
*
*
*
* Hooks should return void
.
*
*/
JPA_PERFTRACE_RAW_SQL(
void.class,
"ca.uhn.fhir.rest.api.server.RequestDetails",
"ca.uhn.fhir.rest.server.servlet.ServletRequestDetails",
"ca.uhn.fhir.jpa.util.SqlQueryList"),
/**
* Binary Blob Prefix Assigning Hook:
*
* Immediately before a binary blob is stored to its eventual data sink, this hook is called.
* This hook allows implementers to provide a prefix to the binary blob's ID.
* This is helpful in cases where you want to identify this blob for later retrieval outside of HAPI-FHIR. Note that allowable characters will depend on the specific storage sink being used.
*
* -
* ca.uhn.fhir.rest.api.server.RequestDetails - A bean containing details about the request that is about to be processed, including details such as the
* resource type and logical ID (if any) and other FHIR-specific aspects of the request which have been
* pulled out of the servlet request. Note that the bean
* properties are not all guaranteed to be populated.
*
* -
* org.hl7.fhir.instance.model.api.IBaseBinary - The binary resource that is about to be stored.
*
*
*
* Hooks should return String
, which represents the full prefix to be applied to the blob.
*
*/
STORAGE_BINARY_ASSIGN_BLOB_ID_PREFIX(
String.class,
"ca.uhn.fhir.rest.api.server.RequestDetails",
"org.hl7.fhir.instance.model.api.IBaseResource"),
/**
* Storage Hook:
* Invoked before a batch job is persisted to the database.
*
* Hooks will have access to the content of the job being created
* and may choose to make modifications to it. These changes will be
* reflected in permanent storage.
*
* Hooks may accept the following parameters:
*
* -
* ca.uhn.fhir.batch2.model.JobInstance
*
* -
* ca.uhn.fhir.rest.api.server.RequestDetails - A bean containing details about the request that lead to the creation
* of the jobInstance.
*
*
*
* Hooks should return void
.
*
*/
STORAGE_PRESTORAGE_BATCH_JOB_CREATE(
void.class, "ca.uhn.fhir.batch2.model.JobInstance", "ca.uhn.fhir.rest.api.server.RequestDetails"),
/**
* This pointcut is used only for unit tests. Do not use in production code as it may be changed or
* removed at any time.
*/
TEST_RB(
boolean.class,
new ExceptionHandlingSpec().addLogAndSwallow(IllegalStateException.class),
String.class.getName(),
String.class.getName()),
/**
* This pointcut is used only for unit tests. Do not use in production code as it may be changed or
* removed at any time.
*/
TEST_RO(BaseServerResponseException.class, String.class.getName(), String.class.getName());
private final List myParameterTypes;
private final Class> myReturnType;
private final ExceptionHandlingSpec myExceptionHandlingSpec;
Pointcut(@Nonnull String theReturnType, String... theParameterTypes) {
this(toReturnTypeClass(theReturnType), new ExceptionHandlingSpec(), theParameterTypes);
}
Pointcut(
@Nonnull Class> theReturnType,
@Nonnull ExceptionHandlingSpec theExceptionHandlingSpec,
String... theParameterTypes) {
myReturnType = theReturnType;
myExceptionHandlingSpec = theExceptionHandlingSpec;
myParameterTypes = Collections.unmodifiableList(Arrays.asList(theParameterTypes));
}
Pointcut(@Nonnull Class> theReturnType, String... theParameterTypes) {
this(theReturnType, new ExceptionHandlingSpec(), theParameterTypes);
}
@Override
public boolean isShouldLogAndSwallowException(@Nonnull Throwable theException) {
for (Class extends Throwable> next : myExceptionHandlingSpec.myTypesToLogAndSwallow) {
if (next.isAssignableFrom(theException.getClass())) {
return true;
}
}
return false;
}
@Override
@Nonnull
public Class> getReturnType() {
return myReturnType;
}
@Override
@Nonnull
public List getParameterTypes() {
return myParameterTypes;
}
private static class UnknownType {}
private static class ExceptionHandlingSpec {
private final Set> myTypesToLogAndSwallow = new HashSet<>();
ExceptionHandlingSpec addLogAndSwallow(@Nonnull Class extends Throwable> theType) {
myTypesToLogAndSwallow.add(theType);
return this;
}
}
private static Class> toReturnTypeClass(String theReturnType) {
try {
return Class.forName(theReturnType);
} catch (ClassNotFoundException theE) {
return UnknownType.class;
}
}
}