Remove AbstractNormalizedNodeBodyReader
[netconf.git] / restconf / restconf-nb / src / main / java / org / opendaylight / restconf / nb / rfc8040 / databind / DatabindContext.java
1 /*
2  * Copyright (c) 2022 PANTHEON.tech, s.r.o. and others.  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.restconf.nb.rfc8040.databind;
9
10 import static java.util.Objects.requireNonNull;
11
12 import org.eclipse.jdt.annotation.NonNull;
13 import org.opendaylight.yangtools.yang.data.api.schema.MountPointContext;
14 import org.opendaylight.yangtools.yang.data.codec.gson.JSONCodecFactory;
15 import org.opendaylight.yangtools.yang.data.codec.gson.JSONCodecFactorySupplier;
16 import org.opendaylight.yangtools.yang.data.codec.xml.XmlCodecFactory;
17 import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
18
19 /**
20  * An immutable context holding a consistent view of things related to data bind operations.
21  */
22 public record DatabindContext(
23         @NonNull MountPointContext mountContext,
24         @NonNull JSONCodecFactory jsonCodecs,
25         @NonNull XmlCodecFactory xmlCodecs) {
26     public DatabindContext {
27         requireNonNull(mountContext);
28         requireNonNull(jsonCodecs);
29         requireNonNull(xmlCodecs);
30     }
31
32     public static @NonNull DatabindContext ofModel(final EffectiveModelContext modelContext) {
33         return ofMountPoint(MountPointContext.of(modelContext));
34     }
35
36     public static @NonNull DatabindContext ofMountPoint(final MountPointContext mountContext) {
37         return new DatabindContext(mountContext,
38             JSONCodecFactorySupplier.RFC7951.getShared(mountContext.getEffectiveModelContext()),
39             XmlCodecFactory.create(mountContext));
40     }
41
42     public @NonNull EffectiveModelContext modelContext() {
43         return mountContext.getEffectiveModelContext();
44     }
45 }