Add RFC6643 parser support
[yangtools.git] / yang / yang-parser-impl / src / main / java / org / opendaylight / yangtools / yang / parser / impl / DefaultReactors.java
index 1f07e75741f5794700cb5fe484f015957d6baef2..8d66a4d04d095770bdf04b8a5f5bf894c28e305e 100644 (file)
@@ -7,20 +7,34 @@
  */
 package org.opendaylight.yangtools.yang.parser.impl;
 
-import static org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour.treeScoped;
+import static org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour.sourceLocal;
 
 import com.google.common.annotations.Beta;
-import org.opendaylight.yangtools.openconfig.parser.OpenConfig;
-import org.opendaylight.yangtools.rfc7952.parser.Metadata;
-import org.opendaylight.yangtools.yang.parser.odlext.namespace.AnyxmlSchemaLocationNamespace;
-import org.opendaylight.yangtools.yang.parser.odlext.stmt.AnyxmlSchemaLocationSupport;
+import org.eclipse.jdt.annotation.NonNull;
+import org.opendaylight.yangtools.odlext.parser.AnyxmlSchemaLocationNamespace;
+import org.opendaylight.yangtools.odlext.parser.AnyxmlSchemaLocationStatementSupport;
+import org.opendaylight.yangtools.odlext.parser.AnyxmlStatementSupportOverride;
+import org.opendaylight.yangtools.openconfig.parser.EncryptedValueStatementSupport;
+import org.opendaylight.yangtools.openconfig.parser.HashedValueStatementSupport;
+import org.opendaylight.yangtools.rfc6241.parser.GetFilterElementAttributesStatementSupport;
+import org.opendaylight.yangtools.rfc6536.parser.DefaultDenyAllStatementSupport;
+import org.opendaylight.yangtools.rfc6536.parser.DefaultDenyWriteStatementSupport;
+import org.opendaylight.yangtools.rfc6643.parser.AliasStatementSupport;
+import org.opendaylight.yangtools.rfc6643.parser.DefValStatementSupport;
+import org.opendaylight.yangtools.rfc6643.parser.DisplayHintStatementSupport;
+import org.opendaylight.yangtools.rfc6643.parser.IetfYangSmiv2Namespace;
+import org.opendaylight.yangtools.rfc6643.parser.ImpliedStatementSupport;
+import org.opendaylight.yangtools.rfc6643.parser.MaxAccessStatementSupport;
+import org.opendaylight.yangtools.rfc6643.parser.OidStatementSupport;
+import org.opendaylight.yangtools.rfc6643.parser.SubIdStatementSupport;
+import org.opendaylight.yangtools.rfc7952.parser.AnnotationStatementSupport;
+import org.opendaylight.yangtools.rfc8040.parser.YangDataStatementSupport;
+import org.opendaylight.yangtools.rfc8528.parser.MountPointStatementSupport;
 import org.opendaylight.yangtools.yang.parser.rfc7950.reactor.CustomCrossSourceStatementReactorBuilder;
 import org.opendaylight.yangtools.yang.parser.rfc7950.reactor.RFC7950Reactors;
 import org.opendaylight.yangtools.yang.parser.spi.meta.ModelProcessingPhase;
-import org.opendaylight.yangtools.yang.parser.spi.meta.StatementSupport;
 import org.opendaylight.yangtools.yang.parser.stmt.reactor.CrossSourceStatementReactor;
 import org.opendaylight.yangtools.yang.parser.stmt.reactor.CrossSourceStatementReactor.Builder;
-import org.opendaylight.yangtools.yang.parser.stmt.rfc8040.YangDataStatementSupport;
 
 /**
  * Utility class for instantiating default-configured {@link CrossSourceStatementReactor}s.
@@ -29,19 +43,26 @@ import org.opendaylight.yangtools.yang.parser.stmt.rfc8040.YangDataStatementSupp
  */
 @Beta
 public final class DefaultReactors {
-    private static final CrossSourceStatementReactor DEFAULT_REACTOR = defaultReactorBuilder().build();
+    private static final @NonNull CrossSourceStatementReactor DEFAULT_REACTOR = defaultReactorBuilder().build();
 
     private DefaultReactors() {
-        throw new UnsupportedOperationException();
+        // Hidden on purpose
     }
 
     /**
      * Get a shared default-configured reactor instance. This instance is configured to handle both RFC6020 and RFC7950,
-     * as well as RFC8040's yang-data extension.
+     * as well as
+     * <ul>
+     * <li>RFC6536's default-deny-{all,write} extensions</li>
+     * <li>RFC7952's annotation extension</li>
+     * <li>RFC8040's yang-data extension</li>
+     * <li>OpenConfig extensions</li>
+     * <li>OpenDaylight extensions</li>
+     * </ul>
      *
      * @return a shared default-configured reactor instance.
      */
-    public static CrossSourceStatementReactor defaultReactor() {
+    public static @NonNull CrossSourceStatementReactor defaultReactor() {
         return DEFAULT_REACTOR;
     }
 
@@ -52,25 +73,47 @@ public final class DefaultReactors {
      * @return A populated CrossSourceStatementReactor builder.
      */
     public static CustomCrossSourceStatementReactorBuilder defaultReactorBuilder() {
-        final CustomCrossSourceStatementReactorBuilder ret =  RFC7950Reactors.defaultReactorBuilder();
+        return RFC7950Reactors.defaultReactorBuilder()
+                // AnyxmlSchemaLocation support
+                .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION,
+                    AnyxmlSchemaLocationStatementSupport.getInstance())
+                .addNamespaceSupport(ModelProcessingPhase.FULL_DECLARATION, AnyxmlSchemaLocationNamespace.BEHAVIOUR)
+                .overrideStatementSupport(ModelProcessingPhase.FULL_DECLARATION,
+                    AnyxmlStatementSupportOverride.getInstance())
 
-        // AnyxmlSchemaLocation support
-        ret.addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, AnyxmlSchemaLocationSupport.getInstance());
-        ret.addNamespaceSupport(ModelProcessingPhase.FULL_DECLARATION, treeScoped(AnyxmlSchemaLocationNamespace.class));
+                // RFC6241 get-filter-element-attributes support
+                .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION,
+                    GetFilterElementAttributesStatementSupport.getInstance())
 
-        // RFC7952 annotation support
-        for (StatementSupport<?, ?, ?> support : Metadata.getStatements()) {
-            ret.addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, support);
-        }
+                // RFC6536 default-deny-{all,write} support
+                .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION,
+                    DefaultDenyAllStatementSupport.getInstance())
+                .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION,
+                    DefaultDenyWriteStatementSupport.getInstance())
 
-        // RFC8040 yang-data support
-        ret.addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, YangDataStatementSupport.getInstance());
+                // RFC6643 extensions
+                .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, DisplayHintStatementSupport.getInstance())
+                .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, MaxAccessStatementSupport.getInstance())
+                .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, DefValStatementSupport.getInstance())
+                .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, ImpliedStatementSupport.getInstance())
+                .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, AliasStatementSupport.getInstance())
+                .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, OidStatementSupport.getInstance())
+                .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, SubIdStatementSupport.getInstance())
+                .addNamespaceSupport(ModelProcessingPhase.FULL_DECLARATION, sourceLocal(IetfYangSmiv2Namespace.class))
 
-        // OpenConfig extensions support (except openconfig-version)
-        for (StatementSupport<?, ?, ?> support : OpenConfig.getStatements()) {
-            ret.addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, support);
-        }
+                // RFC7952 annotation support
+                .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, AnnotationStatementSupport.getInstance())
 
-        return ret;
+                // RFC8040 yang-data support
+                .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, YangDataStatementSupport.getInstance())
+
+                // RFC8528 yang-data support
+                .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, MountPointStatementSupport.getInstance())
+
+                // OpenConfig extensions support (except openconfig-version)
+                .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION,
+                    EncryptedValueStatementSupport.getInstance())
+                .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION,
+                    HashedValueStatementSupport.getInstance());
     }
 }