2 * Copyright (c) 2014 Cisco Systems, 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.restconf.common.context;
10 import static java.util.Objects.requireNonNull;
12 import com.google.common.collect.Iterables;
13 import java.util.List;
14 import org.eclipse.jdt.annotation.NonNull;
15 import org.opendaylight.mdsal.dom.api.DOMMountPoint;
16 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
17 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
18 import org.opendaylight.yangtools.yang.model.api.ContainerLike;
19 import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
20 import org.opendaylight.yangtools.yang.model.api.RpcDefinition;
21 import org.opendaylight.yangtools.yang.model.api.SchemaNode;
23 public final class InstanceIdentifierContext {
24 private final YangInstanceIdentifier instanceIdentifier;
25 private final SchemaNode schemaNode;
26 private final DOMMountPoint mountPoint;
27 private final EffectiveModelContext schemaContext;
29 private InstanceIdentifierContext(final EffectiveModelContext context, final DOMMountPoint mountPoint) {
30 instanceIdentifier = YangInstanceIdentifier.empty();
31 schemaContext = requireNonNull(context);
32 schemaNode = schemaContext;
33 this.mountPoint = mountPoint;
36 private InstanceIdentifierContext(final EffectiveModelContext context, final RpcDefinition rpc,
37 final DOMMountPoint mountPoint) {
38 instanceIdentifier = null;
39 schemaContext = requireNonNull(context);
40 schemaNode = requireNonNull(rpc);
41 this.mountPoint = mountPoint;
44 private InstanceIdentifierContext(final EffectiveModelContext context, final ContainerLike rpcInputOutput,
45 final DOMMountPoint mountPoint) {
46 instanceIdentifier = null;
47 schemaContext = requireNonNull(context);
48 schemaNode = requireNonNull(rpcInputOutput);
49 this.mountPoint = mountPoint;
52 @Deprecated(forRemoval = true)
53 public InstanceIdentifierContext(final YangInstanceIdentifier instanceIdentifier, final SchemaNode schemaNode,
54 final DOMMountPoint mountPoint, final EffectiveModelContext context) {
55 this.instanceIdentifier = instanceIdentifier;
56 this.schemaNode = schemaNode;
57 this.mountPoint = mountPoint;
58 schemaContext = context;
61 public static @NonNull InstanceIdentifierContext ofLocalRoot(final EffectiveModelContext context) {
62 return new InstanceIdentifierContext(context, null);
65 // Legacy bierman02 invokeRpc()
66 public static @NonNull InstanceIdentifierContext ofLocalRpc(final EffectiveModelContext context,
67 // FIXME: this this method really needed?
68 final RpcDefinition rpc) {
69 return new InstanceIdentifierContext(context, rpc, null);
72 public static @NonNull InstanceIdentifierContext ofLocalRpcInput(final EffectiveModelContext context,
73 // FIXME: this this method really needed?
74 final RpcDefinition rpc) {
75 return new InstanceIdentifierContext(context, rpc.getInput(), null);
78 public static @NonNull InstanceIdentifierContext ofLocalRpcOutput(final EffectiveModelContext context,
79 // FIXME: we want to re-validate this, so might as well take a QName
80 final RpcDefinition rpc) {
81 return new InstanceIdentifierContext(context, rpc, null);
84 public static @NonNull InstanceIdentifierContext ofMountPointRoot(final DOMMountPoint mountPoint,
85 final EffectiveModelContext mountContext) {
86 return new InstanceIdentifierContext(mountContext, requireNonNull(mountPoint));
89 public static @NonNull InstanceIdentifierContext ofMountPointRpcOutput(final DOMMountPoint mountPoint,
90 final EffectiveModelContext mountContext, final RpcDefinition rpc) {
91 return new InstanceIdentifierContext(mountContext, rpc, requireNonNull(mountPoint));
94 // FIXME: what the heck are the callers of this doing?!
95 public @NonNull InstanceIdentifierContext withConcatenatedArgs(final List<PathArgument> concatArgs) {
96 if (concatArgs.isEmpty()) {
99 final var newInstanceIdentifier = YangInstanceIdentifier.create(
100 Iterables.concat(instanceIdentifier.getPathArguments(), concatArgs));
101 return new InstanceIdentifierContext(newInstanceIdentifier, schemaNode, mountPoint, schemaContext);
104 public YangInstanceIdentifier getInstanceIdentifier() {
105 return instanceIdentifier;
108 public SchemaNode getSchemaNode() {
112 public DOMMountPoint getMountPoint() {
116 public EffectiveModelContext getSchemaContext() {
117 return schemaContext;