X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=yanglib%2Fmdsal-yanglib-rfc8525%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fmdsal%2Fyanglib%2Frfc8525%2FYangLibrarySupport.java;h=f1b6b7127fc803c91aa54a85263b1b6737816b86;hb=c49d3af1e3c3886521af28d7a53593e22220887a;hp=12dbc97b166cf155ab961fe0458e50d8d602eb47;hpb=85fcce79d8ce24e787e63a9f88e318c9ff9d610f;p=mdsal.git diff --git a/yanglib/mdsal-yanglib-rfc8525/src/main/java/org/opendaylight/mdsal/yanglib/rfc8525/YangLibrarySupport.java b/yanglib/mdsal-yanglib-rfc8525/src/main/java/org/opendaylight/mdsal/yanglib/rfc8525/YangLibrarySupport.java index 12dbc97b16..f1b6b7127f 100644 --- a/yanglib/mdsal-yanglib-rfc8525/src/main/java/org/opendaylight/mdsal/yanglib/rfc8525/YangLibrarySupport.java +++ b/yanglib/mdsal-yanglib-rfc8525/src/main/java/org/opendaylight/mdsal/yanglib/rfc8525/YangLibrarySupport.java @@ -10,60 +10,65 @@ package org.opendaylight.mdsal.yanglib.rfc8525; import static com.google.common.base.Verify.verifyNotNull; import com.google.common.annotations.Beta; -import com.google.common.collect.Collections2; -import java.io.IOException; import javax.inject.Inject; import javax.inject.Singleton; -import org.apache.aries.blueprint.annotation.service.Reference; import org.eclipse.jdt.annotation.NonNullByDefault; -import org.opendaylight.binding.runtime.api.BindingRuntimeGenerator; -import org.opendaylight.binding.runtime.api.DefaultBindingRuntimeContext; import org.opendaylight.mdsal.binding.dom.codec.api.BindingCodecTree; +import org.opendaylight.mdsal.binding.dom.codec.api.BindingCodecTreeFactory; import org.opendaylight.mdsal.binding.dom.codec.api.BindingDataObjectCodecTreeNode; import org.opendaylight.mdsal.binding.dom.codec.api.BindingIdentityCodec; -import org.opendaylight.mdsal.binding.dom.codec.impl.BindingNormalizedNodeCodecRegistry; +import org.opendaylight.mdsal.binding.runtime.api.BindingRuntimeGenerator; +import org.opendaylight.mdsal.binding.runtime.api.DefaultBindingRuntimeContext; +import org.opendaylight.mdsal.binding.runtime.api.ModuleInfoSnapshot; +import org.opendaylight.mdsal.binding.runtime.spi.ModuleInfoSnapshotBuilder; import org.opendaylight.mdsal.yanglib.api.SchemaContextResolver; import org.opendaylight.mdsal.yanglib.api.YangLibSupport; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev190104.$YangModuleInfoImpl; +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.binding.YangModuleInfo; -import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.common.Revision; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; -import org.opendaylight.yangtools.yang.model.parser.api.YangParserException; -import org.opendaylight.yangtools.yang.model.parser.api.YangParserFactory; -import org.opendaylight.yangtools.yang.model.repo.api.RevisionSourceIdentifier; -import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; +import org.opendaylight.yangtools.yang.parser.api.YangParserException; +import org.opendaylight.yangtools.yang.parser.api.YangParserFactory; +import org.osgi.service.component.annotations.Activate; +import org.osgi.service.component.annotations.Component; +import org.osgi.service.component.annotations.Reference; +import org.osgi.service.component.annotations.RequireServiceComponentRuntime; @Beta @NonNullByDefault @Singleton +@Component +@RequireServiceComponentRuntime public final class YangLibrarySupport implements YangLibSupport { + private static final Revision REVISION = YangLibrary.QNAME.getRevision().orElseThrow(); + private final BindingDataObjectCodecTreeNode codec; @SuppressWarnings("deprecation") private final BindingDataObjectCodecTreeNode legacyCodec; private final BindingIdentityCodec identityCodec; private final EffectiveModelContext context; + private final BindingCodecTree codecTree; @Inject - public YangLibrarySupport(final @Reference YangParserFactory parserFactory, - final @Reference BindingRuntimeGenerator generator) throws YangParserException, IOException { - final YangModuleInfo yangLibModule = $YangModuleInfoImpl.getInstance(); + @Activate + public YangLibrarySupport(@Reference final YangParserFactory parserFactory, + @Reference final BindingRuntimeGenerator generator, @Reference final BindingCodecTreeFactory codecFactory) + throws YangParserException { + final ModuleInfoSnapshot snapshot = new ModuleInfoSnapshotBuilder(parserFactory) + .add(YangLibrary.class) + .build(); + context = snapshot.getEffectiveModelContext(); - context = parserFactory.createParser() - .addLibSources(Collections2.transform(yangLibModule.getImportedModules(), - YangLibrarySupport::createSource)) - .addSource(createSource(yangLibModule)) - .buildEffectiveModel(); - final BindingCodecTree codecTree = new BindingNormalizedNodeCodecRegistry(DefaultBindingRuntimeContext.create( - generator.generateTypeMapping(context), SimpleStrategy.INSTANCE)).getCodecContext(); + codecTree = codecFactory.create(new DefaultBindingRuntimeContext( + generator.generateTypeMapping(context), snapshot)); - this.identityCodec = codecTree.getIdentityCodec(); - this.codec = verifyNotNull(codecTree.getSubtreeCodec(InstanceIdentifier.create(YangLibrary.class))); - this.legacyCodec = verifyNotNull(codecTree.getSubtreeCodec(InstanceIdentifier.create(ModulesState.class))); + identityCodec = codecTree.getIdentityCodec(); + codec = verifyNotNull(codecTree.getSubtreeCodec(InstanceIdentifier.create(YangLibrary.class))); + legacyCodec = verifyNotNull(codecTree.getSubtreeCodec(InstanceIdentifier.create(ModulesState.class))); } @Override @@ -72,9 +77,13 @@ public final class YangLibrarySupport implements YangLibSupport { return new MountPointContextFactoryImpl(mountId, resolver, context, identityCodec, codec, legacyCodec); } - private static YangTextSchemaSource createSource(final YangModuleInfo info) { - final QName name = info.getName(); - return YangTextSchemaSource.delegateForByteSource( - RevisionSourceIdentifier.create(name.getLocalName(), name.getRevision()), info.getYangTextByteSource()); + @Override + public Revision implementedRevision() { + return REVISION; + } + + @Override + public YangLibraryContentBuilder newContentBuilder() { + return new YangLibraryContentBuilderImpl(codecTree); } }