import javax.annotation.Nullable;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.common.QNameModule;
+import org.opendaylight.yangtools.yang.model.api.ActionNodeContainer;
import org.opendaylight.yangtools.yang.model.api.ChoiceCaseNode;
import org.opendaylight.yangtools.yang.model.api.ChoiceSchemaNode;
import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
import org.opendaylight.yangtools.yang.model.api.Module;
import org.opendaylight.yangtools.yang.model.api.ModuleImport;
import org.opendaylight.yangtools.yang.model.api.NotificationDefinition;
+import org.opendaylight.yangtools.yang.model.api.NotificationNodeContainer;
+import org.opendaylight.yangtools.yang.model.api.OperationDefinition;
import org.opendaylight.yangtools.yang.model.api.RevisionAwareXPath;
import org.opendaylight.yangtools.yang.model.api.RpcDefinition;
import org.opendaylight.yangtools.yang.model.api.SchemaContext;
}
}
- if (foundNode == null && parent instanceof RpcDefinition) {
- final RpcDefinition parentRpcDefinition = (RpcDefinition) parent;
+ if (foundNode == null && parent instanceof ActionNodeContainer) {
+ foundNode = ((ActionNodeContainer) parent).getActions().stream()
+ .filter(act -> current.equals(act.getQName())).findFirst().orElse(null);
+ if (foundNode != null && nextPath.iterator().hasNext()) {
+ foundNode = findNodeIn(foundNode, nextPath);
+ }
+ }
+
+ if (foundNode == null && parent instanceof NotificationNodeContainer) {
+ foundNode = ((NotificationNodeContainer) parent).getNotifications().stream()
+ .filter(notif -> current.equals(notif.getQName())).findFirst().orElse(null);
+ if (foundNode != null && nextPath.iterator().hasNext()) {
+ foundNode = findNodeIn(foundNode, nextPath);
+ }
+ }
+
+ if (foundNode == null && parent instanceof OperationDefinition) {
+ final OperationDefinition parentRpcDefinition = (OperationDefinition) parent;
if (current.getLocalName().equals("input")) {
foundNode = parentRpcDefinition.getInput();
return null;
}
- private static GroupingDefinition getGroupingByName(final RpcDefinition rpc, final QName name) {
+ private static GroupingDefinition getGroupingByName(final OperationDefinition rpc, final QName name) {
for (final GroupingDefinition grouping : rpc.getGroupings()) {
if (grouping.getQName().equals(name)) {
return grouping;
final TypeDefinition<?> targetTypeDefinition = typeDefinition(dataSchemaNode);
if (targetTypeDefinition instanceof LeafrefTypeDefinition) {
- return getBaseTypeForLeafRef(((LeafrefTypeDefinition) targetTypeDefinition), schemaContext, dataSchemaNode);
+ return getBaseTypeForLeafRef((LeafrefTypeDefinition) targetTypeDefinition, schemaContext, dataSchemaNode);
}
return targetTypeDefinition;
parentModule, strippedPathStatement);
final TypeDefinition<?> targetTypeDefinition = typeDefinition(dataSchemaNode);
if (targetTypeDefinition instanceof LeafrefTypeDefinition) {
- return getBaseTypeForLeafRef(((LeafrefTypeDefinition) targetTypeDefinition), schemaContext, dataSchemaNode);
+ return getBaseTypeForLeafRef((LeafrefTypeDefinition) targetTypeDefinition, schemaContext, dataSchemaNode);
}
return targetTypeDefinition;
--- /dev/null
+/*
+ * Copyright (c) 2017 Pantheon Technologies, s.r.o. and others. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.yangtools.yang.stmt;
+
+import static org.junit.Assert.assertNotNull;
+
+import java.net.URI;
+import org.junit.Test;
+import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.common.QNameModule;
+import org.opendaylight.yangtools.yang.model.api.Module;
+import org.opendaylight.yangtools.yang.model.api.SchemaContext;
+import org.opendaylight.yangtools.yang.model.api.SchemaNode;
+import org.opendaylight.yangtools.yang.model.api.SchemaPath;
+import org.opendaylight.yangtools.yang.model.util.SchemaContextUtil;
+
+public class YT841Test {
+ private static final QNameModule FOO = QNameModule.create(URI.create("foo"), QName.parseRevision("2018-01-02"));
+
+ @Test
+ public void testFindDataSchemaNode() throws Exception {
+ final SchemaContext context = StmtTestUtils.parseYangSources("/bugs/YT841/");
+ final Module foo = context.findModuleByNamespace(URI.create("foo")).iterator().next();
+ assertNotNull(foo);
+
+ final SchemaNode target = SchemaContextUtil.findDataSchemaNode(context, SchemaPath.create(true,
+ QName.create(FOO, "foo"),
+ QName.create(FOO, "foo"),
+ QName.create(FOO, "foo"),
+ QName.create(FOO, "input")));
+ assertNotNull(target);
+
+ }
+}