Convert to a JPMS module to hide internals from the outside world.
JIRA: MDSAL-750
Change-Id: Ibdc5ff8cd6ad4512865d3ffc58ebcc5ecd428aac
Signed-off-by: Samuel Schneider <samuel.schneider@pantheon.tech>
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
<groupId>org.opendaylight.mdsal</groupId>
<artifactId>mdsal-binding-test-model</artifactId>
</dependency>
+ <dependency>
+ <groupId>org.mockito</groupId>
+ <artifactId>mockito-subclass</artifactId>
+ <scope>test</scope>
+ </dependency>
</dependencies>
<build>
<plugins>
- <plugin>
- <groupId>org.apache.felix</groupId>
- <artifactId>maven-bundle-plugin</artifactId>
- <extensions>true</extensions>
- <configuration>
- <Automatic-Module-Name>org.opendaylight.mdsal.binding.dom.adapter</Automatic-Module-Name>
- </configuration>
- </plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<executions>
--- /dev/null
+/*
+ * Copyright (c) 2023 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
+ */
+import org.opendaylight.mdsal.binding.dom.adapter.AdapterContext;
+import org.opendaylight.mdsal.binding.dom.adapter.BindingAdapterFactory;
+import org.opendaylight.mdsal.binding.dom.adapter.ConstantAdapterContext;
+import org.opendaylight.mdsal.binding.dom.adapter.query.DefaultQueryFactory;
+import org.opendaylight.mdsal.binding.dom.adapter.spi.AdapterFactory;
+import org.opendaylight.mdsal.binding.dom.codec.api.BindingCodecTreeFactory;
+import org.opendaylight.mdsal.binding.dom.codec.spi.BindingDOMCodecFactory;
+import org.opendaylight.mdsal.binding.api.query.QueryFactory;
+
+module org.opendaylight.mdsal.binding.dom.adapter {
+ exports org.opendaylight.mdsal.binding.dom.adapter;
+ exports org.opendaylight.mdsal.binding.dom.adapter.spi;
+
+ provides AdapterFactory with BindingAdapterFactory;
+ provides AdapterContext with ConstantAdapterContext;
+ provides QueryFactory with DefaultQueryFactory;
+
+ uses BindingCodecTreeFactory;
+ uses BindingDOMCodecFactory;
+
+ requires transitive com.google.common;
+ requires transitive org.opendaylight.mdsal.binding.api;
+ requires transitive org.opendaylight.mdsal.binding.dom.codec.spi;
+ requires transitive org.opendaylight.mdsal.dom.api;
+ requires transitive org.opendaylight.yangtools.yang.data.impl;
+ requires org.opendaylight.mdsal.binding.dom.codec.api;
+ requires org.opendaylight.mdsal.binding.spec.util;
+ requires org.opendaylight.mdsal.dom.spi;
+ requires org.slf4j;
+
+ // OSGi is optional
+ requires static org.osgi.framework;
+ requires static org.osgi.service.component;
+ requires static org.osgi.util.tracker;
+
+ // Annotations
+ requires static javax.inject;
+ requires static org.kohsuke.metainf_services;
+ requires static org.eclipse.jdt.annotation;
+ requires static org.gaul.modernizer_maven_annotations;
+ requires static org.osgi.service.component.annotations;
+}
import static org.junit.Assert.assertEquals;
+import java.util.ServiceLoader;
import org.junit.Test;
import org.opendaylight.mdsal.binding.api.ActionSpec;
-import org.opendaylight.mdsal.binding.dom.codec.impl.BindingCodecContext;
+import org.opendaylight.mdsal.binding.dom.codec.spi.BindingDOMCodecFactory;
import org.opendaylight.mdsal.binding.runtime.spi.BindingRuntimeHelpers;
import org.opendaylight.yang.gen.v1.urn.odl.actions.norev.Cont;
import org.opendaylight.yang.gen.v1.urn.odl.actions.norev.Grpcont;
public class ActionLookupTest {
@Test
public void testActionPath() {
- CurrentAdapterSerializer codec = new CurrentAdapterSerializer(new BindingCodecContext(
- BindingRuntimeHelpers.createRuntimeContext()));
+ CurrentAdapterSerializer codec = new CurrentAdapterSerializer(ServiceLoader.load(BindingDOMCodecFactory.class)
+ .findFirst().orElseThrow().createBindingDOMCodec(BindingRuntimeHelpers.createRuntimeContext()));
assertEquals(Absolute.of(Cont.QNAME, Foo.QNAME), codec.getActionPath(
ActionSpec.builder(Cont.class).build(Foo.class)));
import com.google.common.collect.SetMultimap;
import java.lang.reflect.Method;
import java.util.Map;
+import java.util.ServiceLoader;
import java.util.Set;
import org.junit.Test;
import org.opendaylight.mdsal.binding.dom.adapter.test.AbstractSchemaAwareTest;
-import org.opendaylight.mdsal.binding.dom.codec.impl.BindingCodecContext;
+import org.opendaylight.mdsal.binding.dom.codec.spi.BindingDOMCodecFactory;
import org.opendaylight.mdsal.binding.runtime.api.BindingRuntimeContext;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.test.bi.ba.rpcservice.rev140701.OpendaylightTestRpcServiceService;
import org.opendaylight.yangtools.yang.common.QNameModule;
@Override
protected void setupWithRuntimeContext(final BindingRuntimeContext runtimeContext) {
- serializer = new CurrentAdapterSerializer(new BindingCodecContext(runtimeContext));
+ serializer = new CurrentAdapterSerializer(ServiceLoader.load(BindingDOMCodecFactory.class)
+ .findFirst().orElseThrow().createBindingDOMCodec(runtimeContext));
}
@Test
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Map.Entry;
+import java.util.ServiceLoader;
import org.junit.Test;
-import org.opendaylight.mdsal.binding.dom.codec.impl.BindingCodecContext;
+import org.opendaylight.mdsal.binding.dom.codec.spi.BindingDOMCodecFactory;
import org.opendaylight.mdsal.binding.generator.impl.DefaultBindingRuntimeGenerator;
import org.opendaylight.mdsal.binding.runtime.api.DefaultBindingRuntimeContext;
import org.opendaylight.mdsal.binding.runtime.api.ModuleInfoSnapshot;
private static Entry<InstanceIdentifier<?>, DataObject> fromNormalizedNode(final NormalizedNode data,
final EffectiveModelContext schemaCtx) {
- final CurrentAdapterSerializer codec = new CurrentAdapterSerializer(new BindingCodecContext(
- new DefaultBindingRuntimeContext(new DefaultBindingRuntimeGenerator().generateTypeMapping(schemaCtx),
- TestingModuleInfoSnapshot.INSTANCE)));
+ final CurrentAdapterSerializer codec = new CurrentAdapterSerializer(
+ ServiceLoader.load(BindingDOMCodecFactory.class).findFirst().orElseThrow().createBindingDOMCodec(
+ new DefaultBindingRuntimeContext(new DefaultBindingRuntimeGenerator()
+ .generateTypeMapping(schemaCtx), TestingModuleInfoSnapshot.INSTANCE)));
final YangInstanceIdentifier path = YangInstanceIdentifier.of(NodeIdentifier.create(QName.create(
"urn:test", "2017-01-01", "cont")));
import java.lang.invoke.MethodHandle;
import java.lang.invoke.WrongMethodTypeException;
import org.junit.Test;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.test.bi.ba.notification.rev150205.OpendaylightTestNotificationListener;
import org.opendaylight.yangtools.yang.binding.Augmentation;
import org.opendaylight.yangtools.yang.binding.DataObject;
import org.opendaylight.yangtools.yang.binding.Notification;
public class NotificationListenerInvokerTest {
@Test
public void fromTest() throws Exception {
- assertNotNull(NotificationListenerInvoker.from(TestInterface.class));
+ assertNotNull(NotificationListenerInvoker.from(OpendaylightTestNotificationListener.class));
}
@Test
assertEquals("expected null but found (NotificationListener,DataContainer)void", ex.getMessage());
}
- public interface TestInterface extends NotificationListener, Augmentation {
- QName QNAME = QName.create("test", "test");
-
- void onTestNotificationInterface(TestNotificationInterface notif);
- }
-
private interface TestPrivateInterface extends NotificationListener, Augmentation {
QName QNAME = QName.create("test", "test");
import com.google.common.cache.LoadingCache;
import com.google.common.collect.ClassToInstanceMap;
import com.google.common.collect.ImmutableClassToInstanceMap;
+import java.util.ServiceLoader;
import org.opendaylight.mdsal.binding.dom.adapter.AdapterContext;
import org.opendaylight.mdsal.binding.dom.adapter.CurrentAdapterSerializer;
-import org.opendaylight.mdsal.binding.dom.codec.impl.BindingCodecContext;
+import org.opendaylight.mdsal.binding.dom.codec.spi.BindingDOMCodecFactory;
import org.opendaylight.mdsal.binding.dom.codec.spi.BindingDOMCodecServices;
import org.opendaylight.mdsal.binding.runtime.api.BindingRuntimeContext;
import org.opendaylight.mdsal.dom.api.DOMSchemaService;
new CacheLoader<BindingRuntimeContext, BindingDOMCodecServices>() {
@Override
public BindingDOMCodecServices load(final BindingRuntimeContext key) {
- return new BindingCodecContext(key);
+ return ServiceLoader.load(BindingDOMCodecFactory.class)
+ .findFirst().orElseThrow().createBindingDOMCodec(key);
}
});