<plugin>
<groupId>org.opendaylight.yangtools</groupId>
<artifactId>yang-maven-plugin</artifactId>
- <version>10.0.7</version>
+ <version>11.0.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.opendaylight.mdsal</groupId>
import org.opendaylight.mdsal.binding.dom.codec.spi.AbstractBindingLazyContainerNode;
import org.opendaylight.yangtools.yang.binding.DataObject;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
-import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild;
import org.opendaylight.yangtools.yang.data.api.schema.LeafNode;
}
@Override
- public DataContainerChild childByArg(final PathArgument child) {
+ public DataContainerChild childByArg(final NodeIdentifier child) {
// Use pre-cached value of routing field and do not run full serialization if we are accessing it.
return contextRef.getIdentifier().equals(child) ? contextRef : super.childByArg(child);
}
import org.opendaylight.yangtools.concepts.PrettyTree;
import org.opendaylight.yangtools.yang.binding.DataObject;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
-import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild;
}
@Override
+ public final @NonNull NodeIdentifier name() {
+ return identifier;
+ }
+
+ @Override
+ @Deprecated(since = "12.0.0", forRemoval = true)
public final @NonNull NodeIdentifier getIdentifier() {
return identifier;
}
+
@Override
public final ContainerNode getDelegate() {
return delegate();
}
@Override
- public DataContainerChild childByArg(final PathArgument child) {
+ public DataContainerChild childByArg(final NodeIdentifier child) {
return delegate().childByArg(child);
}
if (this == obj) {
return true;
}
- if (!(obj instanceof ContainerNode)) {
+ if (!(obj instanceof ContainerNode other)) {
return false;
}
- final ContainerNode other = (ContainerNode) obj;
return delegate().equals(other);
}
import org.opendaylight.yangtools.yang.data.api.schema.ValueNode;
import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter;
import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNormalizedNodeStreamWriter;
-import org.opendaylight.yangtools.yang.data.impl.schema.NormalizedNodeResult;
+import org.opendaylight.yangtools.yang.data.impl.schema.NormalizationResultHolder;
import org.opendaylight.yangtools.yang.model.api.AnydataSchemaNode;
import org.opendaylight.yangtools.yang.model.api.AnyxmlSchemaNode;
import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
final var yangPath = YangInstanceIdentifier.create(yangArgs);
// We create DOM stream writer which produces normalized nodes
- final var result = new NormalizedNodeResult();
+ final var result = new NormalizationResultHolder();
final var domWriter = ImmutableNormalizedNodeStreamWriter.from(result);
final var bindingWriter = new BindingToNormalizedStreamWriter(codecContext, domWriter);
final var augment = codecContext instanceof BindingAugmentationCodecTreeNode<?> augmentNode ? augmentNode
// Terminate the fake container and extract it to the result
if (augment != null) {
return new AugmentationResult(yangPath, augment.childPathArguments(),
- ImmutableList.copyOf(((ContainerNode) result.getResult()).body()));
+ ImmutableList.copyOf(((ContainerNode) result.getResult().data()).body()));
}
- return new NodeResult(yangPath, result.getResult());
+ return new NodeResult(yangPath, result.getResult().data());
}
@Override
private <T extends DataContainer> @NonNull ContainerNode serializeDataObject(final DataObject data,
final WriterFactoryMethod<T> newWriter) {
- final NormalizedNodeResult result = new NormalizedNodeResult();
+ final var result = new NormalizationResultHolder();
// We create DOM stream writer which produces normalized nodes
- final NormalizedNodeStreamWriter domWriter = ImmutableNormalizedNodeStreamWriter.from(result);
+ final var domWriter = ImmutableNormalizedNodeStreamWriter.from(result);
final Class<? extends DataObject> type = data.implementedInterface();
@SuppressWarnings("unchecked")
final BindingStreamEventWriter writer = newWriter.createWriter(this, (Class<T>) type, domWriter);
LOG.error("Unexpected failure while serializing data {}", data, e);
throw new IllegalStateException("Failed to create normalized node", e);
}
- return (ContainerNode) result.getResult();
+ return (ContainerNode) result.getResult().data();
}
private static boolean notBindingRepresentable(final NormalizedNode data) {
// ValueNode covers LeafNode and LeafSetEntryNode
return data instanceof ValueNode
- || data instanceof MapNode || data instanceof UnkeyedListNode
- || data instanceof ChoiceNode
- || data instanceof LeafSetNode;
+ || data instanceof MapNode || data instanceof UnkeyedListNode
+ || data instanceof ChoiceNode
+ || data instanceof LeafSetNode;
}
@SuppressWarnings("rawtypes")
import org.opendaylight.yangtools.yang.binding.DataObject;
import org.opendaylight.yangtools.yang.binding.TypeObject;
import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
-import org.opendaylight.yangtools.yang.data.impl.schema.NormalizedNodeResult;
+import org.opendaylight.yangtools.yang.data.impl.schema.NormalizationResultHolder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
implements BindingSerializer<Object, DataObject> {
private static final Logger LOG = LoggerFactory.getLogger(CachingNormalizedNodeSerializer.class);
- private final NormalizedNodeResult domResult = new NormalizedNodeResult();
+ private final NormalizationResultHolder domResult = new NormalizationResultHolder();
private final NormalizedNodeWriterWithAddChild domWriter = new NormalizedNodeWriterWithAddChild(domResult);
private final AbstractBindingNormalizedNodeCacheHolder cacheHolder;
private final BindingToNormalizedStreamWriter delegate;
} catch (final IOException e) {
throw new IllegalStateException(e);
}
- return writer.domResult.getResult();
+ return writer.domResult.getResult().data();
}
@Override
import org.opendaylight.yangtools.yang.common.QNameModule;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
-import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter;
import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNormalizedNodeStreamWriter;
-import org.opendaylight.yangtools.yang.data.impl.schema.NormalizedNodeResult;
+import org.opendaylight.yangtools.yang.data.impl.schema.NormalizationResultHolder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
}
final @NonNull NormalizedNode serializeImpl(final @NonNull D data) {
- final NormalizedNodeResult result = new NormalizedNodeResult();
+ final var result = new NormalizationResultHolder();
// We create DOM stream writer which produces normalized nodes
- final NormalizedNodeStreamWriter domWriter = ImmutableNormalizedNodeStreamWriter.from(result);
+ final var domWriter = ImmutableNormalizedNodeStreamWriter.from(result);
try {
eventStreamSerializer().serialize(data, new BindingToNormalizedStreamWriter(this, domWriter));
} catch (final IOException e) {
throw new IllegalStateException("Failed to serialize Binding DTO",e);
}
- return result.getResult();
+ return result.getResult().data();
}
static final <T extends NormalizedNode> @NonNull T checkDataArgument(final @NonNull Class<T> expectedType,
import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNormalizedNodeStreamWriter;
-import org.opendaylight.yangtools.yang.data.impl.schema.NormalizedNodeResult;
+import org.opendaylight.yangtools.yang.data.impl.schema.NormalizationResultHolder;
final class NormalizedNodeWriterWithAddChild extends ImmutableNormalizedNodeStreamWriter {
-
- NormalizedNodeWriterWithAddChild(final NormalizedNodeResult result) {
+ NormalizedNodeWriterWithAddChild(final NormalizationResultHolder result) {
super(result);
}
void addChild(final NormalizedNode child) {
- this.writeChild(child);
+ writeChild(child);
}
}
import org.opendaylight.yangtools.yang.binding.contract.Naming;
import org.opendaylight.yangtools.yang.common.AbstractQName;
import org.opendaylight.yangtools.yang.common.QNameModule;
+import org.opendaylight.yangtools.yang.common.YangDataName;
import org.opendaylight.yangtools.yang.model.api.stmt.ModuleEffectiveStatement;
import org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack;
Map.entry(yangModuleInfo, localName.getLocalName()));
}
- // FIXME: use YangDataName
- void addNameConstant(final GeneratedTypeBuilderBase<?> builder, final String templateName) {
+ void addNameConstant(final GeneratedTypeBuilderBase<?> builder, final YangDataName templateName) {
builder.addConstant(BindingTypes.YANG_DATA_NAME, Naming.NAME_STATIC_FIELD_NAME,
Map.entry(yangModuleInfo, templateName));
}
import org.opendaylight.mdsal.binding.runtime.api.RuntimeType;
import org.opendaylight.mdsal.binding.runtime.api.YangDataRuntimeType;
import org.opendaylight.yangtools.rfc8040.model.api.YangDataEffectiveStatement;
-import org.opendaylight.yangtools.yang.common.QNameModule;
import org.opendaylight.yangtools.yang.common.UnresolvedQName;
import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified;
import org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack;
// yang-data's argument is not guaranteed to comply with YANG 'identifier', but it usually does. If it does, we
// use the usual mechanics, but if it does not, we have to deal with any old string, similar to what we do for
// bit names. Here we decide which path to take.
- final String templateName = statement.argument();
+ final String templateName = statement.argument().name();
final var identifier = UnresolvedQName.tryLocalName(templateName);
return identifier != null ? new WithIdentifier(statement, parent, identifier)
: new WithString(statement, parent);
@Override
final void pushToInference(final SchemaInferenceStack dataTree) {
- final QNameModule moduleQName = currentModule().getQName().getModule();
- dataTree.enterYangData(moduleQName, statement().argument());
+ dataTree.enterYangData(statement().argument());
}
@Override
import org.eclipse.jdt.annotation.NonNullByDefault;
import org.eclipse.jdt.annotation.Nullable;
import org.opendaylight.yangtools.yang.binding.contract.Naming;
+import org.opendaylight.yangtools.yang.common.YangDataName;
/**
* Naming strategy for {@code ietf-restconf:yang-data} template which has a generic string not matching YANG identifier.
final class YangDataNamingStrategy extends ClassNamingStrategy {
private final String javaIdentifier;
- YangDataNamingStrategy(final String templateName) {
+ YangDataNamingStrategy(final YangDataName templateName) {
javaIdentifier = Naming.mapYangDataName(templateName);
}
import org.opendaylight.mdsal.binding.model.ri.TypeConstants
import org.opendaylight.yangtools.yang.binding.BaseIdentity
import org.opendaylight.yangtools.yang.binding.contract.Naming
+import org.opendaylight.yangtools.yang.common.YangDataName
abstract class BaseTemplate extends JavaFileTemplate {
static final char NEW_LINE = '\n'
*/
public static final «c.type.importedNonNull» «c.name» = «entry.key.importedName».«Naming.MODULE_INFO_QNAMEOF_METHOD_NAME»("«entry.value»");
«ELSEIF Naming.NAME_STATIC_FIELD_NAME.equals(c.name)»
- «val entry = c.value as Entry<JavaTypeName, String>»
+ «val entry = c.value as Entry<JavaTypeName, YangDataName>»
/**
* Yang Data template name of the statement represented by this class.
*/
- public static final «c.type.importedNonNull» «c.name» = «entry.key.importedName».«Naming.MODULE_INFO_YANGDATANAMEOF_METHOD_NAME»("«entry.value»");
+ public static final «c.type.importedNonNull» «c.name» = «entry.key.importedName».«Naming.MODULE_INFO_YANGDATANAMEOF_METHOD_NAME»("«entry.value.name»");
«ELSEIF Naming.VALUE_STATIC_FIELD_NAME.equals(c.name) && BaseIdentity.equals(c.value)»
«val typeName = c.type.importedName»
«val override = OVERRIDE.importedName»
import com.google.common.base.Throwables;
import com.google.common.collect.HashMultimap;
import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Multimaps;
import com.google.common.collect.SetMultimap;
import org.opendaylight.yangtools.yang.binding.YangModuleInfo;
import org.opendaylight.yangtools.yang.binding.contract.Naming;
import org.opendaylight.yangtools.yang.common.QName;
-import org.opendaylight.yangtools.yang.common.QNameModule;
-import org.opendaylight.yangtools.yang.model.repo.api.FeatureSet;
+import org.opendaylight.yangtools.yang.model.api.stmt.FeatureSet;
import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier;
import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource;
import org.opendaylight.yangtools.yang.parser.api.YangParser;
}
if (!moduleFeatures.isEmpty()) {
- final var featuresByModule =
- ImmutableMap.<QNameModule, ImmutableSet<String>>builderWithExpectedSize(moduleFeatures.size());
+ final var featuresByModule = FeatureSet.builder();
for (var entry : Multimaps.asMap(moduleFeatures).entrySet()) {
- featuresByModule.put(BindingReflections.getQNameModule(entry.getKey()),
+ featuresByModule.addModuleFeatures(BindingReflections.getQNameModule(entry.getKey()),
entry.getValue().stream().map(YangFeature::qname).map(QName::getLocalName).sorted()
.collect(ImmutableSet.toImmutableSet()));
}
- parser.setSupportedFeatures(new FeatureSet(featuresByModule.build()));
+ parser.setSupportedFeatures(featuresByModule.build());
}
return new DefaultModuleInfoSnapshot(parser.buildEffectiveModel(), mappedInfos, classLoaders);
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.common.QNameModule;
import org.opendaylight.yangtools.yang.common.Revision;
+import org.opendaylight.yangtools.yang.common.YangDataName;
@Beta
public final class Naming {
* @throws IllegalArgumentException if (@code templateName} is empty
*/
// TODO: take YangDataName once we have it readily available
- public static String mapYangDataName(final String templateName) {
- return mapEnumAssignedName(templateName);
+ public static String mapYangDataName(final YangDataName templateName) {
+ return mapEnumAssignedName(templateName.name());
}
// See https://docs.oracle.com/javase/specs/jls/se16/html/jls-3.html#jls-3.8
import java.util.HashMap;
import java.util.List;
-import java.util.Map;
import org.junit.Test;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.common.QNameModule;
import org.opendaylight.yangtools.yang.common.Revision;
import org.opendaylight.yangtools.yang.common.XMLNamespace;
+import org.opendaylight.yangtools.yang.common.YangDataName;
public class NamingTest {
private static void assertEqualMapping(final List<String> mapped, final List<String> yang) {
assertEquals(mapped.size(), yang.size());
- final Map<String, String> expected = new HashMap<>();
+ final var expected = new HashMap<String, String>();
for (int i = 0; i < mapped.size(); ++i) {
expected.put(yang.get(i), mapped.get(i));
}
@Test
public void yangDataMapping() {
+ final var ns = QNameModule.create(XMLNamespace.of("unused"));
+
// single ascii compliant non-conflicting word - remain as is
- assertEquals("single", Naming.mapYangDataName("single"));
+ assertEquals("single", Naming.mapYangDataName(new YangDataName(ns, "single")));
// ascii compliant - non-compliany chars only encoded
- assertEquals("$abc$20$cde", Naming.mapYangDataName("abc cde"));
+ assertEquals("$abc$20$cde", Naming.mapYangDataName(new YangDataName(ns, "abc cde")));
// latin1 compliant -> latin chars normalized, non-compliant chars are encoded
- assertEquals("$ľaľaho$20$papľuhu", Naming.mapYangDataName("ľaľaho papľuhu"));
+ assertEquals("$ľaľaho$20$papľuhu", Naming.mapYangDataName(new YangDataName(ns, "ľaľaho papľuhu")));
// latin1 non-compliant - all non-compliant characters encoded
- assertEquals("$привет$20$papľuhu", Naming.mapYangDataName("привет papľuhu"));
+ assertEquals("$привет$20$papľuhu", Naming.mapYangDataName(new YangDataName(ns, "привет papľuhu")));
}
}
\ No newline at end of file
<link>https://commons.apache.org/proper/commons-lang/javadocs/api-release/</link>
<link>https://www.javadoc.io/doc/org.opendaylight.odlparent/odlparent-docs/12.0.6/</link>
- <link>https://www.javadoc.io/doc/org.opendaylight.yangtools/yangtools-docs/10.0.7/</link>
+ <link>https://www.javadoc.io/doc/org.opendaylight.yangtools/yangtools-docs/11.0.0-SNAPSHOT/</link>
</links>
<groups>
<group>
<dependency>
<groupId>org.opendaylight.yangtools</groupId>
<artifactId>yangtools-artifacts</artifactId>
- <version>10.0.7</version>
+ <version>11.0.0-SNAPSHOT</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.opendaylight.yangtools</groupId>
<artifactId>yangtools-artifacts</artifactId>
- <version>10.0.7</version>
+ <version>11.0.0-SNAPSHOT</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<features xmlns="http://karaf.apache.org/xmlns/features/v1.4.0" name="odl-mdsal-binding-api">
<feature name="odl-mdsal-binding-api">
- <feature version="[10,11)">odl-yangtools-data-api</feature>
+ <feature version="[11,12)">odl-yangtools-data-api</feature>
</feature>
</features>
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<features xmlns="http://karaf.apache.org/xmlns/features/v1.4.0" name="odl-mdsal-binding-base">
<feature name="odl-mdsal-binding-base">
- <feature version="[10,11)">odl-yangtools-common</feature>
+ <feature version="[11,12)">odl-yangtools-common</feature>
</feature>
</features>
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<features xmlns="http://karaf.apache.org/xmlns/features/v1.4.0" name="odl-mdsal-runtime-api">
<feature name="odl-mdsal-binding-runtime-api">
- <feature version="[10,11)">odl-yangtools-data</feature>
- <feature version="[10,11)">odl-yangtools-parser</feature>
+ <feature version="[11,12)">odl-yangtools-data</feature>
+ <feature version="[11,12)">odl-yangtools-parser</feature>
</feature>
</features>
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<features xmlns="http://karaf.apache.org/xmlns/features/v1.4.0" name="odl-mdsal-common">
<feature name="odl-mdsal-common">
- <feature version="[10,11)">odl-yangtools-common</feature>
+ <feature version="[11,12)">odl-yangtools-common</feature>
</feature>
</features>
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<features xmlns="http://karaf.apache.org/xmlns/features/v1.4.0" name="odl-mdsal-dom-api">
<feature name="odl-mdsal-dom-api">
- <feature version="[10,11)">odl-yangtools-data-api</feature>
+ <feature version="[11,12)">odl-yangtools-data-api</feature>
</feature>
</features>
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<features xmlns="http://karaf.apache.org/xmlns/features/v1.4.0" name="odl-mdsal-eos-common">
<feature name="odl-mdsal-eos-common">
- <feature version="[10,11)">odl-yangtools-data-api</feature>
+ <feature version="[11,12)">odl-yangtools-data-api</feature>
</feature>
</features>
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<features xmlns="http://karaf.apache.org/xmlns/features/v1.4.0" name="odl-mdsal-exp-yanglib-api">
<feature name="odl-mdsal-exp-yanglib-api">
- <feature version="[10,11)">odl-yangtools-data-api</feature>
+ <feature version="[11,12)">odl-yangtools-data-api</feature>
</feature>
</features>
<configfile finalname="etc/org.opendaylight.mdsal.replicate.netty.sink.cfg">mvn:org.opendaylight.mdsal/mdsal-replicate-netty/${project.version}/config/sink</configfile>
<configfile finalname="etc/org.opendaylight.mdsal.replicate.netty.source.cfg">mvn:org.opendaylight.mdsal/mdsal-replicate-netty/${project.version}/config/source</configfile>
<feature version="[11,12)">odl-netty-4</feature>
- <feature version="[10,11)">odl-yangtools-codec</feature>
+ <feature version="[11,12)">odl-yangtools-codec</feature>
</feature>
</features>
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<features xmlns="http://karaf.apache.org/xmlns/features/v1.4.0" name="odl-mdsal-uint24-netty">
<feature name="odl-mdsal-uint24-netty">
- <feature version="[10,11)">odl-yangtools-netty</feature>
+ <feature version="[11,12)">odl-yangtools-netty</feature>
</feature>
</features>
final LogicalDatastoreType store;
Watch(final String iidString, final LogicalDatastoreType storeOrNull) {
- this.store = storeOrNull;
+ store = storeOrNull;
this.iidString = iidString;
}
this.codec = requireNonNull(codec, "codec");
configure(config);
- this.isDebugging = Boolean.TRUE.equals(config.getTransactionDebugContextEnabled());
+ isDebugging = Boolean.TRUE.equals(config.getTransactionDebugContextEnabled());
final String db = "DataBroker";
- this.transactionChainsRegistry = new CloseTrackedRegistry<>(db, "createTransactionChain()", isDebugging);
- this.readOnlyTransactionsRegistry = new CloseTrackedRegistry<>(db, "newReadOnlyTransaction()", isDebugging);
- this.writeTransactionsRegistry = new CloseTrackedRegistry<>(db, "newWriteOnlyTransaction()", isDebugging);
- this.readWriteTransactionsRegistry = new CloseTrackedRegistry<>(db, "newReadWriteTransaction()", isDebugging);
+ transactionChainsRegistry = new CloseTrackedRegistry<>(db, "createTransactionChain()", isDebugging);
+ readOnlyTransactionsRegistry = new CloseTrackedRegistry<>(db, "newReadOnlyTransaction()", isDebugging);
+ writeTransactionsRegistry = new CloseTrackedRegistry<>(db, "newWriteOnlyTransaction()", isDebugging);
+ readWriteTransactionsRegistry = new CloseTrackedRegistry<>(db, "newReadWriteTransaction()", isDebugging);
}
private void configure(final Config config) {
private static void reconstructIidPathString(final YangInstanceIdentifier yiid, final StringBuilder sb) {
sb.append("<RECONSTRUCTED FROM: \"").append(yiid.toString()).append("\">");
for (YangInstanceIdentifier.PathArgument pathArg : yiid.getPathArguments()) {
- if (pathArg instanceof YangInstanceIdentifier.AugmentationIdentifier) {
- sb.append('/').append("AUGMENTATION");
- continue;
- }
sb.append('/').append(pathArg.getNodeType().getLocalName());
}
}
<dependencies>
<dependency>
<groupId>org.opendaylight.yangtools</groupId>
- <artifactId>rfc8528-data-util</artifactId>
+ <artifactId>yang-data-api</artifactId>
</dependency>
<dependency>
<groupId>org.opendaylight.yangtools</groupId>
exports org.opendaylight.mdsal.yanglib.api;
requires transitive org.opendaylight.yangtools.yang.common;
+ requires transitive org.opendaylight.yangtools.yang.data.api;
requires transitive org.opendaylight.yangtools.yang.model.api;
- requires transitive org.opendaylight.yangtools.rfc8528.data.api;
+ requires transitive org.opendaylight.yangtools.yang.parser.api;
// Annotations
requires static transitive org.eclipse.jdt.annotation;
import com.google.common.annotations.Beta;
import org.eclipse.jdt.annotation.NonNullByDefault;
-import org.opendaylight.yangtools.rfc8528.data.api.MountPointContextFactory;
-import org.opendaylight.yangtools.rfc8528.data.api.MountPointIdentifier;
+import org.opendaylight.yangtools.yang.common.MountPointLabel;
import org.opendaylight.yangtools.yang.common.Revision;
+import org.opendaylight.yangtools.yang.data.api.schema.MountPointContextFactory;
/**
* Main entry point into YANG (Module) Library support instance.
/**
* Create a MountPointContextFactory, backed by a specific SchemaContextResolver.
*
- * @param mountId Resulting Mount Point identifier
+ * @param label Resulting Mount Point identifier
* @param resolver SchemaContext resolver
* @return A new factory
* @throws NullPointerException if any argument is null
*/
- MountPointContextFactory createMountPointContextFactory(MountPointIdentifier mountId,
- SchemaContextResolver resolver);
+ MountPointContextFactory createMountPointContextFactory(MountPointLabel label, SchemaContextResolver resolver);
/**
* Return the revision date of the model this support implements. The value returned from this method is suitable
<groupId>org.opendaylight.mdsal.binding.model.ietf</groupId>
<artifactId>rfc8525</artifactId>
</dependency>
+ <dependency>
+ <groupId>org.opendaylight.yangtools</groupId>
+ <artifactId>yang-data-util</artifactId>
+ </dependency>
<dependency>
<groupId>org.opendaylight.yangtools</groupId>
<artifactId>yang-parser-api</artifactId>
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev190104.yang.library.parameters.ModuleSet;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev190104.yang.library.parameters.SchemaKey;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.YangIdentifier;
-import org.opendaylight.yangtools.rfc8528.data.api.MountPointContextFactory;
-import org.opendaylight.yangtools.rfc8528.data.api.MountPointIdentifier;
-import org.opendaylight.yangtools.rfc8528.data.api.YangLibraryConstants.ContainerName;
-import org.opendaylight.yangtools.rfc8528.data.util.AbstractMountPointContextFactory;
+import org.opendaylight.yangtools.yang.common.MountPointLabel;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.common.Revision;
import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified;
import org.opendaylight.yangtools.yang.common.XMLNamespace;
import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
+import org.opendaylight.yangtools.yang.data.api.schema.MountPointContextFactory;
+import org.opendaylight.yangtools.yang.data.api.schema.MountPointException;
+import org.opendaylight.yangtools.yang.data.util.AbstractMountPointContextFactory;
import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier;
import org.opendaylight.yangtools.yang.parser.api.YangParserException;
private final EffectiveModelContext yangLibContext;
private final SchemaContextResolver resolver;
- MountPointContextFactoryImpl(final MountPointIdentifier mountId, final SchemaContextResolver resolver,
+ MountPointContextFactoryImpl(final MountPointLabel label, final SchemaContextResolver resolver,
final EffectiveModelContext yangLibContext,
final BindingIdentityCodec identityCodec,
final BindingDataObjectCodecTreeNode<YangLibrary> codec,
@SuppressWarnings("deprecation")
final BindingDataObjectCodecTreeNode<ModulesState> legacyCodec) {
- super(mountId);
+ super(label);
this.resolver = requireNonNull(resolver);
this.identityCodec = requireNonNull(identityCodec);
this.yangLibContext = requireNonNull(yangLibContext);
@Override
protected MountPointContextFactory createContextFactory(final MountPointDefinition mountPoint) {
- return new MountPointContextFactoryImpl(mountPoint.getIdentifier(), resolver, yangLibContext, identityCodec,
- codec, legacyCodec);
+ return new MountPointContextFactoryImpl(mountPoint.label(), resolver, yangLibContext, identityCodec, codec,
+ legacyCodec);
}
@Override
@Override
protected EffectiveModelContext bindLibrary(final ContainerName containerName, final ContainerNode libData)
- throws YangParserException {
+ throws MountPointException {
return switch (containerName) {
case RFC7895 -> bindLibrary(verifyNotNull(legacyCodec.deserialize(libData)));
case RFC8525 -> bindLibrary(verifyNotNull(codec.deserialize(libData)));
};
}
- private @NonNull EffectiveModelContext bindLibrary(final @NonNull YangLibrary yangLib) throws YangParserException {
+ private @NonNull EffectiveModelContext bindLibrary(final @NonNull YangLibrary yangLib) throws MountPointException {
final var datastores = yangLib.nonnullDatastore();
checkArgument(!datastores.isEmpty(), "No datastore defined");
}
checkArgument(moduleSet.isEmpty(), "Failed to resolve module sets %s", moduleSet);
- return resolver.resolveSchemaContext(librarySources, requiredSources, supportedFeatures);
+ try {
+ return resolver.resolveSchemaContext(librarySources, requiredSources, supportedFeatures);
+ } catch (YangParserException e) {
+ throw new MountPointException("Failed to assemble model context", e);
+ }
}
@SuppressWarnings("deprecation")
private @NonNull EffectiveModelContext bindLibrary(final @NonNull ModulesState modState)
- throws YangParserException {
+ throws MountPointException {
final var requiredSources = new ArrayList<SourceReference>();
final var librarySources = new ArrayList<SourceReference>();
final var supportedFeatures = new HashSet<QName>();
}
}
- return resolver.resolveSchemaContext(librarySources, requiredSources, supportedFeatures);
+ try {
+ return resolver.resolveSchemaContext(librarySources, requiredSources, supportedFeatures);
+ } catch (YangParserException e) {
+ throw new MountPointException("Failed to assemble model context", e);
+ }
}
private String findSchemaName(final Map<DatastoreKey, Datastore> datastores, final QName qname) {
import org.opendaylight.mdsal.yanglib.api.YangLibraryContentBuilder;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev190104.ModulesState;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev190104.YangLibrary;
-import org.opendaylight.yangtools.rfc8528.data.api.MountPointContextFactory;
-import org.opendaylight.yangtools.rfc8528.data.api.MountPointIdentifier;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.common.MountPointLabel;
import org.opendaylight.yangtools.yang.common.Revision;
+import org.opendaylight.yangtools.yang.data.api.schema.MountPointContextFactory;
import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
import org.opendaylight.yangtools.yang.parser.api.YangParserException;
import org.opendaylight.yangtools.yang.parser.api.YangParserFactory;
}
@Override
- public MountPointContextFactory createMountPointContextFactory(final MountPointIdentifier mountId,
+ public MountPointContextFactory createMountPointContextFactory(final MountPointLabel label,
final SchemaContextResolver resolver) {
- return new MountPointContextFactoryImpl(mountId, resolver, context, identityCodec, codec, legacyCodec);
+ return new MountPointContextFactoryImpl(label, resolver, context, identityCodec, codec, legacyCodec);
}
@Override