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
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);
*/
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()));
}