mergeNodes(resourceNode, clone, new MergeContext(Resource.class, clone.getTag()));
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; }
mergeNodes(resourceNode, clone, new MergeContext(Resource.class, clone.getTag()));
nestedContext = new MergeContext(Object.class, templateValueNode.getTag()); baseNode.getValue().add(nestedContext.tagInclude(templateTuple)); Node valueNode = mergeNodes(baseInnerNode, templateInnerNode, new MergeContext(context, baseKey)); baseNode.getValue().remove(baseTupleMap.get(baseKey)); baseNode.getValue().add(new NodeTuple(keyNode, valueNode));
private void applyTraitsToActions(SequenceNode traits, Map<String, Node> actionNodes, String actionName) { for (Node ref : traits.getValue()) { if (actionName == null) { for (Map.Entry<String, Node> actionEntry : actionNodes.entrySet()) { currentAction = actionEntry.getKey(); MappingNode templateNode = cloneTemplate(ref, TemplateType.TRAIT); if (templateNode != null) { mergeNodes(actionEntry.getValue(), templateNode, new MergeContext(Action.class, templateNode.getTag())); } } } else { currentAction = actionName; MappingNode templateNode = cloneTemplate(ref, TemplateType.TRAIT); if (templateNode != null) { mergeNodes(actionNodes.get(actionName), templateNode, new MergeContext(Action.class, templateNode.getTag())); } } } }
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; }
private void applyTraitsToActions(SequenceNode traits, Map<String, Node> actionNodes, String actionName) { for (Node ref : traits.getValue()) { if (actionName == null) { for (Map.Entry<String, Node> actionEntry : actionNodes.entrySet()) { currentAction = actionEntry.getKey(); MappingNode templateNode = cloneTemplate(ref, TemplateType.TRAIT); if (templateNode != null) { mergeNodes(actionEntry.getValue(), templateNode, new MergeContext(Action.class, templateNode.getTag())); } } } else { currentAction = actionName; MappingNode templateNode = cloneTemplate(ref, TemplateType.TRAIT); if (templateNode != null) { mergeNodes(actionNodes.get(actionName), templateNode, new MergeContext(Action.class, templateNode.getTag())); } } } }
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; }