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%2Fcodec%2FSchemaTracker.java;h=e6befe87631d989e8f2c30177cd9aec0cf2355d3;hb=a2bd6a23f3b2edf06afb1b4b95dc7755d4730a00;hp=e8aad15dbf0046c34a93b50a288e00b6e7698c7e;hpb=a1a533ad48b9c048e8ff84003fc08346ccf27a76;p=yangtools.git diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/codec/SchemaTracker.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/codec/SchemaTracker.java index e8aad15dbf..e6befe8763 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/codec/SchemaTracker.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/codec/SchemaTracker.java @@ -16,6 +16,7 @@ import java.io.IOException; import java.util.ArrayDeque; import java.util.Collection; import java.util.Deque; +import java.util.List; import java.util.Optional; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.odlext.model.api.YangModeledAnyxmlSchemaNode; @@ -44,6 +45,7 @@ import org.opendaylight.yangtools.yang.model.api.ListSchemaNode; import org.opendaylight.yangtools.yang.model.api.NotificationDefinition; import org.opendaylight.yangtools.yang.model.api.SchemaNode; import org.opendaylight.yangtools.yang.model.api.SchemaPath; +import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Absolute; import org.opendaylight.yangtools.yang.model.util.EffectiveAugmentationSchema; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -72,6 +74,17 @@ public final class SchemaTracker { return new SchemaTracker(root); } + /** + * Create a new writer with the specified context and rooted in the specified schema path. + * + * @param context Associated {@link EffectiveModelContext} + * @param path schema path + * @return A new {@link NormalizedNodeStreamWriter} + */ + public static @NonNull SchemaTracker create(final EffectiveModelContext context, final Absolute path) { + return create(context, path.getNodeIdentifiers()); + } + /** * Create a new writer with the specified context and rooted in the specified schema path. * @@ -80,6 +93,10 @@ public final class SchemaTracker { * @return A new {@link NormalizedNodeStreamWriter} */ public static @NonNull SchemaTracker create(final EffectiveModelContext context, final SchemaPath path) { + return create(context, path.getPathFromRoot()); + } + + private static @NonNull SchemaTracker create(final EffectiveModelContext context, final Iterable path) { final Collection schemaNodes = SchemaUtils.findParentSchemaNodesOnPath(context, path); checkArgument(!schemaNodes.isEmpty(), "Unable to find schema node for supplied schema path: %s", path); if (schemaNodes.size() > 1) { @@ -94,6 +111,19 @@ public final class SchemaTracker { return new SchemaTracker(current.get()); } + /** + * Create a new writer with the specified context and rooted in the specified schema path. + * + * @param context Associated {@link EffectiveModelContext} + * @param operation Operation schema path + * @param qname Input/Output container QName + * @return A new {@link NormalizedNodeStreamWriter} + */ + public static @NonNull SchemaTracker forOperation(final EffectiveModelContext context, final Absolute operation, + final QName qname) { + return create(context, Iterables.concat(operation.getNodeIdentifiers(), List.of(qname))); + } + public Object getParent() { if (schemaStack.isEmpty()) { return root;