2 * Copyright (c) 2017 Cisco Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.yangtools.yang.data.tree.impl;
10 import static org.junit.jupiter.api.Assertions.assertNotNull;
12 import org.junit.jupiter.api.Test;
13 import org.opendaylight.yangtools.yang.common.QName;
14 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
15 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
16 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
17 import org.opendaylight.yangtools.yang.data.impl.schema.Builders;
18 import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes;
19 import org.opendaylight.yangtools.yang.data.tree.api.DataTree;
20 import org.opendaylight.yangtools.yang.data.tree.api.DataTreeConfiguration;
21 import org.opendaylight.yangtools.yang.data.tree.api.DataValidationFailedException;
22 import org.opendaylight.yangtools.yang.data.tree.api.TreeType;
23 import org.opendaylight.yangtools.yang.data.tree.impl.di.InMemoryDataTreeFactory;
24 import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
25 import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
28 private static final String NS = "bug8291";
29 private static final QName ROOT = QName.create(NS, "root");
30 private static final QName OUTER_LIST = QName.create(NS, "outer-list");
31 private static final QName OUTER_LIST_ID = QName.create(NS, "id");
32 private static final QName INNER_LIST = QName.create(NS, "inner-list");
34 private EffectiveModelContext schemaContext;
36 private static DataTree initDataTree(final EffectiveModelContext schemaContext) {
37 final var config = new DataTreeConfiguration.Builder(TreeType.CONFIGURATION).setRootPath(
38 YangInstanceIdentifier.of(ROOT).node(OUTER_LIST)).build();
39 return new InMemoryDataTreeFactory().create(config, schemaContext);
43 void test() throws DataValidationFailedException {
44 schemaContext = YangParserTestUtils.parseYang("""
69 assertNotNull(schemaContext, "Schema context must not be null.");
71 final var inMemoryDataTree = initDataTree(schemaContext);
72 writeOuterListMapEntry(inMemoryDataTree);
73 writeInnerList(inMemoryDataTree);
76 private static void writeInnerList(final DataTree inMemoryDataTree) throws DataValidationFailedException {
77 final var modificationTree = inMemoryDataTree.takeSnapshot().newModification();
78 modificationTree.write(
79 YangInstanceIdentifier.of(NodeIdentifierWithPredicates.of(OUTER_LIST, OUTER_LIST_ID, 1)).node(INNER_LIST),
80 Builders.mapBuilder().withNodeIdentifier(new NodeIdentifier(INNER_LIST)).build());
82 modificationTree.ready();
83 inMemoryDataTree.validate(modificationTree);
84 final var prepare = inMemoryDataTree.prepare(modificationTree);
85 inMemoryDataTree.commit(prepare);
88 private static void writeOuterListMapEntry(final DataTree inMemoryDataTree)
89 throws DataValidationFailedException {
90 final var modificationTree = inMemoryDataTree.takeSnapshot().newModification();
92 final var outerListMapEntry = Builders.mapEntryBuilder()
93 .withNodeIdentifier(NodeIdentifierWithPredicates.of(OUTER_LIST, OUTER_LIST_ID, 1))
94 .withChild(ImmutableNodes.leafNode(OUTER_LIST_ID, 1))
97 modificationTree.write(YangInstanceIdentifier.of(NodeIdentifierWithPredicates.of(OUTER_LIST, OUTER_LIST_ID, 1)),
99 modificationTree.ready();
101 inMemoryDataTree.validate(modificationTree);
102 final var prepare = inMemoryDataTree.prepare(modificationTree);
103 inMemoryDataTree.commit(prepare);