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.InferenceActionimplementation 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 interfaceUser-defined inference action.static interfacestatic interface -
Method Summary
Modifier and TypeMethodDescriptionvoidApply anModelActionBuilder.InferenceActionwhen 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 org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement<?, ?>, N extends ParserNamespace<K, ? extends StmtContext<?, ?, ?>>>
@NonNull ModelActionBuilder.Prerequisite<StmtContext.Mutable<?,?, E>> mutatesEffectiveCtx(StmtContext<?, ?, ?> context, Class<N> 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 org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement<?, ?>, N extends ParserNamespace<K, ? extends StmtContext<?, ?, ?>>>
@NonNull ModelActionBuilder.Prerequisite<StmtContext.Mutable<?,?, E>> mutatesEffectiveCtxPath(StmtContext<?, ?, ?> context, Class<N> namespace, Iterable<K> keys) <N extends ParserNamespace<?,?>>
@NonNull ModelActionBuilder.Prerequisite<StmtContext.Mutable<?,?, ?>> mutatesNs(StmtContext.Mutable<?, ?, ?> ctx, Class<N> namespace) Deprecated.Undocumented method.<K,N extends StatementNamespace<K, ?, ?>>
@NonNull ModelActionBuilder.Prerequisite<StmtContext<?,?, ?>> requiresCtx(StmtContext<?, ?, ?> context, Class<@NonNull N> namespace, K key, ModelProcessingPhase phase) <K,N extends StatementNamespace<K, ?, ?>>
@NonNull ModelActionBuilder.Prerequisite<StmtContext<?,?, ?>> requiresCtx(StmtContext<?, ?, ?> context, Class<@NonNull N> namespace, NamespaceKeyCriterion<K> criterion, ModelProcessingPhase phase) <A,D extends org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement<A>, E extends org.opendaylight.yangtools.yang.model.api.meta.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,E extends org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement<?, ?>, N extends ParserNamespace<K, ? extends StmtContext<?, ?, ?>>>
@NonNull ModelActionBuilder.Prerequisite<StmtContext<?,?, E>> requiresCtxPath(StmtContext<?, ?, ?> context, Class<N> namespace, Iterable<K> keys, ModelProcessingPhase phase) <K,D extends org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement<?>, N extends StatementNamespace<K, ? extends D, ?>>
@NonNull ModelActionBuilder.Prerequisite<D>requiresDeclared(StmtContext<?, ?, ?> context, Class<N> namespace, K key) Deprecated.Undocumented method.<D extends org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement<?>>
@NonNull ModelActionBuilder.Prerequisite<D>requiresDeclared(StmtContext<?, ? extends D, ?> context) Action requires that the specified context transition to completeModelProcessingPhase.FULL_DECLARATIONphase and produce a declared statement.<K,D extends org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement<?>, N extends StatementNamespace<K, ? extends D, ?>>
@NonNull ModelActionBuilder.Prerequisite<StmtContext<?,D, ?>> requiresDeclaredCtx(StmtContext<?, ?, ?> context, Class<N> namespace, K key) Deprecated.Undocumented method.<K,E extends org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement<?, ?>, N extends StatementNamespace<K, ?, ? extends E>>
@NonNull ModelActionBuilder.Prerequisite<E>requiresEffective(StmtContext<?, ?, ?> context, Class<N> namespace, K key) Deprecated.Undocumented method.<E extends org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement<?,?>>
@NonNull ModelActionBuilder.Prerequisite<E>requiresEffective(StmtContext<?, ?, ? extends E> stmt) Deprecated.Undocumented method.<K,E extends org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement<?, ?>, N extends StatementNamespace<K, ?, ? extends E>>
@NonNull ModelActionBuilder.Prerequisite<StmtContext<?,?, E>> requiresEffectiveCtx(StmtContext<?, ?, ?> context, Class<N> namespace, K key) Deprecated.Undocumented method.
-
Method Details
-
requiresDeclared
<D extends org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement<?>> @NonNull ModelActionBuilder.Prerequisite<D> requiresDeclared(StmtContext<?, ? extends D, ?> context) Action requires that the specified context transition to completeModelProcessingPhase.FULL_DECLARATIONphase and produce a declared statement.- Parameters:
context- Statement context which needs to complete the transition.- Returns:
- A
ModelActionBuilder.Prerequisitereturning the declared statement of the requested context.
-
requiresDeclared
@Deprecated <K,D extends org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement<?>, @NonNull ModelActionBuilder.Prerequisite<D> requiresDeclaredN extends StatementNamespace<K, ? extends D, ?>> (StmtContext<?, ?, ?> context, Class<N> namespace, K key) Deprecated.Undocumented method. Use at your own risk.Create a requirement on specified statement to be declared. -
requiresCtx
<A,D extends org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement<A>, @NonNull ModelActionBuilder.Prerequisite<StmtContext<A,E extends org.opendaylight.yangtools.yang.model.api.meta.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.Prerequisitereturning the requested context.
-
requiresCtx
<K,N extends StatementNamespace<K, @NonNull ModelActionBuilder.Prerequisite<StmtContext<?,?, ?>> ?, requiresCtx?>> (StmtContext<?, ?, ?> context, Class<@NonNull N> namespace, K key, ModelProcessingPhase phase) -
requiresCtx
<K,N extends StatementNamespace<K, @NonNull ModelActionBuilder.Prerequisite<StmtContext<?,?, ?>> ?, requiresCtx?>> (StmtContext<?, ?, ?> context, Class<@NonNull N> namespace, NamespaceKeyCriterion<K> criterion, ModelProcessingPhase phase) -
requiresCtxPath
<K,E extends org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement<?, @NonNull ModelActionBuilder.Prerequisite<StmtContext<?,?>, N extends ParserNamespace<K, ? extends StmtContext<?, ?, ?>>> ?, requiresCtxPathE>> (StmtContext<?, ?, ?> context, Class<N> 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.Prerequisitereturning the requested context.
-
mutatesEffectiveCtx
<K,E extends org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement<?, @NonNull ModelActionBuilder.Prerequisite<StmtContext.Mutable<?,?>, N extends ParserNamespace<K, ? extends StmtContext<?, ?, ?>>> ?, mutatesEffectiveCtxE>> (StmtContext<?, ?, ?> context, Class<N> namespace, K key) -
mutatesEffectiveCtxPath
<K,E extends org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement<?, @NonNull ModelActionBuilder.Prerequisite<StmtContext.Mutable<?,?>, N extends ParserNamespace<K, ? extends StmtContext<?, ?, ?>>> ?, mutatesEffectiveCtxPathE>> (StmtContext<?, ?, ?> context, Class<N> 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.Prerequisitereturning the requested context.
-
apply
Apply anModelActionBuilder.InferenceActionwhen this action's prerequisites are resolved.- Parameters:
action- Inference action to apply- Throws:
InferenceException- if the action failsNullPointerException- ifaction is nullIllegalStateException- if this action has an inference action already associated.
-
requiresDeclaredCtx
@Deprecated <K,D extends org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement<?>, @NonNull ModelActionBuilder.Prerequisite<StmtContext<?,N extends StatementNamespace<K, ? extends D, ?>> D, requiresDeclaredCtx?>> (StmtContext<?, ?, ?> context, Class<N> 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 org.opendaylight.yangtools.yang.model.api.meta.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 org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement<?, @NonNull ModelActionBuilder.Prerequisite<E> requiresEffective?>, N extends StatementNamespace<K, ?, ? extends E>> (StmtContext<?, ?, ?> context, Class<N> namespace, K key) Deprecated.Undocumented method. Use at your own risk.Create a requirement on specified statement to become effective. -
requiresEffectiveCtx
@Deprecated <K,E extends org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement<?, @NonNull ModelActionBuilder.Prerequisite<StmtContext<?,?>, N extends StatementNamespace<K, ?, ? extends E>> ?, requiresEffectiveCtxE>> (StmtContext<?, ?, ?> context, Class<N> namespace, K key) Deprecated.Undocumented method. Use at your own risk.Create a requirement on specified statement context to become effective. -
mutatesNs
@Deprecated <N extends ParserNamespace<?,?>> @NonNull ModelActionBuilder.Prerequisite<StmtContext.Mutable<?,?, mutatesNs?>> (StmtContext.Mutable<?, ?, ?> ctx, Class<N> namespace) Deprecated.Undocumented method. Use at your own risk.Mark the fact that this action is mutating a namespace.
-