+ private SchemaNode getChild(final SchemaNode node, final QName qname) {
+ SchemaNode child = null;
+
+ if (node instanceof DataNodeContainer) {
+ child = ((DataNodeContainer) node).getDataChildByName(qname);
+
+ if (child == null && node instanceof SchemaContext) {
+ child = tryFindGroupings((SchemaContext) node, qname).orNull();
+ }
+
+ if(child == null && node instanceof SchemaContext) {
+ child = tryFindNotification((SchemaContext) node, qname)
+ .or(tryFindRpc(((SchemaContext) node), qname)).orNull();
+ }
+ } else if (node instanceof ChoiceSchemaNode) {
+ child = ((ChoiceSchemaNode) node).getCaseNodeByName(qname);
+ } else if (node instanceof RpcDefinition) {
+ switch (qname.getLocalName()) {
+ case "input":
+ child = ((RpcDefinition) node).getInput();
+ break;
+ case "output":
+ child = ((RpcDefinition) node).getOutput();
+ break;
+ default:
+ child = null;
+ break;
+ }
+ } else {
+ throw new IllegalArgumentException(String.format("Schema node %s does not allow children.", node));
+ }
+
+ return child;
+ }
+