Package ca.uhn.fhir.interceptor.executor
Class BaseInterceptorService<POINTCUT extends Enum<POINTCUT> & IPointcut>
java.lang.Object
ca.uhn.fhir.interceptor.executor.BaseInterceptorService<POINTCUT>
- All Implemented Interfaces:
IBaseInterceptorBroadcaster<POINTCUT>
,IBaseInterceptorService<POINTCUT>
- Direct Known Subclasses:
InterceptorService
public abstract class BaseInterceptorService<POINTCUT extends Enum<POINTCUT> & IPointcut>
extends Object
implements IBaseInterceptorService<POINTCUT>, IBaseInterceptorBroadcaster<POINTCUT>
-
Nested Class Summary
Modifier and TypeClassDescriptionstatic class
protected class
Nested classes/interfaces inherited from interface ca.uhn.fhir.interceptor.api.IBaseInterceptorBroadcaster
IBaseInterceptorBroadcaster.IInvoker
-
Constructor Summary
ConstructorDescriptionBaseInterceptorService
(Class<POINTCUT> thePointcutType) Constructor which uses a default name of "default"BaseInterceptorService
(Class<POINTCUT> thePointcutType, String theName) Deprecated, for removal: This API element is subject to removal in a future version.The name parameter is not used for anything -
Method Summary
Modifier and TypeMethodDescriptionboolean
callHooks
(POINTCUT thePointcut, HookParams theParams) Invoke registered interceptor hook methods for the given Pointcut.callHooksAndReturnObject
(POINTCUT thePointcut, HookParams theParams) Invoke registered interceptor hook methods for the given Pointcut.static Object
callInvokers
(IPointcut thePointcut, HookParams theParams, List<IBaseInterceptorBroadcaster.IInvoker> invokers) protected static <T extends Annotation>
Optional<T> findAnnotation
(AnnotatedElement theObject, Class<T> theHookClass) Returns all currently registered interceptors (excluding any thread local interceptors).protected Class
<?> getInvokersForPointcut
(POINTCUT thePointcut) Returns a list of all invokers registered for the given pointcut.boolean
Does this broadcaster have any hooks for the given pointcut?static boolean
haveAppropriateParams
(IPointcut thePointcut, HookParams theParams) Only call this when assertions are enabled, it's expensiveprotected void
registerAnonymousInterceptor
(POINTCUT thePointcut, Object theInterceptor, BaseInterceptorService.BaseInvoker theInvoker) boolean
registerInterceptor
(Object theInterceptor) Register an interceptor.void
registerInterceptors
(Collection<?> theInterceptors) protected abstract Optional
<BaseInterceptorService<POINTCUT>.HookDescriptor> scanForHook
(Method nextMethod) void
Deprecated, for removal: This API element is subject to removal in a future version.This value is not used anywherevoid
setWarnOnInterceptorWithNoHooks
(boolean theWarnOnInterceptorWithNoHooks) Should a warning be issued if an interceptor is registered and it has no hooksunion
(List<List<IBaseInterceptorBroadcaster.IInvoker>> theInvokersLists) First argument must be the global invoker list!!void
Unregisters all anonymous interceptors (i.e.void
Unregisters all registered interceptors.boolean
unregisterInterceptor
(Object theInterceptor) Unregister an interceptor.void
unregisterInterceptors
(Collection<?> theInterceptors) void
unregisterInterceptorsIf
(Predicate<Object> theShouldUnregisterFunction) Unregisters all interceptors that are indicated by the given callback function returningtrue
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Methods inherited from interface ca.uhn.fhir.interceptor.api.IBaseInterceptorBroadcaster
ifHasCallHooks, ifHasCallHooksAndReturnObject
-
Constructor Details
-
BaseInterceptorService
Constructor which uses a default name of "default" -
BaseInterceptorService
@Deprecated(since="8.0.0", forRemoval=true) public BaseInterceptorService(Class<POINTCUT> thePointcutType, String theName) Deprecated, for removal: This API element is subject to removal in a future version.The name parameter is not used for anythingConstructor- Parameters:
theName
- The name for this registry (useful for troubleshooting)
-
-
Method Details
-
setWarnOnInterceptorWithNoHooks
Should a warning be issued if an interceptor is registered and it has no hooks -
setName
Deprecated, for removal: This API element is subject to removal in a future version.This value is not used anywhere -
registerAnonymousInterceptor
protected void registerAnonymousInterceptor(POINTCUT thePointcut, Object theInterceptor, BaseInterceptorService.BaseInvoker theInvoker) -
getAllRegisteredInterceptors
Description copied from interface:IBaseInterceptorService
Returns all currently registered interceptors (excluding any thread local interceptors).- Specified by:
getAllRegisteredInterceptors
in interfaceIBaseInterceptorService<POINTCUT extends Enum<POINTCUT> & IPointcut>
-
unregisterAllInterceptors
Description copied from interface:IBaseInterceptorService
Unregisters all registered interceptors.- Specified by:
unregisterAllInterceptors
in interfaceIBaseInterceptorService<POINTCUT extends Enum<POINTCUT> & IPointcut>
-
unregisterInterceptors
- Specified by:
unregisterInterceptors
in interfaceIBaseInterceptorService<POINTCUT extends Enum<POINTCUT> & IPointcut>
-
registerInterceptors
- Specified by:
registerInterceptors
in interfaceIBaseInterceptorService<POINTCUT extends Enum<POINTCUT> & IPointcut>
-
unregisterAllAnonymousInterceptors
Description copied from interface:IBaseInterceptorService
Unregisters all anonymous interceptors (i.e. all interceptors registered withregisterAnonymousInterceptor
)- Specified by:
unregisterAllAnonymousInterceptors
in interfaceIBaseInterceptorService<POINTCUT extends Enum<POINTCUT> & IPointcut>
-
unregisterInterceptorsIf
Description copied from interface:IBaseInterceptorService
Unregisters all interceptors that are indicated by the given callback function returningtrue
- Specified by:
unregisterInterceptorsIf
in interfaceIBaseInterceptorService<POINTCUT extends Enum<POINTCUT> & IPointcut>
-
registerInterceptor
Description copied from interface:IBaseInterceptorService
Register an interceptor. This method has no effect if the given interceptor is already registered.- Specified by:
registerInterceptor
in interfaceIBaseInterceptorService<POINTCUT extends Enum<POINTCUT> & IPointcut>
- Parameters:
theInterceptor
- The interceptor to register- Returns:
- Returns
true
if at least one valid hook method was found on this interceptor
-
unregisterInterceptor
Description copied from interface:IBaseInterceptorService
Unregister an interceptor. This method has no effect if the given interceptor is not already registered.- Specified by:
unregisterInterceptor
in interfaceIBaseInterceptorService<POINTCUT extends Enum<POINTCUT> & IPointcut>
- Parameters:
theInterceptor
- The interceptor to unregister- Returns:
- Returns
true
if the interceptor was found and removed
-
callHooksAndReturnObject
Description copied from interface:IBaseInterceptorBroadcaster
Invoke registered interceptor hook methods for the given Pointcut. This method should only be called for pointcuts that return a type other thanvoid
orboolean
- Specified by:
callHooksAndReturnObject
in interfaceIBaseInterceptorBroadcaster<POINTCUT extends Enum<POINTCUT> & IPointcut>
- Returns:
- Returns the object returned by the first hook method that did not return
null
-
hasHooks
Description copied from interface:IBaseInterceptorBroadcaster
Does this broadcaster have any hooks for the given pointcut? -
getBooleanReturnType
-
callHooks
Description copied from interface:IBaseInterceptorBroadcaster
Invoke registered interceptor hook methods for the given Pointcut. -
getInvokersForPointcut
Returns a list of all invokers registered for the given pointcut. The list is ordered by the invoker order (specified on theInterceptor.order()
andHook.order()
values.- Specified by:
getInvokersForPointcut
in interfaceIBaseInterceptorBroadcaster<POINTCUT extends Enum<POINTCUT> & IPointcut>
- Returns:
- The list returned by this method will always be a newly created list, so it will be stable and can be modified.
-
haveAppropriateParams
Only call this when assertions are enabled, it's expensive -
scanForHook
protected abstract Optional<BaseInterceptorService<POINTCUT>.HookDescriptor> scanForHook(Method nextMethod) -
callInvokers
public static Object callInvokers(IPointcut thePointcut, HookParams theParams, List<IBaseInterceptorBroadcaster.IInvoker> invokers) -
union
public static List<IBaseInterceptorBroadcaster.IInvoker> union(List<List<IBaseInterceptorBroadcaster.IInvoker>> theInvokersLists) First argument must be the global invoker list!! -
findAnnotation
protected static <T extends Annotation> Optional<T> findAnnotation(AnnotatedElement theObject, Class<T> theHookClass)
-