X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=yang%2Fyang-data-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fyangtools%2Fyang%2Fdata%2Fimpl%2Fschema%2FImmutableNodes.java;h=a7f9b79dd471a629c87e0df354a541cfa0cad373;hb=6b5d20f6513bc3e6e5db4a2058ee81308edaa9c8;hp=fc5c20e6fde66e21fa0c6e9159dfadbf0b1dfc80;hpb=b8ac1a71bb9b2f950f8b55c8357aac777a63a83c;p=yangtools.git diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/ImmutableNodes.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/ImmutableNodes.java index fc5c20e6fd..a7f9b79dd4 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/ImmutableNodes.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/ImmutableNodes.java @@ -7,19 +7,29 @@ */ package org.opendaylight.yangtools.yang.data.impl.schema; +import com.google.common.base.Optional; +import com.google.common.base.Preconditions; +import java.util.Map; import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.data.api.ModifyAction; +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.NodeIdentifierWithPredicates; +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.MapEntryNode; import org.opendaylight.yangtools.yang.data.api.schema.MapNode; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.CollectionNodeBuilder; import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContainerNodeBuilder; +import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableChoiceNodeBuilder; import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableContainerNodeBuilder; import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableLeafNodeBuilder; import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableMapEntryNodeBuilder; import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableMapNodeBuilder; +import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; +import org.opendaylight.yangtools.yang.model.api.SchemaContext; public final class ImmutableNodes { @@ -27,12 +37,12 @@ public final class ImmutableNodes { throw new UnsupportedOperationException("Utilities class should not be instantiated"); } - public static final CollectionNodeBuilder mapNodeBuilder() { + public static CollectionNodeBuilder mapNodeBuilder() { return ImmutableMapNodeBuilder.create(); } - public static final CollectionNodeBuilder mapNodeBuilder(final QName name) { - return ImmutableMapNodeBuilder.create().withNodeIdentifier(new NodeIdentifier(name)); + public static CollectionNodeBuilder mapNodeBuilder(final QName name) { + return ImmutableMapNodeBuilder.create().withNodeIdentifier(NodeIdentifier.create(name)); } /** @@ -40,9 +50,10 @@ public final class ImmutableNodes { * * @param name Identifier of leaf node * @param value Value of leaf node + * @param Type of leaf node value * @return Leaf node with supplied identifier and value */ - public static final LeafNode leafNode(final NodeIdentifier name,final T value) { + public static LeafNode leafNode(final NodeIdentifier name, final T value) { return ImmutableLeafNodeBuilder.create() .withNodeIdentifier(name) .withValue(value) @@ -50,20 +61,20 @@ public final class ImmutableNodes { } /** - * * Construct immutable leaf node * * @param name QName which will be used as node identifier * @param value Value of leaf node. + * @param Type of leaf node value * @return Leaf node with supplied identifier and value */ - public static final LeafNode leafNode(final QName name,final T value) { - return leafNode(new NodeIdentifier(name), value); + public static LeafNode leafNode(final QName name,final T value) { + return leafNode(NodeIdentifier.create(name), value); } - public static DataContainerNodeBuilder mapEntryBuilder(final QName nodeName,final QName keyName,final Object keyValue) { + public static DataContainerNodeBuilder mapEntryBuilder(final QName nodeName, final QName keyName, final Object keyValue) { return ImmutableMapEntryNodeBuilder.create() - .withNodeIdentifier(new NodeIdentifierWithPredicates(nodeName, keyName,keyValue)) + .withNodeIdentifier(new NodeIdentifierWithPredicates(nodeName, keyName, keyValue)) .withChild(leafNode(keyName, keyValue)); } @@ -75,8 +86,53 @@ public final class ImmutableNodes { return ImmutableMapEntryNodeBuilder.create(); } - public static NormalizedNode containerNode(final QName name) { - return ImmutableContainerNodeBuilder.create().withNodeIdentifier(new NodeIdentifier(name)).build(); + public static ContainerNode containerNode(final QName name) { + return ImmutableContainerNodeBuilder.create().withNodeIdentifier(NodeIdentifier.create(name)).build(); + } + + public static ChoiceNode choiceNode(final QName name) { + return ImmutableChoiceNodeBuilder.create().withNodeIdentifier(NodeIdentifier.create(name)).build(); } + /** + * Convert YangInstanceIdentifier into a normalized node structure + * + * @param ctx schema context to used during serialization + * @param id instance identifier to convert to node structure starting from root + * @return serialized normalized node for provided instance Id + */ + public static NormalizedNode fromInstanceId(final SchemaContext ctx, final YangInstanceIdentifier id) { + return fromInstanceId(ctx, id, Optional.absent(), Optional.absent()); + } + + /** + * Convert YangInstanceIdentifier into a normalized node structure + * + * @param ctx schema context to used during serialization + * @param id instance identifier to convert to node structure starting from root + * @param deepestElement pre-built deepest child that will be inserted at the last path argument of provided instance Id + * @return serialized normalized node for provided instance Id with overridden last child. + */ + public static NormalizedNode fromInstanceId(final SchemaContext ctx, final YangInstanceIdentifier id, final NormalizedNode deepestElement) { + return fromInstanceId(ctx, id, Optional.of(deepestElement), Optional.absent()); + } + + /** + * Convert YangInstanceIdentifier into a normalized node structure + * + * @param ctx schema context to used during serialization + * @param id instance identifier to convert to node structure starting from root + * @param deepestElement pre-built deepest child that will be inserted at the last path argument of provided instance Id + * @param operation modify operation attribute to be added to the deepest child. QName is the operation attribute key and ModifyAction is the value. + * @return serialized normalized node for provided instance Id with (optionally) overridden last child and (optionally) marked with specific operation attribute. + */ + public static NormalizedNode fromInstanceId(final SchemaContext ctx, final YangInstanceIdentifier id, final Optional> deepestElement, final Optional> operation) { + Preconditions.checkNotNull(ctx); + Preconditions.checkNotNull(id); + final YangInstanceIdentifier.PathArgument topLevelElement = id.getPathArguments().get(0); + final DataSchemaNode dataChildByName = ctx.getDataChildByName(topLevelElement.getNodeType()); + Preconditions.checkNotNull(dataChildByName, "Cannot find %s node in schema context. Instance identifier has to start from root", topLevelElement); + final InstanceIdToNodes instanceIdToNodes = InstanceIdToNodes.fromSchemaAndQNameChecked(ctx, topLevelElement.getNodeType()); + return instanceIdToNodes.create(id, deepestElement, operation); + } }