- return null;
- }
-\r
- private def DataSchemaNode findCorrectTargetFromGrouping(DataSchemaNode node) {\r
- if (node.path.path.size == 1) {\r
- // uses is under module statement\r
- val Module m = findParentModule(schemaContext, node);\r
- var DataSchemaNode result = null;\r
- for (u : m.uses) {\r
- var SchemaNode targetGrouping = findNodeInSchemaContext(schemaContext, u.groupingPath.path);\r
- if (!(targetGrouping instanceof GroupingDefinition)) {\r
- throw new IllegalArgumentException("Failed to generate code for augment in " + u);\r
- }\r
- var gr = targetGrouping as GroupingDefinition;\r
- result = gr.getDataChildByName(node.QName.localName);\r
- }\r
- if (result == null) {\r
- throw new IllegalArgumentException("Failed to generate code for augment")\r
- }\r
- return result\r
- } else {\r
- var DataSchemaNode result = null;\r
- var QName currentName = node.QName\r
- var tmpPath = new ArrayList<QName>()\r
- var Object parent = null\r
-
- val SchemaPath sp = node.path
- val List<QName> names = sp.path
- val List<QName> newNames = new ArrayList(names)
- newNames.remove(newNames.size - 1)
- val SchemaPath newSp = new SchemaPath(newNames, sp.absolute)
- parent = findDataSchemaNode(schemaContext, newSp)
-\r
- do {\r
- tmpPath.add(currentName);\r
- val dataNodeParent = parent as DataNodeContainer;\r
- for (u : dataNodeParent.uses) {\r
- if (result == null) {\r
- result = getResultFromUses(u, currentName.localName)\r
- }\r
- }\r
- if (result == null) {
- currentName = (parent as SchemaNode).QName
- if (parent instanceof SchemaNode) {
- val SchemaPath nodeSp = (parent as SchemaNode).path
- val List<QName> nodeNames = nodeSp.path
- val List<QName> nodeNewNames = new ArrayList(nodeNames)
- nodeNewNames.remove(nodeNewNames.size - 1)
- if (nodeNewNames.empty) {
- parent = getParentModule(parent as SchemaNode)
- } else {
- val SchemaPath nodeNewSp = new SchemaPath(nodeNewNames, nodeSp.absolute)
- parent = findDataSchemaNode(schemaContext, nodeNewSp)
- }
- } else {
- throw new IllegalArgumentException("Failed to generate code for augment")
- }
- }\r
- } while (result == null && !(parent instanceof Module));\r
-\r
- if (result != null) {\r
- result = getTargetNode(tmpPath, result)\r
- }\r
- return result;\r
- }\r
- }\r
-\r
- private def DataSchemaNode findCorrectTargetFromAugmentGrouping(DataSchemaNode node, AugmentationSchema parentNode,
- List<SchemaNode> dataTree) {\r
-\r
- var DataSchemaNode result = null;
- var QName currentName = node.QName
- var tmpPath = new ArrayList<QName>()\r
- tmpPath.add(currentName)\r
- var int i = 1;\r
- var Object parent = null
-\r
- do {\r
- if (dataTree.size < 2 || dataTree.size == i) {
- parent = parentNode
- } else {
- parent = dataTree.get(dataTree.size - (i+1))
- tmpPath.add((parent as SchemaNode).QName)
- }\r
-
- val dataNodeParent = parent as DataNodeContainer;
- for (u : dataNodeParent.uses) {
- if (result == null) {\r
- result = getResultFromUses(u, currentName.localName)
- }
- }
- if (result == null) {
- i = i + 1\r
- currentName = (parent as SchemaNode).QName
- }
- } while (result == null);
-\r
- if (result != null) {
- result = getTargetNode(tmpPath, result)\r
- }
- return result;
- }\r
-\r
- private def getResultFromUses(UsesNode u, String currentName) {
- var SchemaNode targetGrouping = findNodeInSchemaContext(schemaContext, u.groupingPath.path)
- if (!(targetGrouping instanceof GroupingDefinition)) {
- throw new IllegalArgumentException("Failed to generate code for augment in " + u)
- }
- var gr = targetGrouping as GroupingDefinition
- return gr.getDataChildByName(currentName)
- }\r
-\r
- private def getTargetNode(List<QName> tmpPath, DataSchemaNode node) {
- var DataSchemaNode result = node
- if (tmpPath.size == 1) {
- if (result != null && result.addedByUses) {
- result = findOriginal(result);
- }
- return result;
- } else {
- var DataSchemaNode newParent = result;
- Collections.reverse(tmpPath);