*/
package org.opendaylight.yangtools.yang.parser.impl;
+import static org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour.sourceLocal;
+
import com.google.common.annotations.Beta;
import org.eclipse.jdt.annotation.NonNull;
import org.opendaylight.yangtools.odlext.parser.AnyxmlSchemaLocationNamespace;
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.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.
*/
@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() {
// Hidden on purpose
* @return a shared default-configured reactor instance.
*/
public static @NonNull CrossSourceStatementReactor defaultReactor() {
- return DEFAULT_REACTOR;
+ return DefaultReactor.INSTANCE;
}
/**
*
* @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())
.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())
+ .addNamespaceSupport(ModelProcessingPhase.FULL_DECLARATION, sourceLocal(IetfYangSmiv2Namespace.class))
+
// RFC7952 annotation support
.addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, AnnotationStatementSupport.getInstance())