import org.opendaylight.yangtools.yang.model.api.Module;
import org.opendaylight.yangtools.yang.model.api.RpcDefinition;
import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
-import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier;
-import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Absolute;
import org.opendaylight.yangtools.yang.model.api.type.IdentityrefTypeDefinition;
import org.opendaylight.yangtools.yang.model.api.type.LeafrefTypeDefinition;
import org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack;
onModelContextUpdated(schemas);
}
- public InstanceIdentifierContext<?> toInstanceIdentifier(final String restconfInstance) {
+ public InstanceIdentifierContext toInstanceIdentifier(final String restconfInstance) {
return toIdentifier(restconfInstance, false);
}
return globalSchema;
}
- public InstanceIdentifierContext<?> toMountPointIdentifier(final String restconfInstance) {
+ public InstanceIdentifierContext toMountPointIdentifier(final String restconfInstance) {
return toIdentifier(restconfInstance, true);
}
- private InstanceIdentifierContext<?> toIdentifier(final String restconfInstance,
- final boolean toMountPointIdentifier) {
+ private InstanceIdentifierContext toIdentifier(final String restconfInstance,
+ final boolean toMountPointIdentifier) {
checkPreconditions();
if (restconfInstance == null) {
- return new InstanceIdentifierContext<>(YangInstanceIdentifier.empty(), null, globalSchema, null,
- globalSchema);
+ return new InstanceIdentifierContext(YangInstanceIdentifier.empty(), globalSchema, null, globalSchema);
}
final List<String> pathArgs = urlPathArgsDecode(SLASH_SPLITTER.split(restconfInstance));
ErrorType.PROTOCOL, ErrorTag.UNKNOWN_ELEMENT);
}
- final InstanceIdentifierContext<?> iiWithSchemaNode =
- collectPathArguments(builder, pathArgs, new ArrayList<>(), latestModule.iterator().next(), null,
- toMountPointIdentifier);
+ final InstanceIdentifierContext iiWithSchemaNode =
+ collectPathArguments(builder, pathArgs, latestModule.iterator().next(), null, toMountPointIdentifier);
if (iiWithSchemaNode == null) {
throw new RestconfDocumentedException("URI has bad format", ErrorType.PROTOCOL, ErrorTag.INVALID_VALUE);
return object == null ? "" : URLEncoder.encode(codec.serialize(object).toString(), StandardCharsets.UTF_8);
}
- private SchemaNodeIdentifier schemaNodeIdentifierFromPath(final List<QName> qnames) {
- return qnames.isEmpty() ? null : Absolute.of(qnames);
- }
-
@SuppressFBWarnings(value = "RCN_REDUNDANT_NULLCHECK_OF_NONNULL_VALUE", justification = "Unrecognised NullableDecl")
- private InstanceIdentifierContext<?> collectPathArguments(final InstanceIdentifierBuilder builder,
- final List<String> strings, final List<QName> qnames, final DataNodeContainer parentNode,
- final DOMMountPoint mountPoint, final boolean returnJustMountPoint) {
+ private InstanceIdentifierContext collectPathArguments(final InstanceIdentifierBuilder builder,
+ final List<String> strings, final DataNodeContainer parentNode, final DOMMountPoint mountPoint,
+ final boolean returnJustMountPoint) {
requireNonNull(strings);
if (parentNode == null) {
return null;
}
- final EffectiveModelContext modelContext = mountPoint != null ? getModelContext(mountPoint) : globalSchema;
-
if (strings.isEmpty()) {
- return createContext(builder.build(), schemaNodeIdentifierFromPath(qnames), (DataSchemaNode) parentNode,
- mountPoint, modelContext);
+ return createContext(builder.build(), (DataSchemaNode) parentNode, mountPoint,
+ mountPoint != null ? getModelContext(mountPoint) : globalSchema);
}
final String head = strings.iterator().next();
if (head.isEmpty()) {
final List<String> remaining = strings.subList(1, strings.size());
- return collectPathArguments(builder, remaining, qnames, parentNode, mountPoint, returnJustMountPoint);
+ return collectPathArguments(builder, remaining, parentNode, mountPoint, returnJustMountPoint);
}
final String nodeName = toNodeName(head);
}
if (returnJustMountPoint || strings.size() == 1) {
- return new InstanceIdentifierContext<>(YangInstanceIdentifier.empty(), null,
- mountPointSchema, mount,
+ return new InstanceIdentifierContext(YangInstanceIdentifier.empty(), mountPointSchema, mount,
mountPointSchema);
}
}
final List<String> subList = strings.subList(1, strings.size());
- return collectPathArguments(YangInstanceIdentifier.builder(), subList, new ArrayList<>(), it.next(),
- mount, returnJustMountPoint);
+ return collectPathArguments(YangInstanceIdentifier.builder(), subList, it.next(), mount,
+ returnJustMountPoint);
}
Module module = null;
rpc = getRpcDefinition(module, rpcName);
}
if (rpc != null) {
- return new InstanceIdentifierContext<>(builder.build(), null, rpc, mountPoint, modelContext);
+ return new InstanceIdentifierContext(builder.build(), rpc, mountPoint,
+ mountPoint != null ? getModelContext(mountPoint) : globalSchema);
}
}
ErrorType.PROTOCOL, ErrorTag.INVALID_VALUE);
}
- final SchemaInferenceStack stack = SchemaInferenceStack.of(modelContext);
- final YangInstanceIdentifier identifier = builder.build();
- identifier.getPathArguments().forEach(p -> stack.enterSchemaTree(p.getNodeType()));
- stack.enterSchemaTree(targetNode.getQName());
- stack.enterSchemaTree(key);
- addKeyValue(keyValues, listNode.getDataChildByName(key), uriKeyValue, mountPoint, stack);
+ addKeyValue(keyValues, listNode.getDataChildByName(key), uriKeyValue, mountPoint);
index++;
}
}
builder.node(targetNode.getQName());
}
- qnames.add(targetNode.getQName());
-
if (targetNode instanceof DataNodeContainer) {
final List<String> remaining = strings.subList(consumed, strings.size());
- return collectPathArguments(builder, remaining, qnames, (DataNodeContainer) targetNode, mountPoint,
+ return collectPathArguments(builder, remaining, (DataNodeContainer) targetNode, mountPoint,
returnJustMountPoint);
}
- return createContext(builder.build(), Absolute.of(qnames), targetNode, mountPoint, modelContext);
+ return createContext(builder.build(), targetNode, mountPoint,
+ mountPoint != null ? getModelContext(mountPoint) : globalSchema);
}
- private static InstanceIdentifierContext<?> createContext(final YangInstanceIdentifier instance,
- final SchemaNodeIdentifier schemaNodeIdentifier, final DataSchemaNode dataSchemaNode,
- final DOMMountPoint mountPoint, final EffectiveModelContext schemaContext) {
+ private static InstanceIdentifierContext createContext(final YangInstanceIdentifier instance,
+ final DataSchemaNode dataSchemaNode, final DOMMountPoint mountPoint,
+ final EffectiveModelContext schemaContext) {
final YangInstanceIdentifier instanceIdentifier = new DataNormalizer(schemaContext).toNormalized(instance);
- return new InstanceIdentifierContext<>(instanceIdentifier, schemaNodeIdentifier, dataSchemaNode, mountPoint,
- schemaContext);
+ return new InstanceIdentifierContext(instanceIdentifier, dataSchemaNode, mountPoint, schemaContext);
}
public static DataSchemaNode findInstanceDataChildByNameAndNamespace(final DataNodeContainer container,
}
private void addKeyValue(final HashMap<QName, Object> map, final DataSchemaNode node, final String uriValue,
- final DOMMountPoint mountPoint, final SchemaInferenceStack stack) {
+ final DOMMountPoint mountPoint) {
checkArgument(node instanceof LeafSchemaNode);
+ final EffectiveModelContext schemaContext = mountPoint == null ? globalSchema : getModelContext(mountPoint);
final String urlDecoded = urlPathArgDecode(requireNonNull(uriValue));
TypeDefinition<?> typedef = ((LeafSchemaNode) node).getType();
final TypeDefinition<?> baseType = RestUtil.resolveBaseTypeFrom(typedef);
if (baseType instanceof LeafrefTypeDefinition) {
- typedef = stack.resolveLeafref((LeafrefTypeDefinition) baseType);
+ typedef = SchemaInferenceStack.ofInstantiatedPath(schemaContext, node.getPath())
+ .resolveLeafref((LeafrefTypeDefinition) baseType);
}
final IllegalArgumentCodec<Object, Object> codec = RestCodec.from(typedef, mountPoint, this);
Object decoded = codec.deserialize(urlDecoded);
String additionalInfo = "";
if (decoded == null) {
if (typedef instanceof IdentityrefTypeDefinition) {
- decoded = toQName(stack.getEffectiveModelContext(), urlDecoded);
+ decoded = toQName(schemaContext, urlDecoded);
additionalInfo =
"For key which is of type identityref it should be in format module_name:identity_name.";
}