Propagate @Nonnull and @Nullable annotations
[yangtools.git] / yang / yang-parser-impl / src / main / java / org / opendaylight / yangtools / yang / parser / spi / meta / StatementSupport.java
1 /*
2  * Copyright (c) 2015 Cisco Systems, Inc. and others.  All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8
9 package org.opendaylight.yangtools.yang.parser.spi.meta;
10
11 import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
12 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
13 import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
14 import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
15
16 /**
17  *
18  * Support for processing concrete YANG statement.
19  *
20  * This interface is intended to be implemented by developers, which want to
21  * introduce support of statement to parser. Consider subclassing
22  * {@link AbstractStatementSupport} for easier implementation of this interface.
23  *
24  * @param <A>
25  *            Argument type
26  * @param <D>
27  *            Declared Statement representation
28  * @param <E>
29  *            Effective Statement representation
30  */
31 public interface StatementSupport<A, D extends DeclaredStatement<A>, E extends EffectiveStatement<A, D>> extends
32         StatementDefinition, StatementFactory<A, D, E> {
33
34     /**
35      * Returns public statement definition, which will be present in builded
36      * statements.
37      *
38      * Public statement definition may be used to provide different
39      * implementation of statement definition, which will not retain any build
40      * specific data or context.
41      *
42      * @return public statement definition, which will be present in builded
43      *         statements.
44      */
45     StatementDefinition getPublicView();
46
47     /**
48      *
49      * Parses textual representation of argument in object representation.
50      *
51      * @param ctx
52      *            Context, which may be used to access source-specific
53      *            namespaces required for parsing.
54      * @param value
55      *            String representation of value, as was present in text source.
56      * @return Parsed value
57      */
58     A parseArgumentValue(StmtContext<?, ?, ?> ctx, String value) throws SourceException;
59
60     /**
61      *
62      * Invoked when statement is added to build context.
63      *
64      * @param stmt
65      *            Context of added statement. No substatement are available.
66      */
67     void onStatementAdded(StmtContext.Mutable<A, D, E> stmt);
68
69     /**
70      *
71      * Invoked when statement is closed during
72      * {@link ModelProcessingPhase#SOURCE_PRE_LINKAGE} phase, only substatements
73      * from this and previous phase are available.
74      *
75      * Implementation may use method to perform actions on this event or
76      * register modification action using
77      * {@link StmtContext.Mutable#newInferenceAction(ModelProcessingPhase)}.
78      *
79      * @param stmt
80      *            Context of added statement.
81      */
82     void onPreLinkageDeclared(StmtContext.Mutable<A, D, E> stmt);
83
84     /**
85      *
86      * Invoked when statement is closed during
87      * {@link ModelProcessingPhase#SOURCE_LINKAGE} phase, only substatements
88      * from this and previous phase are available.
89      *
90      * Implementation may use method to perform actions on this event or
91      * register modification action using
92      * {@link StmtContext.Mutable#newInferenceAction(ModelProcessingPhase)}.
93      *
94      * @param stmt
95      *            Context of added statement.
96      */
97     void onLinkageDeclared(StmtContext.Mutable<A, D, E> stmt) throws SourceException;
98
99     /**
100      *
101      * Invoked when statement is closed during
102      * {@link ModelProcessingPhase#STATEMENT_DEFINITION} phase.
103      *
104      * Invoked when statement is closed during
105      * {@link ModelProcessingPhase#STATEMENT_DEFINITION} phase, only
106      * substatements from this phase are available.
107      *
108      * Implementation may use method to perform actions on this event or
109      * register modification action using
110      * {@link StmtContext.Mutable#newInferenceAction(ModelProcessingPhase)}.
111      *
112      * @param stmt
113      *            Context of added statement. Argument and statement parent is
114      *            accessible.
115      */
116     void onStatementDefinitionDeclared(StmtContext.Mutable<A, D, E> stmt) throws SourceException;
117
118     /**
119      *
120      * Invoked when statement is closed during
121      * {@link ModelProcessingPhase#FULL_DECLARATION} phase.
122      *
123      * Invoked when statement is closed during
124      * {@link ModelProcessingPhase#FULL_DECLARATION} phase, only substatements
125      * from this phase are available.
126      *
127      * Implementation may use method to perform actions on this event or
128      * register modification action using
129      * {@link StmtContext.Mutable#newInferenceAction(ModelProcessingPhase)}.
130      *
131      *
132      * @param stmt
133      *            Context of added statement. Argument and statement parent is
134      *            accessible.
135      */
136     void onFullDefinitionDeclared(StmtContext.Mutable<A, D, E> stmt) throws SourceException;
137 }