private MappingNode cleanMergedTuples(MappingNode templateNode, MergeContext context) { List<NodeTuple> tuples = new ArrayList<NodeTuple>(templateNode.getValue()); for (NodeTuple tuple : tuples) { String key = ((ScalarNode) tuple.getKeyNode()).getValue(); if (nonMergeableFields(context.keyNodeType).contains(key)) { templateNode.getValue().remove(tuple); } else { context.tagInclude(tuple); } } return templateNode; }
private MappingNode cleanMergedTuples(MappingNode templateNode, MergeContext context) { List<NodeTuple> tuples = new ArrayList<NodeTuple>(templateNode.getValue()); for (NodeTuple tuple : tuples) { String key = ((ScalarNode) tuple.getKeyNode()).getValue(); if (nonMergeableFields(context.keyNodeType).contains(key)) { templateNode.getValue().remove(tuple); } else { context.tagInclude(tuple); } } return templateNode; }
private MappingNode mergeMappingNodes(MappingNode baseNode, MappingNode templateNode, MergeContext context) { Map<String, NodeTuple> baseTupleMap = getTupleMap(baseNode); for (NodeTuple templateTuple : templateNode.getValue()) { String templateKey = ((ScalarNode) templateTuple.getKeyNode()).getValue(); if (!nonMergeableFields(context.keyNodeType).contains(templateKey)) { String baseKey = getMatchingKey(baseTupleMap, templateKey); if (baseKey == null) { baseNode.getValue().add(context.tagInclude(templateTuple)); } else { Node keyNode = baseTupleMap.get(baseKey).getKeyNode(); if (isOptional(baseKey) && !isOptional(templateKey)) { keyNode = templateTuple.getKeyNode(); } Node baseInnerNode = baseTupleMap.get(baseKey).getValueNode(); Node templateInnerNode = templateTuple.getValueNode(); Node valueNode = mergeNodes(baseInnerNode, templateInnerNode, new MergeContext(context, baseKey)); baseNode.getValue().remove(baseTupleMap.get(baseKey)); baseNode.getValue().add(new NodeTuple(keyNode, valueNode)); } } } return baseNode; }
nestedContext = new MergeContext(Object.class, templateValueNode.getTag()); baseNode.getValue().add(nestedContext.tagInclude(templateTuple));