public class DelegatingPropagateAttributeLoader<T> extends DelegatingRowAttributeLoader<T,PropagateAttributeLoader<T>> implements PropagateAttributeLoader<T>
Constructor and Description |
---|
DelegatingPropagateAttributeLoader(PropagateAttributeLoader<T> loader) |
Modifier and Type | Method and Description |
---|---|
boolean |
isLoadingSuperRoot()
Determines if this loader can provide a value for the super-root row.
|
BiFunction<StructureRow,PropagateAttributeContext,AttributeValue<T>> |
loadChildren(AttributeValue<T> parentValue,
PropagateAttributeContext.Parent context)
Provider of a loading function for the children of the given parent row.
|
isWholeForestDependent, preload
delegate, getAttributeDependencies, getAttributeSpec, getCachingStrategy, getContextDependencies, getGlobalTrail, toString
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
getCachingStrategy
isWholeForestDependent, preload
getAttributeDependencies, getAttributeSpec, getContextDependencies, getGlobalTrail
public DelegatingPropagateAttributeLoader(@NotNull PropagateAttributeLoader<T> loader)
@Nullable public BiFunction<StructureRow,PropagateAttributeContext,AttributeValue<T>> loadChildren(@NotNull AttributeValue<T> parentValue, @NotNull PropagateAttributeContext.Parent context)
PropagateAttributeLoader
Provider of a loading function for the children of the given parent row. When there's a need to load a propagate value for row R, then first this method is called for the parent of R. Then the function that is received will be called to calculate the value for R and any other siblings that are also requested in this loading process.
The implementation can make preparatory calculations and then return a function that will produce results for specific rows. The value of the dependencies for the children rows are available only when that function is called.
You should not include costly calculations for all the children rows in the implementation of this method, because loadChildren()
may called even when only one child row needs to be calculated.
The implementation must be a stable function - see PropagateAttributeLoader
. Note that loadChildren()
and the functions it
produced may be called intermittently without any particular order. In other words, the function produced by loadChildren()
should
be working even after another loadChildren()
is called.
If for some reason this loader is not applicable for the given row, it should return null
. Note, however, that if multiple propagate
loaders work on the same attribute, it could be tricky and lead to unexpected results.
loadChildren
in interface PropagateAttributeLoader<T>
parentValue
- the value of this attribute for the parent row, or AttributeValue.undefined()
if there's no parentcontext
- loading contextnull
if the values for the children rows of this parent cannot be loaded with this loaderpublic boolean isLoadingSuperRoot()
PropagateAttributeLoader
Determines if this loader can provide a value for the super-root row.
When this method returns false
, the super-root value will always be AttributeValue.undefined()
. When it is true
,
the super-root value will be determined by calling PropagateAttributeLoader.loadChildren(com.almworks.jira.structure.api.attribute.AttributeValue<T>, com.almworks.jira.structure.api.attribute.loader.PropagateAttributeContext.Parent)
with null
as the parent row and super-root as the child row.
The returned value must be the same throughout the lifetime of the object.
isLoadingSuperRoot
in interface PropagateAttributeLoader<T>
SuperRootRow
Copyright © 2024 Tempo Software. All Rights Reserved.