Introduced ChildSchemaNodes namespace to parser
[yangtools.git] / yang / yang-parser-impl / src / main / java / org / opendaylight / yangtools / yang / parser / stmt / rfc6020 / YangInferencePipeline.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 package org.opendaylight.yangtools.yang.parser.stmt.rfc6020;
9
10 import static org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour.global;
11 import static org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour.sourceLocal;
12 import static org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour.statementLocal;
13 import static org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour.treeScoped;
14 import static org.opendaylight.yangtools.yang.parser.spi.validation.ValidationBundlesNamespace.ValidationBundleType;
15
16 import org.opendaylight.yangtools.yang.parser.spi.source.StmtOrderingNamespace;
17
18 import org.opendaylight.yangtools.yang.parser.spi.source.ModuleCtxToModuleQName;
19 import org.opendaylight.yangtools.yang.parser.spi.source.QNameToStatementDefinition;
20 import org.opendaylight.yangtools.yang.parser.spi.validation.ValidationBundlesNamespace;
21 import org.opendaylight.yangtools.yang.parser.spi.meta.DerivedIdentitiesNamespace;
22 import org.opendaylight.yangtools.yang.parser.spi.IdentityNamespace;
23 import org.opendaylight.yangtools.yang.parser.spi.source.IncludedSubmoduleNameToIdentifier;
24 import org.opendaylight.yangtools.yang.parser.spi.ExtensionNamespace;
25 import org.opendaylight.yangtools.yang.parser.spi.source.ModuleQNameToModuleName;
26 import org.opendaylight.yangtools.yang.parser.spi.source.PrefixToModule;
27 import org.opendaylight.yangtools.yang.parser.spi.TypeNamespace;
28 import org.opendaylight.yangtools.yang.parser.spi.source.BelongsToModuleContext;
29 import org.opendaylight.yangtools.yang.parser.spi.source.ModuleNamespaceForBelongsTo;
30 import org.opendaylight.yangtools.yang.parser.spi.GroupingNamespace;
31 import org.opendaylight.yangtools.yang.parser.spi.source.BelongsToPrefixToModuleName;
32 import org.opendaylight.yangtools.yang.parser.spi.source.ModuleNameToModuleQName;
33 import org.opendaylight.yangtools.yang.parser.spi.SubmoduleNamespace;
34 import org.opendaylight.yangtools.yang.parser.spi.source.ModuleIdentifierToModuleQName;
35 import org.opendaylight.yangtools.yang.parser.spi.source.ImpPrefixToModuleIdentifier;
36 import com.google.common.collect.ImmutableMap;
37 import java.util.Map;
38 import org.opendaylight.yangtools.yang.parser.spi.ModuleNamespace;
39 import org.opendaylight.yangtools.yang.parser.spi.NamespaceToModule;
40 import org.opendaylight.yangtools.yang.parser.spi.meta.ModelProcessingPhase;
41 import org.opendaylight.yangtools.yang.parser.spi.meta.StatementSupportBundle;
42 import org.opendaylight.yangtools.yang.parser.stmt.reactor.CrossSourceStatementReactor;
43
44 public final class YangInferencePipeline {
45
46     public static final StatementSupportBundle INIT_BUNDLE = StatementSupportBundle
47             .builder().addSupport(global(ValidationBundlesNamespace.class))
48             .build();
49
50     public static final StatementSupportBundle LINKAGE_BUNDLE = StatementSupportBundle
51             .derivedFrom(INIT_BUNDLE)
52             .addSupport(new ModuleStatementSupport())
53             .addSupport(new SubmoduleStatementImpl.Definition())
54             .addSupport(new NamespaceStatementImpl.Definition())
55             .addSupport(new ImportStatementDefinition())
56             .addSupport(new IncludeStatementImpl.Definition())
57             .addSupport(new PrefixStatementImpl.Definition())
58             .addSupport(new YangVersionStatementImpl.Definition())
59             .addSupport(new DescriptionStatementImpl.Definition())
60             .addSupport(new RevisionStatementImpl.Definition())
61             .addSupport(new RevisionDateStatementImpl.Definition())
62             .addSupport(new ReferenceStatementImpl.Definition())
63             .addSupport(new ContactStatementImpl.Definition())
64             .addSupport(new OrganizationStatementImpl.Definition())
65             .addSupport(new BelongsToStatementImpl.Definition())
66             .addSupport(global(ModuleNamespace.class))
67             .addSupport(global(ModuleNamespaceForBelongsTo.class))
68             .addSupport(global(SubmoduleNamespace.class))
69             .addSupport(global(NamespaceToModule.class))
70             .addSupport(global(ModuleNameToModuleQName.class))
71             .addSupport(global(ModuleCtxToModuleQName.class))
72             .addSupport(global(ModuleQNameToModuleName.class))
73             .addSupport(global(PrefixToModule.class))
74             .addSupport(global(ModuleIdentifierToModuleQName.class))
75             .addSupport(sourceLocal(ImportedModuleContext.class))
76             .addSupport(sourceLocal(IncludedModuleContext.class))
77             .addSupport(sourceLocal(IncludedSubmoduleNameToIdentifier.class))
78             .addSupport(sourceLocal(ImpPrefixToModuleIdentifier.class))
79             .addSupport(sourceLocal(BelongsToModuleContext.class))
80             .addSupport(sourceLocal(QNameToStatementDefinition.class))
81             .addSupport(sourceLocal(BelongsToPrefixToModuleName.class)).build();
82
83
84     private static final StatementSupportBundle STMT_DEF_BUNDLE = StatementSupportBundle
85             .derivedFrom(LINKAGE_BUNDLE)
86             .addSupport(new YinElementStatementImpl.Definition())
87             .addSupport(new ArgumentStatementImpl.Definition())
88             .addSupport(new ExtensionStatementImpl.Definition())
89             .addSupport(global(ChildSchemaNodes.class))
90             .addSupport(global(ExtensionNamespace.class))
91             .addSupport(new TypedefStatementImpl.Definition())
92             .addSupport(treeScoped(TypeNamespace.class))
93             .addSupport(new IdentityStatementImpl.Definition())
94             .addSupport(global(IdentityNamespace.class))
95             .addSupport(new DefaultStatementImpl.Definition())
96             .addSupport(new StatusStatementImpl.Definition())
97             .addSupport(new TypeStatementImpl.Definition())
98             .addSupport(new UnitsStatementImpl.Definition())
99             .addSupport(new RequireInstanceStatementImpl.Definition())
100             .addSupport(new BitStatementImpl.Definition())
101             .addSupport(new PathStatementImpl.Definition())
102             .addSupport(new EnumStatementImpl.Definition())
103             .addSupport(new LengthStatementImpl.Definition())
104             .addSupport(new PatternStatementImpl.Definition())
105             .addSupport(new RangeStatementImpl.Definition())
106             .addSupport(new ContainerStatementImpl.Definition())
107             .addSupport(new GroupingStatementImpl.Definition())
108             .addSupport(new ListStatementImpl.Definition())
109             .addSupport(new UniqueStatementImpl.Definition())
110             .addSupport(new RpcStatementImpl.Definition())
111             .addSupport(new InputStatementImpl.Definition())
112             .addSupport(new OutputStatementImpl.Definition())
113             .addSupport(new NotificationStatementImpl.Definition())
114             .addSupport(new FractionDigitsStatementImpl.Definition())
115             .addSupport(new BaseStatementImpl.Definition())
116             .addSupport(global(DerivedIdentitiesNamespace.class))
117             .build();
118
119     private static final StatementSupportBundle FULL_DECL_BUNDLE = StatementSupportBundle
120             .derivedFrom(STMT_DEF_BUNDLE)
121             .addSupport(new LeafStatementImpl.Definition())
122             .addSupport(new ConfigStatementImpl.Definition())
123             .addSupport(new DeviationStatementImpl.Definition())
124             .addSupport(new DeviateStatementImpl.Definition())
125             .addSupport(new ChoiceStatementImpl.Definition())
126             .addSupport(new CaseStatementImpl.Definition())
127             .addSupport(new MustStatementImpl.Definition())
128             .addSupport(new MandatoryStatementImpl.Definition())
129             .addSupport(new AnyxmlStatementImpl.Definition())
130             .addSupport(new IfFeatureStatementImpl.Definition())
131             .addSupport(new UsesStatementImpl.Definition())
132             .addSupport(treeScoped(GroupingNamespace.class)) //treeScoped
133             .addSupport(new ErrorMessageStatementImpl.Definition())
134             .addSupport(new ErrorAppTagStatementImpl.Definition())
135             .addSupport(new LeafListStatementImpl.Definition())
136             .addSupport(new PresenceStatementImpl.Definition())
137             .addSupport(new KeyStatementImpl.Definition())
138             .addSupport(new MaxElementsStatementImpl.Definition())
139             .addSupport(new MinElementsStatementImpl.Definition())
140             .addSupport(new OrderedByStatementImpl.Definition())
141             .addSupport(new WhenStatementImpl.Definition())
142             .addSupport(new AugmentStatementImpl.Definition())
143             .addSupport(new RefineStatementImpl.Definition())
144             .addSupport(new FeatureStatementImpl.Definition())
145             .addSupport(new PositionStatementImpl.Definition())
146             .addSupport(new ValueStatementImpl.Definition())
147             .addSupport(global(StmtOrderingNamespace.class))
148             .build();
149
150     public static final Map<ModelProcessingPhase, StatementSupportBundle> RFC6020_BUNDLES = ImmutableMap
151             .<ModelProcessingPhase, StatementSupportBundle> builder()
152             .put(ModelProcessingPhase.SOURCE_LINKAGE, LINKAGE_BUNDLE)
153             .put(ModelProcessingPhase.STATEMENT_DEFINITION, STMT_DEF_BUNDLE)
154             .put(ModelProcessingPhase.FULL_DECLARATION, FULL_DECL_BUNDLE)
155             .put(ModelProcessingPhase.EFFECTIVE_MODEL, FULL_DECL_BUNDLE)
156             .build();
157
158     public static final CrossSourceStatementReactor RFC6020_REACTOR = CrossSourceStatementReactor
159             .builder()
160             .setBundle(ModelProcessingPhase.INIT, INIT_BUNDLE)
161             .setBundle(ModelProcessingPhase.SOURCE_LINKAGE, LINKAGE_BUNDLE)
162             .setBundle(ModelProcessingPhase.STATEMENT_DEFINITION,
163                     STMT_DEF_BUNDLE)
164             .setBundle(ModelProcessingPhase.FULL_DECLARATION, FULL_DECL_BUNDLE)
165             .setBundle(ModelProcessingPhase.EFFECTIVE_MODEL, FULL_DECL_BUNDLE)
166             .setValidationBundle(
167                     ValidationBundleType.SUPPORTED_REFINE_SUBSTATEMENTS,
168                     YangValidationBundles.SUPPORTED_REFINE_SUBSTATEMENTS)
169             .setValidationBundle(ValidationBundleType.SUPPORTED_AUGMENT_TARGETS,
170                     YangValidationBundles.SUPPORTED_AUGMENT_TARGETS)
171             .setValidationBundle(ValidationBundleType.SUPPORTED_CASE_SHORTHANDS,
172                     YangValidationBundles.SUPPORTED_CASE_SHORTHANDS)
173             .setValidationBundle(ValidationBundleType.SUPPORTED_DATA_NODES,
174                     YangValidationBundles.SUPPORTED_DATA_NODES)
175              .build();
176
177     private YangInferencePipeline() {
178         throw new UnsupportedOperationException("Utility class");
179     }
180 }