X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-clustering-commons%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fdatastore%2Fnode%2Futils%2Ftransformer%2FNormalizedNodePruner.java;h=4e3bb5e82fedf2d9a0d913548292086413b95930;hp=2082654543d9cd459af0d02b16e1e88466696f2f;hb=dd022cfb43e89f3f8c18c872ae2a7e55f11350cc;hpb=0e832d6416ce9ca28902de813a2eee3d4c161798 diff --git a/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/transformer/NormalizedNodePruner.java b/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/transformer/NormalizedNodePruner.java index 2082654543..4e3bb5e82f 100644 --- a/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/transformer/NormalizedNodePruner.java +++ b/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/transformer/NormalizedNodePruner.java @@ -7,244 +7,27 @@ */ package org.opendaylight.controller.cluster.datastore.node.utils.transformer; -import static com.google.common.base.Preconditions.checkState; - import java.net.URI; -import java.util.ArrayDeque; -import java.util.Deque; -import java.util.NoSuchElementException; -import javax.xml.transform.dom.DOMSource; -import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; -import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.AugmentationIdentifier; -import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; -import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates; -import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeWithValue; -import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; -import org.opendaylight.yangtools.yang.data.api.schema.AnyXmlNode; -import org.opendaylight.yangtools.yang.data.api.schema.LeafNode; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; -import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter; -import org.opendaylight.yangtools.yang.data.impl.schema.Builders; -import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.NormalizedNodeContainerBuilder; -import org.opendaylight.yangtools.yang.data.util.DataSchemaContextNode; -import org.opendaylight.yangtools.yang.data.util.DataSchemaContextTree; import org.opendaylight.yangtools.yang.model.api.SchemaContext; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** * The NormalizedNodePruner removes all nodes from the input NormalizedNode that do not have a corresponding * schema element in the passed in SchemaContext. + * + * @deprecated Use {@link AbstractNormalizedNodePruner} instead. */ -public class NormalizedNodePruner implements NormalizedNodeStreamWriter { - private static final Logger LOG = LoggerFactory.getLogger(NormalizedNodePruner.class); - +@Deprecated +public class NormalizedNodePruner extends AbstractNormalizedNodePruner { public static final URI BASE_NAMESPACE = URI.create("urn:ietf:params:xml:ns:netconf:base:1.0"); - private final Deque stack = new ArrayDeque<>(); - private final DataSchemaContextNode nodePathSchemaNode; - - private NormalizedNode normalizedNode; - private boolean sealed = false; - public NormalizedNodePruner(final YangInstanceIdentifier nodePath, final SchemaContext schemaContext) { - nodePathSchemaNode = DataSchemaContextTree.from(schemaContext).findChild(nodePath).orElse(null); - } - - @SuppressWarnings("unchecked") - @Override - public void leafNode(final NodeIdentifier nodeIdentifier, final Object value) { - checkNotSealed(); - - NormalizedNodeBuilderWrapper parent = stack.peek(); - LeafNode leafNode = Builders.leafBuilder().withNodeIdentifier(nodeIdentifier).withValue(value).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(final NodeIdentifier nodeIdentifier, final int count) { - addBuilder(Builders.leafSetBuilder().withNodeIdentifier(nodeIdentifier), nodeIdentifier); - } - - @Override - public void startOrderedLeafSet(final NodeIdentifier nodeIdentifier, final int str) { - addBuilder(Builders.orderedLeafSetBuilder().withNodeIdentifier(nodeIdentifier), nodeIdentifier); - } - - @SuppressWarnings("unchecked") - @Override - public void leafSetEntryNode(final QName name, final Object value) { - checkNotSealed(); - - NormalizedNodeBuilderWrapper parent = stack.peek(); - if (parent != null) { - if (hasValidSchema(name, parent)) { - parent.builder().addChild(Builders.leafSetEntryBuilder().withValue(value) - .withNodeIdentifier(new NodeWithValue<>(parent.nodeType(), value)) - .build()); - } - } else { - // If there's no parent LeafSetNode then this is a stand alone - // LeafSetEntryNode. - if (nodePathSchemaNode != null) { - this.normalizedNode = Builders.leafSetEntryBuilder().withValue(value).withNodeIdentifier( - new NodeWithValue<>(name, value)).build(); - } - - sealed = true; - } - } - - @Override - public void startContainerNode(final NodeIdentifier nodeIdentifier, final int count) { - addBuilder(Builders.containerBuilder().withNodeIdentifier(nodeIdentifier), nodeIdentifier); - } - - @Override - public void startYangModeledAnyXmlNode(final NodeIdentifier nodeIdentifier, final int count) { - throw new UnsupportedOperationException("Not implemented yet"); - } - - @Override - public void startUnkeyedList(final NodeIdentifier nodeIdentifier, final int count) { - addBuilder(Builders.unkeyedListBuilder().withNodeIdentifier(nodeIdentifier), nodeIdentifier); - } - - @Override - public void startUnkeyedListItem(final NodeIdentifier nodeIdentifier, final int count) { - addBuilder(Builders.unkeyedListEntryBuilder().withNodeIdentifier(nodeIdentifier), nodeIdentifier); - } - - @Override - public void startMapNode(final NodeIdentifier nodeIdentifier, final int count) { - addBuilder(Builders.mapBuilder().withNodeIdentifier(nodeIdentifier), nodeIdentifier); - } - - @Override - public void startMapEntryNode(final NodeIdentifierWithPredicates nodeIdentifierWithPredicates, final int count) { - addBuilder(Builders.mapEntryBuilder().withNodeIdentifier(nodeIdentifierWithPredicates), - nodeIdentifierWithPredicates); - } - - @Override - public void startOrderedMapNode(final NodeIdentifier nodeIdentifier, final int count) { - addBuilder(Builders.orderedMapBuilder().withNodeIdentifier(nodeIdentifier), nodeIdentifier); - } - - @Override - public void startChoiceNode(final NodeIdentifier nodeIdentifier, final int count) { - addBuilder(Builders.choiceBuilder().withNodeIdentifier(nodeIdentifier), nodeIdentifier); - } - - @Override - public void startAugmentationNode(final AugmentationIdentifier augmentationIdentifier) { - addBuilder(Builders.augmentationBuilder().withNodeIdentifier(augmentationIdentifier), augmentationIdentifier); - } - - @SuppressWarnings("unchecked") - @Override - public void anyxmlNode(final NodeIdentifier nodeIdentifier, final Object value) { - checkNotSealed(); - - NormalizedNodeBuilderWrapper parent = stack.peek(); - AnyXmlNode anyXmlNode = Builders.anyXmlBuilder().withNodeIdentifier(nodeIdentifier).withValue((DOMSource) value) - .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; - } - } - - @SuppressWarnings("unchecked") - @Override - public void endNode() { - checkNotSealed(); - - final NormalizedNodeBuilderWrapper child; - try { - child = stack.pop(); - } catch (NoSuchElementException e) { - throw new IllegalStateException("endNode called on an empty stack", e); - } - - if (child.getSchema() == null) { - LOG.debug("Schema not found for {}", child.identifier()); - return; - } - - NormalizedNode newNode = child.builder().build(); - if (stack.size() > 0) { - NormalizedNodeBuilderWrapper parent = stack.peek(); - parent.builder().addChild(newNode); - } else { - this.normalizedNode = newNode; - sealed = true; - } - } - - @Override - public void close() { - sealed = true; - } - - @Override - public void flush() { - // No-op + super(schemaContext); + initialize(nodePath); } public NormalizedNode normalizedNode() { return normalizedNode; } - - private void checkNotSealed() { - checkState(!sealed, "Pruner can be used only once"); - } - - private static boolean hasValidSchema(final QName name, final NormalizedNodeBuilderWrapper parent) { - final DataSchemaContextNode parentSchema = parent.getSchema(); - final boolean valid = parentSchema != null && parentSchema.getChild(name) != null; - if (!valid) { - LOG.debug("Schema not found for {}", name); - } - - return valid; - } - - private NormalizedNodeBuilderWrapper addBuilder(final NormalizedNodeContainerBuilder builder, - final PathArgument identifier) { - checkNotSealed(); - - final DataSchemaContextNode schemaNode; - final NormalizedNodeBuilderWrapper parent = stack.peek(); - if (parent != null) { - final DataSchemaContextNode parentSchema = parent.getSchema(); - schemaNode = parentSchema == null ? null : parentSchema.getChild(identifier); - } else { - schemaNode = nodePathSchemaNode; - } - - NormalizedNodeBuilderWrapper wrapper = new NormalizedNodeBuilderWrapper(builder, identifier, schemaNode); - stack.push(wrapper); - return wrapper; - } }