Class ComponentBag
- java.lang.Object
-
- org.glassfish.jersey.model.internal.ComponentBag
-
public class ComponentBag extends Object
An internal Jersey container for custom component classes and instances. The component bag can automatically compute acontract provider
model for the registered component type and stores it with the component registration.The rules for managing components inside a component bag are derived from the rules of JAX-RS
Configurable
API. In short:- The iteration order of registered components mirrors the registration order of these components.
- There can be only one registration for any given component type.
- Existing registrations cannot be overridden (any attempt to override an existing registration will be rejected).
- Author:
- Marek Potociar
-
-
Field Summary
Fields Modifier and Type Field Description static Predicate<ContractProvider>
BINDERS_ONLY
A filtering strategy that includes only models that containBinder
provider contract.static Predicate<ContractProvider>
EXCLUDE_EMPTY
A filtering strategy that excludes models with no recognized contracts.static Predicate<ContractProvider>
EXECUTOR_SERVICE_PROVIDER_ONLY
A filtering strategy that includes only models that containExecutorServiceProvider
provider contract.static BiPredicate<ContractProvider,org.glassfish.jersey.internal.inject.InjectionManager>
EXTERNAL_ONLY
A filtering strategy that includes only models that contain contract registrable byInjectionManager
.static Predicate<ContractProvider>
INCLUDE_ALL
A filtering strategy that accepts any contract provider model.static Predicate<ContractProvider>
SCHEDULED_EXECUTOR_SERVICE_PROVIDER_ONLY
A filtering strategy that includes only models that containScheduledExecutorServiceProvider
provider contract.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description void
clear()
Removes all the component registrations and resets the component bag instance to a state as if it was create anew.ComponentBag
copy()
Get a copy of this component bag.static Predicate<ContractProvider>
excludeMetaProviders(org.glassfish.jersey.internal.inject.InjectionManager injectionManager)
A method creates thePredicate
which is able to filter all Jersey meta-providers along with the components which is able to register the current usedInjectionManager
.Set<Class<?>>
getClasses()
Get all registered component classes, includingfeatures
andbinders
meta-providers.Set<Class<?>>
getClasses(Predicate<ContractProvider> filter)
Get a subset of all registered component classes using thefilter
predicate to determine for each component class based on it's contract provider class model whether it should be kept or filtered out.static <T> List<T>
getFromBinders(org.glassfish.jersey.internal.inject.InjectionManager injectionManager, ComponentBag componentBag, Function<Object,T> cast, Predicate<org.glassfish.jersey.internal.inject.Binding> filter)
IfT
object is registered inComponentBag
using theBinder
,T
is not visible using the methods for getting classes and instancesgetClasses(Predicate)
andgetInstances(Predicate)
.Set<Object>
getInstances()
Get all registered component instances, includingfeatures
andbinders
meta-providers.Set<Object>
getInstances(Predicate<ContractProvider> filter)
Get a subset of all registered component instances using thefilter
predicate to determine for each component instance based on it's contract provider class model whether it should be kept or filtered out.ContractProvider
getModel(Class<?> componentClass)
Get a model for a given component class, ornull
if no such component is registered in the component bag.Set<Class<?>>
getRegistrations()
Get an unmodifiable view of all component classes, for which a registration exists (either class or instance based) in the component bag.ComponentBag
immutableCopy()
Get immutable copy of a component bag.static ContractProvider
modelFor(Class<?> componentClass)
Create a contract provider model by introspecting a component class.static ComponentBag
newInstance(Predicate<ContractProvider> registrationStrategy)
Create new empty component bag.boolean
register(Class<?> componentClass, int priority, Inflector<ContractProvider.Builder,ContractProvider> modelEnhancer)
Register a component class as a contract provider with an explicitly specified binding priority.boolean
register(Class<?> componentClass, Map<Class<?>,Integer> contracts, Inflector<ContractProvider.Builder,ContractProvider> modelEnhancer)
Register a component class as a contract provider for the specified contracts.boolean
register(Class<?> componentClass, Set<Class<?>> contracts, Inflector<ContractProvider.Builder,ContractProvider> modelEnhancer)
Register a component class as a contract provider for the specified contracts.boolean
register(Class<?> componentClass, Inflector<ContractProvider.Builder,ContractProvider> modelEnhancer)
Register a component class using a given registration strategy.boolean
register(Object component, int priority, Inflector<ContractProvider.Builder,ContractProvider> modelEnhancer)
Register a component as a contract provider with an explicitly specified binding priority.boolean
register(Object component, Map<Class<?>,Integer> contracts, Inflector<ContractProvider.Builder,ContractProvider> modelEnhancer)
Register a component as a contract provider for the specified contracts.boolean
register(Object component, Set<Class<?>> contracts, Inflector<ContractProvider.Builder,ContractProvider> modelEnhancer)
Register a component as a contract provider for the specified contracts.boolean
register(Object component, Inflector<ContractProvider.Builder,ContractProvider> modelEnhancer)
Register a component using a given registration strategy.
-
-
-
Field Detail
-
EXTERNAL_ONLY
public static final BiPredicate<ContractProvider,org.glassfish.jersey.internal.inject.InjectionManager> EXTERNAL_ONLY
A filtering strategy that includes only models that contain contract registrable byInjectionManager
.This filter predicate returns
true
for allcontract provider models
that represent an object which can be registered using specificInjectionManager
contract.
-
BINDERS_ONLY
public static final Predicate<ContractProvider> BINDERS_ONLY
A filtering strategy that includes only models that containBinder
provider contract.This filter predicate returns
true
for allcontract provider models
that represent a provider registered to provideBinder
contract.
-
EXECUTOR_SERVICE_PROVIDER_ONLY
public static final Predicate<ContractProvider> EXECUTOR_SERVICE_PROVIDER_ONLY
A filtering strategy that includes only models that containExecutorServiceProvider
provider contract.This filter predicate returns
true
for allcontract provider models
that represent a provider registered to provideExecutorServiceProvider
contract.
-
SCHEDULED_EXECUTOR_SERVICE_PROVIDER_ONLY
public static final Predicate<ContractProvider> SCHEDULED_EXECUTOR_SERVICE_PROVIDER_ONLY
A filtering strategy that includes only models that containScheduledExecutorServiceProvider
provider contract.This filter predicate returns
true
for allcontract provider models
that represent a provider registered to provideScheduledExecutorServiceProvider
contract.
-
EXCLUDE_EMPTY
public static final Predicate<ContractProvider> EXCLUDE_EMPTY
A filtering strategy that excludes models with no recognized contracts.This filter predicate returns
false
for allcontract provider models
that are empty, i.e. do not contain any recognized contracts.
-
INCLUDE_ALL
public static final Predicate<ContractProvider> INCLUDE_ALL
A filtering strategy that accepts any contract provider model.This filter predicate returns
true
for any contract provider model.
-
-
Method Detail
-
excludeMetaProviders
public static Predicate<ContractProvider> excludeMetaProviders(org.glassfish.jersey.internal.inject.InjectionManager injectionManager)
A method creates thePredicate
which is able to filter all Jersey meta-providers along with the components which is able to register the current usedInjectionManager
.- Parameters:
injectionManager
- current injection manager.- Returns:
Predicate
excluding Jersey meta-providers and the specific ones for a currentInjectionManager
.
-
newInstance
public static ComponentBag newInstance(Predicate<ContractProvider> registrationStrategy)
Create new empty component bag.- Parameters:
registrationStrategy
- function driving the decision (based on the introspectedcontract provider model
) whether or not should the component class registration continue towards a successful completion.- Returns:
- a new empty component bag.
-
getFromBinders
public static <T> List<T> getFromBinders(org.glassfish.jersey.internal.inject.InjectionManager injectionManager, ComponentBag componentBag, Function<Object,T> cast, Predicate<org.glassfish.jersey.internal.inject.Binding> filter)
IfT
object is registered inComponentBag
using theBinder
,T
is not visible using the methods for getting classes and instancesgetClasses(Predicate)
andgetInstances(Predicate)
.Method selects all
bindings
and picks up the instances or creates the instances fromClassBinding
(injection does not work at this moment).- Parameters:
injectionManager
- injection manager to create an object fromT
class.componentBag
- component bag which provides registered binders.- Returns:
- all instances/classes registered using binders.
-
register
public boolean register(Class<?> componentClass, Inflector<ContractProvider.Builder,ContractProvider> modelEnhancer)
Register a component class using a given registration strategy.- Parameters:
componentClass
- class to be introspected as a contract provider and registered, based on the registration strategy decision.modelEnhancer
- custom contract provider model enhancer.- Returns:
true
if the component registration was successful.
-
register
public boolean register(Class<?> componentClass, int priority, Inflector<ContractProvider.Builder,ContractProvider> modelEnhancer)
Register a component class as a contract provider with an explicitly specified binding priority.- Parameters:
componentClass
- class to be introspected as a contract provider and registered.priority
- explicitly specified binding priority for the provider contracts implemented by the component.modelEnhancer
- custom contract provider model enhancer.- Returns:
true
if the component registration was successful.
-
register
public boolean register(Class<?> componentClass, Set<Class<?>> contracts, Inflector<ContractProvider.Builder,ContractProvider> modelEnhancer)
Register a component class as a contract provider for the specified contracts.- Parameters:
componentClass
- class to be introspected as a contract provider and registered.contracts
- contracts to bind the component class to.modelEnhancer
- custom contract provider model enhancer.- Returns:
true
if the component registration was successful.
-
register
public boolean register(Class<?> componentClass, Map<Class<?>,Integer> contracts, Inflector<ContractProvider.Builder,ContractProvider> modelEnhancer)
Register a component class as a contract provider for the specified contracts.- Parameters:
componentClass
- class to be introspected as a contract provider and registered.contracts
- contracts with their priorities to bind the component class to.modelEnhancer
- custom contract provider model enhancer.- Returns:
true
if the component registration was successful.
-
register
public boolean register(Object component, Inflector<ContractProvider.Builder,ContractProvider> modelEnhancer)
Register a component using a given registration strategy.- Parameters:
component
- instance to be introspected as a contract provider and registered, based on the registration strategy decision.modelEnhancer
- custom contract provider model enhancer.- Returns:
true
if the component registration was successful.
-
register
public boolean register(Object component, int priority, Inflector<ContractProvider.Builder,ContractProvider> modelEnhancer)
Register a component as a contract provider with an explicitly specified binding priority.- Parameters:
component
- instance to be introspected as a contract provider and registered, based on the registration strategy decision.priority
- explicitly specified binding priority for the provider contracts implemented by the component.modelEnhancer
- custom contract provider model enhancer.- Returns:
true
if the component registration was successful.
-
register
public boolean register(Object component, Set<Class<?>> contracts, Inflector<ContractProvider.Builder,ContractProvider> modelEnhancer)
Register a component as a contract provider for the specified contracts.- Parameters:
component
- instance to be introspected as a contract provider and registered, based on the registration strategy decision.contracts
- contracts to bind the component to.modelEnhancer
- custom contract provider model enhancer.- Returns:
true
if the component registration was successful.
-
register
public boolean register(Object component, Map<Class<?>,Integer> contracts, Inflector<ContractProvider.Builder,ContractProvider> modelEnhancer)
Register a component as a contract provider for the specified contracts.- Parameters:
component
- instance to be introspected as a contract provider and registered, based on the registration strategy decision.contracts
- contracts with their priorities to bind the component to.modelEnhancer
- custom contract provider model enhancer.- Returns:
true
if the component registration was successful.
-
modelFor
public static ContractProvider modelFor(Class<?> componentClass)
Create a contract provider model by introspecting a component class.- Parameters:
componentClass
- component class to create contract provider model for.- Returns:
- contract provider model for the class.
-
getClasses
public Set<Class<?>> getClasses()
Get all registered component classes, includingfeatures
andbinders
meta-providers.- Returns:
- all registered component classes.
-
getInstances
public Set<Object> getInstances()
Get all registered component instances, includingfeatures
andbinders
meta-providers.- Returns:
- all registered component instances.
-
getClasses
public Set<Class<?>> getClasses(Predicate<ContractProvider> filter)
Get a subset of all registered component classes using thefilter
predicate to determine for each component class based on it's contract provider class model whether it should be kept or filtered out.- Parameters:
filter
- function that decides whether a particular class should be returned or not.- Returns:
- filtered subset of registered component classes.
-
getInstances
public Set<Object> getInstances(Predicate<ContractProvider> filter)
Get a subset of all registered component instances using thefilter
predicate to determine for each component instance based on it's contract provider class model whether it should be kept or filtered out.- Parameters:
filter
- function that decides whether a particular class should be returned or not.- Returns:
- filtered subset of registered component instances.
-
getRegistrations
public Set<Class<?>> getRegistrations()
Get an unmodifiable view of all component classes, for which a registration exists (either class or instance based) in the component bag.- Returns:
- set of classes of all component classes and instances registered in this component bag.
-
getModel
public ContractProvider getModel(Class<?> componentClass)
Get a model for a given component class, ornull
if no such component is registered in the component bag.- Parameters:
componentClass
- class of the registered component to retrieve the contract provider model for.- Returns:
- model for a given component class, or
null
if no such component is registered.
-
copy
public ComponentBag copy()
Get a copy of this component bag.- Returns:
- component bag copy.
-
immutableCopy
public ComponentBag immutableCopy()
Get immutable copy of a component bag.- Returns:
- immutable view of a component bag.
-
clear
public void clear()
Removes all the component registrations and resets the component bag instance to a state as if it was create anew.
-
-