Rename opendaylight.mdsal.binding.runtime.spi
[yangtools.git] / data / yang-data-tree-ri / src / main / java / org / opendaylight / yangtools / yang / data / tree / impl / ContainerModificationStrategy.java
index b521c29f2d6a9723ff1bd36f4da16ddd41d12743..da1b626c3d28907b8a36d6d634fbdb9959132f14 100644 (file)
@@ -9,12 +9,12 @@ package org.opendaylight.yangtools.yang.data.tree.impl;
 
 import static java.util.Objects.requireNonNull;
 
+import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
 import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
 import org.opendaylight.yangtools.yang.data.api.schema.DistinctNodeContainer;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
-import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes;
-import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableContainerNodeBuilder;
+import org.opendaylight.yangtools.yang.data.spi.node.MandatoryLeafEnforcer;
 import org.opendaylight.yangtools.yang.data.tree.api.DataTreeConfiguration;
 import org.opendaylight.yangtools.yang.data.tree.impl.node.TreeNode;
 import org.opendaylight.yangtools.yang.data.tree.impl.node.Version;
@@ -44,25 +44,24 @@ sealed class ContainerModificationStrategy extends DataNodeContainerModification
         @Override
         protected TreeNode applyMerge(final ModifiedNode modification, final TreeNode currentMeta,
                 final Version version) {
-            final var ret = super.applyMerge(modification, currentMeta, version);
-            enforcer.enforceOnTreeNode(ret);
-            return ret;
+            return enforce(super.applyMerge(modification, currentMeta, version));
         }
 
         @Override
         protected TreeNode applyWrite(final ModifiedNode modification, final NormalizedNode newValue,
                 final TreeNode currentMeta, final Version version) {
-            final var ret = super.applyWrite(modification, newValue, currentMeta, version);
-            enforcer.enforceOnTreeNode(ret);
-            return ret;
+            return enforce(super.applyWrite(modification, newValue, currentMeta, version));
         }
 
         @Override
         protected TreeNode applyTouch(final ModifiedNode modification, final TreeNode currentMeta,
                 final Version version) {
-            final var ret = super.applyTouch(modification, currentMeta, version);
-            enforcer.enforceOnTreeNode(ret);
-            return ret;
+            return enforce(super.applyTouch(modification, currentMeta, version));
+        }
+
+        private @NonNull TreeNode enforce(final TreeNode treeNode) {
+            enforcer.enforceOnData(treeNode.data());
+            return treeNode;
         }
     }
 
@@ -79,7 +78,9 @@ sealed class ContainerModificationStrategy extends DataNodeContainerModification
 
         Structural(final ContainerLike schema, final DataTreeConfiguration treeConfig) {
             super(schema, treeConfig);
-            emptyNode = ImmutableNodes.containerNode(schema.getQName());
+            emptyNode = BUILDER_FACTORY.newContainerBuilder()
+                .withNodeIdentifier(NodeIdentifier.create(schema.getQName()))
+                .build();
         }
 
         @Override
@@ -95,8 +96,8 @@ sealed class ContainerModificationStrategy extends DataNodeContainerModification
     }
 
     private static final NormalizedNodeContainerSupport<NodeIdentifier, ContainerNode> SUPPORT =
-            new NormalizedNodeContainerSupport<>(ContainerNode.class, ImmutableContainerNodeBuilder::create,
-                    ImmutableContainerNodeBuilder::create);
+            new NormalizedNodeContainerSupport<>(ContainerNode.class, BUILDER_FACTORY::newContainerBuilder,
+                BUILDER_FACTORY::newContainerBuilder);
 
     ContainerModificationStrategy(final ContainerLike schemaNode, final DataTreeConfiguration treeConfig) {
         super(SUPPORT, schemaNode, treeConfig);
@@ -104,7 +105,7 @@ sealed class ContainerModificationStrategy extends DataNodeContainerModification
 
     static ContainerModificationStrategy of(final ContainerSchemaNode schema, final DataTreeConfiguration treeConfig) {
         if (schema.isPresenceContainer()) {
-            final var enforcer = MandatoryLeafEnforcer.forContainer(schema, treeConfig);
+            final var enforcer = enforcerFor(schema, treeConfig);
             return enforcer != null ? new EnforcingMandatory(schema, treeConfig, enforcer)
                 : new ContainerModificationStrategy(schema, treeConfig);
         }