import com.google.common.base.Stopwatch;
import java.util.List;
+import java.util.ServiceLoader;
import java.util.stream.Collectors;
import org.eclipse.jdt.annotation.NonNull;
import org.junit.AfterClass;
import org.opendaylight.mdsal.binding.api.query.QueryResult;
import org.opendaylight.mdsal.binding.api.query.QueryResult.Item;
import org.opendaylight.mdsal.binding.dom.codec.api.BindingCodecTree;
-import org.opendaylight.mdsal.binding.dom.codec.impl.DefaultBindingCodecTreeFactory;
+import org.opendaylight.mdsal.binding.dom.codec.api.BindingCodecTreeFactory;
import org.opendaylight.mdsal.binding.runtime.spi.BindingRuntimeHelpers;
import org.opendaylight.yang.gen.v1.mdsal.query.norev.Foo;
import org.opendaylight.yang.gen.v1.mdsal.query.norev.FooBuilder;
@BeforeClass
public static final void beforeClass() {
- CODEC = new DefaultBindingCodecTreeFactory().create(BindingRuntimeHelpers.createRuntimeContext());
+ CODEC = ServiceLoader.load(BindingCodecTreeFactory.class).findFirst().orElseThrow()
+ .create(BindingRuntimeHelpers.createRuntimeContext());
}
@AfterClass
import com.google.common.base.Stopwatch;
import com.google.common.util.concurrent.FluentFuture;
import java.util.Optional;
+import java.util.ServiceLoader;
import java.util.concurrent.ExecutionException;
import org.eclipse.jdt.annotation.NonNull;
import org.junit.AfterClass;
import org.opendaylight.mdsal.binding.api.query.QueryFactory;
import org.opendaylight.mdsal.binding.api.query.QueryResult;
import org.opendaylight.mdsal.binding.dom.adapter.test.AbstractDataBrokerTest;
-import org.opendaylight.mdsal.binding.dom.codec.impl.DefaultBindingCodecTreeFactory;
+import org.opendaylight.mdsal.binding.dom.codec.api.BindingCodecTreeFactory;
import org.opendaylight.mdsal.binding.runtime.api.BindingRuntimeContext;
import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
import org.opendaylight.yang.gen.v1.mdsal.query.norev.Foo;
@Override
protected void setupWithRuntimeContext(final BindingRuntimeContext runtimeContext) {
super.setupWithRuntimeContext(runtimeContext);
- factory = new DefaultQueryFactory(new DefaultBindingCodecTreeFactory().create(runtimeContext));
+ factory = new DefaultQueryFactory(ServiceLoader.load(BindingCodecTreeFactory.class).findFirst().orElseThrow()
+ .create(runtimeContext));
}
@Override
<artifactId>mdsal-binding-dom-codec</artifactId>
<packaging>bundle</packaging>
- <properties>
- <shade.source>net.bytebuddy</shade.source>
- <shade.target>org.opendaylight.mdsal.binding.dom.codec.jar.bytebuddy</shade.target>
- </properties>
-
<dependencies>
+ <dependency>
+ <groupId>com.google.guava</groupId>
+ <artifactId>guava</artifactId>
+ </dependency>
<dependency>
<groupId>net.bytebuddy</groupId>
<artifactId>byte-buddy</artifactId>
</dependency>
+ <dependency>
+ <groupId>org.opendaylight.yangtools</groupId>
+ <artifactId>concepts</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.opendaylight.yangtools</groupId>
+ <artifactId>util</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.opendaylight.yangtools</groupId>
+ <artifactId>yang-common</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.opendaylight.yangtools</groupId>
+ <artifactId>yang-data-api</artifactId>
+ </dependency>
<dependency>
<groupId>org.opendaylight.yangtools</groupId>
<artifactId>yang-data-impl</artifactId>
</dependency>
+ <dependency>
+ <groupId>org.opendaylight.yangtools</groupId>
+ <artifactId>yang-data-util</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.opendaylight.yangtools</groupId>
+ <artifactId>yang-model-api</artifactId>
+ </dependency>
<dependency>
<groupId>org.opendaylight.mdsal</groupId>
<artifactId>mdsal-binding-model-api</artifactId>
</dependency>
+ <dependency>
+ <groupId>org.opendaylight.mdsal</groupId>
+ <artifactId>mdsal-binding-dom-codec-api</artifactId>
+ </dependency>
<dependency>
<groupId>org.opendaylight.mdsal</groupId>
<artifactId>mdsal-binding-dom-codec-spi</artifactId>
</dependency>
+ <dependency>
+ <groupId>org.opendaylight.mdsal</groupId>
+ <artifactId>mdsal-binding-runtime-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.opendaylight.mdsal</groupId>
+ <artifactId>mdsal-binding-spec-util</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.opendaylight.mdsal</groupId>
+ <artifactId>yang-binding</artifactId>
+ </dependency>
<dependency>
<groupId>com.guicedee.services</groupId>
<artifactId>javax.inject</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
-
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.felix</groupId>
- <artifactId>maven-bundle-plugin</artifactId>
- <extensions>true</extensions>
- <configuration>
- <instructions>
- <Bundle-Name>${project.groupId}.${project.artifactId}</Bundle-Name>
- <Private-Package>
- org.opendaylight.mdsal.binding.dom.codec.impl,
- org.opendaylight.mdsal.binding.dom.codec.loader,
- </Private-Package>
- </instructions>
- </configuration>
- </plugin>
- </plugins>
- </build>
</project>
--- /dev/null
+/*
+ * Copyright (c) 2021 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.codec.api.BindingCodecTreeFactory;
+import org.opendaylight.mdsal.binding.dom.codec.impl.BindingCodecContext;
+import org.opendaylight.mdsal.binding.dom.codec.impl.SimpleBindingCodecTreeFactory;
+import org.opendaylight.mdsal.binding.dom.codec.impl.SimpleBindingDOMCodecFactory;
+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;
+
+module org.opendaylight.mdsal.binding.dom.codec.impl {
+ exports org.opendaylight.mdsal.binding.dom.codec.impl.di;
+
+ uses BindingRuntimeContext;
+ provides BindingDOMCodecFactory with SimpleBindingDOMCodecFactory;
+ provides BindingDOMCodecServices with BindingCodecContext;
+ provides BindingCodecTreeFactory with SimpleBindingCodecTreeFactory;
+
+ requires transitive org.opendaylight.mdsal.binding.runtime.api;
+ requires transitive org.opendaylight.mdsal.binding.dom.codec.api;
+ requires transitive org.opendaylight.mdsal.binding.dom.codec.spi;
+ requires com.google.common;
+ requires net.bytebuddy;
+ requires org.opendaylight.mdsal.binding.model.api;
+ requires org.opendaylight.mdsal.binding.spec.util;
+ requires org.opendaylight.yangtools.concepts;
+ requires org.opendaylight.yangtools.util;
+ requires org.opendaylight.yangtools.yang.binding;
+ requires org.opendaylight.yangtools.yang.common;
+ requires org.opendaylight.yangtools.yang.data.api;
+ requires org.opendaylight.yangtools.yang.data.impl;
+ requires org.opendaylight.yangtools.yang.data.util;
+ requires org.opendaylight.yangtools.yang.model.api;
+ requires org.opendaylight.yangtools.yang.model.util;
+ requires org.slf4j;
+
+ // Annotations
+ requires static com.github.spotbugs.annotations;
+ requires static javax.inject;
+ requires static metainf.services;
+ requires static org.eclipse.jdt.annotation;
+ requires static org.osgi.service.component.annotations;
+}
import static com.google.common.base.Verify.verify;
import static java.util.Objects.requireNonNull;
-import com.google.common.annotations.Beta;
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;
import java.util.Optional;
import java.util.ServiceLoader;
import java.util.concurrent.ExecutionException;
-import javax.inject.Inject;
-import javax.inject.Singleton;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.Nullable;
import org.kohsuke.MetaInfServices;
import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeWriterFactory;
import org.opendaylight.mdsal.binding.dom.codec.api.BindingStreamEventWriter;
import org.opendaylight.mdsal.binding.dom.codec.impl.NodeCodecContext.CodecContextFactory;
-import org.opendaylight.mdsal.binding.dom.codec.loader.CodecClassLoader;
+import org.opendaylight.mdsal.binding.dom.codec.impl.loader.CodecClassLoader;
import org.opendaylight.mdsal.binding.dom.codec.spi.AbstractBindingNormalizedNodeSerializer;
import org.opendaylight.mdsal.binding.dom.codec.spi.BindingDOMCodecServices;
import org.opendaylight.mdsal.binding.dom.codec.spi.BindingSchemaMapping;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-@Beta
@MetaInfServices(value = BindingDOMCodecServices.class)
-@Singleton
public final class BindingCodecContext extends AbstractBindingNormalizedNodeSerializer
implements BindingDOMCodecServices, Immutable, CodecContextFactory, DataObjectSerializerRegistry {
private final class DataObjectSerializerProxy implements DataObjectSerializer, Delegator<DataObjectStreamer<?>> {
.orElseThrow(() -> new IllegalStateException("Failed to load BindingRuntimeContext")));
}
- @Inject
public BindingCodecContext(final BindingRuntimeContext context) {
this.context = requireNonNull(context, "Binding Runtime Context is required.");
root = SchemaRootCodecContext.create(this);
import com.google.common.base.Supplier;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.Nullable;
-import org.opendaylight.mdsal.binding.dom.codec.loader.CodecClassLoader.ClassGenerator;
+import org.opendaylight.mdsal.binding.dom.codec.impl.loader.CodecClassLoader.ClassGenerator;
/**
* Bridge for initializing generated instance constants during class loading time. This class is public only due to
import org.eclipse.jdt.annotation.Nullable;
import org.opendaylight.mdsal.binding.dom.codec.impl.ClassGeneratorBridge.LocalNameProvider;
import org.opendaylight.mdsal.binding.dom.codec.impl.ClassGeneratorBridge.NodeContextSupplierProvider;
-import org.opendaylight.mdsal.binding.dom.codec.loader.CodecClassLoader;
-import org.opendaylight.mdsal.binding.dom.codec.loader.CodecClassLoader.ClassGenerator;
-import org.opendaylight.mdsal.binding.dom.codec.loader.CodecClassLoader.GeneratorResult;
+import org.opendaylight.mdsal.binding.dom.codec.impl.loader.CodecClassLoader;
+import org.opendaylight.mdsal.binding.dom.codec.impl.loader.CodecClassLoader.ClassGenerator;
+import org.opendaylight.mdsal.binding.dom.codec.impl.loader.CodecClassLoader.GeneratorResult;
import org.opendaylight.mdsal.binding.spec.naming.BindingMapping;
import org.opendaylight.yangtools.yang.binding.DataObject;
import org.slf4j.Logger;
import org.eclipse.jdt.annotation.Nullable;
import org.opendaylight.mdsal.binding.dom.codec.api.BindingStreamEventWriter;
import org.opendaylight.mdsal.binding.dom.codec.impl.NodeCodecContext.CodecContextFactory;
-import org.opendaylight.mdsal.binding.dom.codec.loader.CodecClassLoader;
-import org.opendaylight.mdsal.binding.dom.codec.loader.CodecClassLoader.ClassGenerator;
-import org.opendaylight.mdsal.binding.dom.codec.loader.CodecClassLoader.GeneratorResult;
+import org.opendaylight.mdsal.binding.dom.codec.impl.loader.CodecClassLoader;
+import org.opendaylight.mdsal.binding.dom.codec.impl.loader.CodecClassLoader.ClassGenerator;
+import org.opendaylight.mdsal.binding.dom.codec.impl.loader.CodecClassLoader.GeneratorResult;
import org.opendaylight.mdsal.binding.dom.codec.spi.BindingSchemaMapping;
import org.opendaylight.mdsal.binding.model.api.GeneratedType;
import org.opendaylight.mdsal.binding.model.api.MethodSignature;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.Nullable;
import org.opendaylight.mdsal.binding.dom.codec.api.BindingCodecTreeNode;
-import org.opendaylight.mdsal.binding.dom.codec.loader.CodecClassLoader;
+import org.opendaylight.mdsal.binding.dom.codec.impl.loader.CodecClassLoader;
import org.opendaylight.mdsal.binding.runtime.api.BindingRuntimeContext;
import org.opendaylight.mdsal.binding.runtime.api.ListRuntimeType;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
import net.bytebuddy.jar.asm.Opcodes;
import net.bytebuddy.matcher.ElementMatchers;
import org.eclipse.jdt.annotation.NonNull;
-import org.opendaylight.mdsal.binding.dom.codec.loader.CodecClassLoader.GeneratorResult;
+import org.opendaylight.mdsal.binding.dom.codec.impl.loader.CodecClassLoader.GeneratorResult;
import org.opendaylight.mdsal.binding.runtime.api.NotificationRuntimeType;
import org.opendaylight.yangtools.yang.binding.BaseNotification;
import org.opendaylight.yangtools.yang.binding.DataObject;
import net.bytebuddy.jar.asm.Opcodes;
import org.eclipse.jdt.annotation.NonNull;
import org.opendaylight.mdsal.binding.dom.codec.api.BindingOpaqueObjectCodecTreeNode;
-import org.opendaylight.mdsal.binding.dom.codec.loader.CodecClassLoader;
-import org.opendaylight.mdsal.binding.dom.codec.loader.CodecClassLoader.GeneratorResult;
+import org.opendaylight.mdsal.binding.dom.codec.impl.loader.CodecClassLoader;
+import org.opendaylight.mdsal.binding.dom.codec.impl.loader.CodecClassLoader.GeneratorResult;
import org.opendaylight.yangtools.concepts.AbstractIllegalArgumentCodec;
import org.opendaylight.yangtools.concepts.IllegalArgumentCodec;
import org.opendaylight.yangtools.yang.binding.OpaqueData;
*/
package org.opendaylight.mdsal.binding.dom.codec.impl;
-import com.google.common.annotations.Beta;
-import javax.inject.Singleton;
import org.kohsuke.MetaInfServices;
import org.opendaylight.mdsal.binding.dom.codec.api.BindingCodecTree;
import org.opendaylight.mdsal.binding.dom.codec.api.BindingCodecTreeFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-@Beta
@MetaInfServices
-@Singleton
@Component(immediate = true)
-public final class DefaultBindingCodecTreeFactory implements BindingCodecTreeFactory {
- private static final Logger LOG = LoggerFactory.getLogger(DefaultBindingCodecTreeFactory.class);
+public final class SimpleBindingCodecTreeFactory implements BindingCodecTreeFactory {
+ private static final Logger LOG = LoggerFactory.getLogger(SimpleBindingCodecTreeFactory.class);
@Override
public BindingCodecTree create(final BindingRuntimeContext context) {
LOG.info("Binding-DOM Codec enabled");
}
-
@Deactivate
@SuppressWarnings("static-method")
void deactivate() {
*/
package org.opendaylight.mdsal.binding.dom.codec.impl;
-import com.google.common.annotations.Beta;
-import javax.inject.Singleton;
import org.eclipse.jdt.annotation.NonNullByDefault;
import org.kohsuke.MetaInfServices;
import org.opendaylight.mdsal.binding.dom.codec.spi.BindingDOMCodecFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-@Beta
@NonNullByDefault
@MetaInfServices
-@Singleton
@Component(immediate = true)
-public final class DefaultBindingDOMCodecFactory implements BindingDOMCodecFactory {
- private static final Logger LOG = LoggerFactory.getLogger(DefaultBindingDOMCodecFactory.class);
+public final class SimpleBindingDOMCodecFactory implements BindingDOMCodecFactory {
+ private static final Logger LOG = LoggerFactory.getLogger(SimpleBindingDOMCodecFactory.class);
@Override
public BindingDOMCodecServices createBindingDOMCodec(final BindingRuntimeContext context) {
--- /dev/null
+/*
+ * Copyright (c) 2022 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.dom.codec.impl.di;
+
+import com.google.common.annotations.Beta;
+import javax.inject.Inject;
+import javax.inject.Singleton;
+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.impl.BindingCodecContext;
+import org.opendaylight.mdsal.binding.runtime.api.BindingRuntimeContext;
+
+/**
+ * Default implementation of {@link BindingCodecTreeFactory}.
+ */
+@Beta
+@Singleton
+public final class DefaultBindingCodecTreeFactory implements BindingCodecTreeFactory {
+ @Inject
+ public DefaultBindingCodecTreeFactory() {
+ // Exposed for DI
+ }
+
+ @Override
+ public BindingCodecTree create(final BindingRuntimeContext context) {
+ return new BindingCodecContext(context);
+ }
+}
--- /dev/null
+/*
+ * Copyright (c) 2022 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.dom.codec.impl.di;
+
+import com.google.common.annotations.Beta;
+import javax.inject.Inject;
+import javax.inject.Singleton;
+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;
+
+/**
+ * Default implementation of {@link BindingDOMCodecFactory}.
+ */
+@Beta
+@Singleton
+public final class DefaultBindingDOMCodecFactory implements BindingDOMCodecFactory {
+ @Inject
+ public DefaultBindingDOMCodecFactory() {
+ // Exposed for DI
+ }
+
+ @Override
+ public BindingDOMCodecServices createBindingDOMCodec(final BindingRuntimeContext context) {
+ return new BindingCodecContext(context);
+ }
+}
--- /dev/null
+/*
+ * Copyright (c) 2022 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.dom.codec.impl.di;
+
+import com.google.common.annotations.Beta;
+import javax.inject.Inject;
+import javax.inject.Singleton;
+import org.eclipse.jdt.annotation.NonNull;
+import org.opendaylight.mdsal.binding.dom.codec.impl.BindingCodecContext;
+import org.opendaylight.mdsal.binding.dom.codec.spi.BindingDOMCodecServices;
+import org.opendaylight.mdsal.binding.dom.codec.spi.ForwardingBindingDOMCodecServices;
+import org.opendaylight.mdsal.binding.runtime.api.BindingRuntimeContext;
+
+/**
+ * Default implementation of {@link BindingDOMCodecServices}.
+ */
+@Beta
+@Singleton
+public final class DefaultBindingDOMCodecServices extends ForwardingBindingDOMCodecServices {
+ private final @NonNull BindingDOMCodecServices delegate;
+
+ @Inject
+ public DefaultBindingDOMCodecServices(final BindingRuntimeContext context) {
+ delegate = new BindingCodecContext(context);
+ }
+
+ @Override
+ protected BindingDOMCodecServices delegate() {
+ return delegate;
+ }
+}
--- /dev/null
+/*
+ * Copyright (c) 2022 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 exposing components to various dependency injection frameworks, so they can locate them. This package is not
+ * exposed to OSGi runtime.
+ */
+package org.opendaylight.mdsal.binding.dom.codec.impl.di;
\ No newline at end of file
* 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.dom.codec.loader;
+package org.opendaylight.mdsal.binding.dom.codec.impl.loader;
import static com.google.common.base.Preconditions.checkArgument;
import static com.google.common.base.Verify.verify;
* 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.dom.codec.loader;
+package org.opendaylight.mdsal.binding.dom.codec.impl.loader;
import static com.google.common.base.Verify.verify;
import static java.util.Objects.requireNonNull;
* 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.dom.codec.loader;
+package org.opendaylight.mdsal.binding.dom.codec.impl.loader;
import static com.google.common.base.Verify.verify;
import static com.google.common.base.Verify.verifyNotNull;
*/
/**
* {@link java.lang.ClassLoader} support for Binding/DOM codec translation code generators. This package provides one
- * core class, {@link org.opendaylight.mdsal.binding.dom.codec.loader.CodecClassLoader}, which allows lookup of
- * compile-time-generated Binding classes for the purpose of referencing them within code generators and which
- * serves as the ClassLoader holding runtime-generated codecs.
+ * core class, {@link CodecClassLoader}, which allows lookup of compile-time-generated Binding classes for the purpose
+ * of referencing them within code generators and which serves as the ClassLoader holding runtime-generated codecs.
*
* <p>
* While the interfaces and classes in this package may be publicly accessible, they are an implementation detail and
* may change incompatibly at any time.
*/
-package org.opendaylight.mdsal.binding.dom.codec.loader;
\ No newline at end of file
+package org.opendaylight.mdsal.binding.dom.codec.impl.loader;
\ No newline at end of file
@RunWith(MockitoJUnitRunner.StrictStubs.class)
public class NonCachingCodecTest {
@Mock
- private BindingNormalizedNodeCodec<DataObject> codec;
+ public BindingNormalizedNodeCodec<DataObject> codec;
@Mock
- private NormalizedNode node;
+ public NormalizedNode node;
@Mock
- private DataObject object;
+ public DataObject object;
@Before
public void before() {
package org.opendaylight.mdsal.binding.dom.codec.impl;
import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotEquals;
-import static org.junit.Assert.assertTrue;
-import java.lang.reflect.Method;
-import org.junit.Before;
+import org.junit.BeforeClass;
import org.junit.Test;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.yangtools.test.union.rev150121.LowestLevel1;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.yangtools.test.union.rev150121.LowestLevel2;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.yangtools.test.union.rev150121.UnionTestType;
public class UnionValueOptionContextTest {
private static UnionValueOptionContext TEST_UVOC_1;
private static UnionValueOptionContext TEST_UVOC_2;
- @Before
- public void setUp() throws Exception {
- final Method methodFoo1 = TestDataObject1.class.getMethod("foo");
- final Method methodFoo2 = TestDataObject2.class.getMethod("foo");
- TEST_UVOC_1 = new UnionValueOptionContext(TestUnion.class, TestDataObject1.class, methodFoo1,
- SchemaUnawareCodec.NOOP_CODEC);
- TEST_UVOC_2 = new UnionValueOptionContext(TestUnion.class, TestDataObject2.class, methodFoo2,
- SchemaUnawareCodec.NOOP_CODEC);
+ @BeforeClass
+ public static void beforeClass() throws Exception {
+ TEST_UVOC_1 = new UnionValueOptionContext(UnionTestType.class, LowestLevel1.class,
+ UnionTestType.class.getMethod("getLowestLevel1"), SchemaUnawareCodec.NOOP_CODEC);
+ TEST_UVOC_2 = new UnionValueOptionContext(UnionTestType.class, LowestLevel2.class,
+ UnionTestType.class.getMethod("getLowestLevel2"), SchemaUnawareCodec.NOOP_CODEC);
}
@Test
public void hashCodeTest() throws Exception {
- final Method methodFoo1 = TestDataObject1.class.getMethod("foo");
- final UnionValueOptionContext test_uvoc = new UnionValueOptionContext(TestUnion.class, TestDataObject1.class,
- methodFoo1, SchemaUnawareCodec.NOOP_CODEC);
+ final UnionValueOptionContext test_uvoc = new UnionValueOptionContext(UnionTestType.class, LowestLevel1.class,
+ UnionTestType.class.getMethod("getLowestLevel1"), SchemaUnawareCodec.NOOP_CODEC);
assertEquals("HashCode", test_uvoc.hashCode(), TEST_UVOC_1.hashCode());
assertNotEquals("HashCode", TEST_UVOC_1.hashCode(), TEST_UVOC_2.hashCode());
@Test
public void equalsTest() throws Exception {
- final Method methodFoo1 = TestDataObject1.class.getMethod("foo");
- final UnionValueOptionContext test_uvoc = new UnionValueOptionContext(TestUnion.class, TestDataObject1.class,
- methodFoo1, SchemaUnawareCodec.NOOP_CODEC);
+ final UnionValueOptionContext test_uvoc = new UnionValueOptionContext(UnionTestType.class, LowestLevel1.class,
+ UnionTestType.class.getMethod("getLowestLevel1"), SchemaUnawareCodec.NOOP_CODEC);
- assertTrue("Equals", TEST_UVOC_1.equals(test_uvoc));
- assertFalse("Not equals", TEST_UVOC_1.equals(TEST_UVOC_2));
- }
-
- protected static final class TestDataObject1 {
- public void foo() {
-
- }
- }
-
- protected static final class TestDataObject2 {
- public void foo() {
-
- }
- }
-
- public static final class TestUnion {
- public TestUnion(final TestDataObject1 arg) {
-
- }
-
- public TestUnion(final TestDataObject2 arg) {
-
- }
+ assertEquals(TEST_UVOC_1, test_uvoc);
+ assertNotEquals(TEST_UVOC_1, TEST_UVOC_2);
}
}
*/
package org.opendaylight.mdsal.yanglib.rfc8525;
+import java.util.ServiceLoader;
import org.junit.Before;
import org.junit.BeforeClass;
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.impl.DefaultBindingCodecTreeFactory;
-import org.opendaylight.mdsal.binding.generator.impl.DefaultBindingRuntimeGenerator;
import org.opendaylight.mdsal.binding.runtime.api.BindingRuntimeContext;
import org.opendaylight.mdsal.binding.runtime.api.BindingRuntimeGenerator;
import org.opendaylight.mdsal.binding.runtime.spi.BindingRuntimeHelpers;
import org.opendaylight.yangtools.yang.parser.api.YangParserException;
import org.opendaylight.yangtools.yang.parser.api.YangParserFactory;
-import org.opendaylight.yangtools.yang.parser.impl.DefaultYangParserFactory;
abstract class AbstractYangLibraryTest {
- private static final BindingRuntimeGenerator BINDING_RUNTIME_GENERATOR = new DefaultBindingRuntimeGenerator();
- private static final YangParserFactory YANG_PARSER_FACTORY = new DefaultYangParserFactory();
- private static final BindingCodecTreeFactory CODEC_FACTORY = new DefaultBindingCodecTreeFactory();
+ private static final BindingRuntimeGenerator BINDING_RUNTIME_GENERATOR =
+ ServiceLoader.load(BindingRuntimeGenerator.class).findFirst().orElseThrow();
+ private static final YangParserFactory YANG_PARSER_FACTORY = ServiceLoader.load(YangParserFactory.class).findFirst()
+ .orElseThrow();
+ private static final BindingCodecTreeFactory CODEC_FACTORY = ServiceLoader.load(BindingCodecTreeFactory.class)
+ .findFirst().orElseThrow();
static BindingRuntimeContext runtimeContext;
static BindingCodecTree codecTree;