11eb9c1bf1a1463d1bfd63daafb6a4beb582e2f9
[smo/teiv.git] /
1 /*
2  *  ============LICENSE_START=======================================================
3  *  Copyright (C) 2024 Ericsson
4  *  Modifications Copyright (C) 2024 OpenInfra Foundation Europe
5  *  ================================================================================
6  *  Licensed under the Apache License, Version 2.0 (the "License");
7  *  you may not use this file except in compliance with the License.
8  *  You may obtain a copy of the License at
9  *
10  *        http://www.apache.org/licenses/LICENSE-2.0
11  *
12  *  Unless required by applicable law or agreed to in writing, software
13  *  distributed under the License is distributed on an "AS IS" BASIS,
14  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  *  See the License for the specific language governing permissions and
16  *  limitations under the License.
17  *
18  *  SPDX-License-Identifier: Apache-2.0
19  *  ============LICENSE_END=========================================================
20  */
21 package org.oran.smo.yangtools.parser.model.statements;
22
23 import java.util.List;
24 import java.util.Map;
25
26 import org.oran.smo.yangtools.parser.model.statements.yang.YangCoreClassSupplier;
27
28 /**
29  * Implementations of this interface can supply type-safe classes for statements. Implementation
30  * classes are typically invoked when the YANG statement tree is being built from the YANG DOM tree.
31  * For YANG core statements as defined in RFC 7950, {@link YangCoreClassSupplier} will be used. Other
32  * implementations typically handle extensions.
33  *
34  * @author Mark Hollmann
35  */
36 public interface StatementClassSupplier {
37
38     /**
39      * Returns information about the statements that this implementation can handle.
40      * <p>
41      * The map keys are the names of modules. The map value is a list of statement names
42      * that are defined within that module, and which the implementation can handle.
43      */
44     Map<String, List<String>> getHandledStatements();
45
46     /**
47      * Returns the Java class that represents the YANG statement.
48      * <p/>
49      * Implementations will return either a specific class that can handle the statement or null.
50      * <p/>
51      * If the statement represents an extension, either {@link ExtensionStatement} or a subclass of
52      * {@link ExtensionStatement} must be returned. Failure to do so will lead to parse errors.
53      * <p/>
54      * The supplied method <b>must</b> have a constructor as follows, and invoke super:
55      * <p/>
56      * <pre>
57      * public class MyStatement extends ExtensionStatement {
58      *
59      * public MyStatement(final AbstractStatement parentStatement, final YangDomElement domElement) {
60      * super(parentStatement, domElement);
61      * ...
62      * }
63      * }
64      * </pre>
65      */
66     <T extends AbstractStatement> Class<T> getJavaClazzForStatement(String moduleName, String statementName);
67 }