Package net.shibboleth.idp.attribute.resolver.ad.impl

# Class TemplateAttributeDefinition

java.lang.Object
net.shibboleth.shared.component.AbstractInitializableComponent
net.shibboleth.shared.component.AbstractIdentifiedInitializableComponent
net.shibboleth.shared.component.AbstractIdentifiableInitializableComponent
net.shibboleth.idp.attribute.resolver.AbstractResolverPlugin<IdPAttribute>
net.shibboleth.idp.attribute.resolver.AbstractAttributeDefinition
net.shibboleth.idp.attribute.resolver.ad.impl.TemplateAttributeDefinition

All Implemented Interfaces:
  `AttributeDefinition`, `ResolverPlugin<IdPAttribute>`, `Component`, `DestructableComponent`, `IdentifiableComponent`, `IdentifiedComponent`, `InitializableComponent`, `UnmodifiableComponent`, `DisposableBean`

@ThreadSafeAfterInit public class TemplateAttributeDefinition extends AbstractAttributeDefinition
An attribute definition that constructs its values based on the values of its dependencies using the Velocity Template Language. Dependencies may have multiple values, however multiple dependencies must have the same number of values. In the case of multi-valued dependencies, the template will be evaluated multiples times, iterating over each dependency.

The template is inserted into the engine with a unique name derived from this class and from the id supplied for this attribute.

## Field Summary

Fields
Modifier and Type
Field
Description
`private org.apache.velocity.app.VelocityEngine`
`engine`
VelocityEngine.
`private final org.slf4j.Logger`
`log`
Class logger.
`private Template`
`template`
Template to be evaluated.
`private String`
`templateText`
Template (as Text) to be evaluated.

## Constructor Summary

Constructors
Constructor
Description
`TemplateAttributeDefinition()`

## Method Summary

Modifier and Type
Method
Description
`private int`
`addAttributeValues(String attributeName, List<IdPAttributeValue> attributeValues, Map<String,Iterator<IdPAttributeValue>> sourceValues, int curValueCount)`
Add values for a given attribute to the source Map.
`protected IdPAttribute`
`doAttributeDefinitionResolve(AttributeResolutionContext resolutionContext, AttributeResolverWorkContext workContext)`
Creates and populates the values for the resolved attribute.
`protected void`
`doInitialize()`
`Template`
`getTemplate()`
Get the template text to be evaluated.
`String`
`getTemplateText()`
Get the template text to be evaluated.
`org.apache.velocity.app.VelocityEngine`
`getVelocityEngine()`
Get the `VelocityEngine` to be used.
`void`
`setTemplateText(String velocityTemplate)`
Set the literal text of the template to be evaluated.
`private int`
`setupSourceValues(AttributeResolverWorkContext workContext, Map<String,Iterator<IdPAttributeValue>> sourceValues)`
Set up a map which can be used to populate the template.
`void`
`setVelocityEngine(org.apache.velocity.app.VelocityEngine velocityEngine)`
Set the `VelocityEngine` to be used.

### Methods inherited from class net.shibboleth.idp.attribute.resolver.AbstractAttributeDefinition

`doResolve, getLogPrefix, isDependencyOnly, isPreRequested, setDependencyOnly, setPreRequested`

### Methods inherited from class net.shibboleth.idp.attribute.resolver.AbstractResolverPlugin

`doDestroy, equals, getActivationCondition, getAttributeDependencies, getDataConnectorDependencies, hashCode, isPropagateResolutionExceptions, resolve, setActivationCondition, setAttributeDependencies, setDataConnectorDependencies, setPropagateResolutionExceptions`

### Methods inherited from class net.shibboleth.shared.component.AbstractIdentifiableInitializableComponent

`setId`

### Methods inherited from class net.shibboleth.shared.component.AbstractIdentifiedInitializableComponent

`ensureId, getId, ifDestroyedThrowDestroyedComponentException, ifInitializedThrowUnmodifiabledComponentException, ifNotInitializedThrowUninitializedComponentException`

### Methods inherited from class net.shibboleth.shared.component.AbstractInitializableComponent

`checkComponentActive, checkSetterPreconditions, destroy, initialize, isDestroyed, isInitialized`

### Methods inherited from class java.lang.Object

`clone, finalize, getClass, notify, notifyAll, toString, wait, wait, wait`

### Methods inherited from interface net.shibboleth.shared.component.DestructableComponent

`destroy, isDestroyed`

### Methods inherited from interface org.springframework.beans.factory.DisposableBean

`destroy`

### Methods inherited from interface net.shibboleth.shared.component.IdentifiedComponent

`getId`

### Methods inherited from interface net.shibboleth.shared.component.InitializableComponent

`initialize, isInitialized`

### Methods inherited from interface net.shibboleth.idp.attribute.resolver.ResolverPlugin

`getActivationCondition, getAttributeDependencies, getDataConnectorDependencies, isPropagateResolutionExceptions, resolve`

## Field Details

### log

@Nonnull private final org.slf4j.Logger log
Class logger.

### template

@NonnullAfterInit private Template template
Template to be evaluated.

### templateText

@NonnullAfterInit private String templateText
Template (as Text) to be evaluated.

### engine

@NonnullAfterInit private org.apache.velocity.app.VelocityEngine engine
VelocityEngine.

## Constructor Details

### TemplateAttributeDefinition

public TemplateAttributeDefinition()

## Method Details

### getTemplate

@NonnullAfterInit public Template getTemplate()
Get the template text to be evaluated.

Returns:
  the template

### getTemplateText

@NonnullAfterInit public String getTemplateText()
Get the template text to be evaluated.

Returns:
  the template

### setTemplateText

public void setTemplateText(@Nullable String velocityTemplate)
Set the literal text of the template to be evaluated.

Parameters:
  `velocityTemplate` - template to be evaluated

### getVelocityEngine

@NonnullAfterInit public org.apache.velocity.app.VelocityEngine getVelocityEngine()
Get the `VelocityEngine` to be used.

Returns:
  the template

### setVelocityEngine

public void setVelocityEngine(@Nonnull org.apache.velocity.app.VelocityEngine velocityEngine)
Set the `VelocityEngine` to be used.

Parameters:
  `velocityEngine` - engine to be used

### doInitialize

protected void doInitialize() throws ComponentInitializationException

Overrides:
  `doInitialize` in class `AbstractAttributeDefinition`
Throws:
  `ComponentInitializationException`

### doAttributeDefinitionResolve

@Nonnull protected IdPAttribute doAttributeDefinitionResolve(@Nonnull AttributeResolutionContext resolutionContext, @Nonnull AttributeResolverWorkContext workContext) throws ResolutionException
Creates and populates the values for the resolved attribute. Implementations should not set, or otherwise manage, the resolved attribute's display name, description or encoders. Nor should the resultant attribute be recorded in the given resolution context.

Specified by:
  `doAttributeDefinitionResolve` in class `AbstractAttributeDefinition`
Parameters:
  `resolutionContext` - current attribute resolution context
  `workContext` - current resolver work context
Returns:
  resolved attribute or null if nothing to resolve.
Throws:
  `ResolutionException` - thrown if there is a problem resolving and creating the attribute

### addAttributeValues

private int addAttributeValues(@Nonnull String attributeName, @Nullable List<IdPAttributeValue> attributeValues, @Nonnull Map<String,Iterator<IdPAttributeValue>> sourceValues, int curValueCount) throws ResolutionException
Add values for a given attribute to the source Map. Helper function for `setupSourceValues(AttributeResolverWorkContext, Map)`

Parameters:
  `attributeName` - the attribute name under consideration
  `attributeValues` - The values to add.
  `sourceValues` - the Map to add to
  `curValueCount` - how many values to expect. 0 means never set
Returns:
  the number of values to expect, 0 means still not set.
Throws:
  `ResolutionException` - if there is a mismatched count of attributes

### setupSourceValues

private int setupSourceValues(@Nonnull AttributeResolverWorkContext workContext, @Nonnull Map<String,Iterator<IdPAttributeValue>> sourceValues) throws ResolutionException
Set up a map which can be used to populate the template. The key is the attribute name and the value is the iterator to give all the names. We also return how deep the iteration will be and throw an exception if there is a mismatch in number of elements in any attribute.

Parameters:
  `workContext` - source for dependencies
  `sourceValues` - to populate with the attribute iterators
Returns:
  how many values in the attributes
Throws:
  `ResolutionException` - if there is a mismatched count of attributes