Peel bierman02 local RPC test invocations
[netconf.git] / restconf / restconf-common / src / main / java / org / opendaylight / restconf / common / context / InstanceIdentifierContext.java
1 /*
2  * Copyright (c) 2014 Cisco Systems, Inc. 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.common.context;
9
10 import static java.util.Objects.requireNonNull;
11
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;
22
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;
28
29     private InstanceIdentifierContext(final EffectiveModelContext context, final DOMMountPoint mountPoint) {
30         instanceIdentifier = YangInstanceIdentifier.empty();
31         schemaContext = requireNonNull(context);
32         schemaNode = schemaContext;
33         this.mountPoint = mountPoint;
34     }
35
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;
42     }
43
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;
50     }
51
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;
59     }
60
61     public static @NonNull InstanceIdentifierContext ofLocalRoot(final EffectiveModelContext context) {
62         return new InstanceIdentifierContext(context, null);
63     }
64
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);
70     }
71
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);
76     }
77
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);
82     }
83
84     public static @NonNull InstanceIdentifierContext ofMountPointRoot(final DOMMountPoint mountPoint,
85             final EffectiveModelContext mountContext) {
86         return new InstanceIdentifierContext(mountContext, requireNonNull(mountPoint));
87     }
88
89     public static @NonNull InstanceIdentifierContext ofMountPointRpcOutput(final DOMMountPoint mountPoint,
90             final EffectiveModelContext mountContext, final RpcDefinition rpc) {
91         return new InstanceIdentifierContext(mountContext, rpc, requireNonNull(mountPoint));
92     }
93
94     // FIXME: what the heck are the callers of this doing?!
95     public @NonNull InstanceIdentifierContext withConcatenatedArgs(final List<PathArgument> concatArgs) {
96         if (concatArgs.isEmpty()) {
97             return this;
98         }
99         final var newInstanceIdentifier = YangInstanceIdentifier.create(
100             Iterables.concat(instanceIdentifier.getPathArguments(), concatArgs));
101         return new InstanceIdentifierContext(newInstanceIdentifier, schemaNode, mountPoint, schemaContext);
102     }
103
104     public YangInstanceIdentifier getInstanceIdentifier() {
105         return instanceIdentifier;
106     }
107
108     public SchemaNode getSchemaNode() {
109         return schemaNode;
110     }
111
112     public DOMMountPoint getMountPoint() {
113         return mountPoint;
114     }
115
116     public EffectiveModelContext getSchemaContext() {
117         return schemaContext;
118     }
119 }