Interface ModelActionBuilder
Since YANG allows forward references, some inference actions need to be taken at a later point, where reference is
actually resolved. Referenced objects are not retrieved directly but are represented as ModelActionBuilder.Prerequisite
(prerequisite) for inference action to be taken.
Some existing YANG statements are more complex and also object, for which effective model may be inferred is also
represented as a ModelActionBuilder.Prerequisite
which, when reference is available, will contain target context, which may be
used for inference action.
Implementing inference action
Effective inference action could always be splitted into two separate tasks:- Declaration of inference action and its prerequisites
- Execution of inference action
In order to declare inference action following steps needs to be taken:
- Use
StmtContext.Mutable.newInferenceAction(ModelProcessingPhase)
to obtainModelActionBuilder
. - Use builder to specify concrete prerequisites of inference action (other statements, values from identifier namespaces)
- Use builder to specify concrete set of nodes (or forward references to nodes) which will inference action mutate.
- Use
apply(InferenceAction)
withModelActionBuilder.InferenceAction
implementation to register inference action.
An action will be executed when:
-
ModelActionBuilder.InferenceAction.apply(InferenceContext)
- all prerequisites (and declared forward references) are met, action could dereference them and start applying changes. ModelActionBuilder.InferenceAction.prerequisiteFailed(Collection)
- semantic parser finished all other satisfied inference actions and some of declared prerequisites was still not met.
TODO: Insert real word example
Design notes
Future
seems as viable and more standard alternative to ModelActionBuilder.Prerequisite
, but
Futures also carries promise that resolution of it is carried in other thread, which will actually put additional
constraints on semantic parser.
Also listening on multiple futures is costly, so we opted out of future and designed API, which later may introduce futures.
-
Nested Class Summary
Nested ClassesModifier and TypeInterfaceDescriptionstatic interface
User-defined inference action.static interface
static interface
-
Method Summary
Modifier and TypeMethodDescriptionvoid
Apply anModelActionBuilder.InferenceAction
when this action's prerequisites are resolved.<C extends StmtContext.Mutable<?,
?, ?>, T extends C>
@NonNull ModelActionBuilder.Prerequisite<C>mutatesCtx
(T context, ModelProcessingPhase phase) Action mutates the specified statement in the specified phase.<K,
E extends EffectiveStatement<?, ?>>
@NonNull ModelActionBuilder.Prerequisite<StmtContext.Mutable<?,?, E>> mutatesEffectiveCtx
(StmtContext<?, ?, ?> context, ParserNamespace<K, ? extends StmtContext<?, ?, ?>> namespace, K key) default <T extends StmtContext.Mutable<?,
?, ?>>
@NonNull ModelActionBuilder.Prerequisite<T>mutatesEffectiveCtx
(T context) Action mutates the effective model of specified statement.<K,
E extends EffectiveStatement<?, ?>>
@NonNull ModelActionBuilder.Prerequisite<StmtContext.Mutable<?,?, E>> mutatesEffectiveCtxPath
(StmtContext<?, ?, ?> context, ParserNamespace<K, ? extends StmtContext<?, ?, ?>> namespace, Iterable<K> keys) @NonNull ModelActionBuilder.Prerequisite<StmtContext.Mutable<?,
?, ?>> mutatesNs
(StmtContext.Mutable<?, ?, ?> ctx, ParserNamespace<?, ?> namespace) Deprecated.Undocumented method.<K,
C extends StmtContext<?, ?, ?>>
@NonNull ModelActionBuilder.Prerequisite<C>requiresCtx
(StmtContext<?, ?, ?> context, @NonNull ParserNamespace<K, C> namespace, K key, ModelProcessingPhase phase) <K,
C extends StmtContext<?, ?, ?>>
@NonNull ModelActionBuilder.Prerequisite<C>requiresCtx
(StmtContext<?, ?, ?> context, @NonNull ParserNamespace<K, C> namespace, NamespaceKeyCriterion<K> criterion, ModelProcessingPhase phase) <A,
D extends DeclaredStatement<A>, E extends EffectiveStatement<A, D>>
@NonNull ModelActionBuilder.Prerequisite<StmtContext<A,D, E>> requiresCtx
(StmtContext<A, D, E> context, ModelProcessingPhase phase) Action requires that the specified context completes specified phase beforeapply(InferenceAction)
may be invoked.<K,
C extends StmtContext<?, ?, ?>>
@NonNull ModelActionBuilder.Prerequisite<C>requiresCtxPath
(StmtContext<?, ?, ?> context, ParserNamespace<K, C> namespace, Iterable<K> keys, ModelProcessingPhase phase) <K,
D extends DeclaredStatement<?>>
@NonNull ModelActionBuilder.Prerequisite<D>requiresDeclared
(StmtContext<?, ?, ?> context, ParserNamespace<K, StmtContext<?, ? extends D, ?>> namespace, K key) Deprecated.Undocumented method.<D extends DeclaredStatement<?>>
@NonNull ModelActionBuilder.Prerequisite<D>requiresDeclared
(StmtContext<?, ? extends D, ?> context) Action requires that the specified context transition to completeModelProcessingPhase.FULL_DECLARATION
phase and produce a declared statement.<K,
C extends StmtContext<?, ?, ?>>
@NonNull ModelActionBuilder.Prerequisite<C>requiresDeclaredCtx
(StmtContext<?, ?, ?> context, ParserNamespace<K, C> namespace, K key) Deprecated.Undocumented method.<K,
E extends EffectiveStatement<?, ?>>
@NonNull ModelActionBuilder.Prerequisite<E>requiresEffective
(StmtContext<?, ?, ?> context, ParserNamespace<K, StmtContext<?, ?, ? extends E>> namespace, K key) Deprecated.Undocumented method.<E extends EffectiveStatement<?,
?>>
@NonNull ModelActionBuilder.Prerequisite<E>requiresEffective
(StmtContext<?, ?, ? extends E> stmt) Deprecated.Undocumented method.<K,
C extends StmtContext<?, ?, ?>>
@NonNull ModelActionBuilder.Prerequisite<C>requiresEffectiveCtx
(StmtContext<?, ?, ?> context, ParserNamespace<K, C> namespace, K key) Deprecated.Undocumented method.
-
Method Details
-
requiresDeclared
<D extends DeclaredStatement<?>> @NonNull ModelActionBuilder.Prerequisite<D> requiresDeclared(StmtContext<?, ? extends D, ?> context) Action requires that the specified context transition to completeModelProcessingPhase.FULL_DECLARATION
phase and produce a declared statement.- Parameters:
context
- Statement context which needs to complete the transition.- Returns:
- A
ModelActionBuilder.Prerequisite
returning the declared statement of the requested context.
-
requiresDeclared
@Deprecated <K,D extends DeclaredStatement<?>> @NonNull ModelActionBuilder.Prerequisite<D> requiresDeclared(StmtContext<?, ?, ?> context, ParserNamespace<K, StmtContext<?, ? extends D, ?>> namespace, K key) Deprecated.Undocumented method. Use at your own risk.Create a requirement on specified statement to be declared. -
requiresCtx
<A,D extends DeclaredStatement<A>, @NonNull ModelActionBuilder.Prerequisite<StmtContext<A,E extends EffectiveStatement<A, D>> D, requiresCtxE>> (StmtContext<A, D, E> context, ModelProcessingPhase phase) Action requires that the specified context completes specified phase beforeapply(InferenceAction)
may be invoked.- Parameters:
context
- Statement context which needs to complete the transition.phase
- ModelProcessingPhase which must have completed- Returns:
- A
ModelActionBuilder.Prerequisite
returning the requested context.
-
requiresCtx
<K,C extends StmtContext<?, @NonNull ModelActionBuilder.Prerequisite<C> requiresCtx?, ?>> (StmtContext<?, ?, ?> context, @NonNull ParserNamespace<K, C> namespace, K key, ModelProcessingPhase phase) -
requiresCtx
<K,C extends StmtContext<?, @NonNull ModelActionBuilder.Prerequisite<C> requiresCtx?, ?>> (StmtContext<?, ?, ?> context, @NonNull ParserNamespace<K, C> namespace, NamespaceKeyCriterion<K> criterion, ModelProcessingPhase phase) -
requiresCtxPath
<K,C extends StmtContext<?, @NonNull ModelActionBuilder.Prerequisite<C> requiresCtxPath?, ?>> (StmtContext<?, ?, ?> context, ParserNamespace<K, C> namespace, Iterable<K> keys, ModelProcessingPhase phase) -
mutatesEffectiveCtx
default <T extends StmtContext.Mutable<?,?, @NonNull ModelActionBuilder.Prerequisite<T> mutatesEffectiveCtx?>> (T context) Action mutates the effective model of specified statement. This is a shorthand formutatesCtx(context, EFFECTIVE_MODEL
.- Parameters:
context
- Target statement context- Returns:
- A
ModelActionBuilder.Prerequisite
returning the requested context.
-
mutatesEffectiveCtx
<K,E extends EffectiveStatement<?, @NonNull ModelActionBuilder.Prerequisite<StmtContext.Mutable<?,?>> ?, mutatesEffectiveCtxE>> (StmtContext<?, ?, ?> context, ParserNamespace<K, ? extends StmtContext<?, ?, ?>> namespace, K key) -
mutatesEffectiveCtxPath
<K,E extends EffectiveStatement<?, @NonNull ModelActionBuilder.Prerequisite<StmtContext.Mutable<?,?>> ?, mutatesEffectiveCtxPathE>> (StmtContext<?, ?, ?> context, ParserNamespace<K, ? extends StmtContext<?, ?, ?>> namespace, Iterable<K> keys) -
mutatesCtx
<C extends StmtContext.Mutable<?,?, @NonNull ModelActionBuilder.Prerequisite<C> mutatesCtx?>, T extends C> (T context, ModelProcessingPhase phase) Action mutates the specified statement in the specified phase. Target statement cannot complete specified phase before this action is applier.- Parameters:
context
- Target statement context- Returns:
- A
ModelActionBuilder.Prerequisite
returning the requested context.
-
apply
Apply anModelActionBuilder.InferenceAction
when this action's prerequisites are resolved.- Parameters:
action
- Inference action to apply- Throws:
InferenceException
- if the action failsNullPointerException
- ifaction is null
IllegalStateException
- if this action has an inference action already associated.
-
requiresDeclaredCtx
@Deprecated <K,C extends StmtContext<?, @NonNull ModelActionBuilder.Prerequisite<C> requiresDeclaredCtx?, ?>> (StmtContext<?, ?, ?> context, ParserNamespace<K, C> namespace, K key) Deprecated.Undocumented method. Use at your own risk.Create a requirement on specified statement context to be declared. -
requiresEffective
@Deprecated <E extends EffectiveStatement<?,?>> @NonNull ModelActionBuilder.Prerequisite<E> requiresEffective(StmtContext<?, ?, ? extends E> stmt) Deprecated.Undocumented method. Use at your own risk.Create a requirement on specified statement to become effective. -
requiresEffective
@Deprecated <K,E extends EffectiveStatement<?, @NonNull ModelActionBuilder.Prerequisite<E> requiresEffective?>> (StmtContext<?, ?, ?> context, ParserNamespace<K, StmtContext<?, ?, ? extends E>> namespace, K key) Deprecated.Undocumented method. Use at your own risk.Create a requirement on specified statement to become effective. -
requiresEffectiveCtx
@Deprecated <K,C extends StmtContext<?, @NonNull ModelActionBuilder.Prerequisite<C> requiresEffectiveCtx?, ?>> (StmtContext<?, ?, ?> context, ParserNamespace<K, C> namespace, K key) Deprecated.Undocumented method. Use at your own risk.Create a requirement on specified statement context to become effective. -
mutatesNs
@Deprecated @NonNull ModelActionBuilder.Prerequisite<StmtContext.Mutable<?,?, mutatesNs?>> (StmtContext.Mutable<?, ?, ?> ctx, ParserNamespace<?, ?> namespace) Deprecated.Undocumented method. Use at your own risk.Mark the fact that this action is mutating a namespace.
-