package org.opendaylight.mdsal.binding.dom.adapter;
import com.google.common.annotations.Beta;
-import java.util.Optional;
-import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.AugmentationIdentifier;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeWithValue;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
-import org.opendaylight.yangtools.yang.data.api.schema.AnyXmlNode;
-import org.opendaylight.yangtools.yang.data.api.schema.AugmentationNode;
+import org.opendaylight.yangtools.yang.data.api.schema.AnydataNode;
+import org.opendaylight.yangtools.yang.data.api.schema.AnyxmlNode;
import org.opendaylight.yangtools.yang.data.api.schema.ChoiceNode;
import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
import org.opendaylight.yangtools.yang.data.api.schema.LeafNode;
import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
import org.opendaylight.yangtools.yang.data.api.schema.UnkeyedListEntryNode;
import org.opendaylight.yangtools.yang.data.api.schema.UnkeyedListNode;
-import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidateNode;
+import org.opendaylight.yangtools.yang.data.tree.api.DataTreeCandidateNode;
/**
* Defines structural mapping of Normalized Node to Binding data addressable by Instance Identifier. Not all binding
UNKNOWN;
public static BindingStructuralType from(final DataTreeCandidateNode domChildNode) {
- Optional<NormalizedNode<?, ?>> dataBased = domChildNode.getDataAfter();
- if (!dataBased.isPresent()) {
- dataBased = domChildNode.getDataBefore();
+ var dataBased = domChildNode.dataAfter();
+ if (dataBased == null) {
+ dataBased = domChildNode.dataBefore();
}
- if (dataBased.isPresent()) {
- return from(dataBased.get());
- }
- return from(domChildNode.getIdentifier());
+ return dataBased != null ? from(dataBased) : from(domChildNode.name());
}
private static BindingStructuralType from(final PathArgument identifier) {
- if (identifier instanceof NodeIdentifierWithPredicates || identifier instanceof AugmentationIdentifier) {
+ if (identifier instanceof NodeIdentifierWithPredicates) {
return VISIBLE_CONTAINER;
}
if (identifier instanceof NodeWithValue) {
return UNKNOWN;
}
- static BindingStructuralType from(final NormalizedNode<?, ?> data) {
+ static BindingStructuralType from(final NormalizedNode data) {
if (isNotAddressable(data)) {
return NOT_ADDRESSABLE;
}
}
public static BindingStructuralType recursiveFrom(final DataTreeCandidateNode node) {
- final BindingStructuralType type = BindingStructuralType.from(node);
- switch (type) {
- case INVISIBLE_CONTAINER:
- case INVISIBLE_LIST:
+ final var type = BindingStructuralType.from(node);
+ return switch (type) {
+ case INVISIBLE_CONTAINER, INVISIBLE_LIST -> {
// This node is invisible, try to resolve using a child node
- for (final DataTreeCandidateNode child : node.getChildNodes()) {
- final BindingStructuralType childType = recursiveFrom(child);
- switch (childType) {
- case INVISIBLE_CONTAINER:
- case INVISIBLE_LIST:
- // Invisible nodes are not addressable
- return BindingStructuralType.NOT_ADDRESSABLE;
- case NOT_ADDRESSABLE:
- case UNKNOWN:
- case VISIBLE_CONTAINER:
- return childType;
- default:
- throw new IllegalStateException("Unhandled child type " + childType + " for child "
- + child);
- }
+ for (var child : node.childNodes()) {
+ final var childType = recursiveFrom(child);
+ yield switch (childType) {
+ case INVISIBLE_CONTAINER, INVISIBLE_LIST ->
+ // Invisible nodes are not addressable
+ BindingStructuralType.NOT_ADDRESSABLE;
+ case NOT_ADDRESSABLE, UNKNOWN, VISIBLE_CONTAINER -> childType;
+ };
}
- return BindingStructuralType.NOT_ADDRESSABLE;
- default:
- return type;
- }
+ yield BindingStructuralType.NOT_ADDRESSABLE;
+ }
+ default -> type;
+ };
}
- private static boolean isVisibleContainer(final NormalizedNode<?, ?> data) {
- return data instanceof MapEntryNode || data instanceof ContainerNode || data instanceof AugmentationNode;
+ private static boolean isVisibleContainer(final NormalizedNode data) {
+ return data instanceof MapEntryNode || data instanceof ContainerNode;
}
- private static boolean isNotAddressable(final NormalizedNode<?, ?> normalizedNode) {
+ private static boolean isNotAddressable(final NormalizedNode normalizedNode) {
return normalizedNode instanceof LeafNode
- || normalizedNode instanceof AnyXmlNode
+ || normalizedNode instanceof AnyxmlNode
+ || normalizedNode instanceof AnydataNode
|| normalizedNode instanceof LeafSetNode
|| normalizedNode instanceof LeafSetEntryNode
|| normalizedNode instanceof UnkeyedListNode