2 * Copyright (c) 2019 Red Hat, Inc. and others. All rights reserved.
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
8 package org.opendaylight.mdsal.dom.spi;
10 import static java.util.Objects.requireNonNull;
12 import com.google.common.annotations.Beta;
13 import com.google.common.util.concurrent.ListenableFuture;
14 import java.util.List;
15 import java.util.function.Consumer;
16 import java.util.function.Supplier;
17 import org.eclipse.jdt.annotation.NonNullByDefault;
18 import org.opendaylight.mdsal.dom.api.DOMSchemaService;
19 import org.opendaylight.mdsal.dom.api.DOMYangTextSourceProvider;
20 import org.opendaylight.yangtools.concepts.Registration;
21 import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
22 import org.opendaylight.yangtools.yang.model.api.source.SourceIdentifier;
23 import org.opendaylight.yangtools.yang.model.api.source.YangTextSource;
24 import org.opendaylight.yangtools.yang.model.repo.spi.SchemaSourceProvider;
27 * {@link DOMSchemaService} (and {@link DOMYangTextSourceProvider}) implementations backed by a
28 * {@code Supplier<EffectiveModelContext>} (and {@link SchemaSourceProvider}) which are known to be fixed and never
31 * @author Michael Vorburger.ch
35 public sealed class FixedDOMSchemaService implements DOMSchemaService {
36 private static final class WithYangTextSources extends FixedDOMSchemaService implements DOMYangTextSourceProvider {
37 private final SchemaSourceProvider<YangTextSource> schemaSourceProvider;
39 WithYangTextSources(final Supplier<EffectiveModelContext> modelContextSupplier,
40 final SchemaSourceProvider<YangTextSource> schemaSourceProvider) {
41 super(modelContextSupplier);
42 this.schemaSourceProvider = requireNonNull(schemaSourceProvider);
46 public List<Extension> supportedExtensions() {
51 public ListenableFuture<? extends YangTextSource> getSource(final SourceIdentifier sourceIdentifier) {
52 return schemaSourceProvider.getSource(sourceIdentifier);
56 private final Supplier<EffectiveModelContext> modelContextSupplier;
58 private FixedDOMSchemaService(final Supplier<EffectiveModelContext> modelContextSupplier) {
59 this.modelContextSupplier = requireNonNull(modelContextSupplier);
62 public static DOMSchemaService of(final EffectiveModelContext effectiveModel) {
63 final var checked = requireNonNull(effectiveModel);
64 return new FixedDOMSchemaService(() -> checked);
67 public static DOMSchemaService of(final Supplier<EffectiveModelContext> modelContextSupplier) {
68 return new FixedDOMSchemaService(modelContextSupplier);
71 public static DOMSchemaService of(final Supplier<EffectiveModelContext> modelContextSupplier,
72 final SchemaSourceProvider<YangTextSource> yangTextSourceProvider) {
73 return new WithYangTextSources(modelContextSupplier, requireNonNull(yangTextSourceProvider));
77 public final EffectiveModelContext getGlobalContext() {
78 return modelContextSupplier.get();
82 public final Registration registerSchemaContextListener(final Consumer<EffectiveModelContext> listener) {
83 listener.accept(getGlobalContext());