Do not use Optional for augmentation traversal
[yangtools.git] / data / yang-data-util / src / main / java / org / opendaylight / yangtools / yang / data / util / NormalizedNodeStreamWriterStack.java
index 6eb0e7750b0df3009a1bc869c8cb78d5327cf874..dfc838944129073613c5d3a540eebaab3eea6e9b 100644 (file)
@@ -17,11 +17,11 @@ import com.google.common.collect.Iterables;
 import java.io.IOException;
 import java.util.ArrayDeque;
 import java.util.Deque;
-import java.util.Optional;
 import java.util.Set;
 import java.util.stream.Collectors;
 import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.AugmentationIdentifier;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeWithValue;
@@ -136,6 +136,23 @@ public final class NormalizedNodeStreamWriterStack implements LeafrefResolver {
         return new NormalizedNodeStreamWriterStack(SchemaInferenceStack.of(context, path));
     }
 
+    /**
+     * Create a new writer with the specified context and rooted in the specified {@link YangInstanceIdentifier}..
+     *
+     * @param context Associated {@link EffectiveModelContext}
+     * @param path Normalized path
+     * @return A new {@link NormalizedNodeStreamWriterStack}
+     * @throws NullPointerException if any argument is null
+     * @throws IllegalArgumentException if {@code path} does not point to a valid root
+     */
+    public static @NonNull NormalizedNodeStreamWriterStack of(final EffectiveModelContext context,
+            final YangInstanceIdentifier path) {
+        return new NormalizedNodeStreamWriterStack(DataSchemaContextTree.from(context)
+            .enterPath(path)
+            .orElseThrow()
+            .stack());
+    }
+
     /**
      * Create a new writer with the specified context and rooted in the specified schema path.
      *
@@ -298,7 +315,7 @@ public final class NormalizedNodeStreamWriterStack implements LeafrefResolver {
         checkArgument(parent instanceof DataNodeContainer, "Augmentation allowed only in DataNodeContainer", parent);
         final AugmentationSchemaNode schema = findSchemaForAugment((AugmentationTarget) parent,
             identifier.getPossibleChildNames());
-        final AugmentationSchemaNode resolvedSchema = EffectiveAugmentationSchema.create(schema,
+        final AugmentationSchemaNode resolvedSchema = new EffectiveAugmentationSchema(schema,
             (DataNodeContainer) parent);
         schemaStack.push(resolvedSchema);
         return resolvedSchema;
@@ -322,8 +339,7 @@ public final class NormalizedNodeStreamWriterStack implements LeafrefResolver {
     // FIXME: 7.0.0: can we get rid of this?
     private static SchemaNode findCaseByChild(final ChoiceSchemaNode parent, final QName qname) {
         for (final CaseSchemaNode caze : parent.getCases()) {
-            final Optional<DataSchemaNode> potential = caze.findDataChildByName(qname);
-            if (potential.isPresent()) {
+            if (caze.dataChildByName(qname) != null) {
                 return caze;
             }
         }