Migrate users of Optional.get()
[jsonrpc.git] / provider / common / src / main / java / org / opendaylight / jsonrpc / model / CombinedSchemaContextProvider.java
1 /*
2  * Copyright (c) 2020 Lumina Networks, Inc. All rights reserved.
3  *
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
7  */
8 package org.opendaylight.jsonrpc.model;
9
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;
19
20 public class CombinedSchemaContextProvider implements SchemaContextProvider {
21     private final GovernanceProvider governanceProvider;
22     private final ProviderDependencies dependencies;
23
24     public CombinedSchemaContextProvider(@NonNull GovernanceProvider governanceProvider,
25             @NonNull ProviderDependencies dependencies) {
26         this.dependencies = Objects.requireNonNull(dependencies);
27         this.governanceProvider = Objects.requireNonNull(governanceProvider);
28     }
29
30     private SchemaContextProvider getProvider(Peer peer) {
31         if (Util.supportInbandModels(peer)) {
32             return InbandModelsSchemaContextProvider.create(dependencies.getTransportFactory(),
33                     dependencies.getYangXPathParserFactory());
34         }
35         if (governanceProvider.get().isPresent()) {
36             return new GovernanceSchemaContextProvider(governanceProvider.get().orElseThrow(),
37                     dependencies.getYangXPathParserFactory());
38         }
39         return new BuiltinSchemaContextProvider(dependencies.getSchemaService().getGlobalContext());
40     }
41
42     @Override
43     public EffectiveModelContext createSchemaContext(@NonNull Peer peer) {
44         Objects.requireNonNull(peer);
45         return getProvider(peer).createSchemaContext(peer);
46     }
47 }