Move JournalWriter.getLastIndex()
[controller.git] / opendaylight / md-sal / sal-distributed-datastore / src / main / java / org / opendaylight / controller / cluster / datastore / utils / RootScatterGather.java
index c0d4de44d34dadf90f4f72132d59c1a4db899d9f..d755adc585a65aa32e24588c3f629e02de047636 100644 (file)
@@ -24,47 +24,23 @@ import java.util.stream.Collectors;
 import java.util.stream.Stream;
 import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.jdt.annotation.NonNullByDefault;
-import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
 import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
-import org.opendaylight.yangtools.yang.data.api.schema.builder.DataContainerNodeBuilder;
-import org.opendaylight.yangtools.yang.data.impl.schema.Builders;
+import org.opendaylight.yangtools.yang.data.spi.node.ImmutableNodes;
 import org.opendaylight.yangtools.yang.data.tree.api.DataValidationFailedException;
 
 /**
  * Utility methods for dealing with datastore root {@link ContainerNode} with respect to module shards.
  */
 public final class RootScatterGather {
-    // FIXME: Record when we have JDK17+
     @NonNullByDefault
-    public static final class ShardContainer<T> {
-        private final ContainerNode container;
-        private final T shard;
-
-        ShardContainer(final T shard, final ContainerNode container) {
-            this.shard = requireNonNull(shard);
-            this.container = requireNonNull(container);
-        }
-
-        public T shard() {
-            return shard;
-        }
-
-        public ContainerNode container() {
-            return container;
-        }
-
-        @Override
-        public int hashCode() {
-            return shard.hashCode();
-        }
-
-        @Override
-        public boolean equals(final @Nullable Object obj) {
-            return obj == this || obj instanceof ShardContainer && shard.equals(((ShardContainer<?>) obj).shard);
+    public record ShardContainer<T>(T shard, ContainerNode container) {
+        public ShardContainer {
+            requireNonNull(shard);
+            requireNonNull(container);
         }
 
         @Override
@@ -114,7 +90,7 @@ public final class RootScatterGather {
     public static <T> @NonNull Stream<ShardContainer<T>> scatterAll(final ContainerNode rootNode,
             final Function<PathArgument, T> childToShard, final Stream<T> allShards) {
         final var builders = allShards
-            .collect(Collectors.toUnmodifiableMap(Function.identity(), unused -> Builders.containerBuilder()));
+            .collect(Collectors.toUnmodifiableMap(Function.identity(), unused -> ImmutableNodes.newContainerBuilder()));
         for (var child : rootNode.body()) {
             final var shard = childToShard.apply(child.name());
             verifyNotNull(builders.get(shard), "Failed to find builder for %s", shard).addChild(child);
@@ -132,16 +108,16 @@ public final class RootScatterGather {
      */
     public static <T> @NonNull Stream<ShardContainer<T>> scatterTouched(final ContainerNode rootNode,
             final Function<PathArgument, T> childToShard) {
-        final var builders = new HashMap<T, DataContainerNodeBuilder<NodeIdentifier, ContainerNode>>();
+        final var builders = new HashMap<T, ContainerNode.Builder>();
         for (var child : rootNode.body()) {
-            builders.computeIfAbsent(childToShard.apply(child.name()), unused -> Builders.containerBuilder())
+            builders.computeIfAbsent(childToShard.apply(child.name()), unused -> ImmutableNodes.newContainerBuilder())
                 .addChild(child);
         }
         return streamContainers(rootNode.name(), builders);
     }
 
     private static <T> @NonNull Stream<ShardContainer<T>> streamContainers(final NodeIdentifier rootId,
-            final Map<T, DataContainerNodeBuilder<NodeIdentifier, ContainerNode>> builders) {
+            final Map<T, ContainerNode.Builder> builders) {
         return builders.entrySet().stream()
             .map(entry -> new ShardContainer<>(entry.getKey(), entry.getValue().withNodeIdentifier(rootId).build()));
     }