2 * Copyright (c) 2020 Lumina Networks, Inc. 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.jsonrpc.model;
10 import java.util.Objects;
11 import org.eclipse.jdt.annotation.NonNull;
12 import org.opendaylight.jsonrpc.provider.common.BuiltinSchemaContextProvider;
13 import org.opendaylight.jsonrpc.provider.common.GovernanceSchemaContextProvider;
14 import org.opendaylight.jsonrpc.provider.common.InbandModelsSchemaContextProvider;
15 import org.opendaylight.jsonrpc.provider.common.ProviderDependencies;
16 import org.opendaylight.jsonrpc.provider.common.Util;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.jsonrpc.rev161201.Peer;
18 import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
20 public class CombinedSchemaContextProvider implements SchemaContextProvider {
21 private final GovernanceProvider governanceProvider;
22 private final ProviderDependencies dependencies;
24 public CombinedSchemaContextProvider(@NonNull GovernanceProvider governanceProvider,
25 @NonNull ProviderDependencies dependencies) {
26 this.dependencies = Objects.requireNonNull(dependencies);
27 this.governanceProvider = Objects.requireNonNull(governanceProvider);
30 private SchemaContextProvider getProvider(Peer peer) {
31 if (Util.supportInbandModels(peer)) {
32 return InbandModelsSchemaContextProvider.create(dependencies.getTransportFactory(),
33 dependencies.getYangXPathParserFactory());
35 if (governanceProvider.get().isPresent()) {
36 return new GovernanceSchemaContextProvider(governanceProvider.get().orElseThrow(),
37 dependencies.getYangXPathParserFactory());
39 return new BuiltinSchemaContextProvider(dependencies.getSchemaService().getGlobalContext());
43 public EffectiveModelContext createSchemaContext(@NonNull Peer peer) {
44 Objects.requireNonNull(peer);
45 return getProvider(peer).createSchemaContext(peer);