Class BaseFirstOrderFunctionCall<RETURN extends Value>
- java.lang.Object
-
- org.ow2.authzforce.core.pdp.api.func.BaseFirstOrderFunctionCall<RETURN>
-
- Type Parameters:
RETURN
- function return type
- All Implemented Interfaces:
FirstOrderFunctionCall<RETURN>
,FunctionCall<RETURN>
- Direct Known Subclasses:
BaseFirstOrderFunctionCall.EagerEval
public abstract class BaseFirstOrderFunctionCall<RETURN extends Value> extends Object implements FirstOrderFunctionCall<RETURN>
This class provides a skeletal implementation of theFirstOrderFunctionCall
interface, to minimize the effort required to implement this interface. It requires a function definition and given arguments to be passed to the function, and based on this information, enforces type checking. It is the recommended way of calling anyFirstOrderFunction
instance.Some of the arguments (expressions) may not be known in advance, but only at evaluation time (when calling
evaluate(EvaluationContext, Optional, boolean, AttributeValue...)
). For example, when using a FirstOrderFunction as a sub-function of the Higher-Order function 'any-of', the last arguments of the sub-function are determined during evaluation, after evaluating the expression of the last input in the context, and getting the various values in the result bag.In the case of such evaluation-time args, you must pass their types (the datatype of the last input bag in the previous example) as the
remainingArgTypes
parameters to theBaseFirstOrderFunctionCall
subclass (e.g.BaseFirstOrderFunctionCall.EagerEval
implementation) constructor, and correspond to the types of theremainingArgs
passed later as parameters toevaluate(EvaluationContext, Optional, boolean, AttributeValue...)
.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
BaseFirstOrderFunctionCall.EagerBagEval<RETURN_T extends Value,PARAM_BAG_ELEMENT_T extends AttributeValue>
Function call, for functions requiring eager (a.k.a.static class
BaseFirstOrderFunctionCall.EagerEval<RETURN_T extends Value>
Function call, forFirstOrderFunction
s requiring eager (aka greedy) evaluation of ALL their arguments' expressions to actual values, before the function can be evaluated.static class
BaseFirstOrderFunctionCall.EagerMultiPrimitiveTypeEval<RETURN_T extends Value>
Function call, for functions requiring eager (a.k.a.static class
BaseFirstOrderFunctionCall.EagerPartlyBagEval<RETURN_T extends Value,PRIMITIVE_PARAM_T extends AttributeValue>
Function call, for functions requiring eager (a.k.a.static class
BaseFirstOrderFunctionCall.EagerSinglePrimitiveTypeEval<RETURN_T extends Value,PARAM_T extends AttributeValue>
Function call, for functions requiring eager (a.k.a.
-
Constructor Summary
Constructors Constructor Description BaseFirstOrderFunctionCall(FirstOrderFunctionSignature<RETURN> functionSig, List<Expression<?>> argExpressions, Datatype<?>... remainingArgTypes)
Instantiates a function call, including the validation of arguments (inputExpressions
) according to the function definition.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description RETURN
evaluate(EvaluationContext context, Optional<EvaluationContext> mdpContext)
Make the call in a given evaluation contextRETURN
evaluate(EvaluationContext context, Optional<EvaluationContext> mdpContext, boolean checkRemainingArgTypes, AttributeValue... remainingArgs)
Make the call in a given evaluation context.Datatype<RETURN>
getReturnType()
Get the actual return type of this call (same as the internal function's return type), used as return type for XACML Apply in PDP.-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface org.ow2.authzforce.core.pdp.api.func.FirstOrderFunctionCall
evaluate
-
-
-
-
Field Detail
-
funcId
protected final String funcId
-
-
Constructor Detail
-
BaseFirstOrderFunctionCall
public BaseFirstOrderFunctionCall(FirstOrderFunctionSignature<RETURN> functionSig, List<Expression<?>> argExpressions, Datatype<?>... remainingArgTypes) throws IllegalArgumentException
Instantiates a function call, including the validation of arguments (inputExpressions
) according to the function definition.- Parameters:
functionSig
- signature of function to which this call appliesargExpressions
- function arguments (expressions)remainingArgTypes
- types of arguments of which the actual Expressions are unknown at this point, but will be known and passed at evaluation time asremainingArgs
parameter toevaluate(EvaluationContext, Optional, boolean, AttributeValue...)
, thenFirstOrderFunctionCall.evaluate(EvaluationContext, Optional, AttributeValue...)
. Only non-bag/primitive values are validremainingArgs
to prevent varargs warning inFirstOrderFunctionCall.evaluate(EvaluationContext, Optional, AttributeValue...)
(potential heap pollution via varargs parameter) that would be caused by using a parameterized type such as Value/Collection to represent both bags and primitives.- Throws:
IllegalArgumentException
- if inputs are invalid for this function or one ofremainingArgTypes
is a bag type.
-
-
Method Detail
-
evaluate
public final RETURN evaluate(EvaluationContext context, Optional<EvaluationContext> mdpContext) throws IndeterminateEvaluationException
Description copied from interface:FunctionCall
Make the call in a given evaluation context- Specified by:
evaluate
in interfaceFunctionCall<RETURN extends Value>
- Parameters:
context
- Individual Decision evaluation contextmdpContext
- context of the Multiple Decision request that thecontext
belongs to if the Multiple Decision Profile is used- Returns:
- result of the call
- Throws:
IndeterminateEvaluationException
- if any evaluation error
-
evaluate
public final RETURN evaluate(EvaluationContext context, Optional<EvaluationContext> mdpContext, boolean checkRemainingArgTypes, AttributeValue... remainingArgs) throws IndeterminateEvaluationException
Description copied from interface:FirstOrderFunctionCall
Make the call in a given evaluation context. This method calls the function after checkingremainingArgTypes
ifcheckremainingArgTypes = true
- Specified by:
evaluate
in interfaceFirstOrderFunctionCall<RETURN extends Value>
- Parameters:
context
- Individual Decision evaluation contextmdpContext
- the context of the Multiple Decision request that thecontext
belongs to if the Multiple Decision Profile is usedcheckRemainingArgTypes
- whether to check types ofremainingArgs
. It is strongly recommended setting this totrue
always, unless you have already checked the types are OK before calling this method and want to skip re-checking for efficiency.remainingArgs
- remaining args.- Returns:
- result of the call
- Throws:
IndeterminateEvaluationException
- ifcheckremainingArgTypes = true
andremainingArgs
do not check OK, or if they do but there was an error evaluating the function with such arguments
-
getReturnType
public final Datatype<RETURN> getReturnType()
Description copied from interface:FunctionCall
Get the actual return type of this call (same as the internal function's return type), used as return type for XACML Apply in PDP.- Specified by:
getReturnType
in interfaceFunctionCall<RETURN extends Value>
- Returns:
- return type
-
-