import org.opendaylight.yangtools.yang.binding.Augmentation;
import org.opendaylight.yangtools.yang.binding.DataObject;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.binding.YangData;
import org.opendaylight.yangtools.yang.common.Empty;
+import org.opendaylight.yangtools.yang.common.YangDataName;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Absolute;
* @return A BindingInstanceIdentifierCodec instance.
*/
@NonNull BindingInstanceIdentifierCodec getInstanceIdentifierCodec();
+
+ /**
+ * Get the {@link BindingYangDataCodecTreeNode} corresponding to a particular generated {@link YangData} type.
+ *
+ * @param <T> {@link YangData} type
+ * @param yangDataClass Class object of {@link YangData} type
+ * @return A {@link BindingYangDataCodecTreeNode}
+ * @throws NullPointerException if {@code yangDataClass} is {@code null}
+ * @throws IllegalArgumentException if the specified type is not known
+ */
+ <T extends YangData<T>> @NonNull BindingYangDataCodecTreeNode<T> getYangDataCodec(Class<T> yangDataClass);
+
+ /**
+ * Get the {@link BindingYangDataCodecTreeNode} corresponding to a particular {@link YangDataName}.
+ *
+ * @param yangDataName a {@link YangDataName}
+ * @return A {@link BindingYangDataCodecTreeNode}
+ * @throws NullPointerException if {@code yangDataName} is {@code null}
+ * @throws IllegalArgumentException if the specified name is not known
+ */
+ @NonNull BindingYangDataCodecTreeNode<?> getYangDataCodec(YangDataName yangDataName);
}
--- /dev/null
+/*
+ * Copyright (c) 2023 PANTHEON.tech, 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.mdsal.binding.dom.codec.api;
+
+import org.eclipse.jdt.annotation.NonNull;
+import org.opendaylight.yangtools.concepts.Immutable;
+import org.opendaylight.yangtools.yang.binding.YangData;
+import org.opendaylight.yangtools.yang.data.api.schema.NormalizedYangData;
+
+/**
+ * A codec capable of translating RFC8040 {@code yang-data} values between their {@link NormalizedYangData} and
+ * {@link YangData} representation.
+ */
+public interface BindingYangDataCodec<T extends YangData<T>> extends Immutable {
+
+ @NonNull T toBinding(@NonNull NormalizedYangData dom);
+
+ @NonNull NormalizedYangData fromBinding(@NonNull T binding);
+}
--- /dev/null
+/*
+ * Copyright (c) 2023 PANTHEON.tech, 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.mdsal.binding.dom.codec.api;
+
+import org.opendaylight.yangtools.yang.binding.YangData;
+
+/**
+ * A {@link BindingDataContainerCodecTreeNode} corresponding to a RFC8040 {@code yang-data}
+ * {@link BindingYangDataCodec}.
+ *
+ * @param <T> {@link YangData} type
+ */
+public interface BindingYangDataCodecTreeNode<T extends YangData<T>>
+ extends BindingDataContainerCodecTreeNode<T>, BindingYangDataCodec<T> {
+ // Just a combination of thwo interfaces
+}
import org.opendaylight.mdsal.binding.dom.codec.api.BindingInstanceIdentifierCodec;
import org.opendaylight.mdsal.binding.dom.codec.api.BindingLazyContainerNode;
import org.opendaylight.mdsal.binding.dom.codec.api.BindingStreamEventWriter;
+import org.opendaylight.mdsal.binding.dom.codec.api.BindingYangDataCodecTreeNode;
import org.opendaylight.mdsal.binding.dom.codec.api.CommonDataObjectCodecTreeNode;
import org.opendaylight.mdsal.binding.runtime.api.BindingRuntimeContext;
import org.opendaylight.yangtools.yang.binding.Action;
import org.opendaylight.yangtools.yang.binding.Notification;
import org.opendaylight.yangtools.yang.binding.RpcInput;
import org.opendaylight.yangtools.yang.binding.RpcOutput;
+import org.opendaylight.yangtools.yang.binding.YangData;
+import org.opendaylight.yangtools.yang.common.YangDataName;
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.ContainerNode;
return delegate().getInstanceIdentifierCodec();
}
+ @Override
+ public <T extends YangData<T>> BindingYangDataCodecTreeNode<T> getYangDataCodec(final Class<T> yangDataClass) {
+ return delegate().getYangDataCodec(yangDataClass);
+ }
+
+ @Override
+ public BindingYangDataCodecTreeNode<?> getYangDataCodec(final YangDataName yangDataName) {
+ return delegate().getYangDataCodec(yangDataName);
+ }
+
@Override
public BindingRuntimeContext getRuntimeContext() {
return delegate().getRuntimeContext();
import org.opendaylight.mdsal.binding.dom.codec.api.BindingInstanceIdentifierCodec;
import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeWriterFactory;
import org.opendaylight.mdsal.binding.dom.codec.api.BindingStreamEventWriter;
+import org.opendaylight.mdsal.binding.dom.codec.api.BindingYangDataCodecTreeNode;
import org.opendaylight.mdsal.binding.dom.codec.api.CommonDataObjectCodecTreeNode;
import org.opendaylight.mdsal.binding.dom.codec.spi.AbstractBindingNormalizedNodeSerializer;
import org.opendaylight.mdsal.binding.dom.codec.spi.BindingDOMCodecServices;
import org.opendaylight.yangtools.yang.binding.OpaqueObject;
import org.opendaylight.yangtools.yang.binding.RpcInput;
import org.opendaylight.yangtools.yang.binding.RpcOutput;
+import org.opendaylight.yangtools.yang.binding.YangData;
import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.common.YangDataName;
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.ChoiceNode;
return instanceIdentifierCodec;
}
+ @Override
+ public <T extends YangData<T>> BindingYangDataCodecTreeNode<T> getYangDataCodec(final Class<T> yangDataClass) {
+ throw new UnsupportedOperationException("Not implemented yet");
+ }
+
+ @Override
+ public BindingYangDataCodecTreeNode<?> getYangDataCodec(final YangDataName yangDataName) {
+ throw new UnsupportedOperationException("Not implemented yet");
+ }
+
@Override
public DataContainerSerializer getEventStreamSerializer(final Class<?> type) {
return serializers.getUnchecked(type);
--- /dev/null
+/*
+ * Copyright (c) 2023 PANTHEON.tech, 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.mdsal.binding.dom.codec.impl;
+
+import static org.junit.Assert.assertNotNull;
+import static org.mockito.Mockito.mock;
+
+import org.junit.Ignore;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.junit.MockitoJUnitRunner;
+import org.opendaylight.yang.gen.v1.urn.test.yang.data.demo.rev220222.YangDataWithContainer;
+import org.opendaylight.yang.gen.v1.urn.test.yang.data.demo.rev220222.YangDataWithContainerBuilder;
+import org.opendaylight.yang.gen.v1.urn.test.yang.data.demo.rev220222.yang.data.with.container.ContainerFromYangDataBuilder;
+import org.opendaylight.yangtools.yang.data.api.schema.NormalizedYangData;
+
+@RunWith(MockitoJUnitRunner.StrictStubs.class)
+public class Mdsal805Test extends AbstractBindingCodecTest {
+ @Ignore
+ @Test
+ public void testFromBinding() {
+ final var binding = new YangDataWithContainerBuilder()
+ .setContainerFromYangData(new ContainerFromYangDataBuilder().setStr("str").build())
+ .build();
+
+ final var dom = codecContext.getYangDataCodec(binding.implementedInterface()).fromBinding(binding);
+ assertNotNull(dom);
+ }
+
+ @Ignore
+ @Test
+ public void testToBinding() {
+ final var dom = mock(NormalizedYangData.class);
+
+ final var binding = codecContext.getYangDataCodec(YangDataWithContainer.NAME).toBinding(dom);
+ assertNotNull(binding);
+ }
+}