Interface ContextCalculator
-
- Functional Interface:
- This is a functional interface and can therefore be used as the assignment target for a lambda expression or method reference.
@FunctionalInterface public interface ContextCalculator
Calculates theContexts applicable for aContextual.Implementations of this interface should satisfy the following requirements:
- Context lookups should be fast: lookup methods are likely to be invoked frequently, and should therefore be fast to execute. If determining the current contexts involves a particularly time consuming lookup (database queries, network requests, etc), then such results should be cached ahead of time.
- Context lookups should be thread-safe: lookups will sometimes be performed from "async" threads, and therefore should not access any part of the server only safe for access from a sync context. If necessary, such results should be determined ahead of time and stored in a thread-safe collection for retrieval later.
- Context lookups should not query active contexts: doing so is
likely to result in a stack overflow, or thread deadlock. Care should be
taken to avoid (indirect) calls to
ContextService.contexts()()}.
Calculators should be registered with the corresponding
ContextServiceusingContextService.registerContextCalculator(ContextCalculator).Context lookups for instances provided by the platform, (e.g.
Player) are delegated to the activeContextService. Plugins wishing to provide contexts for these instances should register calculators here.
-
-
Method Summary
All Methods Static Methods Instance Methods Abstract Methods Modifier and Type Method Description voidaccumulateContexts(Cause source, Consumer<Context> accumulator)Adds anyContexts this calculator determines to be applicable to thetargetcontextual.static ContextCalculatorforSingleContext(String key, Function<Cause,String> valueFunction)Creates a newContextCalculatorthat provides a single context.
-
-
-
Method Detail
-
forSingleContext
static ContextCalculator forSingleContext(String key, Function<Cause,String> valueFunction)
Creates a newContextCalculatorthat provides a single context.- Parameters:
key- The key of the context provided by the calculatorvalueFunction- The function used to compute the corresponding value for each query. A context will not be "accumulated" if the value returned is null.- Returns:
- The resultant calculator
-
accumulateContexts
void accumulateContexts(Cause source, Consumer<Context> accumulator)
Adds anyContexts this calculator determines to be applicable to thetargetcontextual.Care should be taken to ensure implementations of this method meet the general requirements for
ContextCalculator, defined in the class doc.Calculators should not rely on the state of
accumulatorduring this call, and also shouldn't make calls to remove contexts added by other calculators.
-
-