From f6963318ae63d1cd836678d3094e66d999516d37 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Tue, 25 Feb 2020 14:49:17 +0100 Subject: [PATCH] Use BindingCodecTreeFactory in yanglib Since BindingCodecTreeFactory is a proper component now, we can use in our yanglib implementations, severing explicit dependency on binding-dom-codec implementation. JIRA: MDSAL-392 Change-Id: I76b3ce49a2b25ef7e2f9ff357f98c843659ad181 Signed-off-by: Robert Varga --- yanglib/mdsal-yanglib-rfc7895/pom.xml | 15 ++++++++++++--- .../rfc7895/OSGiYangModuleLibrarySupport.java | 5 ++++- .../rfc7895/YangModuleLibrarySupport.java | 10 +++++----- .../rfc7895/YangModuleLibrarySupportFactory.java | 16 ++++++++++++---- yanglib/mdsal-yanglib-rfc8525/pom.xml | 15 ++++++++++++--- .../yanglib/rfc8525/OSGiYangLibrarySupport.java | 5 ++++- .../yanglib/rfc8525/YangLibrarySupport.java | 10 +++++----- .../rfc8525/YangLibrarySupportFactory.java | 16 ++++++++++++---- 8 files changed, 66 insertions(+), 26 deletions(-) diff --git a/yanglib/mdsal-yanglib-rfc7895/pom.xml b/yanglib/mdsal-yanglib-rfc7895/pom.xml index 49deed392a..f0045f7dca 100644 --- a/yanglib/mdsal-yanglib-rfc7895/pom.xml +++ b/yanglib/mdsal-yanglib-rfc7895/pom.xml @@ -30,13 +30,17 @@ org.opendaylight.mdsal.binding.model.ietf rfc7895 + + org.opendaylight.yangtools + yang-parser-api + org.opendaylight.mdsal - mdsal-binding-dom-codec + mdsal-binding-runtime-api - org.opendaylight.yangtools - yang-parser-api + org.opendaylight.mdsal + mdsal-binding-dom-codec-api org.kohsuke.metainf-services @@ -57,6 +61,11 @@ yang-parser-impl test + + org.opendaylight.mdsal + mdsal-binding-dom-codec + test + diff --git a/yanglib/mdsal-yanglib-rfc7895/src/main/java/org/opendaylight/mdsal/yanglib/rfc7895/OSGiYangModuleLibrarySupport.java b/yanglib/mdsal-yanglib-rfc7895/src/main/java/org/opendaylight/mdsal/yanglib/rfc7895/OSGiYangModuleLibrarySupport.java index 09b4d3b5b0..bb0de59109 100644 --- a/yanglib/mdsal-yanglib-rfc7895/src/main/java/org/opendaylight/mdsal/yanglib/rfc7895/OSGiYangModuleLibrarySupport.java +++ b/yanglib/mdsal-yanglib-rfc7895/src/main/java/org/opendaylight/mdsal/yanglib/rfc7895/OSGiYangModuleLibrarySupport.java @@ -10,6 +10,7 @@ package org.opendaylight.mdsal.yanglib.rfc7895; import com.google.common.annotations.Beta; import java.io.IOException; import org.opendaylight.binding.runtime.api.BindingRuntimeGenerator; +import org.opendaylight.mdsal.binding.dom.codec.api.BindingCodecTreeFactory; import org.opendaylight.mdsal.yanglib.api.SchemaContextResolver; import org.opendaylight.mdsal.yanglib.api.YangLibSupport; import org.opendaylight.yangtools.rfc8528.data.api.MountPointContextFactory; @@ -32,6 +33,8 @@ public final class OSGiYangModuleLibrarySupport implements YangLibSupport { YangParserFactory parserFactory = null; @Reference BindingRuntimeGenerator generator = null; + @Reference + BindingCodecTreeFactory codecFactory = null; private YangModuleLibrarySupport delegate; @@ -43,7 +46,7 @@ public final class OSGiYangModuleLibrarySupport implements YangLibSupport { @Activate void activate() throws YangParserException, IOException { - delegate = new YangModuleLibrarySupport(parserFactory, generator); + delegate = new YangModuleLibrarySupport(parserFactory, generator, codecFactory); LOG.info("RFC7895 YANG Module Library support activated"); } diff --git a/yanglib/mdsal-yanglib-rfc7895/src/main/java/org/opendaylight/mdsal/yanglib/rfc7895/YangModuleLibrarySupport.java b/yanglib/mdsal-yanglib-rfc7895/src/main/java/org/opendaylight/mdsal/yanglib/rfc7895/YangModuleLibrarySupport.java index ad803c8cfa..627928ba35 100644 --- a/yanglib/mdsal-yanglib-rfc7895/src/main/java/org/opendaylight/mdsal/yanglib/rfc7895/YangModuleLibrarySupport.java +++ b/yanglib/mdsal-yanglib-rfc7895/src/main/java/org/opendaylight/mdsal/yanglib/rfc7895/YangModuleLibrarySupport.java @@ -18,8 +18,8 @@ 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.impl.BindingNormalizedNodeCodecRegistry; 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.rev160621.$YangModuleInfoImpl; @@ -43,8 +43,8 @@ public final class YangModuleLibrarySupport implements YangLibSupport { private final EffectiveModelContext context; @Inject - public YangModuleLibrarySupport(final YangParserFactory parserFactory, final BindingRuntimeGenerator generator) - throws YangParserException, IOException { + public YangModuleLibrarySupport(final YangParserFactory parserFactory, final BindingRuntimeGenerator generator, + final BindingCodecTreeFactory codecFactory) throws YangParserException, IOException { final YangModuleInfo yangLibModule = $YangModuleInfoImpl.getInstance(); context = parserFactory.createParser() @@ -52,8 +52,8 @@ public final class YangModuleLibrarySupport implements YangLibSupport { YangModuleLibrarySupport::createSource)) .addSource(createSource(yangLibModule)) .buildEffectiveModel(); - final BindingCodecTree codecTree = new BindingNormalizedNodeCodecRegistry(DefaultBindingRuntimeContext.create( - generator.generateTypeMapping(context), SimpleStrategy.INSTANCE)).getCodecContext(); + final BindingCodecTree codecTree = codecFactory.create(DefaultBindingRuntimeContext.create( + generator.generateTypeMapping(context), SimpleStrategy.INSTANCE)); this.codec = verifyNotNull(codecTree.getSubtreeCodec(InstanceIdentifier.create(ModulesState.class))); } diff --git a/yanglib/mdsal-yanglib-rfc7895/src/main/java/org/opendaylight/mdsal/yanglib/rfc7895/YangModuleLibrarySupportFactory.java b/yanglib/mdsal-yanglib-rfc7895/src/main/java/org/opendaylight/mdsal/yanglib/rfc7895/YangModuleLibrarySupportFactory.java index acb9567e6a..ac4a8df594 100644 --- a/yanglib/mdsal-yanglib-rfc7895/src/main/java/org/opendaylight/mdsal/yanglib/rfc7895/YangModuleLibrarySupportFactory.java +++ b/yanglib/mdsal-yanglib-rfc7895/src/main/java/org/opendaylight/mdsal/yanglib/rfc7895/YangModuleLibrarySupportFactory.java @@ -15,6 +15,7 @@ import java.util.ServiceLoader; import org.eclipse.jdt.annotation.NonNullByDefault; import org.kohsuke.MetaInfServices; import org.opendaylight.binding.runtime.api.BindingRuntimeGenerator; +import org.opendaylight.mdsal.binding.dom.codec.api.BindingCodecTreeFactory; import org.opendaylight.mdsal.yanglib.api.YangLibSupport; import org.opendaylight.mdsal.yanglib.api.YangLibSupportFactory; import org.opendaylight.yangtools.yang.model.parser.api.YangParserException; @@ -24,20 +25,27 @@ import org.opendaylight.yangtools.yang.model.parser.api.YangParserFactory; @MetaInfServices @NonNullByDefault public final class YangModuleLibrarySupportFactory implements YangLibSupportFactory { + private final BindingCodecTreeFactory codecFactory; private final BindingRuntimeGenerator generator; public YangModuleLibrarySupportFactory() { - this(ServiceLoader.load(BindingRuntimeGenerator.class).findFirst() - .orElseThrow(() -> new IllegalStateException("Failed to find a BindingRuntimeGenerator service"))); + this(load(BindingRuntimeGenerator.class), load(BindingCodecTreeFactory.class)); } - public YangModuleLibrarySupportFactory(final BindingRuntimeGenerator generator) { + public YangModuleLibrarySupportFactory(final BindingRuntimeGenerator generator, + final BindingCodecTreeFactory codecFactory) { this.generator = requireNonNull(generator); + this.codecFactory = requireNonNull(codecFactory); } @Override public YangLibSupport createYangLibSupport(final YangParserFactory parserFactory) throws YangParserException, IOException { - return new YangModuleLibrarySupport(parserFactory, generator); + return new YangModuleLibrarySupport(parserFactory, generator, codecFactory); + } + + private static T load(final Class clazz) { + return ServiceLoader.load(clazz).findFirst() + .orElseThrow(() -> new IllegalStateException("Failed to find a " + clazz.getSimpleName() + " service")); } } diff --git a/yanglib/mdsal-yanglib-rfc8525/pom.xml b/yanglib/mdsal-yanglib-rfc8525/pom.xml index a48aa1da70..1c3b27867f 100644 --- a/yanglib/mdsal-yanglib-rfc8525/pom.xml +++ b/yanglib/mdsal-yanglib-rfc8525/pom.xml @@ -30,13 +30,17 @@ org.opendaylight.mdsal.binding.model.ietf rfc8525 + + org.opendaylight.yangtools + yang-parser-api + org.opendaylight.mdsal - mdsal-binding-dom-codec + mdsal-binding-runtime-api - org.opendaylight.yangtools - yang-parser-api + org.opendaylight.mdsal + mdsal-binding-dom-codec-api org.kohsuke.metainf-services @@ -57,6 +61,11 @@ yang-parser-impl test + + org.opendaylight.mdsal + mdsal-binding-dom-codec + test + diff --git a/yanglib/mdsal-yanglib-rfc8525/src/main/java/org/opendaylight/mdsal/yanglib/rfc8525/OSGiYangLibrarySupport.java b/yanglib/mdsal-yanglib-rfc8525/src/main/java/org/opendaylight/mdsal/yanglib/rfc8525/OSGiYangLibrarySupport.java index 2827d38f2f..6d458e5aad 100644 --- a/yanglib/mdsal-yanglib-rfc8525/src/main/java/org/opendaylight/mdsal/yanglib/rfc8525/OSGiYangLibrarySupport.java +++ b/yanglib/mdsal-yanglib-rfc8525/src/main/java/org/opendaylight/mdsal/yanglib/rfc8525/OSGiYangLibrarySupport.java @@ -10,6 +10,7 @@ package org.opendaylight.mdsal.yanglib.rfc8525; import com.google.common.annotations.Beta; import java.io.IOException; import org.opendaylight.binding.runtime.api.BindingRuntimeGenerator; +import org.opendaylight.mdsal.binding.dom.codec.api.BindingCodecTreeFactory; import org.opendaylight.mdsal.yanglib.api.SchemaContextResolver; import org.opendaylight.mdsal.yanglib.api.YangLibSupport; import org.opendaylight.yangtools.rfc8528.data.api.MountPointContextFactory; @@ -32,6 +33,8 @@ public final class OSGiYangLibrarySupport implements YangLibSupport { YangParserFactory parserFactory = null; @Reference BindingRuntimeGenerator generator = null; + @Reference + BindingCodecTreeFactory codecFactory = null; private YangLibrarySupport delegate; @@ -43,7 +46,7 @@ public final class OSGiYangLibrarySupport implements YangLibSupport { @Activate void activate() throws YangParserException, IOException { - delegate = new YangLibrarySupport(parserFactory, generator); + delegate = new YangLibrarySupport(parserFactory, generator, codecFactory); LOG.info("RFC8525 YANG Library support activated"); } 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 5a4e783228..b2f264814e 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 @@ -18,9 +18,9 @@ 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.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; @@ -48,8 +48,8 @@ public final class YangLibrarySupport implements YangLibSupport { private final EffectiveModelContext context; @Inject - public YangLibrarySupport(final YangParserFactory parserFactory, final BindingRuntimeGenerator generator) - throws YangParserException, IOException { + public YangLibrarySupport(final YangParserFactory parserFactory, final BindingRuntimeGenerator generator, + final BindingCodecTreeFactory codecFactory) throws YangParserException, IOException { final YangModuleInfo yangLibModule = $YangModuleInfoImpl.getInstance(); context = parserFactory.createParser() @@ -57,8 +57,8 @@ public final class YangLibrarySupport implements YangLibSupport { YangLibrarySupport::createSource)) .addSource(createSource(yangLibModule)) .buildEffectiveModel(); - final BindingCodecTree codecTree = new BindingNormalizedNodeCodecRegistry(DefaultBindingRuntimeContext.create( - generator.generateTypeMapping(context), SimpleStrategy.INSTANCE)).getCodecContext(); + final BindingCodecTree codecTree = codecFactory.create(DefaultBindingRuntimeContext.create( + generator.generateTypeMapping(context), SimpleStrategy.INSTANCE)); this.identityCodec = codecTree.getIdentityCodec(); this.codec = verifyNotNull(codecTree.getSubtreeCodec(InstanceIdentifier.create(YangLibrary.class))); diff --git a/yanglib/mdsal-yanglib-rfc8525/src/main/java/org/opendaylight/mdsal/yanglib/rfc8525/YangLibrarySupportFactory.java b/yanglib/mdsal-yanglib-rfc8525/src/main/java/org/opendaylight/mdsal/yanglib/rfc8525/YangLibrarySupportFactory.java index fcacf1148a..59aeb22eb1 100644 --- a/yanglib/mdsal-yanglib-rfc8525/src/main/java/org/opendaylight/mdsal/yanglib/rfc8525/YangLibrarySupportFactory.java +++ b/yanglib/mdsal-yanglib-rfc8525/src/main/java/org/opendaylight/mdsal/yanglib/rfc8525/YangLibrarySupportFactory.java @@ -15,6 +15,7 @@ import java.util.ServiceLoader; import org.eclipse.jdt.annotation.NonNullByDefault; import org.kohsuke.MetaInfServices; import org.opendaylight.binding.runtime.api.BindingRuntimeGenerator; +import org.opendaylight.mdsal.binding.dom.codec.api.BindingCodecTreeFactory; import org.opendaylight.mdsal.yanglib.api.YangLibSupport; import org.opendaylight.mdsal.yanglib.api.YangLibSupportFactory; import org.opendaylight.yangtools.yang.model.parser.api.YangParserException; @@ -24,20 +25,27 @@ import org.opendaylight.yangtools.yang.model.parser.api.YangParserFactory; @MetaInfServices @NonNullByDefault public final class YangLibrarySupportFactory implements YangLibSupportFactory { + private final BindingCodecTreeFactory codecFactory; private final BindingRuntimeGenerator generator; public YangLibrarySupportFactory() { - this(ServiceLoader.load(BindingRuntimeGenerator.class).findFirst() - .orElseThrow(() -> new IllegalStateException("Failed to find a BindingRuntimeGenerator service"))); + this(load(BindingRuntimeGenerator.class), load(BindingCodecTreeFactory.class)); } - public YangLibrarySupportFactory(final BindingRuntimeGenerator generator) { + public YangLibrarySupportFactory(final BindingRuntimeGenerator generator, + final BindingCodecTreeFactory codecFactory) { this.generator = requireNonNull(generator); + this.codecFactory = requireNonNull(codecFactory); } @Override public YangLibSupport createYangLibSupport(final YangParserFactory parserFactory) throws YangParserException, IOException { - return new YangLibrarySupport(parserFactory, generator); + return new YangLibrarySupport(parserFactory, generator, codecFactory); + } + + private static T load(final Class clazz) { + return ServiceLoader.load(clazz).findFirst() + .orElseThrow(() -> new IllegalStateException("Failed to find a " + clazz.getSimpleName() + " service")); } } -- 2.36.6