package org.opendaylight.yangtools.yang.data.impl.schema;
import static com.google.common.base.Preconditions.checkArgument;
+import static java.util.Objects.requireNonNull;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import java.util.Map.Entry;
import java.util.Optional;
import java.util.concurrent.ConcurrentHashMap;
+import org.eclipse.jdt.annotation.NonNull;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.AugmentationIdentifier;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
abstract NormalizedNodeContainerBuilder<?, ?, ?, ?> createBuilder(PathArgument compositeNode);
- abstract static class DataContainerNormalizationOperation<T extends PathArgument>
+ abstract static class DataContainerNormalizationOperation<T extends PathArgument, S extends DataNodeContainer>
extends InstanceIdToCompositeNodes<T> {
private final Map<PathArgument, InstanceIdToNodes<?>> byArg = new ConcurrentHashMap<>();
- private final DataNodeContainer schema;
+ private final @NonNull S schema;
- DataContainerNormalizationOperation(final T identifier, final DataNodeContainer schema) {
+ DataContainerNormalizationOperation(final T identifier, final S schema) {
super(identifier);
- this.schema = schema;
+ this.schema = requireNonNull(schema);
}
@Override
final InstanceIdToNodes<?> getChild(final PathArgument child) {
- InstanceIdToNodes<?> potential = byArg.get(child);
- if (potential != null) {
- return potential;
+ final InstanceIdToNodes<?> existing = byArg.get(child);
+ if (existing != null) {
+ return existing;
}
- potential = fromLocalSchema(child);
- return register(potential);
+ return register(fromLocalSchema(child));
+ }
+
+ final @NonNull S schema() {
+ return schema;
}
private InstanceIdToNodes<?> fromLocalSchema(final PathArgument child) {
}
}
- static final class MapEntryNormalization extends DataContainerNormalizationOperation<NodeIdentifierWithPredicates> {
+ static final class MapEntryNormalization
+ extends DataContainerNormalizationOperation<NodeIdentifierWithPredicates, ListSchemaNode> {
MapEntryNormalization(final ListSchemaNode schema) {
super(NodeIdentifierWithPredicates.of(schema.getQName()), schema);
}
}
}
- static final class UnkeyedListItemNormalization extends DataContainerNormalizationOperation<NodeIdentifier> {
+ static final class UnkeyedListItemNormalization
+ extends DataContainerNormalizationOperation<NodeIdentifier, ListSchemaNode> {
UnkeyedListItemNormalization(final ListSchemaNode schema) {
super(NodeIdentifier.create(schema.getQName()), schema);
}
}
}
- static final class ContainerTransformation extends DataContainerNormalizationOperation<NodeIdentifier> {
+ static final class ContainerTransformation
+ extends DataContainerNormalizationOperation<NodeIdentifier, ContainerSchemaNode> {
ContainerTransformation(final ContainerSchemaNode schema) {
super(NodeIdentifier.create(schema.getQName()), schema);
}
}
}
- static final class AugmentationNormalization extends DataContainerNormalizationOperation<AugmentationIdentifier> {
+ static final class AugmentationNormalization
+ extends DataContainerNormalizationOperation<AugmentationIdentifier, AugmentationSchemaNode> {
AugmentationNormalization(final AugmentationSchemaNode augmentation, final DataNodeContainer schema) {
super(DataSchemaContextNode.augmentationIdentifierFrom(augmentation),
EffectiveAugmentationSchema.create(augmentation, schema));