import java.util.Set;
import org.opendaylight.restconf.api.ApiPath;
import org.opendaylight.restconf.common.errors.RestconfDocumentedException;
+import org.opendaylight.restconf.nb.rfc8040.databind.DatabindContext;
import org.opendaylight.yangtools.yang.common.ErrorTag;
import org.opendaylight.yangtools.yang.common.ErrorType;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
import org.opendaylight.yangtools.yang.data.util.DataSchemaContext;
import org.opendaylight.yangtools.yang.data.util.DataSchemaContext.PathMixin;
-import org.opendaylight.yangtools.yang.data.util.DataSchemaContextTree;
import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
-import org.opendaylight.yangtools.yang.model.api.Module;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
/**
* Serializer for {@link YangInstanceIdentifier} to {@link String} for restconf.
}
/**
- * Method to create String from {@link Iterable} of {@link PathArgument}
- * which are parsing from data by {@link SchemaContext}.
+ * Method to create String from {@link Iterable} of {@link PathArgument} which are parsing from data with the help
+ * of an {@link EffectiveModelContext}.
*
- * @param schemaContext
- * for validate of parsing path arguments
- * @param data
- * path to data
+ * @param databind for validate of parsing path arguments
+ * @param data path to data
* @return {@link String}
*/
- public static String create(final EffectiveModelContext schemaContext, final YangInstanceIdentifier data) {
- final var current = DataSchemaContextTree.from(schemaContext).getRoot();
+ public static String create(final DatabindContext databind, final YangInstanceIdentifier data) {
+ final var current = databind.schemaTree().getRoot();
final var variables = new MainVarsWrapper(current);
final var path = new StringBuilder();
path.append('/');
}
- path.append(prefixForNamespace(arg.getNodeType(), schemaContext)).append(':');
+ path.append(prefixForNamespace(arg.getNodeType(), databind.modelContext())).append(':');
} else {
path.append('/');
}
/**
* Create prefix of namespace from {@link QName}.
*
- * @param qname
- * {@link QName}
+ * @param qname {@link QName}
* @return {@link String}
*/
- private static String prefixForNamespace(final QName qname, final SchemaContext schemaContext) {
- final Module module = schemaContext.findModule(qname.getModule()).orElse(null);
- return module.getName();
+ private static String prefixForNamespace(final QName qname, final EffectiveModelContext schemaContext) {
+ return schemaContext.findModuleStatement(qname.getModule()).orElseThrow().argument().getLocalName();
}
private static final class MainVarsWrapper {
import java.util.Map;
import org.junit.jupiter.api.Test;
import org.opendaylight.restconf.common.errors.RestconfDocumentedException;
+import org.opendaylight.restconf.nb.rfc8040.databind.DatabindContext;
import org.opendaylight.yangtools.yang.common.ErrorTag;
import org.opendaylight.yangtools.yang.common.ErrorType;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeWithValue;
-import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
/**
* Unit tests for {@link YangInstanceIdentifierSerializer}.
*/
class YangInstanceIdentifierSerializerTest {
- // schema context with test modules
- private static final EffectiveModelContext SCHEMA_CONTEXT =
- YangParserTestUtils.parseYangResourceDirectory("/restconf/parser/serializer");
+ private static final DatabindContext DATABIND = DatabindContext.ofModel(
+ YangParserTestUtils.parseYangResourceDirectory("/restconf/parser/serializer"));
/**
* Positive test of serialization of <code>YangInstanceIdentifier</code> containing container node to
*/
@Test
void serializeContainerTest() {
- assertEquals("serializer-test:contA", YangInstanceIdentifierSerializer.create(SCHEMA_CONTEXT,
+ assertEquals("serializer-test:contA", YangInstanceIdentifierSerializer.create(DATABIND,
YangInstanceIdentifier.of(QName.create("serializer:test", "2016-06-06", "contA"))));
}
*/
@Test
void serializeContainerWithLeafTest() {
- assertEquals("serializer-test:contA/leaf-A", YangInstanceIdentifierSerializer.create(SCHEMA_CONTEXT,
+ assertEquals("serializer-test:contA/leaf-A", YangInstanceIdentifierSerializer.create(DATABIND,
YangInstanceIdentifier.of(
QName.create("serializer:test", "2016-06-06", "contA"),
QName.create("serializer:test", "2016-06-06", "leaf-A"))));
final var leafList = QName.create("serializer:test", "2016-06-06", "leaf-list-AA");
assertEquals("serializer-test:contA/list-A=100/leaf-list-AA=instance",
- YangInstanceIdentifierSerializer.create(SCHEMA_CONTEXT, YangInstanceIdentifier.builder()
+ YangInstanceIdentifierSerializer.create(DATABIND, YangInstanceIdentifier.builder()
.node(QName.create("serializer:test", "2016-06-06", "contA"))
.node(list)
.node(NodeIdentifierWithPredicates.of(list, QName.create(list, "list-key"), 100))
*/
@Test
void serializeListWithNoKeysTest() {
- assertEquals("serializer-test:list-no-key", YangInstanceIdentifierSerializer.create(SCHEMA_CONTEXT,
+ assertEquals("serializer-test:list-no-key", YangInstanceIdentifierSerializer.create(DATABIND,
YangInstanceIdentifier.of(
QName.create("serializer:test", "2016-06-06", "list-no-key"),
QName.create("serializer:test", "2016-06-06", "list-no-key"))));
*/
@Test
void serializeMapWithNoKeysTest() {
- assertEquals("serializer-test:list-one-key", YangInstanceIdentifierSerializer.create(SCHEMA_CONTEXT,
+ assertEquals("serializer-test:list-one-key", YangInstanceIdentifierSerializer.create(DATABIND,
YangInstanceIdentifier.builder()
.node(QName.create("serializer:test", "2016-06-06", "list-one-key"))
.nodeWithKey(QName.create("serializer:test", "2016-06-06", "list-one-key"), Map.of())
*/
@Test
void serializeMapWithOneKeyTest() {
- assertEquals("serializer-test:list-one-key=value", YangInstanceIdentifierSerializer.create(SCHEMA_CONTEXT,
+ assertEquals("serializer-test:list-one-key=value", YangInstanceIdentifierSerializer.create(DATABIND,
YangInstanceIdentifier.builder()
.node(QName.create("serializer:test", "2016-06-06", "list-one-key"))
.nodeWithKey(QName.create("serializer:test", "2016-06-06", "list-one-key"),
final var list = QName.create("serializer:test", "2016-06-06", "list-multiple-keys");
assertEquals("serializer-test:list-multiple-keys=value-1,2,true",
- YangInstanceIdentifierSerializer.create(SCHEMA_CONTEXT, YangInstanceIdentifier.builder()
+ YangInstanceIdentifierSerializer.create(DATABIND, YangInstanceIdentifier.builder()
.node(list)
.nodeWithKey(list, ImmutableMap.of(
QName.create(list, "name"), "value-1",
*/
@Test
void serializeLeafTest() {
- assertEquals("serializer-test:leaf-0", YangInstanceIdentifierSerializer.create(SCHEMA_CONTEXT,
+ assertEquals("serializer-test:leaf-0", YangInstanceIdentifierSerializer.create(DATABIND,
YangInstanceIdentifier.of(QName.create("serializer:test", "2016-06-06", "leaf-0"))));
}
*/
@Test
void serializeLeafListTest() {
- assertEquals("serializer-test:leaf-list-0=instance", YangInstanceIdentifierSerializer.create(SCHEMA_CONTEXT,
+ assertEquals("serializer-test:leaf-list-0=instance", YangInstanceIdentifierSerializer.create(DATABIND,
YangInstanceIdentifier.builder()
.node(QName.create("serializer:test", "2016-06-06", "leaf-list-0"))
.node(new NodeWithValue<>(QName.create("serializer:test", "2016-06-06", "leaf-list-0"), "instance"))
@Test
void serializeNullDataNegativeTest() {
assertThrows(NullPointerException.class,
- () -> YangInstanceIdentifierSerializer.create(SCHEMA_CONTEXT, null));
+ () -> YangInstanceIdentifierSerializer.create(DATABIND, null));
}
/**
*/
@Test
void serializeEmptyDataTest() {
- assertEquals("", YangInstanceIdentifierSerializer.create(SCHEMA_CONTEXT, YangInstanceIdentifier.of()));
+ assertEquals("", YangInstanceIdentifierSerializer.create(DATABIND, YangInstanceIdentifier.of()));
}
/**
QName.create("serializer:test", "2016-06-06", "not-existing-leaf"));
final var ex = assertThrows(RestconfDocumentedException.class,
- () -> YangInstanceIdentifierSerializer.create(SCHEMA_CONTEXT, data));
+ () -> YangInstanceIdentifierSerializer.create(DATABIND, data));
final var errors = ex.getErrors();
assertEquals(1, errors.size());
final var error = errors.get(0);
@Test
void serializePercentEncodingTest() {
assertEquals("serializer-test:list-one-key=foo%3Afoo bar%2Ffoo%2Cbar%2F%27bar%27",
- YangInstanceIdentifierSerializer.create(SCHEMA_CONTEXT,
+ YangInstanceIdentifierSerializer.create(DATABIND,
YangInstanceIdentifier.builder()
.node(QName.create("serializer:test", "2016-06-06", "list-one-key"))
.nodeWithKey(QName.create("serializer:test", "2016-06-06", "list-one-key"),
*/
@Test
void serializeNoPercentEncodingTest() {
- assertEquals("serializer-test:list-one-key=foo\"b\"bar", YangInstanceIdentifierSerializer.create(SCHEMA_CONTEXT,
+ assertEquals("serializer-test:list-one-key=foo\"b\"bar", YangInstanceIdentifierSerializer.create(DATABIND,
YangInstanceIdentifier.builder()
.node(QName.create("serializer:test", "2016-06-06", "list-one-key"))
.nodeWithKey(QName.create("serializer:test", "2016-06-06", "list-one-key"),
final var child = QName.create("serializer:test", "2016-06-06", "augmented-leaf");
assertEquals("serializer-test-included:augmented-list=100/serializer-test:augmented-leaf",
- YangInstanceIdentifierSerializer.create(SCHEMA_CONTEXT, YangInstanceIdentifier.builder()
+ YangInstanceIdentifierSerializer.create(DATABIND, YangInstanceIdentifier.builder()
.node(list)
.node(NodeIdentifierWithPredicates.of(list, QName.create(list, "list-key"), 100))
.node(child)
.build();
final var ex = assertThrows(RestconfDocumentedException.class,
- () -> YangInstanceIdentifierSerializer.create(SCHEMA_CONTEXT, data));
+ () -> YangInstanceIdentifierSerializer.create(DATABIND, data));
final var errors = ex.getErrors();
assertEquals(1, errors.size());
final var error = errors.get(0);