- private final SimpleStack<NormalizedNodeBuilderWrapper> stack = new SimpleStack<>();
- private NormalizedNode<?,?> normalizedNode;
- private final DataSchemaContextNode<?> nodePathSchemaNode;
- private boolean sealed = false;
-
- public NormalizedNodePruner(YangInstanceIdentifier nodePath, SchemaContext schemaContext) {
- nodePathSchemaNode = findSchemaNodeForNodePath(nodePath, schemaContext);
- }
-
- @SuppressWarnings("unchecked")
- @Override
- public void leafNode(YangInstanceIdentifier.NodeIdentifier nodeIdentifier, Object o) throws IOException, IllegalArgumentException {
-
- checkNotSealed();
-
- NormalizedNodeBuilderWrapper parent = stack.peek();
- LeafNode<Object> leafNode = Builders.leafBuilder().withNodeIdentifier(nodeIdentifier).withValue(o).build();
- if(parent != null) {
- if(hasValidSchema(nodeIdentifier.getNodeType(), parent)) {
- parent.builder().addChild(leafNode);
- }
- } else {
- // If there's no parent node then this is a stand alone LeafNode.
- if(nodePathSchemaNode != null) {
- this.normalizedNode = leafNode;
- }
-
- sealed = true;
- }
- }
-
- @Override
- public void startLeafSet(YangInstanceIdentifier.NodeIdentifier nodeIdentifier, int i) throws IOException, IllegalArgumentException {
-
- checkNotSealed();
-
- addBuilder(Builders.leafSetBuilder().withNodeIdentifier(nodeIdentifier), nodeIdentifier);
- }
-
- @Override
- public void startOrderedLeafSet(YangInstanceIdentifier.NodeIdentifier nodeIdentifier, int i) throws IOException, IllegalArgumentException {
-
- checkNotSealed();
-
- addBuilder(Builders.orderedLeafSetBuilder().withNodeIdentifier(nodeIdentifier), nodeIdentifier);
- }
-
- @SuppressWarnings({ "unchecked" })
- @Override
- public void leafSetEntryNode(QName name, Object o) throws IOException, IllegalArgumentException {
- checkNotSealed();
-
- NormalizedNodeBuilderWrapper parent = stack.peek();
- if(parent != null) {
- if(hasValidSchema(name, parent)) {
- parent.builder().addChild(Builders.leafSetEntryBuilder().withValue(o).withNodeIdentifier(
- new YangInstanceIdentifier.NodeWithValue<>(parent.nodeType(), o)).build());
- }
- } else {
- // If there's no parent LeafSetNode then this is a stand alone LeafSetEntryNode.
- if(nodePathSchemaNode != null) {
- this.normalizedNode = Builders.leafSetEntryBuilder().withValue(o).withNodeIdentifier(
- new YangInstanceIdentifier.NodeWithValue<>(name, o)).build();
- }
-
- sealed = true;
- }
- }
-
- @Override
- public void startContainerNode(YangInstanceIdentifier.NodeIdentifier nodeIdentifier, int i) throws IOException, IllegalArgumentException {
-
- checkNotSealed();
-
- addBuilder(Builders.containerBuilder().withNodeIdentifier(nodeIdentifier), nodeIdentifier);
- }
-
- @Override
- public void startYangModeledAnyXmlNode(YangInstanceIdentifier.NodeIdentifier nodeIdentifier, int i) throws IOException, IllegalArgumentException {
- throw new UnsupportedOperationException("Not implemented yet");
- }
-
- @Override
- public void startUnkeyedList(YangInstanceIdentifier.NodeIdentifier nodeIdentifier, int i) throws IOException, IllegalArgumentException {
-
- checkNotSealed();
-
- addBuilder(Builders.unkeyedListBuilder().withNodeIdentifier(nodeIdentifier), nodeIdentifier);
- }
-
- @Override
- public void startUnkeyedListItem(YangInstanceIdentifier.NodeIdentifier nodeIdentifier, int i) throws IOException, IllegalStateException {
-
- checkNotSealed();
-
- addBuilder(Builders.unkeyedListEntryBuilder().withNodeIdentifier(nodeIdentifier), nodeIdentifier);
- }
-
- @Override
- public void startMapNode(YangInstanceIdentifier.NodeIdentifier nodeIdentifier, int i) throws IOException, IllegalArgumentException {
-
- checkNotSealed();
-
- addBuilder(Builders.mapBuilder().withNodeIdentifier(nodeIdentifier), nodeIdentifier);
- }
-
- @Override
- public void startMapEntryNode(YangInstanceIdentifier.NodeIdentifierWithPredicates nodeIdentifierWithPredicates, int i) throws IOException, IllegalArgumentException {
-
- checkNotSealed();
-
- addBuilder(Builders.mapEntryBuilder().withNodeIdentifier(nodeIdentifierWithPredicates), nodeIdentifierWithPredicates);
- }
-
- @Override
- public void startOrderedMapNode(YangInstanceIdentifier.NodeIdentifier nodeIdentifier, int i) throws IOException, IllegalArgumentException {
-
- checkNotSealed();
-
- addBuilder(Builders.orderedMapBuilder().withNodeIdentifier(nodeIdentifier), nodeIdentifier);
- }
-
- @Override
- public void startChoiceNode(YangInstanceIdentifier.NodeIdentifier nodeIdentifier, int i) throws IOException, IllegalArgumentException {
-
- checkNotSealed();
-
- addBuilder(Builders.choiceBuilder().withNodeIdentifier(nodeIdentifier), nodeIdentifier);
- }
-
- @Override
- public void startAugmentationNode(YangInstanceIdentifier.AugmentationIdentifier augmentationIdentifier) throws IOException, IllegalArgumentException {
-
- checkNotSealed();
-
- addBuilder(Builders.augmentationBuilder().withNodeIdentifier(augmentationIdentifier), augmentationIdentifier);
- }
-
- @SuppressWarnings("unchecked")
- @Override
- public void anyxmlNode(YangInstanceIdentifier.NodeIdentifier nodeIdentifier, Object o) throws IOException, IllegalArgumentException {
- checkNotSealed();
-
- NormalizedNodeBuilderWrapper parent = stack.peek();
- AnyXmlNode anyXmlNode = Builders.anyXmlBuilder().withNodeIdentifier(nodeIdentifier).
- withValue((DOMSource) o).build();
- if(parent != null) {
- if(hasValidSchema(nodeIdentifier.getNodeType(), parent)) {
- parent.builder().addChild(anyXmlNode);
- }
- } else {
- // If there's no parent node then this is a stand alone AnyXmlNode.
- if(nodePathSchemaNode != null) {
- this.normalizedNode = anyXmlNode;
- }
-
- sealed = true;
- }
- }
-
- @Override
- public void endNode() throws IOException, IllegalStateException {
-
- checkNotSealed();
-
- NormalizedNodeBuilderWrapper child = stack.pop();
-
- Preconditions.checkState(child != null, "endNode called on an empty stack");
-
- if(!child.getSchema().isPresent()) {
- LOG.debug("Schema not found for {}", child.identifier());
- return;
- }
-
- NormalizedNode<?,?> normalizedNode = child.builder().build();
-
- if(stack.size() > 0) {
- NormalizedNodeBuilderWrapper parent = stack.peek();
- parent.builder().addChild(normalizedNode);
- } else {
- this.normalizedNode = normalizedNode;
- sealed = true;
- }
- }
-
- @Override
- public void close() throws IOException {
- sealed = true;
- }
-
- @Override
- public void flush() throws IOException {