Remove IetfYangSmiv2Namespace
[yangtools.git] / yang / yang-parser-impl / src / main / java / org / opendaylight / yangtools / yang / parser / impl / DefaultReactors.java
index 2e66f5e3291ece9d0fcd184eb784ac09c474e9e3..5f04363b954ffb3dd9f185b4d84247c2a14f2ce4 100644 (file)
@@ -14,8 +14,16 @@ import org.opendaylight.yangtools.odlext.parser.AnyxmlSchemaLocationStatementSup
 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.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;
@@ -24,6 +32,7 @@ import org.opendaylight.yangtools.yang.parser.rfc7950.reactor.RFC7950Reactors;
 import org.opendaylight.yangtools.yang.parser.spi.meta.ModelProcessingPhase;
 import org.opendaylight.yangtools.yang.parser.stmt.reactor.CrossSourceStatementReactor;
 import org.opendaylight.yangtools.yang.parser.stmt.reactor.CrossSourceStatementReactor.Builder;
+import org.opendaylight.yangtools.yang.xpath.api.YangXPathParserFactory;
 
 /**
  * Utility class for instantiating default-configured {@link CrossSourceStatementReactor}s.
@@ -32,10 +41,13 @@ import org.opendaylight.yangtools.yang.parser.stmt.reactor.CrossSourceStatementR
  */
 @Beta
 public final class DefaultReactors {
-    private static final @NonNull CrossSourceStatementReactor DEFAULT_REACTOR = defaultReactorBuilder().build();
+    private static final class DefaultReactor {
+        // Thread-safe lazy init
+        static final @NonNull CrossSourceStatementReactor INSTANCE = defaultReactorBuilder().build();
+    }
 
     private DefaultReactors() {
-        throw new UnsupportedOperationException();
+        // Hidden on purpose
     }
 
     /**
@@ -52,7 +64,17 @@ public final class DefaultReactors {
      * @return a shared default-configured reactor instance.
      */
     public static @NonNull CrossSourceStatementReactor defaultReactor() {
-        return DEFAULT_REACTOR;
+        return DefaultReactor.INSTANCE;
+    }
+
+    /**
+     * Return a baseline CrossSourceStatementReactor {@link Builder}. The builder is initialized to the equivalent
+     * of the reactor returned via {@link #defaultReactor()}, but can be further customized before use.
+     *
+     * @return A populated CrossSourceStatementReactor builder.
+     */
+    public static @NonNull CustomCrossSourceStatementReactorBuilder defaultReactorBuilder() {
+        return addExtensions(RFC7950Reactors.defaultReactorBuilder());
     }
 
     /**
@@ -61,8 +83,14 @@ public final class DefaultReactors {
      *
      * @return A populated CrossSourceStatementReactor builder.
      */
-    public static CustomCrossSourceStatementReactorBuilder defaultReactorBuilder() {
-        return RFC7950Reactors.defaultReactorBuilder()
+    public static @NonNull CustomCrossSourceStatementReactorBuilder defaultReactorBuilder(
+            final YangXPathParserFactory xpathFactory) {
+        return addExtensions(RFC7950Reactors.defaultReactorBuilder(xpathFactory));
+    }
+
+    private static @NonNull CustomCrossSourceStatementReactorBuilder addExtensions(
+            final @NonNull CustomCrossSourceStatementReactorBuilder builder) {
+        return builder
                 // AnyxmlSchemaLocation support
                 .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION,
                     AnyxmlSchemaLocationStatementSupport.getInstance())
@@ -70,12 +98,25 @@ public final class DefaultReactors {
                 .overrideStatementSupport(ModelProcessingPhase.FULL_DECLARATION,
                     AnyxmlStatementSupportOverride.getInstance())
 
+                // RFC6241 get-filter-element-attributes support
+                .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION,
+                    GetFilterElementAttributesStatementSupport.getInstance())
+
                 // RFC6536 default-deny-{all,write} support
                 .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION,
                     DefaultDenyAllStatementSupport.getInstance())
                 .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION,
                     DefaultDenyWriteStatementSupport.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())
+
                 // RFC7952 annotation support
                 .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, AnnotationStatementSupport.getInstance())