Package org.picocontainer.parameters
Class CollectionComponentParameter
java.lang.Object
org.picocontainer.parameters.AbstractParameter
org.picocontainer.parameters.CollectionComponentParameter
- All Implemented Interfaces:
Serializable
,Parameter
public class CollectionComponentParameter
extends AbstractParameter
implements Parameter, Serializable
A CollectionComponentParameter should be used to support inject an
Array
, a
Collection
or Map
of components automatically. The collection will contain
all components of a special type and additionally the type of the key may be specified. In
case of a map, the map's keys are the one of the component adapter.- Author:
- Aslak Hellesøy, Jörg Schaible
- See Also:
-
Nested Class Summary
Nested classes/interfaces inherited from interface org.picocontainer.Parameter
Parameter.DelegateResolver, Parameter.NotResolved, Parameter.Resolver, Parameter.ValueResolver
-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final CollectionComponentParameter
UseARRAY
asParameter
for an Array that must have elements.static final CollectionComponentParameter
UseARRAY_ALLOW_EMPTY
asParameter
for an Array that may have no elements. -
Constructor Summary
ConstructorsConstructorDescriptionExpect anArray
of an appropriate type as parameter.CollectionComponentParameter
(boolean emptyCollection) Expect anArray
of an appropriate type as parameter.CollectionComponentParameter
(Class componentValueType, boolean emptyCollection) CollectionComponentParameter
(Class componentKeyType, Class componentValueType, boolean emptyCollection) -
Method Summary
Modifier and TypeMethodDescriptionvoid
accept
(PicoVisitor visitor) Visit the currentParameter
.protected boolean
evaluate
(ComponentAdapter adapter) Evaluate whether the given component adapter will be part of the collective type.protected Map<Object,
ComponentAdapter<?>> getMatchingComponentAdapters
(PicoContainer container, ComponentAdapter adapter, Class keyType, Class valueType) Collect the matching ComponentAdapter instances.resolve
(PicoContainer container, ComponentAdapter<?> forAdapter, ComponentAdapter<?> injecteeAdapter, Type expectedType, NameBinding expectedNameBinding, boolean useNames, Annotation binding) Check for a successful dependency resolution of the parameter for the expected type.void
verify
(PicoContainer container, ComponentAdapter<?> adapter, Type expectedType, NameBinding expectedNameBinding, boolean useNames, Annotation binding) Verify a successful dependency resolution of the parameter for the expected type.Methods inherited from class org.picocontainer.parameters.AbstractParameter
isResolvable, resolveInstance
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Methods inherited from interface org.picocontainer.Parameter
isResolvable, resolveInstance
-
Field Details
-
Constructor Details
-
CollectionComponentParameter
public CollectionComponentParameter()Expect anArray
of an appropriate type as parameter. At least one component of the array's component type must exist. -
CollectionComponentParameter
public CollectionComponentParameter(boolean emptyCollection) Expect anArray
of an appropriate type as parameter.- Parameters:
emptyCollection
-true
if an empty array also is a valid dependency resolution.
-
CollectionComponentParameter
- Parameters:
componentValueType
- the type of the components (ignored in case of an Array)emptyCollection
-true
if an empty collection resolves the dependency.
-
CollectionComponentParameter
public CollectionComponentParameter(Class componentKeyType, Class componentValueType, boolean emptyCollection) - Parameters:
componentKeyType
- the type of the component's keycomponentValueType
- the type of the components (ignored in case of an Array)emptyCollection
-true
if an empty collection resolves the dependency.
-
-
Method Details
-
resolve
public Parameter.Resolver resolve(PicoContainer container, ComponentAdapter<?> forAdapter, ComponentAdapter<?> injecteeAdapter, Type expectedType, NameBinding expectedNameBinding, boolean useNames, Annotation binding) Check for a successful dependency resolution of the parameter for the expected type. The dependency can only be satisfied if the expected type is one of the collection typesArray
,Collection
orMap
. An empty collection is only a valid resolution, if theemptyCollection
flag was set.- Specified by:
resolve
in interfaceParameter
- Parameters:
container
- the container from which dependencies are resolved.injecteeAdapter
-expectedType
- the required typeexpectedNameBinding
- Expected parameter nameuseNames
-binding
-forAdapter
- theComponentAdapter
that is asking for the instance- Returns:
true
if matching components were found or an empty collective type is allowed
-
verify
public void verify(PicoContainer container, ComponentAdapter<?> adapter, Type expectedType, NameBinding expectedNameBinding, boolean useNames, Annotation binding) Verify a successful dependency resolution of the parameter for the expected type. The method will only return if the expected type is one of the collection typesArray
,Collection
orMap
. An empty collection is only a valid resolution, if theemptyCollection
flag was set.- Specified by:
verify
in interfaceParameter
- Parameters:
container
- the container from which dependencies are resolved.adapter
- theComponentAdapter
that is asking for the verificationexpectedType
- the required typeexpectedNameBinding
- Expected parameter nameuseNames
-binding
-- Throws:
PicoCompositionException
- if parameter and its dependencies cannot be resolved
-
accept
Visit the currentParameter
. -
evaluate
Evaluate whether the given component adapter will be part of the collective type.- Parameters:
adapter
- aComponentAdapter
value- Returns:
true
if the adapter takes part
-
getMatchingComponentAdapters
protected Map<Object,ComponentAdapter<?>> getMatchingComponentAdapters(PicoContainer container, ComponentAdapter adapter, Class keyType, Class valueType) Collect the matching ComponentAdapter instances.- Parameters:
container
- container to use for dependency resolutionadapter
-ComponentAdapter
to excludekeyType
- the compatible type of the keyvalueType
- the compatible type of the addComponent- Returns:
- a
Map
with the ComponentAdapter instances and their component keys as map key.
-