X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=yang%2Fyang-parser-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fyangtools%2Fyang%2Fparser%2Fimpl%2FDefaultReactors.java;h=5f04363b954ffb3dd9f185b4d84247c2a14f2ce4;hb=refs%2Fchanges%2F87%2F92487%2F1;hp=b05d42da60b1d7b37db8f4771cfb30736f5f4592;hpb=aa263a5ec7d417b120ebb6e3db491fb5e18d3199;p=yangtools.git diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/impl/DefaultReactors.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/impl/DefaultReactors.java index b05d42da60..5f04363b95 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/impl/DefaultReactors.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/impl/DefaultReactors.java @@ -8,20 +8,31 @@ package org.opendaylight.yangtools.yang.parser.impl; import com.google.common.annotations.Beta; +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.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.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. @@ -30,20 +41,30 @@ import org.opendaylight.yangtools.yang.parser.stmt.reactor.CrossSourceStatementR */ @Beta public final class DefaultReactors { - private static final 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 } /** * 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 + * * * @return a shared default-configured reactor instance. */ - public static CrossSourceStatementReactor defaultReactor() { - return DEFAULT_REACTOR; + public static @NonNull CrossSourceStatementReactor defaultReactor() { + return DefaultReactor.INSTANCE; } /** @@ -52,27 +73,59 @@ public final class DefaultReactors { * * @return A populated CrossSourceStatementReactor builder. */ - public static CustomCrossSourceStatementReactorBuilder defaultReactorBuilder() { - return RFC7950Reactors.defaultReactorBuilder() + public static @NonNull CustomCrossSourceStatementReactorBuilder defaultReactorBuilder() { + return addExtensions(RFC7950Reactors.defaultReactorBuilder()); + } + + /** + * 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( + 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()) - .addNamespaceSupport(ModelProcessingPhase.FULL_DECLARATION, AnyxmlSchemaLocationNamespace.BEHAVIOR) + .addNamespaceSupport(ModelProcessingPhase.FULL_DECLARATION, AnyxmlSchemaLocationNamespace.BEHAVIOUR) .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()) // 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())