This saves us some hassle, making the intent more obvious.
JIRA: MDSAL-392
Change-Id: I76a42e206857b1c59d0080c788b157ecf40ba829
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
</dependency>
<dependency>
<groupId>org.osgi</groupId>
- <artifactId>org.osgi.core</artifactId>
+ <artifactId>osgi.cmpn</artifactId>
</dependency>
<dependency>
<configuration>
<instructions>
<Bundle-Name>${project.groupId}.${project.artifactId}</Bundle-Name>
- <Bundle-Activator>org.opendaylight.mdsal.binding.generator.impl.Activator</Bundle-Activator>
<Export-Package>
{local-packages},
org.opendaylight.mdsal.binding.generator.impl,
+++ /dev/null
-/*
- * 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
- }
-}
@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<Type> generateTypes(final SchemaContext context, final Collection<? extends Module> modules) {
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}.
@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);
}
}
}
+
+ @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");
+ }
}
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
</dependency>
- <dependency>
- <groupId>org.osgi</groupId>
- <artifactId>org.osgi.core</artifactId>
- </dependency>
<dependency>
<groupId>org.opendaylight.mdsal</groupId>
<artifactId>mdsal-eos-common-api</artifactId>
<artifactId>metainf-services</artifactId>
<optional>true</optional>
</dependency>
+ <dependency>
+ <groupId>javax.inject</groupId>
+ <artifactId>javax.inject</artifactId>
+ <optional>true</optional>
+ </dependency>
+ <dependency>
+ <groupId>org.osgi</groupId>
+ <artifactId>osgi.cmpn</artifactId>
+ </dependency>
</dependencies>
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.felix</groupId>
- <artifactId>maven-bundle-plugin</artifactId>
- <extensions>true</extensions>
- <configuration>
- <instructions combine.children="append">
- <Bundle-Activator>org.opendaylight.mdsal.eos.dom.simple.Activator</Bundle-Activator>
- </instructions>
- </configuration>
- </plugin>
- </plugins>
- </build>
-
<scm>
<connection>scm:git:http://git.opendaylight.org/gerrit/controller.git</connection>
<developerConnection>scm:git:ssh://git.opendaylight.org:29418/controller.git</developerConnection>
+++ /dev/null
-/*
- * 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;
- }
- }
-}
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;
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;
* @author Robert Varga
*/
@MetaInfServices
+@Singleton
+@Component(immediate = true)
public final class SimpleDOMEntityOwnershipService implements DOMEntityOwnershipService {
private static final Logger LOG = LoggerFactory.getLogger(SimpleDOMEntityOwnershipService.class);
<feature name="odl-mdsal-binding-runtime">
<feature version="[5,6)">odl-yangtools-data</feature>
<feature version="[5,6)">odl-yangtools-parser</feature>
+ <feature>scr</feature>
</feature>
</features>
--- /dev/null
+<?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-rfc7895">
+ <feature name="odl-mdsal-exp-yanglib-rfc7895">
+ <feature>scr</feature>
+ </feature>
+</features>
--- /dev/null
+<?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-rfc8525">
+ <feature name="odl-mdsal-exp-yanglib-rfc8525">
+ <feature>scr</feature>
+ </feature>
+</features>
<optional>true</optional>
</dependency>
<dependency>
- <groupId>org.apache.aries.blueprint</groupId>
- <artifactId>blueprint-maven-plugin-annotation</artifactId>
- <optional>true</optional>
+ <groupId>org.osgi</groupId>
+ <artifactId>osgi.cmpn</artifactId>
</dependency>
<dependency>
</instructions>
</configuration>
</plugin>
- <plugin>
- <groupId>org.apache.aries.blueprint</groupId>
- <artifactId>blueprint-maven-plugin</artifactId>
- </plugin>
</plugins>
</build>
<scm>
--- /dev/null
+/*
+ * 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");
+ }
+}
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;
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()
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;
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 {
<optional>true</optional>
</dependency>
<dependency>
- <groupId>org.apache.aries.blueprint</groupId>
- <artifactId>blueprint-maven-plugin-annotation</artifactId>
- <optional>true</optional>
+ <groupId>org.osgi</groupId>
+ <artifactId>osgi.cmpn</artifactId>
</dependency>
<dependency>
</instructions>
</configuration>
</plugin>
- <plugin>
- <groupId>org.apache.aries.blueprint</groupId>
- <artifactId>blueprint-maven-plugin</artifactId>
- </plugin>
</plugins>
</build>
<scm>
--- /dev/null
+/*
+ * 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");
+ }
+}
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;
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()
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;
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 {