From: Robert Varga Date: Wed, 19 Feb 2020 17:18:52 +0000 (+0100) Subject: Use OSGi DS instead of Activator/blueprint X-Git-Tag: v6.0.0~135 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;ds=sidebyside;h=8aaeaad54e6deb5b5988f2179b17a95ae6cc6321;p=mdsal.git Use OSGi DS instead of Activator/blueprint This saves us some hassle, making the intent more obvious. JIRA: MDSAL-392 Change-Id: I76a42e206857b1c59d0080c788b157ecf40ba829 Signed-off-by: Robert Varga --- diff --git a/binding/mdsal-binding-generator-impl/pom.xml b/binding/mdsal-binding-generator-impl/pom.xml index e4211ba5dc..a2f2a079c5 100644 --- a/binding/mdsal-binding-generator-impl/pom.xml +++ b/binding/mdsal-binding-generator-impl/pom.xml @@ -53,7 +53,7 @@ org.osgi - org.osgi.core + osgi.cmpn @@ -75,7 +75,6 @@ ${project.groupId}.${project.artifactId} - org.opendaylight.mdsal.binding.generator.impl.Activator {local-packages}, org.opendaylight.mdsal.binding.generator.impl, diff --git a/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/generator/impl/Activator.java b/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/generator/impl/Activator.java deleted file mode 100644 index 072610718b..0000000000 --- a/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/generator/impl/Activator.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright (c) 2020 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.generator.impl; - -import com.google.common.annotations.Beta; -import org.opendaylight.binding.runtime.api.BindingRuntimeGenerator; -import org.osgi.framework.BundleActivator; -import org.osgi.framework.BundleContext; - -@Beta -public final class Activator implements BundleActivator { - @Override - public void start(final BundleContext context) { - context.registerService(BindingRuntimeGenerator.class, new DefaultBindingRuntimeGenerator(), null); - } - - @Override - public void stop(final BundleContext context) { - // No-op, service is unregistered automatically - } -} diff --git a/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/generator/impl/DefaultBindingGenerator.java b/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/generator/impl/DefaultBindingGenerator.java index 53f5bcd16b..84c4abc47d 100644 --- a/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/generator/impl/DefaultBindingGenerator.java +++ b/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/generator/impl/DefaultBindingGenerator.java @@ -31,6 +31,7 @@ import org.opendaylight.yangtools.yang.model.api.SchemaNode; @Beta @MetaInfServices @Singleton +// Note: not exposed in OSGi on purpose, as this should only be needed at compile-time public final class DefaultBindingGenerator implements BindingGenerator { @Override public List generateTypes(final SchemaContext context, final Collection modules) { diff --git a/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/generator/impl/DefaultBindingRuntimeGenerator.java b/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/generator/impl/DefaultBindingRuntimeGenerator.java index 768f29360f..30cca455ca 100644 --- a/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/generator/impl/DefaultBindingRuntimeGenerator.java +++ b/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/generator/impl/DefaultBindingRuntimeGenerator.java @@ -17,6 +17,11 @@ import org.opendaylight.binding.runtime.api.BindingRuntimeTypes; import org.opendaylight.mdsal.binding.model.api.JavaTypeName; import org.opendaylight.yangtools.yang.model.api.SchemaContext; import org.opendaylight.yangtools.yang.model.api.SchemaNode; +import org.osgi.service.component.annotations.Activate; +import org.osgi.service.component.annotations.Component; +import org.osgi.service.component.annotations.Deactivate; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * Default implementation of {@link BindingRuntimeGenerator}. @@ -24,7 +29,10 @@ import org.opendaylight.yangtools.yang.model.api.SchemaNode; @Beta @MetaInfServices @Singleton +@Component(immediate = true) public final class DefaultBindingRuntimeGenerator implements BindingRuntimeGenerator { + private static final Logger LOG = LoggerFactory.getLogger(DefaultBindingRuntimeGenerator.class); + @Override public BindingRuntimeTypes generateTypeMapping(final SchemaContext context) { GeneratorUtils.checkContext(context); @@ -38,4 +46,16 @@ public final class DefaultBindingRuntimeGenerator implements BindingRuntimeGener } } } + + @Activate + @SuppressWarnings("static-method") + void activate() { + LOG.info("Binding/YANG type support activated"); + } + + @Deactivate + @SuppressWarnings("static-method") + void deactivate() { + LOG.info("Binding/YANG type support deactivated"); + } } diff --git a/entityownership/mdsal-eos-dom-simple/pom.xml b/entityownership/mdsal-eos-dom-simple/pom.xml index b9a62a125c..a65b4f6b31 100644 --- a/entityownership/mdsal-eos-dom-simple/pom.xml +++ b/entityownership/mdsal-eos-dom-simple/pom.xml @@ -23,10 +23,6 @@ com.google.guava guava - - org.osgi - org.osgi.core - org.opendaylight.mdsal mdsal-eos-common-api @@ -49,23 +45,17 @@ metainf-services true + + javax.inject + javax.inject + true + + + org.osgi + osgi.cmpn + - - - - org.apache.felix - maven-bundle-plugin - true - - - org.opendaylight.mdsal.eos.dom.simple.Activator - - - - - - scm:git:http://git.opendaylight.org/gerrit/controller.git scm:git:ssh://git.opendaylight.org:29418/controller.git diff --git a/entityownership/mdsal-eos-dom-simple/src/main/java/org/opendaylight/mdsal/eos/dom/simple/Activator.java b/entityownership/mdsal-eos-dom-simple/src/main/java/org/opendaylight/mdsal/eos/dom/simple/Activator.java deleted file mode 100644 index dad0a42032..0000000000 --- a/entityownership/mdsal-eos-dom-simple/src/main/java/org/opendaylight/mdsal/eos/dom/simple/Activator.java +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright (c) 2019 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.eos.dom.simple; - -import com.google.common.annotations.Beta; -import org.opendaylight.mdsal.eos.dom.api.DOMEntityOwnershipService; -import org.osgi.framework.BundleActivator; -import org.osgi.framework.BundleContext; -import org.osgi.framework.ServiceRegistration; - -@Beta -public class Activator implements BundleActivator { - private ServiceRegistration reg; - - @Override - public void start(final BundleContext context) { - reg = context.registerService(DOMEntityOwnershipService.class, new SimpleDOMEntityOwnershipService(), null); - } - - @Override - public void stop(final BundleContext context) { - if (reg != null) { - reg.unregister(); - reg = null; - } - } -} diff --git a/entityownership/mdsal-eos-dom-simple/src/main/java/org/opendaylight/mdsal/eos/dom/simple/SimpleDOMEntityOwnershipService.java b/entityownership/mdsal-eos-dom-simple/src/main/java/org/opendaylight/mdsal/eos/dom/simple/SimpleDOMEntityOwnershipService.java index 0685e2c124..f58b33136a 100644 --- a/entityownership/mdsal-eos-dom-simple/src/main/java/org/opendaylight/mdsal/eos/dom/simple/SimpleDOMEntityOwnershipService.java +++ b/entityownership/mdsal-eos-dom-simple/src/main/java/org/opendaylight/mdsal/eos/dom/simple/SimpleDOMEntityOwnershipService.java @@ -23,6 +23,7 @@ import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import java.util.Collection; import java.util.Optional; import java.util.UUID; +import javax.inject.Singleton; import org.checkerframework.checker.lock.qual.GuardedBy; import org.kohsuke.MetaInfServices; import org.opendaylight.mdsal.eos.common.api.CandidateAlreadyRegisteredException; @@ -36,6 +37,7 @@ import org.opendaylight.mdsal.eos.dom.api.DOMEntityOwnershipListenerRegistration import org.opendaylight.mdsal.eos.dom.api.DOMEntityOwnershipService; import org.opendaylight.yangtools.concepts.AbstractObjectRegistration; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; +import org.osgi.service.component.annotations.Component; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -46,6 +48,8 @@ import org.slf4j.LoggerFactory; * @author Robert Varga */ @MetaInfServices +@Singleton +@Component(immediate = true) public final class SimpleDOMEntityOwnershipService implements DOMEntityOwnershipService { private static final Logger LOG = LoggerFactory.getLogger(SimpleDOMEntityOwnershipService.class); diff --git a/features/odl-mdsal-binding-runtime/src/main/feature/feature.xml b/features/odl-mdsal-binding-runtime/src/main/feature/feature.xml index 7ab803defb..edc2dfb8e1 100644 --- a/features/odl-mdsal-binding-runtime/src/main/feature/feature.xml +++ b/features/odl-mdsal-binding-runtime/src/main/feature/feature.xml @@ -3,5 +3,6 @@ odl-yangtools-data odl-yangtools-parser + scr diff --git a/features/odl-mdsal-exp-yanglib-rfc7895/src/main/feature/feature.xml b/features/odl-mdsal-exp-yanglib-rfc7895/src/main/feature/feature.xml new file mode 100644 index 0000000000..ceb8fbd2de --- /dev/null +++ b/features/odl-mdsal-exp-yanglib-rfc7895/src/main/feature/feature.xml @@ -0,0 +1,6 @@ + + + + scr + + diff --git a/features/odl-mdsal-exp-yanglib-rfc8525/src/main/feature/feature.xml b/features/odl-mdsal-exp-yanglib-rfc8525/src/main/feature/feature.xml new file mode 100644 index 0000000000..681f83f332 --- /dev/null +++ b/features/odl-mdsal-exp-yanglib-rfc8525/src/main/feature/feature.xml @@ -0,0 +1,6 @@ + + + + scr + + diff --git a/yanglib/mdsal-yanglib-rfc7895/pom.xml b/yanglib/mdsal-yanglib-rfc7895/pom.xml index d2e7fe0380..49deed392a 100644 --- a/yanglib/mdsal-yanglib-rfc7895/pom.xml +++ b/yanglib/mdsal-yanglib-rfc7895/pom.xml @@ -48,9 +48,8 @@ true - org.apache.aries.blueprint - blueprint-maven-plugin-annotation - true + org.osgi + osgi.cmpn @@ -71,10 +70,6 @@ - - org.apache.aries.blueprint - blueprint-maven-plugin - 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 new file mode 100644 index 0000000000..09b4d3b5b0 --- /dev/null +++ b/yanglib/mdsal-yanglib-rfc7895/src/main/java/org/opendaylight/mdsal/yanglib/rfc7895/OSGiYangModuleLibrarySupport.java @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2020 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.yanglib.rfc7895; + +import com.google.common.annotations.Beta; +import java.io.IOException; +import org.opendaylight.binding.runtime.api.BindingRuntimeGenerator; +import org.opendaylight.mdsal.yanglib.api.SchemaContextResolver; +import org.opendaylight.mdsal.yanglib.api.YangLibSupport; +import org.opendaylight.yangtools.rfc8528.data.api.MountPointContextFactory; +import org.opendaylight.yangtools.rfc8528.data.api.MountPointIdentifier; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserException; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserFactory; +import org.osgi.service.component.annotations.Activate; +import org.osgi.service.component.annotations.Component; +import org.osgi.service.component.annotations.Deactivate; +import org.osgi.service.component.annotations.Reference; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +@Beta +@Component(immediate = true) +public final class OSGiYangModuleLibrarySupport implements YangLibSupport { + private static final Logger LOG = LoggerFactory.getLogger(OSGiYangModuleLibrarySupport.class); + + @Reference + YangParserFactory parserFactory = null; + @Reference + BindingRuntimeGenerator generator = null; + + private YangModuleLibrarySupport delegate; + + @Override + public MountPointContextFactory createMountPointContextFactory(final MountPointIdentifier mountId, + final SchemaContextResolver resolver) { + return delegate.createMountPointContextFactory(mountId, resolver); + } + + @Activate + void activate() throws YangParserException, IOException { + delegate = new YangModuleLibrarySupport(parserFactory, generator); + LOG.info("RFC7895 YANG Module Library support activated"); + } + + @Deactivate + void deactivate() { + delegate = null; + LOG.info("RFC7895 YANG Module Library support deactivated"); + } +} 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 1c9577603d..ad803c8cfa 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 @@ -14,7 +14,6 @@ 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; @@ -44,8 +43,8 @@ public final class YangModuleLibrarySupport implements YangLibSupport { private final EffectiveModelContext context; @Inject - public YangModuleLibrarySupport(final @Reference YangParserFactory parserFactory, - final @Reference BindingRuntimeGenerator generator) throws YangParserException, IOException { + public YangModuleLibrarySupport(final YangParserFactory parserFactory, final BindingRuntimeGenerator generator) + throws YangParserException, IOException { final YangModuleInfo yangLibModule = $YangModuleInfoImpl.getInstance(); context = parserFactory.createParser() 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 3d1592627a..acb9567e6a 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 @@ -9,6 +9,7 @@ package org.opendaylight.mdsal.yanglib.rfc7895; import static java.util.Objects.requireNonNull; +import com.google.common.annotations.Beta; import java.io.IOException; import java.util.ServiceLoader; import org.eclipse.jdt.annotation.NonNullByDefault; @@ -19,6 +20,7 @@ import org.opendaylight.mdsal.yanglib.api.YangLibSupportFactory; import org.opendaylight.yangtools.yang.model.parser.api.YangParserException; import org.opendaylight.yangtools.yang.model.parser.api.YangParserFactory; +@Beta @MetaInfServices @NonNullByDefault public final class YangModuleLibrarySupportFactory implements YangLibSupportFactory { diff --git a/yanglib/mdsal-yanglib-rfc8525/pom.xml b/yanglib/mdsal-yanglib-rfc8525/pom.xml index 2ef9040f1e..a48aa1da70 100644 --- a/yanglib/mdsal-yanglib-rfc8525/pom.xml +++ b/yanglib/mdsal-yanglib-rfc8525/pom.xml @@ -48,9 +48,8 @@ true - org.apache.aries.blueprint - blueprint-maven-plugin-annotation - true + org.osgi + osgi.cmpn @@ -71,10 +70,6 @@ - - org.apache.aries.blueprint - blueprint-maven-plugin - 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 new file mode 100644 index 0000000000..2827d38f2f --- /dev/null +++ b/yanglib/mdsal-yanglib-rfc8525/src/main/java/org/opendaylight/mdsal/yanglib/rfc8525/OSGiYangLibrarySupport.java @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2020 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.yanglib.rfc8525; + +import com.google.common.annotations.Beta; +import java.io.IOException; +import org.opendaylight.binding.runtime.api.BindingRuntimeGenerator; +import org.opendaylight.mdsal.yanglib.api.SchemaContextResolver; +import org.opendaylight.mdsal.yanglib.api.YangLibSupport; +import org.opendaylight.yangtools.rfc8528.data.api.MountPointContextFactory; +import org.opendaylight.yangtools.rfc8528.data.api.MountPointIdentifier; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserException; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserFactory; +import org.osgi.service.component.annotations.Activate; +import org.osgi.service.component.annotations.Component; +import org.osgi.service.component.annotations.Deactivate; +import org.osgi.service.component.annotations.Reference; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +@Beta +@Component(immediate = true) +public final class OSGiYangLibrarySupport implements YangLibSupport { + private static final Logger LOG = LoggerFactory.getLogger(OSGiYangLibrarySupport.class); + + @Reference + YangParserFactory parserFactory = null; + @Reference + BindingRuntimeGenerator generator = null; + + private YangLibrarySupport delegate; + + @Override + public MountPointContextFactory createMountPointContextFactory(final MountPointIdentifier mountId, + final SchemaContextResolver resolver) { + return delegate.createMountPointContextFactory(mountId, resolver); + } + + @Activate + void activate() throws YangParserException, IOException { + delegate = new YangLibrarySupport(parserFactory, generator); + LOG.info("RFC8525 YANG Library support activated"); + } + + @Deactivate + void deactivate() { + delegate = null; + LOG.info("RFC8525 YANG Library support deactivated"); + } +} 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..5a4e783228 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 @@ -14,7 +14,6 @@ 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; @@ -49,8 +48,8 @@ public final class YangLibrarySupport implements YangLibSupport { private final EffectiveModelContext context; @Inject - public YangLibrarySupport(final @Reference YangParserFactory parserFactory, - final @Reference BindingRuntimeGenerator generator) throws YangParserException, IOException { + public YangLibrarySupport(final YangParserFactory parserFactory, final BindingRuntimeGenerator generator) + throws YangParserException, IOException { final YangModuleInfo yangLibModule = $YangModuleInfoImpl.getInstance(); context = parserFactory.createParser() 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 b5aa7dd4e1..fcacf1148a 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 @@ -9,6 +9,7 @@ package org.opendaylight.mdsal.yanglib.rfc8525; import static java.util.Objects.requireNonNull; +import com.google.common.annotations.Beta; import java.io.IOException; import java.util.ServiceLoader; import org.eclipse.jdt.annotation.NonNullByDefault; @@ -19,6 +20,7 @@ import org.opendaylight.mdsal.yanglib.api.YangLibSupportFactory; import org.opendaylight.yangtools.yang.model.parser.api.YangParserException; import org.opendaylight.yangtools.yang.model.parser.api.YangParserFactory; +@Beta @MetaInfServices @NonNullByDefault public final class YangLibrarySupportFactory implements YangLibSupportFactory {