import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.AugmentationIdentifier;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
+import org.opendaylight.yangtools.yang.data.api.schema.AnydataNode;
+import org.opendaylight.yangtools.yang.data.api.schema.AnyxmlNode;
import org.opendaylight.yangtools.yang.data.api.schema.LeafNode;
import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
import org.opendaylight.yangtools.yang.data.api.schema.tree.ConflictingModificationAppliedException;
import org.opendaylight.yangtools.yang.data.api.schema.tree.TreeType;
import org.opendaylight.yangtools.yang.data.api.schema.tree.spi.TreeNode;
import org.opendaylight.yangtools.yang.data.api.schema.tree.spi.Version;
+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.ChoiceSchemaNode;
treeConfig));
} else if (schemaNode instanceof LeafSchemaNode) {
return new ValueNodeModificationStrategy<>(LeafNode.class, (LeafSchemaNode) schemaNode);
+ } else if (schemaNode instanceof AnyDataSchemaNode) {
+ return new ValueNodeModificationStrategy<>(AnydataNode.class, (AnyDataSchemaNode) schemaNode);
+ } else if (schemaNode instanceof AnyXmlSchemaNode) {
+ return new ValueNodeModificationStrategy<>(AnyxmlNode.class, (AnyXmlSchemaNode) schemaNode);
}
throw new IllegalArgumentException("Not supported schema node type for " + schemaNode.getClass());
}
import org.eclipse.jdt.annotation.NonNull;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
-import org.opendaylight.yangtools.yang.data.api.schema.ValueNode;
import org.opendaylight.yangtools.yang.data.api.schema.tree.IncorrectDataStructureException;
import org.opendaylight.yangtools.yang.data.api.schema.tree.ModificationType;
import org.opendaylight.yangtools.yang.data.api.schema.tree.spi.TreeNode;
import org.opendaylight.yangtools.yang.data.api.schema.tree.spi.Version;
import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
-final class ValueNodeModificationStrategy<T extends DataSchemaNode> extends SchemaAwareApplyOperation<T> {
- private final Class<? extends ValueNode> nodeClass;
+final class ValueNodeModificationStrategy<T extends DataSchemaNode, V extends NormalizedNode<?, ?>>
+ extends SchemaAwareApplyOperation<T> {
+ private final @NonNull Class<V> nodeClass;
private final @NonNull T schema;
- ValueNodeModificationStrategy(final Class<? extends ValueNode> nodeClass, final T schema) {
+ ValueNodeModificationStrategy(final Class<V> nodeClass, final T schema) {
this.nodeClass = requireNonNull(nodeClass);
this.schema = requireNonNull(schema);
}
--- /dev/null
+/*
+ * Copyright (c) 2020 Pantheon Technologies, s.r.o. and others. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.yangtools.yang.data.impl.schema.tree;
+
+import static org.opendaylight.yangtools.yang.data.impl.schema.Builders.anyXmlBuilder;
+import static org.opendaylight.yangtools.yang.data.impl.schema.Builders.anydataBuilder;
+import static org.opendaylight.yangtools.yang.data.impl.schema.Builders.choiceBuilder;
+
+import javax.xml.transform.dom.DOMSource;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
+import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
+import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild;
+import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTree;
+import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeConfiguration;
+import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeModification;
+import org.opendaylight.yangtools.yang.data.api.schema.tree.DataValidationFailedException;
+import org.opendaylight.yangtools.yang.model.api.SchemaContext;
+
+public class YT1104Test {
+ private static final QName MODULE = QName.create("yt1104", "yt1104");
+ private static final NodeIdentifier FOO = new NodeIdentifier(QName.create(MODULE, "foo"));
+ private static final NodeIdentifier BAR = new NodeIdentifier(QName.create(MODULE, "bar"));
+ private static final NodeIdentifier BAZ = new NodeIdentifier(QName.create(MODULE, "baz"));
+
+ private static SchemaContext SCHEMA_CONTEXT;
+
+ private DataTree dataTree;
+
+ @BeforeClass
+ public static void beforeClass() {
+ SCHEMA_CONTEXT = TestModel.createTestContext("/yt1104.yang");
+ }
+
+ @AfterClass
+ public static void afterClass() {
+ SCHEMA_CONTEXT = null;
+ }
+
+ @Before
+ public void init() {
+ dataTree = new InMemoryDataTreeFactory().create(DataTreeConfiguration.DEFAULT_CONFIGURATION, SCHEMA_CONTEXT);
+ }
+
+ @Test
+ public void testAnydata() throws DataValidationFailedException {
+ writeChoice(anydataBuilder(String.class).withNodeIdentifier(BAR).withValue("anydata").build());
+ }
+
+ @Test
+ public void testAnyxml() throws DataValidationFailedException {
+ writeChoice(anyXmlBuilder().withNodeIdentifier(BAZ).withValue(new DOMSource()).build());
+ }
+
+ private void writeChoice(final DataContainerChild<?, ?> child) throws DataValidationFailedException {
+ final DataTreeModification mod = dataTree.takeSnapshot().newModification();
+ mod.write(YangInstanceIdentifier.create(FOO), choiceBuilder().withNodeIdentifier(FOO).withChild(child).build());
+ mod.ready();
+ dataTree.validate(mod);
+ dataTree.commit(dataTree.prepare(mod));
+ }
+}