NormalizedTuple should capture the type of NormalizedNode it carries.
This will be useful as we define more normalization APIs, where some
parts guarantee, for example, ContainerNode.
Change-Id: I01a3429c0bb38cd87d293dfbd154be7aa69c411d
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
* corresponding {@link #context()}. Furthermore {@link #data()} is guaranteed to point at a {@link ContainerNode}.
*/
@NonNullByDefault
-public interface NormalizedMountPoint extends NormalizedTuple {
+public interface NormalizedMountPoint extends NormalizedTuple<ContainerNode> {
/**
* Return the {@code mount-point} label.
*
*/
MountPointContext context();
- @Override
- ContainerNode data();
-
/*
* FIXME: consider whether this interface should contain some information based on 'parent-reference':
* - List<YangXPathExpression.QualifiedBound> getParentReference()
// the corresponding metadata and/or mount points. Most notably mount points are only defined for ContainerNode
// and MapEntryNode.
@Beta
-public interface NormalizedTuple extends Immutable {
+public interface NormalizedTuple<T extends NormalizedNode> extends Immutable {
/**
* Return the data portion of this tree.
*
* @return Data portion of this tree.
*/
- @NonNull NormalizedNode data();
+ @NonNull T data();
/**
* Return the metadata portion of this tree. This portion is optional.
* The result of a {@link NormalizedNodeStreamWriter} stream, i.e. of a normalization operation. It really is just an
* implementation of {@link NormalizedTuple}.
*/
-public record NormalizationResult(
- @NonNull NormalizedNode data,
+public record NormalizationResult<T extends NormalizedNode>(
+ @NonNull T data,
@Nullable NormalizedMetadata metadata,
- @Nullable NormalizedMountpoints mountPoints) implements NormalizedTuple {
+ @Nullable NormalizedMountpoints mountPoints) implements NormalizedTuple<T> {
public NormalizationResult {
requireNonNull(data);
}
- public NormalizationResult(final @NonNull NormalizedNode data) {
+ public NormalizationResult(final @NonNull T data) {
this(data, null, null);
}
- public NormalizationResult(final @NonNull NormalizedNode data, final @Nullable NormalizedMetadata metadata) {
+ public NormalizationResult(final @NonNull T data, final @Nullable NormalizedMetadata metadata) {
this(data, metadata, null);
}
- public NormalizationResult(final @NonNull NormalizedNode data, final @Nullable NormalizedMountpoints mountPoints) {
+ public NormalizationResult(final @NonNull T data, final @Nullable NormalizedMountpoints mountPoints) {
this(data, null, mountPoints);
}
}
*
* @return Result of streaming, or {@code null} if not result is present.
*/
- @Nullable NormalizationResult result();
+ @Nullable NormalizationResult<?> result();
/**
* Reset this writer to initial state.
private NormalizedMetadata metadata;
private NormalizedMountpoints mountPoints;
- public @Nullable NormalizationResult result() {
+ public @Nullable NormalizationResult<?> result() {
final var localData = data;
- return localData == null ? null : new NormalizationResult(localData, metadata, mountPoints);
+ return localData == null ? null : new NormalizationResult<>(localData, metadata, mountPoints);
}
- public @NonNull NormalizationResult getResult() {
+ public @NonNull NormalizationResult<?> getResult() {
final var localData = data;
if (localData == null) {
throw new IllegalStateException("Holder " + this + " has not been completed");
}
- return new NormalizationResult(localData, metadata, mountPoints);
+ return new NormalizationResult<>(localData, metadata, mountPoints);
}
void setData(final NormalizedNode data) {
}
@Override
- public NormalizationResult result() {
+ public NormalizationResult<?> result() {
return builder.result();
}