import org.opendaylight.yangtools.yang.common.QName;
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.AnyXmlNode;
+import org.opendaylight.yangtools.yang.data.api.schema.AnydataNode;
+import org.opendaylight.yangtools.yang.data.api.schema.DOMSourceAnyxmlNode;
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.impl.schema.builder.api.CollectionNodeBuilder;
import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.NormalizedNodeBuilder;
-import org.opendaylight.yangtools.yang.model.api.AnyXmlSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.AnydataSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.AnyxmlSchemaNode;
import org.opendaylight.yangtools.yang.model.api.AugmentationSchemaNode;
import org.opendaylight.yangtools.yang.model.api.AugmentationTarget;
import org.opendaylight.yangtools.yang.model.api.CaseSchemaNode;
}
}
- private static final class AnyXmlNormalization extends InstanceIdToNodes<NodeIdentifier> {
- AnyXmlNormalization(final AnyXmlSchemaNode schema) {
+ private abstract static class AbstractOpaqueNormalization extends InstanceIdToNodes<NodeIdentifier> {
+ AbstractOpaqueNormalization(final DataSchemaNode schema) {
super(NodeIdentifier.create(schema.getQName()));
}
@Override
- InstanceIdToNodes<?> getChild(final PathArgument child) {
+ final InstanceIdToNodes<?> getChild(final PathArgument child) {
return null;
}
+ @Override
+ final boolean isMixin() {
+ return false;
+ }
+ }
+
+ private static final class AnydataNormalization extends AbstractOpaqueNormalization {
+ AnydataNormalization(final AnydataSchemaNode schema) {
+ super(schema);
+ }
+
@Override
NormalizedNode<?, ?> create(final PathArgument first, final Iterator<PathArgument> others,
final Optional<NormalizedNode<?, ?>> deepestChild) {
- final NormalizedNodeBuilder<NodeIdentifier, DOMSource, AnyXmlNode> builder = Builders.anyXmlBuilder()
+ checkState(deepestChild.isPresent(), "Cannot instantiate anydata node without a value");
+ final NormalizedNode<?, ?> child = deepestChild.get();
+ checkState(child instanceof AnydataNode, "Invalid child %s", child);
+ return createAnydata((AnydataNode<?>) child);
+ }
+
+ private <T> AnydataNode<T> createAnydata(final AnydataNode<T> child) {
+ return Builders.anydataBuilder(child.getValueObjectModel()).withValue(child.getValue())
+ .withNodeIdentifier(getIdentifier()).build();
+ }
+ }
+
+ private static final class AnyXmlNormalization extends AbstractOpaqueNormalization {
+ AnyXmlNormalization(final AnyxmlSchemaNode schema) {
+ super(schema);
+ }
+
+ @Override
+ NormalizedNode<?, ?> create(final PathArgument first, final Iterator<PathArgument> others,
+ final Optional<NormalizedNode<?, ?>> deepestChild) {
+ final NormalizedNodeBuilder<NodeIdentifier, DOMSource, DOMSourceAnyxmlNode> builder =
+ Builders.anyXmlBuilder()
.withNodeIdentifier(getIdentifier());
if (deepestChild.isPresent()) {
final NormalizedNode<?, ?> child = deepestChild.get();
- checkState(child instanceof AnyXmlNode);
- builder.withValue(((AnyXmlNode) child).getValue());
+ checkState(child instanceof DOMSourceAnyxmlNode, "Invalid child %s", child);
+ builder.withValue(((DOMSourceAnyxmlNode) child).getValue());
}
return builder.build();
}
-
- @Override
- boolean isMixin() {
- return false;
- }
}
private static Optional<DataSchemaNode> findChildSchemaNode(final DataNodeContainer parent, final QName child) {
private static ChoiceSchemaNode findChoice(final Iterable<ChoiceSchemaNode> choices, final QName child) {
for (final ChoiceSchemaNode choice : choices) {
- for (final CaseSchemaNode caze : choice.getCases().values()) {
+ for (final CaseSchemaNode caze : choice.getCases()) {
if (findChildSchemaNode(caze, child).isPresent()) {
return choice;
}
return new InstanceIdToCompositeNodes.ChoiceNodeNormalization((ChoiceSchemaNode) potential);
} else if (potential instanceof LeafListSchemaNode) {
return fromLeafListSchemaNode((LeafListSchemaNode) potential);
- } else if (potential instanceof AnyXmlSchemaNode) {
- return new AnyXmlNormalization((AnyXmlSchemaNode) potential);
+ } else if (potential instanceof AnydataSchemaNode) {
+ return new AnydataNormalization((AnydataSchemaNode) potential);
+ } else if (potential instanceof AnyxmlSchemaNode) {
+ return new AnyXmlNormalization((AnyxmlSchemaNode) potential);
}
return null;
}